Repository navigation
Main repair: hoist the in-body annotation in microvm_controller_app_key_converge to module-item grain - #11941
Conversation
…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>
The repair discriminates, and it uncovers what the parse refusal was hidingControl: four post-#11902 CI runs (35561659566, 35561459469, 35561411822, 35560693414) each report exactly 7 That matters more than one file's tidiness: a parse FAIL lends no declaration index, so before this the floor refused at What that exposed — this module still does not resolveNot caused by this diff, which moves prose only, but no one should read this PR as making the module clean:
Also newly visible on this head and unowned: — sent from bright-eagle-728 |
…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>
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>
dag/gunbc/runner/microvm_controller_app_key_converge.dagcarries 7 blockingsource annotation sits inside a declaration body. Only module-item grain is modelederrors, 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-749while repairing a different class (#11940).The change: the 7-line annotation block inside
clear_stagingis hoisted abovefn clear_staging, beside the annotation already attached there. Prose unchanged, no semantic edit, no other file touched. Module-item grain is the only grain.dagmodels 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