Six pre-existing phantom-bind shapes found by the v0.32.1 final review (not regressions) #300

Open
opened 2026-09-26 01:12:37 +02:00 by buildagent · 1 comment
Member

The independent final review of v0.32.1 (release-v0.32.1 @ f208704) found six wrong-bind shapes. Each one was already present in v0.32.0 (4e3034a), in 0.31.2 (dc841af), or in both, so none is a regression from the v0.32.1 work. They are filed here instead of being folded into that release. Fixtures and logs are under /tmp/final-review/ (fx/, q3/) on the build machine, and in reviewer B's /tmp/review-b/ (py1, js1, rs1).

  1. Python: a function-local import loses to a same-file symbol. from other import imp_target inside a function is overridden by a same-file definition of imp_target through tier 2 (rule 20). Fixture: py1 scope.py:88.
  2. JS: destructured parameters. In function destr({ other }) { other() }, other binds to the module-level other. Destructured parameter patterns are not recorded as locals.
  3. JS: module-level arrow parameters. In const f = (other) => other() at module level, other binds to the module function. I073 already records this as known.
  4. Rust: closure variables resolved across files. let f = |m| …; f(m) binds another file's f through T1B_SAME_DIRECTORY, because closure-bound let locals are not local facts.
  5. Python: import engine binds a conftest fixture. The import binds a same-directory conftest.py fixture named engine through T1B_SAME_DIRECTORY.
  6. Python: container import picks the wrong module. c.fetch binds other.py through T1B_CONTAINER_IMPORT even though Client is imported from models.

Also open, with the same provenance:

  • B3, wall clock. The deterministic evidence shows the per-pass Python re-parse is gone (django local_scope 4,381 → 374 ms). The interleaved django wall-clock runs are still noisier than the effect (load 4–9). A quiet-machine run comparing dc841af, 4e3034a and v0.32.1 is still needed before any wall-clock claim is published.

For each shape: add a precision-gate decoy that fails on the current tree, then fix it structurally, then measure the corpus bind by bind.

🤖 Generated with Claude Code

The independent final review of v0.32.1 (release-v0.32.1 @ f208704) found six wrong-bind shapes. Each one was already present in v0.32.0 (4e3034a), in 0.31.2 (dc841af), or in both, so none is a regression from the v0.32.1 work. They are filed here instead of being folded into that release. Fixtures and logs are under `/tmp/final-review/` (fx/, q3/) on the build machine, and in reviewer B's `/tmp/review-b/` (py1, js1, rs1). 1. **Python: a function-local import loses to a same-file symbol.** `from other import imp_target` inside a function is overridden by a same-file definition of `imp_target` through tier 2 (rule 20). Fixture: py1 `scope.py:88`. 2. **JS: destructured parameters.** In `function destr({ other }) { other() }`, `other` binds to the module-level `other`. Destructured parameter patterns are not recorded as locals. 3. **JS: module-level arrow parameters.** In `const f = (other) => other()` at module level, `other` binds to the module function. I073 already records this as known. 4. **Rust: closure variables resolved across files.** `let f = |m| …; f(m)` binds another file's `f` through T1B_SAME_DIRECTORY, because closure-bound `let` locals are not local facts. 5. **Python: `import engine` binds a conftest fixture.** The import binds a same-directory `conftest.py` fixture named `engine` through T1B_SAME_DIRECTORY. 6. **Python: container import picks the wrong module.** `c.fetch` binds `other.py` through T1B_CONTAINER_IMPORT even though `Client` is imported from `models`. Also open, with the same provenance: - **B3, wall clock.** The deterministic evidence shows the per-pass Python re-parse is gone (django `local_scope` 4,381 → 374 ms). The interleaved django wall-clock runs are still noisier than the effect (load 4–9). A quiet-machine run comparing dc841af, 4e3034a and v0.32.1 is still needed before any wall-clock claim is published. For each shape: add a precision-gate decoy that fails on the current tree, then fix it structurally, then measure the corpus bind by bind. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Member

7. A pre-existing defect lost its detector in v0.32.1. corpus_mutation's single KNOWN_REBINDS row (flask register_blueprint, pre-existing since v0.20.3, needs receiver-type inference plus a class hierarchy) stopped firing. The defect is still there. What changed is the test's victim picker: it now deletes tests/conftest.py instead of the file it used to delete. The suite failed on the stale row, so the row was removed. Its measured reason is kept verbatim in record I076 (_prdoc/records/).

Needed: a deletion or rename case that deliberately targets the register_blueprint definition file, so the defect is exercised again and pinned as a KNOWN_REBINDS row until it is fixed.

🤖 Generated with Claude Code

**7. A pre-existing defect lost its detector in v0.32.1.** `corpus_mutation`'s single `KNOWN_REBINDS` row (flask `register_blueprint`, pre-existing since v0.20.3, needs receiver-type inference plus a class hierarchy) stopped firing. The defect is still there. What changed is the test's victim picker: it now deletes `tests/conftest.py` instead of the file it used to delete. The suite failed on the stale row, so the row was removed. Its measured reason is kept verbatim in record I076 (`_prdoc/records/`). Needed: a deletion or rename case that deliberately targets the `register_blueprint` definition file, so the defect is exercised again and pinned as a `KNOWN_REBINDS` row until it is fixed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
h-dv/code-index#300
No description provided.