Skip to content

Two next-rung notes sat at end-of-file, naming no subject, and the required parse phase refused every branch - #10719

Merged
briansrls merged 1 commit into
mainfrom
parse-unblock
Sep 7, 2026
Merged

briansrls merged 1 commit into
mainfrom
parse-unblock

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

main is parse-red, and every branch cut from it inherits the failure

main at 59a692ae8 fails the required run's parse phase, which refuses before the floor executes. So every branch cut from current main goes red for a reason its own diff does not contain — observed on #10717, whose six changed files are all under dag/gunbc/live_deploy and dag/test/claim/live_deploy.

src/v2/lens/unit_modeling.dag:148:1
src/v2/lens/testgen.dag:2164:1
source annotation names no subject: no module item follows it

The repair

§4c admits a standalone leading // block attached to a module-scope declaration. Both notes were the last line of their file, so nothing followed them to attach to.

The citations are correct — gunbc.guarantee_stall.unit_modeling_carrier_totality_stall and gunbc.guarantee_stall.testgen_anchor_generator_totality_stall both exist — and each describes the construction_justification declaration immediately above it, whose WallAfterGrounding class is exactly what §4b(2) obliges to name a next-rung trigger.

So each note moves above the declaration it describes. Nothing is deleted and no citation changes; the annotation leads its subject instead of trailing it.

Why this is its own PR

#10717 is under a keep-it-tightly-scoped ruling, and folding an unrelated two-file repair into it would be the scope creep that ruling exists to prevent. This also unblocks every other branch, not only that one.

Evidence

Both entries resolve with zero diagnostics through gunbc run — the strict route that produced the refusal. claim_batch --hermetic does not enforce this class, which is why it can pass locally while CI's strict preparation refuses.

🤖 Generated with Claude Code

https://claude.ai/code/session_019iXPtAqzPaNBZbaaM5rxrY

…quired parse phase refused every branch

main is parse-red at 59a692a and has been since that merge. The required run's parse phase refuses
before the floor executes, so EVERY branch cut from current main fails for a reason its own diff does
not contain -- observed on PR #10717, whose six changed files are all under dag/gunbc/live_deploy and
dag/test/claim/live_deploy.

  src/v2/lens/unit_modeling.dag:148:1
  src/v2/lens/testgen.dag:2164:1
  source annotation names no subject: no module item follows it

Section 4c admits a standalone leading `//` block attached to a MODULE-SCOPE DECLARATION. Both notes
were the last line of their file, so nothing followed them to attach to. The citations themselves are
correct -- gunbc.guarantee_stall.unit_modeling_carrier_totality_stall and
gunbc.guarantee_stall.testgen_anchor_generator_totality_stall both exist -- and each describes the
`construction_justification` declaration immediately above it, whose WallAfterGrounding class is
exactly the thing section 4b(2) obliges to name a next-rung trigger.

So each note moves above the declaration it describes. Nothing is deleted and no citation changes;
the annotation simply leads its subject instead of trailing it.

WHY THIS IS ITS OWN PR: PR #10717 is under a keep-it-tightly-scoped ruling, and folding an unrelated
two-file repair into it would be the scope creep that ruling exists to prevent. This also unblocks
every other branch, not only that one.

Verified by execution: both entries resolve with zero diagnostics through `gunbc run`, the strict
route that produced the refusal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019iXPtAqzPaNBZbaaM5rxrY
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@briansrls
briansrls merged commit 5958704 into main Sep 7, 2026
2 of 3 checks passed
@briansrls
briansrls deleted the parse-unblock branch September 7, 2026 02:52
gunbai-bot Bot pushed a commit that referenced this pull request Sep 7, 2026
Pick up #10719 parse-phase fixes (dangling end-of-file annotations) that red the required floor on every PR still based on the pre-fix main.
gunbai-bot Bot pushed a commit that referenced this pull request Sep 7, 2026
…ject fix.

