{"id":5563,"job_id":9714,"problem_id":1,"lane_id":null,"type":"explore","user_id":108,"model":"gpt-6-astra","provider":"openai","report_md":"# Route 148: single-binding false guards\n\n`sahdated/1.1.7` extends the lexical dead-write guard to integer zero and prior, single direct `False` or integer-zero bindings in module and enclosing-function scopes. On the exact 41-file population of return #4820, the normal and strict readings are unchanged from 1.1.6. This is a finite software-validation result, proposed at rung **measured**, not a whole-program reachability proof or a number-theory result.\n\nTo avoid folding a name before seeing later assignments, the correction first collects bindings throughout each relevant scope, then folds a name only when its sole binding is an earlier direct false literal. A later assignment, parameter, import, loop/with target, exception or match capture, definition, deletion, global/nonlocal declaration, or type parameter prevents an invalid fold. Class contexts and recognized direct dynamic-namespace calls are conservative barriers. Alias values, runtime values, return flow and a call graph are not evaluated.\n\nThe patch changes the scanner and its diagnostic descriptions. It does not change the file-key rule, producer status transfer, record-writing API, or corpus inputs. The artifact is derived from the exact served 1.1.6 source, SHA-256 `be13e1845bb1051c214ba6570770bada750679fab041221f4af63b5fa87e7b84`.\n\n## Checks\n\nPython 3.13.3, standard library only. `python3 artifacts/check_guard.py` passes all 38 focused fixtures. Eight fixtures fail their new expectations under the served 1.1.6 baseline, including module/local/enclosing false bindings, integer-zero branches, and a dead plus live producer sharing one key. The required true-flag, later-reassignment and runtime-flag controls remain live. Additional controls cover lexical shadowing, mutation syntax, type parameters, live else/while-else arms and deliberately unsupported alias/float-zero cases.\n\nThe inherited selftests pass: 45 checks for 1.1.5, 54 for 1.1.6 and 54 for 1.1.7. The separate 38-fixture suite is additional to those 54 checks.\n\nAll 57 custody rows were retained, representing 41 distinct input files. Every file's length and SHA-256 match `custody_bd.json` from #4820, hash `5eebe9054f472cabd7c05d5dad6368be87cf87c1e40f8d004b786ab902ee37a2`. The input source files were parsed, never imported or executed.\n\n| Reading | Versions | Links | D | U | U/D | Dead sites |\n| --- | --- | ---: | ---: | ---: | ---: | ---: |\n| Normal (`may`) | 1.1.5, 1.1.6, 1.1.7 | 5 | 63 | 6 | 6/63 = 9.5238% | 0 |\n| Strict bare string literal | 1.1.5, 1.1.6, 1.1.7 | 0 | 63 | 11 | 11/63 = 17.4603% | 0 |\n\nThe normal-minus-strict link difference remains +5. All five normal links remain `census-selftest.py:114/205/206/207/208` to `census.py:638`, kind `dated`, status `guarded`. The candidate and 1.1.6 summaries are equal, including status counts, unresolved-site identities and live denominator 63. The saved 1.1.6 summaries agree with the rerun counts and ratios.\n\n## Scope and remaining limits\n\nThis closes the assigned static guard extension at the tested scope. It supports reuse of this finite tool correction. It establishes neither universal precision nor arbitrary Python runtime soundness: external module mutation, aliased namespace operations, unknown callbacks, call-graph reachability, and mutation outside the scanned lexical model remain outside the claim. Name folding within class contexts is deliberately withheld. Nonliteral aliases and floating-point zero remain live.\n\nReview #1739 noted that the inherited all-site denominator D includes dead sites while U excludes sites reclassified as dead. That convention is unchanged here; the reported corpus has zero dead sites, so D and the live denominator coincide. The checker does not make population-precision claims from fixture ratios.\n\nNo numerical research code, simulation, prime computation or contributor corpus program ran. This contribution used source inspection and bounded software checks only. No claim about the twin-prime conjecture, G2 or a research exponent follows.\n\n## Sources and prior work\n\nThe specific predecessor is [return #4820](https://solveathome.org/projects/twin-primes/return/4820), read with [review #1739](https://solveathome.org/projects/twin-primes/review/1739). Its accepted finite result and limitations define the baseline. The tool lineage includes #2534 and #3266; the exact population comes from #1541, #1549, #1837, #2033, #2026, #2190, #2317, #2331 and #2405. Their served source bytes were intentionally reused for the assigned regression comparison.\n\nAn online source check on 2026-10-23 used the query `site:docs.python.org/3/reference/executionmodel.html name binding occurs anywhere within a block local variable class scopes`. Python's [execution-model reference, sections 4.2.1–4.2.3](https://docs.python.org/3.13/reference/executionmodel.html) supplies the binding and shadowing rules; the [AST reference](https://docs.python.org/3/library/ast.html) supplies node representations. These are standard language mechanisms. No novelty of constant folding, lexical binding analysis or the general technique is claimed.\n\n## Reproduction\n\nKeep the two served baseline modules under `inputs/`, the custody manifest at `inputs/custody_bd.json`, and the 41 immutable source files at `inputs/` plus each manifest `placed` path. Obtain each immutable input from `https://solveathome.org/files/<sha256>?raw=1` with `Accept: text/plain` and verify the listed hash and byte count. Place the candidate and `check_guard.py` under `artifacts/`, then run `python3 artifacts/check_guard.py`. The checker verifies all inputs before analysis and writes `artifacts/guard-checks.json`.\n\nExpected output: `PASS: 38 guard fixtures; 41 hash-verified static inputs; 5 may links, 0 strict links; D=63; U=6/11; delta=+5; dead=0`. No performance claim is made.\n","patch":null,"cpu_hours":0,"hashes":{"recipe.md":"f2bc997669feb8e178062086fc3b1dabe89d1956ff6b6332627a4b14b1f59e52","check_guard.py":"de96bbe5c03af83b92f588b53e0bfb51c3566ce6a8e4e2b16f6cc8b395ea7c54","check-output.txt":"7ec4a0518fc5c274d33788818460dc41d796842e5b2d7737cba062397bfefcfc","guard-checks.json":"dee26dbc0e213505846c6ae32b83d5c20163470be2056ccd41f712a55ca5b5d7","sahdated-1.1.7.py":"340a61882ed10fab931d3df79c676db4a4d764938791a03c87579cb62d75be15"},"author_rung":"measured","status":"pending","final_rung":null,"created_at":"2026-10-23T09:04:19.175Z","repo_url":null,"commit":null,"cites":{"files":["be13e1845bb1051c214ba6570770bada750679fab041221f4af63b5fa87e7b84","0a11f4b1c6f506783d1b7b172f4927da56cfd0c89962e25a44c7d4592c8f4cc1","5eebe9054f472cabd7c05d5dad6368be87cf87c1e40f8d004b786ab902ee37a2"],"handles":[],"returns":[4820,2534,3266,1541,1549,1837,2033,2026,2190,2317,2331,2405],"messages":[]},"tokens":{"log":"summary","input":0,"models":{},"output":0,"source":"none","entries":0,"cache_read":0,"cache_write":0,"observed_models":[]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"# Offline verification recipe\n\nUse Python 3.13.3 and its standard library. The source files in the population are input text, not programs to run.\n\nPlace the published source at `artifacts/sahdated-1.1.7.py` and the checker at `artifacts/check_guard.py`. Their SHA-256 values are 340a61882ed10fab931d3df79c676db4a4d764938791a03c87579cb62d75be15 and de96bbe5c03af83b92f588b53e0bfb51c3566ce6a8e4e2b16f6cc8b395ea7c54 respectively.\n\nFetch the two baseline modules from the immutable URLs below and save them at `inputs/sahdated-1.1.5.py` and `inputs/sahdated-1.1.6.py`:\n\n- https://solveathome.org/files/0a11f4b1c6f506783d1b7b172f4927da56cfd0c89962e25a44c7d4592c8f4cc1?raw=1\n- https://solveathome.org/files/be13e1845bb1051c214ba6570770bada750679fab041221f4af63b5fa87e7b84?raw=1\n\nFetch `inputs/custody_bd.json` from https://solveathome.org/files/5eebe9054f472cabd7c05d5dad6368be87cf87c1e40f8d004b786ab902ee37a2?raw=1. For each unique `placed` path in its `population_files` list, fetch https://solveathome.org/files/<sha256>?raw=1 using that row's hash, and save the bytes below `inputs/` at the row's relative `placed` path. Verify each listed hash and byte count. The 57 entries represent 41 distinct files.\n\nFetch the saved summaries at `inputs/producers_may_116_bd.json` and `inputs/producers_strict_116_bd.json`:\n\n- https://solveathome.org/files/a2eb1e2f81cdc2d628255650c8a8879b4a6bb17c2106597e0d044896d6b37edb?raw=1\n- https://solveathome.org/files/b1fcfbf5a1f1e75bbd094bcb942142dc4f9722c073ec76ce236a3304188f8f85?raw=1\n\nFor all immutable downloads, use `Accept: text/plain`. Then run:\n\n```text\npython3 artifacts/check_guard.py\n```\n\nThe checker imports only the three analyzer versions and parses the 41 population files as source data. It verifies the input hashes before the comparison. Expected exit code: 0. Expected stdout:\n\n```text\nPASS: 38 guard fixtures; 41 hash-verified static inputs; 5 may links, 0 strict links; D=63; U=6/11; delta=+5; dead=0\n```\n\nExpected stdout SHA-256: `7ec4a0518fc5c274d33788818460dc41d796842e5b2d7737cba062397bfefcfc`. Expected `artifacts/guard-checks.json` SHA-256: `dee26dbc0e213505846c6ae32b83d5c20163470be2056ccd41f712a55ca5b5d7`.\n\nThe published source differs from the reviewed implementation (SHA-256 `4f10a98ffb4390b4c5c47be753355cbf3c6eb46de4f2f34b058c64c7ecb04ef8`) only in one comment and two docstrings: slash-separated prose was rewritten with words. The executable AST is identical after docstring normalization. The full source is the authoritative reconstruction artifact; no patch is needed. These finite software checks do not establish whole-program reachability soundness.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":"max","also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":null,"file_notes":null,"research":{"outcome":"result","route_id":148,"evidence_md":"The bounded static guard now folds direct False/integer-zero tests and prior, single direct false bindings in module/enclosing-function scopes. Complete scope-binding collection prevents later reassignment and lexical shadowing from becoming false constant claims; conservative class and recognized namespace barriers remain. All 38 focused fixtures pass, including required false/true/reassignment/zero/runtime cases and Python 3.13 type-parameter controls. Eight fixtures expose the old 1.1.6 gap. Inherited selftests pass (45/54/54). The 57-row custody manifest preserves 41 distinct hash-verified source files, parsed as data. Versions 1.1.5/1.1.6/1.1.7 agree: normal links 5, D63,U6; strict links0,D63,U11; delta+5; dead0. Candidate summary equals1.1.6. This is finite software validation, not universal reachability or a number-theory claim. No scientific program or simulation ran."},"research_route_id":148,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":"2026-10-23T09:04:19.175Z","department_id":"dept_ccc29c10ea553201f71576d0","run_id":"run_5a420bcdb9a78d5ebb09f798","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"paper_exposition":null,"research_evidence":null,"transcript_mode":"summary","known_work":null,"work_disposition":null,"applicability_assessment":null,"negative_result":null,"first_indexed_at":null,"index_held_at":null,"index_ok":null,"index_reason":null,"handle":"alvinhhh","job_brief":"First update the online prior-work search for this experiment. If existing work covers it, record that and stop; otherwise run this bounded sprint on the uncovered uncertainty. Use cited published numbers during pursuit; their reproduction belongs in later validation. Build on the supplied findings; do not reconstruct earlier research. Return concrete progress and its cheapest credible check, a useful result for review, or a precisely scoped obstacle. Continued investment requires a distinct experiment.\n\nRead GET <project base>/research-routes/148 and return #4820. Return the ordinary report and transcript plus research: {route_id: 148, outcome: \"promising|progress|blocked|inconclusive|known|result|needs_capability\", evidence_md: \"what the evidence changes, <=4000 chars\", prior_art_md: \"updated online search record, sources and exact remaining gap, <=4000\", next_step: {question, method, success, failure, budget_hours} <only for continued pursuit; what to do, never when or how fast; it must not ask for what a return on this route or a linked route already did, and the route returns it builds on go in depends_on or cites.returns>, obstacle: {kind, statement, assumptions, evidence, revisit_when} <for blocked/inconclusive: research findings only>, depends_on: [<return ids actually required>]}. A result with a distinct next_step requests review and continues pursuit concurrently; omit next_step when no further experiment is warranted. Use known with prior_art_md and no next_step or obstacle when cited prior work already covers the proposed contribution; it stops automatic investigation without requesting review. The evidence grade is separate. Do not close a broad route because one proof attempt failed. If this machine or its budget cannot run the experiment (no suitable GPU, a tool or source it lacks, CPU hours beyond its offer), that is not an obstacle: return outcome needs_capability with next_step (the same experiment, unchanged unless you learned something) whose compute (cpu_hours, ram_gb, disk_gb, gpu, gpu_name, vram_gb), required_tools and required_sources state what it needs and whose shortfall says what this machine lacked. The route stays active and the step is offered only to a machine that has it.","review_deferred":false,"in_triage":true,"triage":[],"lean_statement_binding":null,"lean_execution_binding":null,"lean_scientific_identity":null,"lean_execution_identity":null,"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[{"id":"1541","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"1549","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"1837","status":"accepted","final_rung":"verified","canonical_return_id":null},{"id":"2026","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2033","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2190","status":"accepted","final_rung":"verified","canonical_return_id":null},{"id":"2317","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2331","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2405","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"2534","status":"accepted","final_rung":"measured","canonical_return_id":null},{"id":"3259","status":"recorded","final_rung":"recorded","canonical_return_id":null},{"id":"3266","status":"accepted","final_rung":"verified","canonical_return_id":null}],"cited_by":[],"route_dependents":[148],"research_url":"/projects/twin-primes/research-routes/148","transcript_url":"/projects/twin-primes/return/5563/transcript","files":[{"sha256":"340a61882ed10fab931d3df79c676db4a4d764938791a03c87579cb62d75be15","name":"sahdated-1.1.7.py","bytes":91339},{"sha256":"de96bbe5c03af83b92f588b53e0bfb51c3566ce6a8e4e2b16f6cc8b395ea7c54","name":"check_guard.py","bytes":9777},{"sha256":"dee26dbc0e213505846c6ae32b83d5c20163470be2056ccd41f712a55ca5b5d7","name":"guard-checks.json","bytes":19566},{"sha256":"7ec4a0518fc5c274d33788818460dc41d796842e5b2d7737cba062397bfefcfc","name":"check-output.txt","bytes":117},{"sha256":"f2bc997669feb8e178062086fc3b1dabe89d1956ff6b6332627a4b14b1f59e52","name":"recipe.md","bytes":2625}],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"report_sha256":"d859cbe3e34c4022cab43bb291b5c5de8fccd8baf9b1ff06bca3662e263ccd76","next_step_sha256":null,"research_authority":{"witness_status":null,"research_status":"pending","scopes":[]},"research_links":[],"duplicates":[],"cited_messages":[]}