From a81fa912a30ac5a58d28980169173bbcf3264f3e Mon Sep 17 00:00:00 2001 From: gunbc-ci-auto-heal Date: Sun, 20 Sep 2026 07:41:04 +0000 Subject: [PATCH] =?UTF-8?q?Hoist=20a=20body=20annotation=20to=20module=20s?= =?UTF-8?q?cope:=20main's=20parse=20phase=20refuses=20it=20(=C2=A74c),=20w?= =?UTF-8?q?hich=20leaves=20every=20PR's=20floor=20with=20no=20declaration?= =?UTF-8?q?=20index?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dag/test/claim/roadmap/roadmap_review_function_witness_test.dag carried an 8-line // block inside the_aggregate_regroups_by_file_counts_the_overlap_and_names_the_incomplete_calls (landed by #11761). The required parse phase refuses body-grain annotations (only module-item grain is modeled), so the parse-phase declaration index is never lent and the floor refuses with ArmSetConsumerPlanningUnavailable on every PR whose merge ref includes it (seen on #11744). The block is rationale, not a claim, so it moves above the declaration it describes; the witness runs unchanged (5 PASS). Co-Authored-By: Claude Opus 5 (1M context) --- .../roadmap_review_function_witness_test.dag | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dag/test/claim/roadmap/roadmap_review_function_witness_test.dag b/dag/test/claim/roadmap/roadmap_review_function_witness_test.dag index 533cdafdaab..df67573db78 100644 --- a/dag/test/claim/roadmap/roadmap_review_function_witness_test.dag +++ b/dag/test/claim/roadmap/roadmap_review_function_witness_test.dag @@ -91,6 +91,14 @@ test fn the_join_keeps_the_plan_as_denominator_and_refuses_foreign_or_duplicate_ // THE FOLD: findings regroup by file for the worker, identical rows fold once, a file named by two // criteria is the counted residual, and an early report says which calls are still incomplete. +// THE COUNT IS DERIVED, NOT TRANSCRIBED. This asserted the literal "Still reviewing (10 ...)" +// followed by all ten key names in roster order, both copied from the live criteria roster. That +// made it a change detector for roster SIZE: adding any reviewer to a design row broke it, and +// the repair was to retype the number -- which DESIGN section 5 names outright, since automating +// the literal's update collapses the assertion to measure() == measure(). Four of this scenario's +// five observations are terminal (the fifth is still running), so the incomplete set is the +// roster minus those four, and that relation is what the fold actually owes. The rendering is +// still covered: the phrase must appear and must name a criterion that had no observation. test fn the_aggregate_regroups_by_file_counts_the_overlap_and_names_the_incomplete_calls() -> Bool { let p = plan() let running = ReviewObservation { call_id: "how-to-work", subject_id: review_subject_id(s: p.subject), plan_revision: p.revision, source: ReviewReceiptAbsent, process: WorkerProcessRunning { command: "gunbc" as NonEmptyStr } } @@ -114,14 +122,6 @@ test fn the_aggregate_regroups_by_file_counts_the_overlap_and_names_the_incomple && any(f.incomplete, k => k == "conformance-extdeps") && string_contains(s: text, pattern: "Fix, by file: dag/y.dag — minimize-redundancy: changes requested — a copied fold · dag/x.dag — single-authority: changes requested — a second name for one concept; fail-closed: changes requested — an arm widens") && string_contains(s: text, pattern: "1 file(s) were named by more than one criterion") - // THE COUNT IS DERIVED, NOT TRANSCRIBED. This asserted the literal "Still reviewing (10 ...)" - // followed by all ten key names in roster order, both copied from the live criteria roster. That - // made it a change detector for roster SIZE: adding any reviewer to a design row broke it, and - // the repair was to retype the number -- which DESIGN section 5 names outright, since automating - // the literal's update collapses the assertion to measure() == measure(). Four of this scenario's - // five observations are terminal (the fifth is still running), so the incomplete set is the - // roster minus those four, and that relation is what the fold actually owes. The rendering is - // still covered: the phrase must appear and must name a criterion that had no observation. && count(f.incomplete) == count(review_criteria) - 4 && string_contains(s: text, pattern: ", this report is not complete): ") && string_contains(s: text, pattern: "conformance-extdeps")