docs/design-failure-modes.md is the merge-base projection; heal derives the merged authorities.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Sep 7, 2026
The required floor refused on call-shape mismatch: callees_from_node declares only node and terminal_callee_symbols. Main is red on the same three sites after #10719 cleared the dangling-annotation parse block.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Sep 7, 2026
…kes (#10730)

callees_from_node declares (node, terminal_callee_symbols); the three call
sites in fn_index_depth_agreement still passed param_names, so the required
floor lane refused on every branch with a call shape mismatch. A signature
change landed without its callers.

The exclusion the argument fed is the one this module's own annotation already
records as excluding nothing: no live declaration references its own parameter
by a lexeme that also names a declaration. So the callers are corrected to the
current two-parameter shape rather than the parameter being restored.

param_names_of stays imported deliberately. It is still used independently by
the collision measurement at line 118, so dropping the import to "clean up"
after removing these three arguments would trade one break for another.

Not verifiable by ordinary compilation: gunbc compile --source-root dag
--source-root src/v2 does not reach this lens module -- it reports 37 blocking
errors on main and none of them are these. Only claim_executor's floor lane
observes the subject, so the floor is the oracle for this repair and a clean
local compile establishes only that nothing else broke.

The two end-of-file annotation failures in the same lane were already repaired
by #10719 and are not part of this change.


Claude-Session: https://claude.ai/code/session_01XapoExtJQauXkqJCDS9dGs

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Sep 7, 2026
…kes (#10730)

callees_from_node declares (node, terminal_callee_symbols); the three call
sites in fn_index_depth_agreement still passed param_names, so the required
floor lane refused on every branch with a call shape mismatch. A signature
change landed without its callers.

The exclusion the argument fed is the one this module's own annotation already
records as excluding nothing: no live declaration references its own parameter
by a lexeme that also names a declaration. So the callers are corrected to the
current two-parameter shape rather than the parameter being restored.

param_names_of stays imported deliberately. It is still used independently by
the collision measurement at line 118, so dropping the import to "clean up"
after removing these three arguments would trade one break for another.

Not verifiable by ordinary compilation: gunbc compile --source-root dag
--source-root src/v2 does not reach this lens module -- it reports 37 blocking
errors on main and none of them are these. Only claim_executor's floor lane
observes the subject, so the floor is the oracle for this repair and a clean
local compile establishes only that nothing else broke.

The two end-of-file annotation failures in the same lane were already repaired
by #10719 and are not part of this change.


Claude-Session: https://claude.ai/code/session_01XapoExtJQauXkqJCDS9dGs

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Sep 8, 2026
…10709)

* Add Rust-explicit emitted-fn projection to compile_fixture.

Witnesses could only see that a fixture compile completed, not what it emitted, so a truncated service parameter at the top of a call chain was indistinguishable from a correct emit. FixtureCompileCompleted now carries EmittedRustFnSignature rows (source identity + ordered parameter names, no types), with a GREEN/RED pair proving the projection discriminates on a clean sibling.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Clarify ordered_parameter_names: emit layout fact, membership is the durable assert.

Order is emit_func_params order by contract; asserting on position couples a witness to emitter layout. Prefer emitted_rust_fn_has_parameter unless the subject is that layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* State projection ceilings and land a shallow service-chain consumer.

Document that nothing refuses if emit_func_params and the projection disagree (order is convention), and that names-only cannot see type-only changes. Add a depth-3 service-chain consumer with a no-service RED sibling so the instrument has a real executing consumer on this PR.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name the order join's next-rung trigger; mark names-only as permanent.

Order below ceiling: trigger is deriving the projection from the same source emit_func_params reads; regenerating emit_rust / crossing #10688 is the reason unbuilt, not the trigger. Names-only is a deliberate permanent boundary with no lift trigger.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Route projection param/resource names through emit_ident.

Membership asserts must see the same identifier spelling emit_func_params binds — snake-case, sanitization, reserved-word escape — not the raw authored or registry name.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Restate the projection as resolved-registry grain, not emit observation.

Review 61614: membership and order are unjoined to emit_func_params; the carrier and consumer must not claim emitter-binding facts. Document registry subject, expand the stall to membership, cite parent admission, keep emit_ident spelling fidelity at this grain.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Align self-test wording with resolved-registry grain.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop in-diff stall admission claim; admission must resolve outside the diff.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop remaining in-diff stall admission claim from EmittedRustFnSignature docs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop invalid param_names arg from callees_from_node call sites.

The required floor refused on call-shape mismatch: callees_from_node declares only node and terminal_callee_symbols. Main is red on the same three sites after #10719 cleared the dangling-annotation parse block.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Enroll #10706 OutsideModeledGuarantee absences in PLANTED_CONTROL_CITATIONS.

The stamps deliberately cite capabilities that must stay absent (still_outside is DeclarationRefDeclarationAbsent only). Adding or deleting those citations both erase the boundary; site-grain planted-control enrollment is the missing other half. Fixture proves PlantedControlNoLongerRefuses fires and corpus_findings suppresses the grounding site.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Withhold #10706 OutsideModeledGuarantee join witnesses as censored cost debt.

They call guarantee_boundary_still_outside over witness_layer_roots and hit
cpu_deadline before any verdict (~33-41s vs 500ms); siblings that skip the join stay on the floor.

Co-authored-by: Cursor <cursoragent@cursor.com>

* State EmittedRustFnSignature as a §3b middle-value divergence with a technical reason.

The fork of emit_func_params remains real and named; the reason (registry-grain consumer
surface without coupling this instrument to emit_rust/#10688) admits it without an in-diff
approval claim. Document the resource-arm source drift the tip reviews measured.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Drop PLANTED_CONTROL enrollment and its censored cost-debt follow-on.

Those four #10706 absences are a next-rung-trigger population owned by #10704
(NEXT_RUNG_TRIGGER_CITATIONS), not planted controls; enrolling them here forked
the roster meaning and armed a red on capability success. Restore the empty-roster
climb comment. Instrument projection work is untouched.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Rename registry projection off emitted_* to ResolvedRustFn*.

The rows are filled from item_registry before emit_resolved_for_target; keeping
an emitted_* carrier name was a §3 meaning fork. Helpers and FixtureCompileCompleted
field follow. Parallel emit_func_params walk stays the named next-rung, not this rename.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Rename projection witnesses off emitted_* to match ResolvedRustFn* carrier.

Module paths and filenames were still test.claim.emitted_rust_fn_*; that
reintroduced the §3 meaning fork the carrier rename removed.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Update module lines and citations after resolved_rust_fn_* witness rename.

The prior commit moved the files; this aligns module paths, test names, and the
instrument's discriminating-RED citation with the ResolvedRustFn* carrier.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Refuse bare-name registry collisions in resolved_rust_functions projection.

Walk per TypedModule.item_registry instead of the bare-name-merged graph
registry, overlay expanded service names when the module still owns the row,
and require Found before asserting a parameter is absent so Absent cannot green REDs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Keep per-module resolved_rust_fn rows across bare-name reuse.

Review 61777: aborting the instrument on cross-module bare-name collision turns legal multi-module programs (and subjects that should CompileRefuse) into InstrumentRefused. Rows stay keyed by (owner_module, declaration_name); overlay the merged registry only when it still names this module.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Move witness match-arm annotations to module-item grain.

Floor parse refuses body-level //; the Absent≠lacks-parameter notes belong above the enclosing fns.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Omit colliding bare-name rows from resolved_rust_functions.

Review 61828: falling back to the un-expanded TypedModule ItemInfo on a merge loser silently drops propagated service_names while emit_func_def still binds the survivor's via bare-name lookup. Omit every Fn/Func row whose bare name appears in more than one module — lookup Absent, not InstrumentRefused, not a wrong signature.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Follow #10724 witness rename in floor_cost_debt enrollment.

CI merge hit stale_cost_debt: the apply_script_* identity was renamed on main while the roster still enrolled the old spelling.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Note #10724 rename beside the floor_cost_debt measurement comment.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant