Skip to content

Main repair: hoist the in-body annotation in microvm_controller_app_key_converge to module-item grain - #11941

Merged
briansrls merged 2 commits into
mainfrom
repair/microvm-annotation-grain
Sep 21, 2026
Merged

briansrls merged 2 commits into
mainfrom
repair/microvm-annotation-grain

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

dag/gunbc/runner/microvm_controller_app_key_converge.dag carries 7 blocking source annotation sits inside a declaration body. Only module-item grain is modeled errors, landed with #11902 earlier today. Any floor closure that reaches the module refuses.

Why nobody saw it: the required gate's floor job binds no adjudicator, so a refused floor concludes success — the defect #11829 repairs. This is one of the main-side blockers gating that PR. Found by smart-boar-749 while repairing a different class (#11940).

The change: the 7-line annotation block inside clear_staging is hoisted above fn clear_staging, beside the annotation already attached there. Prose unchanged, no semantic edit, no other file touched. Module-item grain is the only grain .dag models for annotations, and the rationale is about the function, so the declaration it describes is unchanged.

Evidence: the file now has zero indented // lines (grep -c '^\s\+//' → 0, was 7). The floor lane on this PR reports the parse phase; read its log rather than the check, since the check cannot go red until #11829 lands.

🤖 Generated with Claude Code

…ey_converge to module-item grain

The block inside `clear_staging` is source annotation at declaration-body grain, which
the parser refuses ("source annotation sits inside a declaration body. Only module-item
grain is modeled") -- 7 blocking errors on main since #11902 landed today. The required
gate's floor job binds no adjudicator, so a closure that reaches this module refuses the
floor while the lane concludes success; PR #11829 closes that and is gated on repairs
like this one.

The prose is unchanged and stays attached to the declaration it describes, now above
`fn clear_staging` beside the annotation already there. No semantic edit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor Author

The repair discriminates, and it uncovers what the parse refusal was hiding

Control: four post-#11902 CI runs (35561659566, 35561459469, 35561411822, 35560693414) each report exactly 7 source annotation sits inside a declaration body errors for this file.
This head (run 35563045570, job 106219416135): required-ci: parse OK 6522 file(s) parse-clean, 0 such errors.

That matters more than one file's tidiness: a parse FAIL lends no declaration index, so before this the floor refused at REQUIRED-FLOOR REFUSAL cause=ArmSetConsumerPlanningUnavailable and never prepared a subject at all. With parse clean the floor now plans (subject=3e550207ade97bb5 modules_resolved=1978 modules_excluded=0).

What that exposed — this module still does not resolve

Not caused by this diff, which moves prose only, but no one should read this PR as making the module clean:

name 'classify_host_file_presence' not found in module 'gunbc.runner_host_file_converge'
function 'classify_host_file_presence' not found in scope
effect summary incomplete: call to 'classify_host_file_presence' in gunbc.microvm_controller_app_key_converge

:58 imports it and :651 calls it; git grep on origin/main finds the name in exactly those two lines and nowhere else — #11902 landed a call to a function that does not exist. It was invisible twice over: behind this file's own parse refusal, and behind the required gate's missing adjudicator (#11829). Dispatched as its own lane (adhoc-e93c96e8-305) with instructions to derive the repair from runner_host_file_converge's existing EntryPresence vocabulary rather than minting whatever compiles, and not to collapse an indeterminate probe into Absent.

Also newly visible on this head and unowned: gunbc.host_memory_observation:166,175 cites gunbc.ci_floor_measurement declarations that are absent, with two matching stale PRE_EXISTING_CITATION_DEBT rows in declaration_index.rs.

— sent from bright-eagle-728

gunbai-bot Bot pushed a commit that referenced this pull request Sep 21, 2026
…ence chain, not the deleted classify_host_file_presence

gunbc.microvm_controller_app_key_converge imported and called
classify_host_file_presence from gunbc.runner_host_file_converge. The
function was real (#11063) and this consumer bound it in #11679; #11845
deleted it because its exit-1 arm minted HostFileAbsent for every stat
failure (GNU `test -e` is stat(path) == 0), and touched only the sibling
module, so this consumer went dangling. Restoring the name would restore
the false-absence arm on the one file the module keeps root:root 0400.

observe_key_content now runs the sibling's stat `%F` probe over this
module's elevated leg and consumes classify_host_file_metadata,
classify_host_file_path and runner_host_file_settled_standing; the parent
listing that decides absence when the read failed runs elevated (the same
stated departure from member_observe's entry_presence that clear_staging
already carries, because the parent is root:root 0700), with the argv and
membership read still member_observe's.

Evidence: per-entry compile of the module (primary-precedence pool) on
#11941's head with the old file reports exactly the three errors (name not
found in module at the import, function not found in scope at the call,
effect summary incomplete); with this file it reports none, both runs
resolving the same 1563-source closure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@briansrls
briansrls added this pull request to the merge queue Sep 21, 2026
Merged via the queue into main with commit b647fdc Sep 21, 2026
4 checks passed
@briansrls
briansrls deleted the repair/microvm-annotation-grain branch September 21, 2026 10:33
gunbai-bot Bot pushed a commit that referenced this pull request Sep 21, 2026
One conflict, the same modify/delete shape as the previous merge:
dag/gunbc/runner/microvm_controller_app_key_converge.dag is deleted by this
branch's rename and was edited on main by #11941.

Main's edit is a pure annotation hoist -- an in-body // block moved to
module-item grain -- with no semantic change, so the delete is still the right
resolution. But discarding it would have lost the rationale, and the rationale
is about a construction this branch KEPT: classify_staging_residue keys on a
name that, as a free parameter, a caller could spell freely, and a name that
does not match the staging path's basename reads a listing CONTAINING the
residue as StagingAbsent -- a false absence that feeds a HELD verdict.

Checked rather than assumed: the replacement preserves the construction. Its
sole caller derives the key as path_basename of the staging path rather than
accepting it. So the annotation is carried onto classify_staging_residue in the
new module, at module-item grain, noting where it came from. The rationale
outlives the module because the construction it explains does (DESIGN §4c:
an annotation may preserve irreducible rationale about why a construction has
its shape).

The generated projections were regenerated rather than hand-merged and a second
gate run wrote nothing. Compiling the replacement's closure reports the same 3
blocking errors as before the merge -- all 'shell' transport emission refusals
in extdeps.gunbc, pre-existing on main -- and no annotation-grain diagnostic for
the ported block.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.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