Skip to content

Workflow engine structure - #99

Closed
briansrls wants to merge 5 commits into
mainfrom
cursor/workflow-engine-structure-fbcf
Closed

briansrls wants to merge 5 commits into
mainfrom
cursor/workflow-engine-structure-fbcf

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Extract the generic workflow engine to core/workflow, migrate workflow catalog and commands to DSL, and refactor CLI binaries to use schema-based parsing to unblock Worker A's progress.


Open in Web Open in Cursor 

cursoragent and others added 3 commits February 28, 2026 18:37
- Add core/workflow crate (gunbc-workflow) with generic workflow engine modules:
  admission, coordination, errors, executor, global_plan, key, planner,
  process_registry (without default_process_unit_registry), projection,
  proof, schema, slo
- Add core/workflow to workspace, gunbc-workflow dep to gunbc-dag
- gunbc-dag workflow mod re-exports from gunbc_workflow, keeps local:
  catalog, commands, spec_builders, capabilities
- default_process_unit_registry() wrapper in catalog.rs using
  build_process_unit_registry() panic-on-error
- claim_handle_type_id stays in process_registry (core crate)
- Remove tests depending on spec_builders/default registry from
  global_plan; keep process_registry tests with self-contained fixtures
- Fix catalog expect_optional_string_field to accept Expr::Ident(None)

Co-authored-by: briansrls <briansrls@gunb.ai>
Co-authored-by: briansrls <briansrls@gunb.ai>
…ting tests

Co-authored-by: briansrls <briansrls@gunb.ai>
@cursor

cursor Bot commented Feb 28, 2026

Copy link
Copy Markdown

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

cursoragent and others added 2 commits February 28, 2026 18:56
…orkflow-engine-structure-fbcf

Co-authored-by: briansrls <briansrls@gunb.ai>
Co-authored-by: briansrls <briansrls@gunb.ai>
@briansrls briansrls closed this Feb 28, 2026
briansrls added a commit that referenced this pull request May 12, 2026
…ith PR #2744 openai-pro BLOCKING fix

Per openai-pro BLOCKING fix on PR #2744 (commit e43aba3): WI-1 / WI-2 briefs
+ scope doc §2 type sketch all align on InlineGunbc as DESIGN-ONLY (NOT in
initial enum, lands when runtime consumer exists). The §1.8 gate bodies in
r3-program-plan.md row #99 + r3-structure.md §Acceptance bullet for
emission_target_open_enum_landed were stale relative to that alignment.

Fix in this sync PR:
- r3-program-plan.md §1.8 row #99: "(YamlStatic | BinaryShim | PythonShim |
  InlineGunbc | ...)" → "3 initial arms (...)" + InlineGunbc DESIGN-ONLY note
  with PR #2746 §5.4 + openai-pro BLOCKING cross-references
- r3-structure.md §Acceptance T-WAD bullet for emission_target_open_enum_landed:
  same change pattern

Single-authority across:
- PR #2744 scope doc §0 / §1 gate row / §2 type sketch
- PR #2744 WI-1 brief DESIGN-ONLY discipline
- PR #2744 WI-2 brief Output / DO-DON'T / Acceptance gates
- PR #2750 (this PR) §1.8 ledger row + §Acceptance archive
- PR #2746 §5.4 canonical DESIGN-ONLY framing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
…name collision with SELF_HOSTING.md:609; warm-wolf-698 PR #2749 commit 575eb7e cascade)

warm-wolf-698 surfaced a DECISIVE name-collision finding at PR #2749:666
/ :672 (briansrls operator BLOCKING 2026-05-12T09:26:49Z): the canvas
EmissionTarget sum-type collides with the canonical Shape-A carrier
declared at `src/v3/SELF_HOSTING.md:609`:

  type EmissionTarget {
    language: LanguageSpec       // what's valid (required)
    rendering: RenderingSpec?    // how to format (optional)
  }

This is the SELF_HOSTING.md emitter-composition authority used across
the v3 emitter system (LanguageSpec + RenderingSpec? composition). The
PR #2749 canvas's sum-type EmissionTarget = YamlStatic | BinaryShim |
PythonShim was a literal name collision — INVARIANTS P2 violation.

warm-wolf-698 pushed rename commit 575eb7e to PR #2749:
EmissionTarget → WorkflowRuntime (48 occurrences). Per
feedback_pre_compaction_framings_self_supersede: Director ratification
msg_4f7f536d at sum-type-name level is superseded by post-ratification
name-collision discovery; all OTHER ratified elements stand (variant
names YamlStatic|BinaryShim|PythonShim, 22-site migration scope per
§5.5 expansion, 🟡 YELLOW Practice 4 receipt, projection function
signature shape, gunbc-namespace placement, dissolution trigger).

This commit cascades the rename through PR #2744 branch:

1. docs/r3-t-workflow-as-data-full-r3-close-scope.md (scope doc):
   - §0/§1 framing references (emission target / EmissionTarget)
   - §1 gate row `emission_target_open_enum_landed` →
     `workflow_runtime_open_enum_landed`
   - §1 row `project_github_actions_landed` description
   - §2 Architectural shape — all references
   - §2 added rename-rationale paragraph citing SELF_HOSTING.md:609
     authority + warm-wolf-698 PR #2749 commit + feedback memory
   - §3 Slice 4 description
   - §6 WI-1/WI-2 brief references

2. docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md
   (WI-1 brief — already referenced by PR #2746 merged canvas):
   - Practice 4 receipt + dissolution trigger
   - YamlStatic/BinaryShim/PythonShim arm descriptions
   - Acceptance gate references

3. docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md (WI-2 brief):
   - §1 enum declaration
   - §2 projection function signature
   - Acceptance gate 3 Practice 4 receipt
   - DO/DON'T list references

Sister PR cascade (separate commit on docs/r3-program-plan-t-wad-ledger-sync):
- r3-program-plan.md §1.8 row #99 gate-ID rename
- r3-structure.md §Acceptance T-WAD bullet gate-ID rename

Pending post-merge follow-on PR: docs/design-ci-workflow-emitter-dispatch.md
(already on main via merged PR #2746) needs same rename cascade — either
focused rename-only PR or Substrate Mgr lane absorption.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
… cascade (warm-wolf-698 PR #2749 commit 575eb7e; SELF_HOSTING.md:609 name collision)

Cascade sister-PR rename: PR #2744 branch carries the scope-doc + brief
renames in commit 70a49ac; this commit carries the ledger / structure
gate-ID renames.

warm-wolf-698 surfaced a DECISIVE name-collision finding at PR #2749:666
/ :672 (briansrls operator BLOCKING 2026-05-12T09:26:49Z): the canvas
EmissionTarget sum-type collides with the canonical Shape-A carrier
declared at `src/v3/SELF_HOSTING.md:609`:

  type EmissionTarget {
    language: LanguageSpec       // what's valid (required)
    rendering: RenderingSpec?    // how to format (optional)
  }

This is the SELF_HOSTING.md emitter-composition authority — INVARIANTS
P2 violation. warm-wolf-698 pushed rename to WorkflowRuntime in PR
#2749 commit 575eb7e (48 occurrences). All OTHER ratified elements
stand per feedback_pre_compaction_framings_self_supersede.

This commit cascades the rename through PR #2750 branch:

- docs/r3-program-plan.md §1.8 row #99:
  gate ID emission_target_open_enum_landed → workflow_runtime_open_enum_landed
  (also EmissionTarget references in row description)
- docs/r3-program-plan.md §1.8 row #100:
  EmissionTarget references in project_github_actions signature
- docs/r3-structure.md line 41 (T-WAD lane summary):
  EmissionTarget references + gate-ID rename in the multi-gate reference
- docs/r3-structure.md §Acceptance T-Workflow-As-Data bullets:
  gate-ID emission_target_open_enum_landed → workflow_runtime_open_enum_landed
  EmissionTarget references in `project_github_actions_landed` description
- docs/r3-structure.md §Lane structure T-WAD row:
  EmissionTarget references in scope expansion text

Variant names unchanged (YamlStatic / BinaryShim / PythonShim). Gate
descriptions retain full substantive content; only the type-name and
gate-ID identifiers are renamed.

Cascade trail across in-flight PRs:
- PR #2749 (warm-wolf-698): 575eb7e — substrate canvas rename
- PR #2751 (warm-wolf-698): expression-substrate canvas rename (in flight)
- PR #2744 (mine): 70a49ac — scope-doc + WI-1 + WI-2 brief rename
- PR #2750 (mine): THIS COMMIT — ledger + structure rename
- PR #2745 (cool-carp-720): surfaced; WI-2 implementation needs realign
- PR #2746 (MERGED): docs/design-ci-workflow-emitter-dispatch.md needs
  follow-on rename PR (post-cascade-clear)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
…2744 §1 (#2750)

* docs(r3): T-WAD FULL R3 §1.8 ledger sync — +6 gates (#98–#103) per PR #2744 §1

**Authority**: PM scoping doc PR #2744 §1 (T-WAD FULL R3 elevation per operator
directive 2026-05-12 + Director ratification msg_5cbdad24 + msg_f9fd669e + (b)
ledger-sync disposition msg_2a68a4b5 — follow-up sync PR pattern).

**Sync disposition rationale** (per Director msg_2a68a4b5): option (a) bundles too
much into PR #2744 mid-review; (c) bakes parallel-authority into scope doc as
"temporary" PROPOSED state which calcifies. (b) is operationally clean if sync
PR queues for atomic-merge-sequencing alongside PR #2744 — gap window bounded
to merge-clock seconds.

**6 new §1.8 gate rows** (all T-Workflow-As-Data, NEW 2026-05-12):

- **#98** `ci_yml_hand_authority_dissolved` (state-check) — hand-authority NOT
  file-deletion; (a) absent / (b) emission-artifact / (c) thin-shim per
  briansrls BLOCKING #PR2744 fix
- **#99** `emission_target_open_enum_landed` (substrate-shape) — EmissionTarget
  sum-type per (c-refined) shape at PR #2749 §7
- **#100** `project_github_actions_landed` (substrate-shape) — projection
  function declaration in gunbc namespace; consumes extdeps.github.actions.Workflow
  as codomain + CIWorkflowDag (PR #2736 carrier) as input domain
- **#101** `test_cost_dimension_landed` (substrate-shape) — Cost dimension on
  TEST NODES (distinct from existing compiler-internal cost gates
  #37/#39/#40/#70/#80 which are about SymbolicCost as the compiler's cost lens;
  this gate is about Cost-as-Dimension applied to test nodes so slow-test
  ratchet derives structurally)
- **#102** `slow_test_exemptions_dissolved` (state-check) — scripts/slow-test-
  exemptions.txt deleted; sibling of #101 per kernel-modeling discipline split
- **#103** `ci_uses_affected_set_selection` (state-check) — BinaryShim emitter
  consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:`
  gates removed; cross-tier co-owned with clever-tern-670 Slice 7

**Count updates** (was 97 enumerated / 96 R3-load-bearing; now 103/102):

- §1.5 total enumeration: 97 → 103
- §1.5 R3-load-bearing arithmetic: 96 → 102 (= 103 - 1 canvas-deferred {#11})
- §1.5 composition tally: T-Workflow-As-Data 4 → 10 (+6 NEW)
- §1.5 prose: R3 close target 96 → 102
- §1.5 R4-carved-dissolved framing: target 96 → 102
- §1.7 status-taxonomy lead: 96 → 102 R3-load-bearing
- §1.8 standing-program note: 96 → 102 load-bearing
- §0 R3 close criteria: 97/96 → 103/102
- §1 plan-declared count: 97 → 103
- §1.6 acceptance criteria: 97/96 → 103/102
- §1.8 §1.8 single-canonical-view: 97 → 103
- §1.8 row #11 canvas-deferral arithmetic: 97 → 103
- §Q1 table: 97 → 103 + history pointer

**Sequencing discipline** (per Director msg_2a68a4b5):
1. This sync PR sits ready-to-merge until PR #2744 lands
2. As soon as PR #2744 squash-merges, fire this sync PR squash-merge immediately
3. Gap window: bounded to merge-clock seconds (atomic-as-possible without bundle)
4. If reviewer delay accumulates here, fold into PR #2744 retroactively (option (a)
   escalation path)

**Cost-dim distinction note** (per Director verification flag): existing gates
#37/#39/#40/#70/#80 are about compiler-internal SymbolicCost (cost lens reading
target programs). #101 is structurally distinct — Cost dimension on TEST NODES
for slow-test ratchet derivation. Not a duplicate.

**§1.9 acceptance-aggregator pilot row** (`t_ci_wad_full_r3_close`): remains in
PR #2744 §9 with gate-name references per `feedback_no_snapshot_integers_in_briefs`
discipline. No row added to this sync PR per Director msg_2a68a4b5 ("EITHER PR
#2744 §9 OR sync PR — your call; either works").

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

* docs(r3): cross-doc authority sync — add 6 NEW T-WAD gates to r3-structure.md §Acceptance

Per codex BLOCKING review on PR #2750 (2026-05-12T07:34:59Z): scope doc lines
13 and 84 claim r3-structure.md was "updated in this PR" + reference 103-gate
total per r3-structure.md §Acceptance, but the PR only changed r3-program-plan.md
— r3-structure.md still had no #98–#103 rows. That violated INVARIANTS.md P2 /
modeling-discipline.md Practice 5 (single-authority metadata) — the closure
ledger became internally inconsistent at the canonical-source level.

Fix: add the 6 NEW gate bullets to r3-structure.md §Acceptance T-Workflow-As-Data
section (after `ci_workflow_modeled_as_dag`), mirroring r3-program-plan.md §1.8
rows #98–#103. Each bullet carries the full Pass-condition body (single-source
authority for Pass conditions per the r3-program-plan.md convention).

Now both docs land the same gate set atomically in this PR:
- r3-program-plan.md §1.8 rows #98–#103 (commit ef9a140, prior)
- r3-structure.md §Acceptance T-WAD bullets (this commit) — matching content

The "Documentation Describes Live State" rule + single-authority discipline
restored.

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

* docs(r3): briansrls BLOCKING fix — propagate 103/102 counts through full plan

Per briansrls BLOCKING inline review on PR #2750 at line 84 (2026-05-12T07:50:26Z):
"The new 103/102 canonical count is not propagated through the full plan,
leaving later close criteria at 96/97 and creating competing R3 thresholds
(INVARIANTS P2 single authority)."

Three stale references found in re-grep + fixed:

- Line 114 (§1.7 two-Pass-surfaces context): "**96** R3-load-bearing gates
  green" → "**102** R3-load-bearing gates green" (post-carve-promotion +
  T-WAD FULL R3 elevation)
- Line 623 (§5.2 R3 close definition): "**96** load-bearing post-carve-
  promotion" → "**102** load-bearing post-carve-promotion + T-WAD FULL R3
  elevation"
- Line 1001 (§10 dependency-graph mirror): "lane TestClaim gates (97 total)"
  → "lane TestClaim gates (103 total; 102 R3-load-bearing post-T-WAD-FULL-
  R3-elevation 2026-05-12)"

Initial sync (commit ef9a140) updated §0 + §1.5 + §1.6 + §1.7 + §1.8 + Q1
table; this commit completes propagation through §1.7 two-Pass-surfaces /
§5.2 R3 close definition / §10 dependency-graph mirror.

Single-authority discipline (INVARIANTS P2) now consistently asserts 103/102
across the full plan; no competing R3 thresholds remain.

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

* docs(r3): InlineGunbc DESIGN-ONLY alignment — cross-doc consistency with PR #2744 openai-pro BLOCKING fix

Per openai-pro BLOCKING fix on PR #2744 (commit e43aba3): WI-1 / WI-2 briefs
+ scope doc §2 type sketch all align on InlineGunbc as DESIGN-ONLY (NOT in
initial enum, lands when runtime consumer exists). The §1.8 gate bodies in
r3-program-plan.md row #99 + r3-structure.md §Acceptance bullet for
emission_target_open_enum_landed were stale relative to that alignment.

Fix in this sync PR:
- r3-program-plan.md §1.8 row #99: "(YamlStatic | BinaryShim | PythonShim |
  InlineGunbc | ...)" → "3 initial arms (...)" + InlineGunbc DESIGN-ONLY note
  with PR #2746 §5.4 + openai-pro BLOCKING cross-references
- r3-structure.md §Acceptance T-WAD bullet for emission_target_open_enum_landed:
  same change pattern

Single-authority across:
- PR #2744 scope doc §0 / §1 gate row / §2 type sketch
- PR #2744 WI-1 brief DESIGN-ONLY discipline
- PR #2744 WI-2 brief Output / DO-DON'T / Acceptance gates
- PR #2750 (this PR) §1.8 ledger row + §Acceptance archive
- PR #2746 §5.4 canonical DESIGN-ONLY framing

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

* docs(r3): T-WAD ledger sync — lane-definition gate lists pointer-only + scope-doc cross-ref qualifier (codex BLOCKING + non-blocking on PR #2750)

Two findings from codex review #10042 on commit 0c08f77 (T-WAD ledger
sync PR head):

BLOCKING — "T-WAD ledger sync updated the Acceptance archive but skipped
the lane-definition gate lists → update those T-Workflow-As-Data gate
lists to include #98–#103 or make them pointer-only."

The PR #2750 cascade landed the 6 NEW T-WAD FULL gates (#98–#103) in:
- r3-structure.md §Acceptance T-Workflow-As-Data bullets (lines 172-177)
- r3-program-plan.md §1.8 ledger rows
- r3-program-plan.md count propagation (§0/§1.5/§1.6/§1.7/§5.2/§10/§Q1)

But the cascade missed two lane-DEFINITION gate lists in r3-structure.md
that ALSO enumerate T-WAD closure gates:
- Line 41 (numbered lane list, T-WAD entry)
- Line 222 (T-WAD row in §"Lane structure" table)

Both listed only the original 4 pre-FULL gates
(workflow_substrate_carriers_landed / timing_lens_carrier_landed /
ci_workflow_modeled_as_dag /
shared_external_attachment_pattern_documented). Reviewers reading
either list would not see the 6 NEW gates — INVARIANTS P2
single-authority gap.

Fix: convert both lane-definition lists to pointer-only references back
to §Acceptance T-WAD as the canonical gate list. Rationale: §Acceptance
is the authority anchor (per INVARIANTS P2 + sister r3-program-plan.md
§1.8); duplication in lane-definition lists would re-introduce drift
the cascade is closing. Also augmented both lane-definition entries
with FULL R3-close elevation 2026-05-12 framing + multi-Mgr ownership
(Substrate Mgr Slices 4-5/8 + Verification Mgr Slice 7 affected-set +
Debt-Paydown Mgr Slice 6 sub-component).

Non-blocking — "Line 172 cites
docs/r3-t-workflow-as-data-full-r3-close-scope.md, but git
ls-tree origin/main returned no blob → replace with existing receipt
or land the scope doc."

The scope doc exists on PR #2744's branch (in flight) but not on
origin/main yet. Codex correctly notes the dangling cross-reference
against current main. Fix: add explicit "(scope doc landing via
in-flight PR #2744)" qualifier so future readers know the citation
is forward-referencing a known in-flight PR rather than a typo or
missing doc.

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

* docs(r3): T-WAD ledger sync — remove dangling file refs (briansrls BLOCKING + codex INVARIANTS P2/P5 escalation on PR #2750)

briansrls inline BLOCKING at r3-structure.md:172 (2026-05-12T09:28:04Z)
escalated the prior non-blocking scope-doc citation issue to BLOCKING:

  "The new gate cites docs/r3-t-workflow-as-data-full-r3-close-scope.md
   section 1, but git ls-tree origin/main produced no blob and the
   reconstructed PR-head test returned 1, so the cited T-WAD scope
   authority is absent (INVARIANTS P2/P5)."

The earlier qualifier fix ("scope doc landing via in-flight PR #2744")
acknowledged the dangling reference but didn't resolve the structural
P2/P5 violation — the gate description still CITED an authority that
doesn't exist on origin/main, which is the merge target.

Audit: grepped both docs for refs to files that don't exist on
origin/main:
- docs/r3-structure.md:172 — `docs/r3-t-workflow-as-data-full-r3-close-scope.md` (PR #2744)
- docs/r3-program-plan.md:326 — `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` (PR #2744)

Fix: replace both file-path references with PR-number anchors. PR
numbers are stable references; file paths become valid only post-merge.
Gate descriptions are self-contained without the cross-references
(the (a)/(b)/(c) enumeration + supporting framing already conveys the
gate's substance).

- r3-structure.md:172: "per `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §1 — scope doc landing via in-flight PR #2744" → "in-flight scope authority at PR #2744 §1"
- r3-program-plan.md:326: "WI-2 implementation: `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md`" → "WI-2 implementation: in-flight via PR #2744 (brief lands with the scope-doc)"

Both gates retain full substantive content; only the file-path crutches
are removed. When PR #2744 merges and the files exist on main, future
authors may re-add file refs cleanly — but the gate descriptions never
needed them as load-bearing authority.

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

* docs(r3): T-WAD ledger sync — EmissionTarget → WorkflowRuntime rename cascade (warm-wolf-698 PR #2749 commit 575eb7e; SELF_HOSTING.md:609 name collision)

Cascade sister-PR rename: PR #2744 branch carries the scope-doc + brief
renames in commit 70a49ac; this commit carries the ledger / structure
gate-ID renames.

warm-wolf-698 surfaced a DECISIVE name-collision finding at PR #2749:666
/ :672 (briansrls operator BLOCKING 2026-05-12T09:26:49Z): the canvas
EmissionTarget sum-type collides with the canonical Shape-A carrier
declared at `src/v3/SELF_HOSTING.md:609`:

  type EmissionTarget {
    language: LanguageSpec       // what's valid (required)
    rendering: RenderingSpec?    // how to format (optional)
  }

This is the SELF_HOSTING.md emitter-composition authority — INVARIANTS
P2 violation. warm-wolf-698 pushed rename to WorkflowRuntime in PR
#2749 commit 575eb7e (48 occurrences). All OTHER ratified elements
stand per feedback_pre_compaction_framings_self_supersede.

This commit cascades the rename through PR #2750 branch:

- docs/r3-program-plan.md §1.8 row #99:
  gate ID emission_target_open_enum_landed → workflow_runtime_open_enum_landed
  (also EmissionTarget references in row description)
- docs/r3-program-plan.md §1.8 row #100:
  EmissionTarget references in project_github_actions signature
- docs/r3-structure.md line 41 (T-WAD lane summary):
  EmissionTarget references + gate-ID rename in the multi-gate reference
- docs/r3-structure.md §Acceptance T-Workflow-As-Data bullets:
  gate-ID emission_target_open_enum_landed → workflow_runtime_open_enum_landed
  EmissionTarget references in `project_github_actions_landed` description
- docs/r3-structure.md §Lane structure T-WAD row:
  EmissionTarget references in scope expansion text

Variant names unchanged (YamlStatic / BinaryShim / PythonShim). Gate
descriptions retain full substantive content; only the type-name and
gate-ID identifiers are renamed.

Cascade trail across in-flight PRs:
- PR #2749 (warm-wolf-698): 575eb7e — substrate canvas rename
- PR #2751 (warm-wolf-698): expression-substrate canvas rename (in flight)
- PR #2744 (mine): 70a49ac — scope-doc + WI-1 + WI-2 brief rename
- PR #2750 (mine): THIS COMMIT — ledger + structure rename
- PR #2745 (cool-carp-720): surfaced; WI-2 implementation needs realign
- PR #2746 (MERGED): docs/design-ci-workflow-emitter-dispatch.md needs
  follow-on rename PR (post-cascade-clear)

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
…evation) (#2744)

* docs(scope): T-Workflow-As-Data FULL R3-close scope (operator elevation 2026-05-12)

Author PM scoping doc + 2 worker briefs for T-CI-Workflow-As-Data
elevation to FULL R3-close per operator directive 2026-05-12.

FULL scope vs existing T-WAD plan:
- ALL CI workflow authored as .dag (not just demo)
- Hand-authored .github/workflows/ci.yml DELETED (replaced by
  static-regen or thin shim invoking compiled binary)
- EmissionTarget toggle proven (YamlStatic + BinaryShim emitters
  emit from same ci.dag; operator-ratified toggle design)
- Affected-set integration via BinaryShim (Layer 2 path-regex
  bridge dissolved; consumes PR #2713 affected-set lens output)
- Cost dimension on test nodes (slow-test-exemptions.txt dissolved)

Proposed §1.8 gate additions (Director ratifies):
- workflow_emission_target_toggle_proven (NEW)
- ci_yml_dissolved (NEW)
- ci_uses_affected_set_selection (NEW)
- test_cost_dimension_landed (NEW)
- #56 expanded to ALL workflow (not just demo)

Slice expansion: existing Slices 1-3 + NEW Slices 4-8 (emitters,
Cost dim, affected-set integration, ci.yml deletion). Dependency
graph captured at §4; immediate parallel work at §6 (WI-1
emitter-dispatch canvas + WI-2 ci.dag scaffold).

Routes to: Director (zesty-bear-812) for FULL scope ratification;
Substrate Mgr (warm-wolf-698) absorbs Slices 4-5/8; Verification
Mgr (clever-tern-670) absorbs Slice 7 (affected-set integration);
Debt-Paydown Mgr (zesty-boar-261) absorbs Slice 6 sub-component
(slow-test-exemptions dissolution).

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

* docs(scope): T-WAD FULL R3 — Director ratification absorbed + codex BLOCKING #9970 fix

Two-fold update:

(1) Director ratification msg_5cbdad24 2026-05-12 absorbed:
- FULL R3-close scope RATIFIED (operator directive aligns with #846
  c#4412330468)
- Gate framing: GATE-ADDITIVE (NOT scope-expand #56); 4 NEW gates
  per §1 (workflow_emission_target_toggle_proven, ci_yml_dissolved,
  ci_uses_affected_set_selection, test_cost_dimension_landed)
- Owner-Mgr: LANE-ABSORB to Substrate Mgr (warm-wolf-698) with
  T-CI-WAD program-tag; no dedicated T-CI-WAD Mgr spawn
- Sequencing endorsed (T-LBP gate for Slice 2; Phase 3 Cluster M
  gate for Slice 6)
- §9 acceptance-aggregator pilot parked (Director-flagged; not
  blocking; surfaces at next Director cadence tick)

(2) codex BLOCKING #9970 fix — carrier hierarchy:

Earlier draft instructed worker to model CI as
`Workflow<Trigger, Steps, Resources>` generic + each ci.yml `job`
becoming a `Step` + `needs` as Step dependency edges. This
contradicts single authority at `dsl/extdeps/github/actions.dag`:

- `:21` `Workflow` is CONCRETE type (not generic); has fields
  `name` / `on: List<WorkflowTrigger>` / `jobs: List<Job>` / `env`
  / `permissions`
- `:24` Workflow contains `jobs: List<Job>` (NOT steps directly)
- `:110` `Job` is the per-ci.yml-job carrier
- `:114` Each Job contains `steps: List<Step>` (Step is per
  ci.yml-step, NOT per-job)
- `:115` `Job.needs: List<String>` — job-id references (NOT
  step-level dependency edges)

Corrected mapping: ci.yml `job:` → `Job` node; `needs:` → Job-level
job-id list; per-job `steps:` → `Job.steps: List<Step>`. Hierarchy
preserved (Workflow > Job > Step), not flattened.

Slice state corrections:
- Slice 1 substrate LANDED via PR #2160 + #2169 (NOT held as
  earlier draft stated); WorkflowSecret + CronSchedule available
- Slice 3 demo LANDED via PR #2371 (t_ci_workflow_as_data_demo.dag
  + integration tests)
- `dsl/gunbc/ci.dag` already exists (PR #2371); WI-2 work is to
  EXTEND this file to cover full ci.yml, not create from scratch
- Path correction: WI-2 output is `dsl/gunbc/ci.dag` (extend),
  not `dsl/extdeps/github/ci.dag` (incorrect new-file path)

EmissionTarget field placement made OPEN (3 evaluated options in
WI-1 canvas: Workflow / CIPipeline / wrapper); operator-ratified
shape is "modeled toggle field" — substance is that the choice
is modeled data, not where it lives.

Citation chain: feedback_audit_adjacent_authority_first +
feedback_carrier_name_vs_contract_audit — should have grepped
existing carriers before authoring brief framing. Lesson
re-validated at PR cycle (codex catch on first PR-review pass).

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

* docs(scope): fix Slice 1 cron carrier naming (CronExpression → CronSchedule)

cursor APPROVE_WITH_COMMENTS review #9960 caught factual-grounding
mismatch: §0 referenced Slice 1 as landing 'WorkflowSecret +
CronExpression' carriers, but §3 + actions.dag + landed substrate
at dsl/extdeps/cron_schedule_model.dag use 'CronSchedule'.

CronExpression was the Slice 1 worker brief naming
(docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md);
CronSchedule is the actual landed carrier name at HEAD via PR #2160
+ #2169 refinement. Doc updates §0 to use grounded name with
explicit 'superseded' note so workers don't chase the wrong type
label.

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

* docs(briefs+scope): T-WAD FULL R3 (c-refined) cascade — §1/§9 gate-set + WI-2 re-brief

§1 gate table revised to 7 rows (#56 demonstration + 6 NEW per Director msg_f9fd669e):
- ci_yml_deleted (state-check) — was ci_yml_dissolved
- emission_target_open_enum_landed (substrate-shape) — split from workflow_emission_target_toggle_proven
- project_github_actions_landed (substrate-shape) — NEW; (c-refined) projection function authority
- test_cost_dimension_landed (substrate-shape only) — split from sibling
- slow_test_exemptions_dissolved (state-check) — sibling split per kernel-modeling discipline
- ci_uses_affected_set_selection (state-check) — KEPT per Director clarification msg_f9fd669e

§9 aggregator pilot revised depends_on: #56 + 6 NEW (was #56 + 4 NEW); row SHAPE-STABLE post (c-refined) ratification.

WI-2 brief rewritten to (c-refined) substrate-implementation scope:
- New file dsl/gunbc/ci_emission.dag (NOT extension of actions.dag or ci.dag)
- EmissionTarget open enum + project_github_actions function declaration
- gunbc_ci_yml_workflow pinned-projection data binding
- NO modification to dsl/extdeps/github/actions.dag (INVARIANTS P1)
- CIWorkflowDag sourcing: Path (a) reuse CIPipeline preferred; Path (b) requires Mgr canvas

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

* docs(scope): fix ci_yml gate semantic — hand-authority dissolution, not file deletion

Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z at line 32:
"ci_yml_dissolved requires .github/workflows/ci.yml absent from the repo, which
contradicts the same PR's YamlStatic and thin-shim targets that still need a
generated GitHub Actions workflow file; P5 and Pure Bootstrap require deleting
hand-maintenance, not deleting the executable artifact."

Finding verified — the previous gate framing ("file absent") was structurally
inconsistent with the same scope's YamlStatic/BinaryShim/PythonShim emission
strategies, all of which require some .github/workflows/ci.yml artifact
(full-emit or thin-shim) for GH Actions trigger discovery.

Fixes:
- §1 gate `ci_yml_deleted` → `ci_yml_hand_authority_dissolved`; pass condition
  reframed: file is either (a) absent, (b) committed-emission-artifact with
  regression-guard, or (c) thin-shim entry-point; NEVER hand-edited
- §0 "Hand-authored ci.yml DELETED" → "Hand-authored ci.yml AUTHORITY DISSOLVED"
- §3 Slice 8 description updated: "ci.yml hand-authority dissolution" (NOT
  "ci.yml deletion") + 6 NEW gates (was 4 NEW; pre-(c-refined) cascade count)
- §5 timeline + §7 routing references updated to "hand-authority dissolution"
- §9 aggregator depends_on list updated with renamed gate
- §1 history note updated to document 4→6 NEW + briansrls BLOCKING fix chain

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

* docs(briefs): T-WAD WI-2 — propagate briansrls BLOCKING substrate-fidelity concerns to Slice 4-5 canvas

briansrls posted 4 BLOCKING inline reviews on PR #2744 (2026-05-12T06:58:55Z).
Finding #1 (ci_yml gate semantic) addressed in commit 19a1d8d.

Findings #2/#3/#4 target the OLD WI-2 brief content (compose-against-carriers
scope) which was rewritten to declaration-only scope in commit 03545da. They
do NOT apply to current brief acceptance gates, but the underlying
substrate-fidelity concerns propagate to Slice 4-5 per-arm projection body
work (warm-wolf-698 canvas). Carrying forward:

- Workflow.concurrency: Concurrency? — current ci.yml uses top-level concurrency
- PullRequestActivity arm coverage — current ci.yml uses ready_for_review
- Trigger fidelity — current ci.yml has push+PR only, NO schedule fabrication
- Step body + action input completeness — MUST not SHOULD/NICE-TO-HAVE for P1
  modeling faithfulness when YamlStatic emits ci.yml-equivalent

Also updated Sequencing language to reference renamed `ci_yml_hand_authority_dissolved`
gate (consistent with §1 fix in 19a1d8d).

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

* docs(briefs): T-WAD WI-2 — flip CIWorkflowDag sourcing to Path (b) per Substrate Mgr clarification

Per warm-wolf-698 msg_27d99080 (Substrate Mgr): Path (a) reusing CIPipeline is
INSUFFICIENT. CIPipeline { name, gates: List<CIGate> } is a FLAT gates list
without edge/dependency structure. project_github_actions consumes gate-DEPENDENCY
(which gates depend on which); flat List<CIGate> cannot serve as projection input.

Path (b) — CIWorkflowDag carrier from PR #2736 (neat-badger-30) — REQUIRED.
CIWorkflowDag { name, nodes: List<CIGateNode>, edges: List<CIGateEdge> } is the
load-bearing semantic carrier. Already canvas-tier ratified (PR #2749 §1 / §2.4 /
§7.4) AND Director-ratified (msg_4f7f536d). PR #2736 is MERGEABLE with all CI
checks SUCCESS as of 2026-05-12.

Brief updates:
- CIWorkflowDag dependency sequencing section flipped: Path (a) REJECTED (with
  reasoning), Path (b) REQUIRED with canvas + Director ratification citation
- DO/DONT section: Path (b) is now the DO; CIPipeline as input is now a DONT
- STOP-and-route language: CIWorkflowDag CARRIER CHOICE pre-ratified (no Mgr
  ratification needed for that dimension); PING covers shape (signature,
  derived-binding, module placement)
- Reference materials updated: cite PR #2749 §1/§2.4/§7.4 + PR #2736 + Director
  msg_4f7f536d; CIPipeline marked INSUFFICIENT
- Sequencing: depends on PR #2736 merge OR rebase on session/neat-badger-30
- COORDINATE list adds neat-badger-30 for input-carrier shape questions

cool-carp-720 should proceed Path (b) directly; no need to invoke
STOP-and-route-to-Mgr for the carrier choice itself.

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

* docs(briefs): T-WAD WI-2 — exhaustive carrier inventory per codex BLOCKING #2

Per codex BLOCKING scheduled review on cc82ec4 (2026-05-12 ~07:14Z): "carrier
audit checked the hierarchy fix but not every current ci.yml top-level and
event field against attachable carriers → add a key-by-key inventory and
STOP/reroute missing carriers before WI-2."

Replaced the 4-item informal concerns list with an exhaustive top-level
inventory + representative per-job + per-step inventory. Verified 2026-05-12
against .github/workflows/ci.yml HEAD + dsl/extdeps/github/actions.dag HEAD.

5 substantive carrier gaps identified (was 2):

1. Workflow.concurrency absence (only Job.concurrency exists)
2. PullRequestActivity.ReadyForReview arm absence
3. Push.paths required-but-omitted (needs Optional)
4. WorkflowPermissions.issues/.actions required-but-omitted (needs Optional
   or PermUnset arm)
5. RunnerSpec expression-syntax gap — runs-on: ${{ vars.X || 'fallback' }} not
   representable; substrate-shape question on expression-AST modeling

Plus 3 authoring concerns: trigger fidelity NO fabrication, step body MUST,
exhaustive per-job-per-step inventory at Slice 4 canvas authoring time.

The 5 carrier gaps need pre-Slice-4 substrate-prereq PRs (extdeps-fidelity
extensions; gap #5 is canvas-tier substrate-shape decision). Concerns 6/7/8
are Slice 4 brief acceptance discipline.

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

* docs(briefs): T-WAD WI-2 — fix canvas PR citation (PR #2746 vs PR #2749 author attribution)

PR #2746 (head session/still-heron-763) is the still-heron-763 WI-1 emitter-dispatch
canvas (docs/design-ci-workflow-emitter-dispatch.md).

PR #2749 (head session/warm-wolf-698-substrate-shape-canvas) is warm-wolf-698's
adjacent substrate-shape comparison canvas where (c-refined) self-correction at §7
lives.

Prior brief mis-attributed PR #2749 to still-heron-763. Both PRs are part of the
canvas-tier authority chain but distinct authors + distinct artifacts.

Updates:
- Reference materials: cite PR #2746 (still-heron-763 emitter-dispatch canvas)
  separately from PR #2749 (warm-wolf-698 substrate-shape comparison canvas)
- COORDINATE line: still-heron-763 sibling = PR #2746, NOT #2749

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

* docs(scope): cursor BLOCKING fix — scope doc / brief single-authority + §2 (c-refined) lock

Per cursor BLOCKING review on 19a1d8d (2026-05-12T07:16:48Z) — 3 findings:

Finding #1 (single-authority WI-2 description scope-vs-brief divergence):
ADDRESSED. Scope doc §0/§4/§6/§8 all said "extend dsl/gunbc/ci.dag" while
brief said "new file dsl/gunbc/ci_emission.dag" — two workers reading parent
vs brief would ship incompatible artifacts (INVARIANTS P2). Fixed:
- §0 framing #1: "extend ci.dag" → "new ci_emission.dag projection-substrate"
- §4 dependency graph: WI-2 ci.dag extend → WI-2 ci_emission.dag substrate + PR #2736 CIWorkflowDag dep
- §4 parallelizable: WI-2 description updated
- §6 WI-2: full rewrite to declaration-only substrate scaffold; DOES-NOT-EXTEND callouts
- §8 references: ci.dag stays untouched; ci_emission.dag is NEW; PR #2736 input source

Finding #2 (brief still says Slice 8 deletes):
CHECKED — grep finds no "deletes" references in current brief. Was real on
older commit; subsequent cascade fixes removed. No-op.

Finding #3 (§2/§3 stale (a)-shape language while §1 locks (c-refined)):
ADDRESSED. §2 fully rewritten:
- Title: "(c-refined) substrate-shape LOCKED 2026-05-12 per PR #2749 §7"
- New section: invocation-time parameter to projection function; NOT field on carrier
- (a) Field on Workflow: RETRACTED with citation (msg_b4151f45 + codex BLOCKING #9970)
- (b) Field on CIPipeline: SUPERSEDED with reasoning (flat without edge structure per warm-wolf-698 msg_27d99080)
- (c) Wrapper node: SUPERSEDED by (c-refined) projection function
- Emitter dispatch: now describes consuming pinned-projection invocation
- Open expression-substrate question DEFERRED to PR #2751 (warm-wolf-698 canvas)
- §3 Slice 4 description: NOT "EmissionTarget field landing" — explicit NOTE

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

* docs(briefs): codex BLOCKING fix — WI-1 brief stale (a)-shape framing removed

Per codex BLOCKING on PR #2744 (2026-05-12T07:49:06Z review #10005): WI-1 brief
still had OLD (a)-shape framing that conflicts with the ratified (c-refined)
substrate-shape and the sibling WI-2 brief's NEW-file scope.

Stale framings codex flagged:
- Line 16: "Where emission_target is carried — OPEN QUESTION" presenting
  Workflow / CIPipeline / wrapper as open options (RETRACTED per Director
  msg_b4151f45 + codex BLOCKING #9970)
- Line 23: "emit ci.yml from extended dsl/gunbc/ci.dag" — but WI-2 explicitly
  does NOT extend dsl/gunbc/ci.dag (per (c-refined) shape; NEW file
  dsl/gunbc/ci_emission.dag is the projection-function substrate)
- Line 47: "EmissionTarget placement explicitly evaluated" as acceptance gate
  (placement is LOCKED, not evaluated)
- Line 66: "WI-2 extending dsl/gunbc/ci.dag" — wrong; WI-2 is new file

Fix: full brief rewrite. New structure:
- Substrate-shape ratification anchor section: states (c-refined) LOCKED;
  documents (a)/(b)/(c) RETRACTED/SUPERSEDED with citations
- Scope section: per-target emission semantics (the actual canvas surface)
  with explicit "this brief does NOT reopen the placement question"
- Reference materials: PR #2749 + PR #2736 + PR #2751 (Expression substrate)
  as upstream ratification anchors
- Acceptance gates: "Substrate-shape placement is NOT re-evaluated"
  explicitly + InlineGunbc as DESIGN-ONLY future target per PR #2746 §5.4
- STOP / PING: re-evaluation of (c-refined) requires Director re-ratification
- COORDINATE list: WI-2 sibling brief + correctly framed as projection-substrate

Brief is now coherent with:
- §1 gates per scope doc (`emission_target_open_enum_landed`,
  `project_github_actions_landed`, etc.)
- §2 (c-refined) LOCKED architectural shape
- §6 WI-2 description (NEW file dsl/gunbc/ci_emission.dag)
- WI-2 brief NEW-file framing
- PR #2746 self-correction to (c-refined) shape
- PR #2749 §7 ratification anchor
- PR #2751 Expression substrate ratification

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

* docs(scope+briefs): openai-pro BLOCKING fix — InlineGunbc DESIGN-ONLY + scope-doc stale field language

Per openai-pro BLOCKING REQUEST_CHANGES on PR #2744 (2026-05-12T07:55:34Z, db103a5f) — 2 contradiction classes:

1. **LAYER MODEL + LOCKED DESIGN** finding: scope doc §0 line 4 (Authority) +
   line 18 (framing #3) still said "modeled toggle field" / "Placement of the
   field is an open canvas question" — CONTRADICTS the locked (c-refined)
   shape at §2.

   Fix:
   - Line 4: "modeled toggle field" → "modeled data (open enum, invocation-time
     projection parameter)"; cite PR #2749 §7 ratification; reference §2 for
     (a)/(b)/(c) RETRACTED/SUPERSEDED treatment
   - Line 18: "same ci.dag emits multiple target shapes; choice is a modeled
     field; Field placement OPEN" → "same CIWorkflowDag projects through
     project_github_actions(ci_workflow_dag, target); EmissionTarget is
     invocation-time projection parameter, NOT carrier-time field; Substrate-
     shape LOCKED per (c-refined)"

2. **INVARIANTS + TRACKED DEBT** finding: WI-2 brief lines 23 + 92 instruct
   the worker to land InlineGunbc as initial enum arm + acceptance gate, WHILE
   WI-1 brief explicitly says InlineGunbc is DESIGN-ONLY with "no enum variant
   or emitter arm lands until real runtime consumer exists." Two authoritative
   instructions for the same substrate enum.

   Fix in WI-2 brief:
   - §Output line 23: removed InlineGunbc from initial enum; updated to 3 arms
     (YamlStatic, BinaryShim, PythonShim) with explicit DESIGN-ONLY rationale +
     cross-reference to PR #2746 §5.4 + WI-1 brief
   - §DO/DON'T line 73: "4 named arms" → "3 named arms" + DO-NOT-add-InlineGunbc
   - §Acceptance gate 2 (line 91): "4 named arms" → "3 named arms" + explicit
     "NO InlineGunbc arm" + DESIGN-ONLY note

   Fix in scope doc:
   - §1 gate row `emission_target_open_enum_landed`: "(YamlStatic | BinaryShim
     | PythonShim | InlineGunbc | ...)" → "3 initial arms (...)" + InlineGunbc-
     is-DESIGN-ONLY clarification
   - §2 type sketch: removed InlineGunbc from initial declaration with NOT-IN-
     INITIAL-ENUM comment
   - §2 emitter dispatch: "future = PythonShim / InlineGunbc" → "future =
     PythonShim" (PythonShim is initial); InlineGunbc DESIGN-ONLY explicit

Substrate enum now coherent across:
- §0 framing #3 (3 arms; InlineGunbc DESIGN-ONLY)
- §1 gate row body (3 initial arms; InlineGunbc DESIGN-ONLY)
- §2 type sketch (3 arms; InlineGunbc not in initial enum)
- §2 emitter dispatch (per-arm body description)
- WI-1 brief (DESIGN-ONLY discipline)
- WI-2 brief Output / DO-DONT / Acceptance gates
- PR #2746 canvas §5.4 (canonical DESIGN-ONLY framing)

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

* docs(scope+briefs): cursor APPROVE_WITH_COMMENTS — reconcile PR #2751 ratification status + 4-vs-5 substrate-prereq framing

Per cursor APPROVE_WITH_COMMENTS on PR #2744 (2026-05-12T08:03:12Z, review #10018) — 2 internal-consistency findings:

Finding #1 (PR #2751 ratification status divergence): scope doc §2 line 102
said "Director ratification pending" while WI-1 brief said "Director-ratified
per msg_168005e1." Same PR cannot be both pending and ratified.

Fix: scope doc §2 line 102 updated to "Director-ratified at msg_168005e1
2026-05-12" — aligns with WI-1 brief authority chain. The ratification
happened during this cascade (relayed by Director msg_168005e1) AFTER initial
scope-doc authoring.

Finding #2 (4 vs 5 substrate-prereq framing): WI-1 said "4 small
substrate-prereq PRs already tracked" with STOP-if-more language; WI-2 listed
5 substantive carrier gaps including RunnerSpec/expression-syntax as 5th.
Workers following WI-1 could under-scope or hit STOP/false confidence
relative to WI-2 inventory.

Fix in WI-1 brief:
- §6 Carrier reuse audit: "4 small substrate-prereq PRs are tracked" → "5
  carrier gaps total: 4 small extdeps-fidelity substrate-prereq PRs PLUS 1
  substrate-shape canvas + Expression carrier" with explicit framing that
  the 5th gap is canvas-tier (PR #2751-handled), not Slice 4 extdeps-fidelity
- STOP criterion line 72: "beyond the 4 small substrate-prereq PRs" →
  "beyond the 5 already-tracked gaps (4 small substrate-prereq PRs + 1
  Expression carrier via PR #2751 canvas)"

Both briefs now coherent on the 5-gap inventory; clear distinction between
class (4 extdeps-fidelity, 1 substrate-shape canvas-tier). cursor's
P2/single-authority concern resolved.

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

* docs(briefs): WI-2 brief — close CIPipeline parallel-authority ambiguity at §3 line 45 (codex BLOCKING #10028 on PR #2744)

§3 pinned-binding source line said "CIPipeline value or CIWorkflowDag
carrier" — that "or" reintroduces the same parallel-authority shape the
brief's §CIWorkflowDag-dependency-sequencing immediately rejects (Path (a)
INSUFFICIENT per warm-wolf-698 msg_27d99080: flat gates list without
edge/dependency structure cannot serve as projection input).

Tighten to single authority: `CIWorkflowDag` carrier (PR #2736) is THE
projection input; `CIPipeline` is explicitly NOT a valid source.

INVARIANTS P2 (single-authority) + modeling-discipline Practice 5
satisfied — no parallel-source ambiguity remains in worker-facing text.

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

* docs(scope+briefs): T-WAD — reframe Slice 4 byte-equivalence claim (briansrls BLOCKING on PR #2744 2026-05-12T08:27:21Z)

§3 Slice 4 description + WI-1 brief §Scope.1 both said the projection
emits "Workflow value byte-equivalent to current .github/workflows/ci.yml
content". That framing conflicts with Workflow being a semantic platform
carrier — current ci.yml carries comments / blank-line whitespace / key
ordering quirks that aren't in the semantic model. Per P1/P2:
- silent loss: emission drops comments → emitted YAML ≠ current ci.yml
  (not byte-equivalent, falsifies the claim)
- second byte authority: parallel model captures formatting →
  P1 violation (CI-semantic fact lives outside the canonical carrier)

Reframe to two distinct correctness conditions:

1. External semantic-equivalence (one-time, migration-axis): emitted
   YAML is semantically equivalent to current ci.yml when consumed by
   GitHub Actions (same triggers, jobs, steps, runners, conditions,
   permissions, matrix structure). Non-semantic facts in pre-migration
   ci.yml are DISCARDED — they are not load-bearing CI logic.

2. Internal byte-identity (regression-axis): committed artifact is
   byte-identical to FRESH projection output (regression-guard gate
   already in §1 row ci_yml_hand_authority_dissolved option (b) —
   correctly framed there).

Discriminator restored: byte-identity is INTERNAL to the substrate
(projection-output ↔ committed-artifact), not EXTERNAL (substrate-output
↔ legacy hand-authored content).

Load-bearing comments in current ci.yml (workaround explanations,
dissolution-trigger pointers) must migrate into substrate as modeled
facts (structured Notes on the carrier OR inlined documentation in
dsl/gunbc/ci_emission.dag) — they MUST NOT become parallel byte-authority
alongside the semantic carrier.

Cascade per feedback_dissolution_authority_not_file_presence: same
conflation pattern appeared in BOTH the scope-doc §3 line 114 AND the
WI-1 brief §Scope.1 line 29; both reframed in lockstep.

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

* docs(briefs): WI-2 brief — defer pinned-binding to Slice 4 + add Practice 4 receipt gate (briansrls 2x BLOCKING on PR #2744)

Two BLOCKING inline reviews from briansrls at 2026-05-12T08:30:15Z on
current head dd29221:

c#3224878308 (line 30 anchor, §3 pinned-binding instructions):
> "The pinned-binding instructions still allow sourcing
>  ci_workflow_dag from CIPipeline, contradicting the Path (b)
>  CIWorkflowDag authority and reopening the P2 single-authority
>  boundary the brief later locks."

Even after the earlier b2bc281 fix locked CIPipeline OUT as a valid
source, the §3 instructions still required the worker to write the
gunbc_ci_yml_workflow binding — but there is no canonical CIWorkflowDag
instance in main yet (PR #2736 introduces the carrier type, not an
instance). The worker would have to either:
  (a) invent a placeholder CIWorkflowDag value inline in
      ci_emission.dag → parallel authority alongside the eventual
      Slice 4 canonical instance (P2 violation)
  (b) build CIWorkflowDag from CIPipeline via inline conversion →
      reopens Path (a) authority despite explicit rejection (P2)
  (c) leave the binding as a non-compiling forward-reference

Fix: defer the pinned-projection binding to Slice 4. Slice 4 authors
the canonical CIWorkflowDag instance AND the pinned-projection binding
together; WI-2 scope shrinks to (1) EmissionTarget enum + receipt and
(2) projection function signature. P2 single-authority restored
because the only instance authority is the canonical Slice 4 source.

c#3224878313 (line 64 anchor, Acceptance gates section):
> "The WI-2 acceptance gate for the new substrate EmissionTarget sum
>  type omits the required 🟢/🟡/🔴 coproduct-dissolution
>  classification, so a worker could satisfy the brief while landing
>  [a parallel-taxonomy enum]."

WI-1 brief (PR #2746 merged 08:29:09Z) carries Practice 4 receipt
discipline for EmissionTarget at lines 115-141; WI-2 brief inherited
the substrate-shape without inheriting the receipt requirement,
creating a discipline asymmetry. A worker satisfying WI-2 could land
EmissionTarget without the receipt, and the substrate would carry
the same coproduct-dissolution debt the WI-1 canvas explicitly closes.

Fix: add acceptance gate 3 requiring Practice 4 receipt (🟡 YELLOW
classification + named dissolution trigger + coordinate-dissolution
sketch) co-equal with the enum declaration itself. Receipt is part
of substrate authoring discipline per modeling-discipline.md
Practice 4 + feedback_coproduct_dissolution, not optional documentation.

Cascade changes:
- §3 reworked to defer binding (with full P2 rationale)
- Acceptance gates renumbered (4 → 11; new gate 3 = Practice 4 receipt,
  new gate 5 = no pinned-binding-in-WI-2)
- DO list: removed pinned-binding instruction; added receipt-authoring
  DO
- DON'T list: 3 new DON'Ts (no binding-in-WI-2; no placeholder
  CIWorkflowDag; no enum-without-receipt)

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

* docs(scope+briefs): T-WAD — EmissionTarget → WorkflowRuntime rename (name collision with SELF_HOSTING.md:609; warm-wolf-698 PR #2749 commit 575eb7e cascade)

warm-wolf-698 surfaced a DECISIVE name-collision finding at PR #2749:666
/ :672 (briansrls operator BLOCKING 2026-05-12T09:26:49Z): the canvas
EmissionTarget sum-type collides with the canonical Shape-A carrier
declared at `src/v3/SELF_HOSTING.md:609`:

  type EmissionTarget {
    language: LanguageSpec       // what's valid (required)
    rendering: RenderingSpec?    // how to format (optional)
  }

This is the SELF_HOSTING.md emitter-composition authority used across
the v3 emitter system (LanguageSpec + RenderingSpec? composition). The
PR #2749 canvas's sum-type EmissionTarget = YamlStatic | BinaryShim |
PythonShim was a literal name collision — INVARIANTS P2 violation.

warm-wolf-698 pushed rename commit 575eb7e to PR #2749:
EmissionTarget → WorkflowRuntime (48 occurrences). Per
feedback_pre_compaction_framings_self_supersede: Director ratification
msg_4f7f536d at sum-type-name level is superseded by post-ratification
name-collision discovery; all OTHER ratified elements stand (variant
names YamlStatic|BinaryShim|PythonShim, 22-site migration scope per
§5.5 expansion, 🟡 YELLOW Practice 4 receipt, projection function
signature shape, gunbc-namespace placement, dissolution trigger).

This commit cascades the rename through PR #2744 branch:

1. docs/r3-t-workflow-as-data-full-r3-close-scope.md (scope doc):
   - §0/§1 framing references (emission target / EmissionTarget)
   - §1 gate row `emission_target_open_enum_landed` →
     `workflow_runtime_open_enum_landed`
   - §1 row `project_github_actions_landed` description
   - §2 Architectural shape — all references
   - §2 added rename-rationale paragraph citing SELF_HOSTING.md:609
     authority + warm-wolf-698 PR #2749 commit + feedback memory
   - §3 Slice 4 description
   - §6 WI-1/WI-2 brief references

2. docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md
   (WI-1 brief — already referenced by PR #2746 merged canvas):
   - Practice 4 receipt + dissolution trigger
   - YamlStatic/BinaryShim/PythonShim arm descriptions
   - Acceptance gate references

3. docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md (WI-2 brief):
   - §1 enum declaration
   - §2 projection function signature
   - Acceptance gate 3 Practice 4 receipt
   - DO/DON'T list references

Sister PR cascade (separate commit on docs/r3-program-plan-t-wad-ledger-sync):
- r3-program-plan.md §1.8 row #99 gate-ID rename
- r3-structure.md §Acceptance T-WAD bullet gate-ID rename

Pending post-merge follow-on PR: docs/design-ci-workflow-emitter-dispatch.md
(already on main via merged PR #2746) needs same rename cascade — either
focused rename-only PR or Substrate Mgr lane absorption.

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

* docs(briefs): WI-2 brief — fix closure-predicate vs §3 inconsistency on pinned-projection binding (briansrls BLOCKING on PR #2744 2026-05-12T09:44:22Z)

briansrls inline BLOCKING at line 5 (closure predicate):

  "The closure predicate still requires WI-2 to land
   gunbc_ci_yml_workflow even though the same brief defers that
   binding to Slice 4 until the canonical CIWorkflowDag value exists,
   reopening the P2 single-authority failure the deferral is meant
   to prevent."

The earlier f830b98 fix correctly deferred the pinned-projection
binding to Slice 4 in §3 + acceptance gate 5 + DO/DON'T list — but
the closure-predicate framing at line 5 was not updated in lockstep
and still listed the binding as a WI-2 deliverable. Same P2
single-authority drift the §3 deferral was meant to prevent.

Fix: update the closure predicate to:
- Include WorkflowRuntime enum + Practice 4 receipt + projection
  function signature (the WI-2 actual deliverables per acceptance
  gates 2/3/4)
- Explicitly note the pinned-binding deferral with cross-ref to §3 +
  acceptance gate 5
- Cite the earlier briansrls BLOCKING c#3224878308 fix in commit
  f830b98 as the authority for the deferral

Closure predicate now reads consistent with the rest of the brief.
The DO/DON'T list (already updated in f830b98) reinforces:
"Do NOT land the gunbc_ci_yml_workflow pinned-projection data binding
in this PR — DEFERRED to Slice 4."

Per feedback_dissolution_authority_not_file_presence cascade
discipline: when changing the scope-of-deliverables semantic, grep
ALL load-bearing framing sites — closure predicate at the top of the
brief is just as load-bearing as the body sections.

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

* docs(scope): T-WAD — propagate pinned-binding deferral to scope-doc summaries + dependency graph (codex BLOCKING on PR #2744 commit f830b98)

codex BLOCKING review #10090 on commit f830b98 surfaced cascade gap:

  "Pinned-binding deferral was added to the detailed WI-2 scope but
   not propagated to the brief/scope-doc output summaries and
   dependency graph → update all WI-2 output/closure/cross-reference
   lines to say only WorkflowRuntime plus project_github_actions
   land in WI-2, with gunbc_ci_yml_workflow deferred to Slice 4."

The earlier commits f830b98 (WI-2 brief acceptance gate 5 deferral)
+ 011ddbc (WI-2 brief closure predicate) correctly deferred the
binding in the WI-2 BRIEF, but the SCOPE DOC carried multiple stale
claims that WI-2 lands the pinned binding. Same P2 single-authority
drift class.

Audit: grep -n "gunbc_ci_yml_workflow\|WI-2 lands\|WI-2 creates"
docs/r3-t-workflow-as-data-full-r3-close-scope.md surfaced 4 sites:

1. Line 60 (code block): "// In dsl/gunbc/ci_emission.dag (NEW file,
   WI-2 lands it):" with the gunbc_ci_yml_workflow binding inside the
   code block. Fix: split the code block into (a) "WI-2 lands the
   signature" + (b) "Invocation pin DEFERRED to Slice 4" with the
   binding shown as a comment-block forward-reference. Cite WI-2
   brief §3 + acceptance gate 5 as authority.

2. Line 149 (dependency graph parallelizable list): "WI-2 new file
   ... declares WorkflowRuntime open enum + project_github_actions
   function signature + gunbc_ci_yml_workflow pinned-projection".
   Fix: add Practice 4 receipt; mark gunbc_ci_yml_workflow as
   DEFERRED to Slice 4 with P2 rationale.

3. Line 173 (§6 WI-2 Output description): "Output: NEW file ...
   declaring WorkflowRuntime open enum + project_github_actions
   function signature + gunbc_ci_yml_workflow pinned-projection data
   binding". Fix: add Practice 4 receipt; mark binding as DEFERRED.

4. Line 206 (References list): "dsl/gunbc/ci_emission.dag — NEW
   file WI-2 creates (projection-function substrate; WorkflowRuntime
   enum + project_github_actions signature + pinned-projection
   binding)". Fix: add Practice 4 receipt; mark binding DEFERRED.

All 4 sites now consistent with WI-2 brief §3 + acceptance gate 5 +
DO/DON'T list + closure predicate (f830b98 + 011ddbc). Single
P2-clean authority surface for the WI-2 scope across both the brief
AND the scope doc.

Lesson cascaded into discipline: when changing scope-of-deliverables
semantic in ONE doc (the brief), grep ALL doc-of-record framing
sites (brief + scope-doc) for the same claim. Closure-predicate
fix in 011ddbc caught one cascade site; codex caught the
scope-doc-side cascade gap that PM missed. Future PM-side check:
after any §3 / acceptance-gate change in a worker brief, audit the
parent scope doc for matching cascade.

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

* docs(scope+briefs): T-WAD — demote PythonShim to DESIGN-ONLY (briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z)

Sibling WI-1 brief marked PythonShim "Future; sketch only" (no concrete Slice consumer) but WI-2 brief listed it in the initial 3-arm enum — INVARIANTS P5 violation (declared substrate without consumer-paired slice). Fix: defer PythonShim alongside InlineGunbc; initial enum becomes 2 arms (YamlStatic, BinaryShim).

Sites updated:
- WI-2 brief line 20-26 (enum block + initial-set claim), line 76 (DO list), line 97 (acceptance gate 2)
- WI-1 brief line 31 (PythonShim DESIGN-ONLY treatment), line 61-62 (acceptance gates 2+3)
- Scope doc line 18 (WorkflowRuntime toggle text), line 40 (workflow_runtime_open_enum_landed gate description), line 51-52 (code block + comments), line 104 (per-arm projection bodies)

Symmetric DESIGN-ONLY treatment with InlineGunbc per Pure Bootstrap discipline: both land via separate substrate-prereq PRs paired with their concrete runtime consumers.

* docs(briefs): WI-2 brief — fix Practice 4 dissolution sketch admits-impossible-states (briansrls BLOCKING on PR #2744 line 101 2026-05-12T10:46:59Z)

Acceptance gate 3 said "the eventual factoring is `EmissionArtifactShape × ShimRunnerKind`" — but the Cartesian product admits impossible states like `(StaticYaml, CompiledBinary)` (you can't have StaticYaml WITH a runner; Static has no runner). Per INVARIANTS P2 illegal-states-unrepresentable discipline.

WI-1 canvas §3 in main already uses the structurally correct factoring (sum-of-tagged-coordinates, not product):

```
type EmissionTarget = Static(EmissionArtifactShape) | Shim { runner: ShimRunnerKind }
```

Fix: update WI-2 brief acceptance gate 3 to cite the canvas factoring correctly. Receipt classification language also updated to note coordinates are NOT independent dimensions.

* docs(scope): T-WAD — remove "absent" pass option from ci_yml_hand_authority_dissolved gate (openai-pro REQUEST_CHANGES on PR #2744 2026-05-12T10:51:06Z)

Gate description at line 39 allowed "(a) absent (some workflow runtimes may not require a .github/workflows/ artifact)" but line 125 explicitly says "NOT file-deletion ... all require some .github/workflows/ci.yml artifact for GH Actions trigger discovery". Contradiction would let a worker satisfy the written gate by deleting the file while failing the corrected semantic intent.

Fix: remove "absent" option from gate (both line 17 §0 framing + line 39 gate description). Initial enum (YamlStatic, BinaryShim) both REQUIRE the artifact. The "absent" option is structurally impossible — only conceivable for future DESIGN-ONLY runtimes (e.g., InlineGunbc) that don't target GH Actions, which would extend the gate at land-time via substrate-prereq PR.

Also harmonized line 125 (Slice 8 note) to remove PythonShim mention (PythonShim demoted to DESIGN-ONLY in prior commit 338a83f).

* docs(scope): T-WAD — clarify rename-paragraph variant-names listing per PythonShim DESIGN-ONLY status (openai-pro APPROVE_WITH_COMMENTS on PR #2744 2026-05-12T10:58Z)

Line 34 (rename-context paragraph) listed "All OTHER ratified elements stand: variant names (YamlStatic | BinaryShim | PythonShim)" — but PythonShim is now DESIGN-ONLY per commit 338a83f (initial enum is 2 arms only). Even though the phrase is historical-context (rename-time ratified names), openai-pro flagged it as load-bearing enough to confuse downstream workers who scan the rename paragraph and might infer PythonShim is in the initial enum.

Fix: clarify "initial-enum variant names (YamlStatic | BinaryShim); PythonShim is a reserved DESIGN-ONLY future name not in initial enum per INVARIANTS P5 — see §1 gate workflow_runtime_open_enum_landed".

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
…or revised)

Director SUPERSEDED prior Q1=B disposition (msg_4b13e93f) with revised
Q1=A (msg_804cdc93, relayed PM msg_1e52a61b). Rationale: the 5 sibling
failures have their own §1.8 ledger homes:
- row #99 workflow_runtime_open_enum_landed (BinaryShim/PythonShim arms)
- row #100 project_github_actions_landed (CIWorkflowDag-unresolved +
  concurrency type mismatch + substrate-compiles failures)

Closing gate #63 via Candidate A does NOT hide substrate-debt because
rows #99/#100 carry that debt explicitly with their own DECLARED →
CONSUMER_LANDED arcs.

Worker brief rewritten as administrative closure:
- Phase A: remove #[ignore] at t_ci_workflow_as_data_demo_test.rs:581
- Phase B: audit doc mapping 5 sibling failures to rows #99/#100
- Phase C: §1.8 row #63 status flip DECLARED → CONSUMER_LANDED + PASSING

5 anti-patterns + NEW Director-ratified anti-pattern (scope-broadening to
absorb sibling-test debt with own ledger rows). 5 STOP conditions
including scope-creep guard.

Director's discipline lessons cited:
- feedback_canvas_recommendations_are_preliminary (Mgr)
- feedback_grep_substrate_before_naming_ratification (Director self-cite)

Cost-of-change: ~30 LOC across 1-3 files vs the 10-20-file B-shape rewrite.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
Operator BLOCKING worker.md:81: Phase C made §4.4 carrier-mapping + test
pass the full §1.8 closure receipt, but §1.4 / §4 require conjunctive
predicate — (a) representative gap-test pass AND (b) systematic Class 4
bridge inventory with count=0 (or explicit Director allocation per §7.2
STRUCTURAL exception). Sample-of-class is not closure-of-class.

Fix-forward: split Phase B into B.1 + B.2:
- §4.1 Phase B.1: systematic grep of src/v3/ for Class 4 bridge sites;
  classify each as pass-through / allocated-survivor / unallocated-
  survivor; STOP if any unallocated. Receipt asserts unallocated-count=0.
- §4.2 Phase B.2: 5 sibling failures from snappy-bear-502 enumerated as
  Director-allocated to rows #99/#100 (the STRUCTURAL exception
  mechanism per §7.2 — Director msg_804cdc93 IS the allocation citation,
  not Mgr self-classification).
- §4.3: STRUCTURAL exception clause cites §7.2 + §3.A of debt-sweep doc.

§6 STOP conditions extended with #6 (unallocated-survivor STOP).
§8 Verification splits predicate (a) and (b) receipts.
PR body cite list adds §1.4 conjunctive receipt assertion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
Codex REQUEST_CHANGES 10947 (worker:132): anti-pattern #4 phrased the
demo+test pass as if it satisfied the broader criterion text "CI workflow
modeled as .dag data executes through evaluator". A synthetic demo is
strictly broader than the criterion's CI-workflow authority — implicit
"demo IS production" claim was a semantic dilution.

Fix-forward: #4 now explicitly acknowledges the broader criterion AND
frames Q1=A as Director-ratified scope-narrowing (msg_804cdc93). The
demo is the Director-allocated receipt instrument for gate #63;
residual broader production-CI-workflow scope is Director-allocated to
rows #99 + #100 per Phase B.2 STRUCTURAL allocation doc + §7.2 /
debt-sweep §3.A. PR body MUST cite msg_804cdc93 as the explicit
narrowing-ratification anchor.

No implicit "demo IS production" claim — narrowing is an explicit
Director scope decision, not a Mgr semantic move.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
Cursor APPROVE_WITH_COMMENTS 11010 — 2 internal-consistency + 1 exploratory:

1. §3 L96 carrier count: "All 6" contradicted 7-row mapping table.
   Corrected to "All 7 mapping-table rows (6 §4.4 substrate carriers +
   CIWorkflowDag canonical composing carrier)".

2. §10 L211 phase label drift: "Worker brief Phase D" → "Worker brief
   Phase B.2" (matches worker §4.2 dispatchable location); cleaned up
   tense + cites Director msg_804cdc93 + rows #99/#100 explicitly.

3. Exploratory L78 alignment with worker §4.1: canvas Candidate A
   description said "grep src/v3/" while worker is two-pass YAML-
   structural. Updated to mirror worker §4.1 two-pass framing (Pass 1
   authority-surface enumeration + all-lines/YAML-structural + Pass 2
   keyword cross-check); worker §4.1 cited as authoritative.

INVARIANTS P2 single-authority bookkeeping aligned across canvas +
worker; dispatch ambiguity removed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
…sibling failure)

Openai-pro REQUEST_CHANGES 11242 (highest-weight reviewer) — substantive
P2/P5 finding: canvas §1 sibling-failure inventory lists
`ci_workflow_as_data_demo_pins_*` topology/command tests as a sibling
failure, but worker §2 ledger-mapping table only mapped 5 of the 6
items. A worker faithfully following the brief could omit the
pins/topology/command failures from the allocation receipt, leaving
known Class 4 bridge survivors unallocated and violating the predicate
(b) discipline.

Fix-forward:
- Worker §2 ledger-mapping table: NEW row for `ci_workflow_as_data_demo_pins_*`
  topology/command failures → #99 (workflow-runtime topology/command
  emission arms) + #100 (Actions-projection topology dispatch).
- "5 sibling failures" → "6 sibling failures" across canvas + worker
  (§0, §1, §2, §6 STOP #4, §7 #5, §8 verification, §13 cite, §14
  out-of-scope, §16 BuildBuddy reference).
- Worker §4 cost-of-change: prior "no existing-file edits beyond
  #[ignore]" framing missed the Phase C §1.8 ledger edit. Corrected
  to acknowledge ledger edit + #[ignore] removal + new audit-doc file
  as the three deliverables.

PM-intent narrowing ("demo receipt + explicit residual allocation")
restored to closure-receipt completeness.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
* docs(r3): gate #63 workflow_scheduling closure-scope canvas

snappy-bear-502 audit msg_140d9bc7 surfaced STOP condition: substrate
is modeled but not closed-loop. Integration evaluator receipt at
t_ci_workflow_as_data_demo_test.rs:582 exists but #[ignore] at :581
masks 5 failures (BuildBuddy invocation 2e1d435a-a6fe...) including
unresolved CIWorkflowDag types, opaque shim bodies, concurrency
field mismatch.

Three closure-scope candidates routed to Director:
- A: minimal demo repair (~3-5 files; smallest blast)
- B: full CIWorkflowDag/projection path execution (Mgr-rec with
  PythonShim carve-out)
- C: defer to T-Lens-Self-Application lane

Mgr-recommendation: Q1=B (production-grade per criterion text);
Q2=OR-semantics on lane coupling; Q3 defer to Director (#[ignore]
history); Q4 substrate-lane-owned with cross-Mgr informational.

4 Mgr-derived anti-patterns encoded (most load-bearing: closure
declared without #[ignore] removal = fail-closed-discipline).

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

* WIP: R3 Substrate Mgr — lane through R3 close

* docs(r3): gate #63 canvas — correct §2 + §3.A + §10 per snappy-bear-502 msg_cef1340b

Worker surfaced load-bearing correction before stand-down: the
specific gate-criterion test
ci_workflow_as_data_demo_timing_dimension_report_evaluates_via_evaluator
PASSES in isolation (BuildBuddy 9f22cbce-66ff-...). The 5 failures
from --include-ignored are sibling-test substrate-debt, NOT the
gate-criterion test itself.

Materially shifts:
- §2 state inventory: gate-criterion test is already passing; #[ignore]
  masks a passing receipt, not a failing one
- §3 Candidate A: scope shrinks to single #[ignore] removal + ledger;
  no substrate authoring needed
- §10 Mgr-rec: REVISED A (with sibling-debt receipt), not B —
  Candidate B would re-author already-working substrate which is
  feedback_no_short_term_solutions inverted

Sibling-debt note: 5 failures preserved as separately-scoped Mgr-tier
follow-on triage; not gate-63 closure-blockers.

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

* docs(r3): gate #63 workflow_scheduling worker brief (Q1=B ratified)

Director ratified Candidate B with PythonShim carve-out per PM msg_dbc2e5e0
relaying msg_4b13e93f. Director overruled revised Mgr-rec A — snappy-bear-502
isolation-pass finding is structurally insufficient; criterion requires
substrate-validity-of-CIWorkflowDag, not just one passing test.

Worker brief encodes ratified shape:
- Phase A: diagnose + fix 4-5 in-scope substrate-compile failures (distinguish
  YamlStatic/BinaryShim in-scope from PythonShim out-of-scope)
- Phase B: real (non-demo) CI workflow evaluator receipt → DimensionReport
- Phase C: #[ignore] removal at t_ci_workflow_as_data_demo_test.rs:581 (the
  closure receipt per Director-verified anchor commit 73969f4)
- Phase D: §1.8 row #63 ledger update with PythonShim carve-out documented
- Phase E: cross-Mgr informational notice to swift-deer-459 (Mgr-owned)

4 Director-ratified anti-patterns + 6 STOP conditions encoded.

Dispatch gates on PR #2831 (canvas) merge.

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

* docs(r3): gate #63 worker brief REWRITE — Q1=A administrative (Director revised)

Director SUPERSEDED prior Q1=B disposition (msg_4b13e93f) with revised
Q1=A (msg_804cdc93, relayed PM msg_1e52a61b). Rationale: the 5 sibling
failures have their own §1.8 ledger homes:
- row #99 workflow_runtime_open_enum_landed (BinaryShim/PythonShim arms)
- row #100 project_github_actions_landed (CIWorkflowDag-unresolved +
  concurrency type mismatch + substrate-compiles failures)

Closing gate #63 via Candidate A does NOT hide substrate-debt because
rows #99/#100 carry that debt explicitly with their own DECLARED →
CONSUMER_LANDED arcs.

Worker brief rewritten as administrative closure:
- Phase A: remove #[ignore] at t_ci_workflow_as_data_demo_test.rs:581
- Phase B: audit doc mapping 5 sibling failures to rows #99/#100
- Phase C: §1.8 row #63 status flip DECLARED → CONSUMER_LANDED + PASSING

5 anti-patterns + NEW Director-ratified anti-pattern (scope-broadening to
absorb sibling-test debt with own ledger rows). 5 STOP conditions
including scope-creep guard.

Director's discipline lessons cited:
- feedback_canvas_recommendations_are_preliminary (Mgr)
- feedback_grep_substrate_before_naming_ratification (Director self-cite)

Cost-of-change: ~30 LOC across 1-3 files vs the 10-20-file B-shape rewrite.

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

* docs(r3): gate #63 canvas — fix §7 Candidate A row to match revised scope

cursor APPROVE_WITH_COMMENTS (review 10733) caught real INVARIANTS P1
"documentation describes live state" issue: §7 row for Candidate A still
said "~3-5 (fix 5 specific failures + remove #[ignore])" from the initial
canvas framing, but §2/§3.A/§10 had been revised to administrative
un-ignore + sibling-debt-as-separately-scoped per snappy-bear-502
isolation-pass finding.

Row updated: "~1-3 (single #[ignore] removal + ledger row + sibling-debt
audit doc)". Now aligned with revised scope across all sections.

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

* docs(r3): gate #63 canvas — address cursor APPROVE exploratory observations

cursor review 10752 noted two non-blocking exploratory observations:
1. §9 read as "open questions" while §10 + worker brief reflect settled
   Director path — clarified §9 as RATIFIED audit-trail; lists Q1-Q4 final
   dispositions inline with Director msg_804cdc93 + 73969f4 anchor cites
2. §8 anti-pattern #2 "(§P5 atomic-migration violation)" phrasing didn't
   match anything literally named "atomic-migration" in INVARIANTS.md —
   clarified to "violates INVARIANTS.md P5 'Progress Is Dissolution / Pure
   Bootstrap'; atomic-migration discipline per feedback_load_bearing_
   ratchet_preservation"

No semantic changes; both are documentation polish.

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

* docs(r3): gate #63 worker brief — Phase C adds §4.4 substrate-prereq reconciliation per operator BLOCKING worker.md:62

Operator BLOCKING surfaced INVARIANTS P2/P5 dual-closure-authority concern:
worker brief flips row #63 to CONSUMER_LANDED + PASSING on un-ignore receipt
but §4.4 enumerates additional substrate-prereq carriers (WorkflowTrigger,
WorkflowStep, WorkflowMatrix, WorkflowSecret, RunnerResource, Workflow<...>)
required for Class 4 closure.

Verification at HEAD: all 6 §4.4 prereq carriers EXIST, but under different
paths/names than §4.4 originally sketched:
- Workflow → dsl/extdeps/github/actions.dag:29
- WorkflowTrigger → :51
- WorkflowStep → :222 (type Step)
- WorkflowMatrix → :300 (type MatrixStrategy)
- WorkflowSecret → :114
- RunnerResource → :205 (RunnerSpec) + :211 (RunnerLabel)
- CIWorkflowDag (canonical workflow-as-dag) → dsl/gunbc/ci.dag:120-125,191-200

Phase C extended: worker MUST update §4.4 carrier-enumeration with explicit
"substrate-prereqs satisfied at HEAD; landing paths differ from §4.4 sketch"
footnote + carrier-mapping table cite to this PR. This dissolves the
dual-closure-authority concern by making the §4.4 enumeration and the §1.8
row #63 closure receipt explicitly consistent.

Director-ratified Q1=A disposition preserved (closure shape unchanged);
operator concern addressed via explicit reconciliation in worker brief.

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

* docs(r3): gate #63 canvas — §4.4 substrate-prereq reconciliation in Candidate A per codex BLOCKING 67dfd2d

codex BLOCKING flagged that canvas treats representative gap-test text
as the full closure criterion without reconciling against §1.4/§4.4
substrate-prereq enumeration (INVARIANTS P2/P5 dual-closure-authority).
Same root concern as operator BLOCKING worker:62 (addressed in worker
brief commit 723a64b).

Canvas Candidate A section extended with the §4.4 carrier-mapping table:
- All 6 §4.4 prereq carriers EXIST under different paths/names at HEAD
  (dsl/extdeps/github/actions.dag for github-actions-specific carriers;
   dsl/gunbc/ci.dag for the canonical CIWorkflowDag)
- Worker brief Phase C performs the explicit reconciliation atomic with
  the §1.8 row #63 status flip — single closure authority, multi-receipt
  evidence

Director-ratified Q1=A disposition preserved.

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

* docs(r3): gate #63 canvas — cursor review precision fixes

- §10 Q3: replaced stale "defer to Director" with RESOLVED planned-deferral
  (matches §9 ratified state; eliminates P2 single-authority contradiction)
- §8 #4: corrected P3 → P2 (boundary/duplicate-fact; P3 is Fail-Closed)
- §8 #2: tightened P5 cite to "Progress Is Dissolution" (drop folded
  "Pure Bootstrap" — adjacent program goal, not the same invariant line)

Per cursor/composer-2 review on PR #2831 (review artifact 10790).

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

* chore: remove stray empty file accidentally committed

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

* docs(r3): gate #63 worker — add §1.4 (b) systematic bridge inventory

Operator BLOCKING worker.md:81: Phase C made §4.4 carrier-mapping + test
pass the full §1.8 closure receipt, but §1.4 / §4 require conjunctive
predicate — (a) representative gap-test pass AND (b) systematic Class 4
bridge inventory with count=0 (or explicit Director allocation per §7.2
STRUCTURAL exception). Sample-of-class is not closure-of-class.

Fix-forward: split Phase B into B.1 + B.2:
- §4.1 Phase B.1: systematic grep of src/v3/ for Class 4 bridge sites;
  classify each as pass-through / allocated-survivor / unallocated-
  survivor; STOP if any unallocated. Receipt asserts unallocated-count=0.
- §4.2 Phase B.2: 5 sibling failures from snappy-bear-502 enumerated as
  Director-allocated to rows #99/#100 (the STRUCTURAL exception
  mechanism per §7.2 — Director msg_804cdc93 IS the allocation citation,
  not Mgr self-classification).
- §4.3: STRUCTURAL exception clause cites §7.2 + §3.A of debt-sweep doc.

§6 STOP conditions extended with #6 (unallocated-survivor STOP).
§8 Verification splits predicate (a) and (b) receipts.
PR body cite list adds §1.4 conjunctive receipt assertion.

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

* docs(r3): gate #63 canvas — add §1.4 (b) receipt to Candidate A

Codex BLOCKING 36bb823: Canvas Candidate A reconciled §4.4 substrate
prereqs but didn't carry the §1.4 conjunctive bridge-enumeration
receipt before the row #63 status flip. Same root cause as the inline
BLOCKING at worker:81 already fixed in 4dfefc4; canvas guidance now
catches up.

Candidate A description reframed: receipt list now explicitly carries
(a) Phase A test-pass receipt + (b) Phase B.1 bridge-inventory
unallocated-count=0 receipt + Phase B.2 STRUCTURAL allocation doc per
Director msg_804cdc93 / §7.2. Sample-of-class disqualified.

Canvas + worker brief now jointly encode §1.4 conjunctive predicate.

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

* docs(r3): gate #63 worker — Phase B.1 grep across all Class 4 surfaces

Codex BLOCKING review 10885: Phase B.1 systematic Class 4 bridge
inventory grep was confined to src/v3/, which by construction cannot
see Class 4 authority surfaces under dsl/ (ci_emission.dag,
ci_github_actions_workflow.dag, extdeps/github/actions.dag) or
.github/workflows/ — the partial search would certify closure while
missing surviving bridge sites the brief itself cites at §5.

Fix-forward: expand grep scope to src/v3/ + dsl/ + .github/workflows/
and broaden regex to include CIWorkflowDag / WorkflowTrigger /
WorkflowStep / WorkflowMatrix / WorkflowSecret / RunnerResource (the
explicit §4.4 substrate-prereq carriers). Receipt now structurally
satisfies the §1.4 (b) "systematic enumeration" requirement.

INVARIANTS P2 + "Facts flow forward" discipline restored.

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

* docs(r3): gate #63 worker — broaden Phase B.1 regex (codex worker:59)

Codex BLOCKING inline at worker:59: Phase B.1 grep regex omitted actual
Class 4 authority names — would falsely assert unallocated-survivor
count=0 because the search couldn't see surviving bridge sites.

Missing terms: project_github_actions (row #100 identifier),
github_actions_workflow / ci_github_actions / ci_emission (file-name
stems), workflow_scheduling (gate #63 row identifier), MatrixStrategy /
RunnerSpec / RunnerLabel (HEAD-canonical types per §5 mapping table —
the prior regex used the §4.4-sketch names WorkflowMatrix /
RunnerResource which don't appear at HEAD), concurrency (GitHub Actions
scheduling primitive).

Fix-forward: broaden regex + add explanatory rationale block citing
each term family ((a) §4.4-sketch carriers, (b) HEAD-canonical types,
(c) §1.8 ledger-row identifiers, (d) file-name stems, (e) scheduling
primitives). YAML scoping (.github/workflows/*.yml) noted explicitly.

INVARIANTS P2 + "Facts flow forward" restored.

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

* docs(r3): gate #63 worker — anti-pattern #4 narrowing reconciliation

Codex REQUEST_CHANGES 10947 (worker:132): anti-pattern #4 phrased the
demo+test pass as if it satisfied the broader criterion text "CI workflow
modeled as .dag data executes through evaluator". A synthetic demo is
strictly broader than the criterion's CI-workflow authority — implicit
"demo IS production" claim was a semantic dilution.

Fix-forward: #4 now explicitly acknowledges the broader criterion AND
frames Q1=A as Director-ratified scope-narrowing (msg_804cdc93). The
demo is the Director-allocated receipt instrument for gate #63;
residual broader production-CI-workflow scope is Director-allocated to
rows #99 + #100 per Phase B.2 STRUCTURAL allocation doc + §7.2 /
debt-sweep §3.A. PR body MUST cite msg_804cdc93 as the explicit
narrowing-ratification anchor.

No implicit "demo IS production" claim — narrowing is an explicit
Director scope decision, not a Mgr semantic move.

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

* docs(r3): gate #63 worker — Phase B.1 two-pass YAML-structural audit (codex e9143f6)

Codex BLOCKING e9143f6: content-keyword grep alone is insufficient for
§1.4 (b) systematic enumeration — YAML workflow files contain
workflow/scheduling FACTS that may not contain any keyword token, so a
keyword-filtered receipt can falsely assert unallocated-count=0.

Fix-forward: Phase B.1 restructured as two-pass audit:

Pass 1 — authority-surface enumeration (closed file list) + all-lines /
YAML-structural classification. Every Class 4 file is enumerated as a
named surface; every YAML top-level + job-level key is a Class 4 fact
requiring classification. NOT keyword-filtered.

Pass 2 — content-keyword scan retained as cross-check only; keyword
hits OUTSIDE Pass-1 surfaces are themselves discoveries (potential
survivors missed at scoping time) and MUST be added to the surface
list and re-classified before the receipt closes.

Surface table enumerates 8 known Class 4 authority surfaces with their
audit mode (per-type classification for .dag, per-#[test] for Rust,
all-lines/YAML-structural for .yml/.yaml).

INVARIANTS P2 + "Facts flow forward" restored at the structural level,
not just the keyword-alternation level.

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

* docs(r3): gate #63 canvas — cursor 11010 consistency tweaks

Cursor APPROVE_WITH_COMMENTS 11010 — 2 internal-consistency + 1 exploratory:

1. §3 L96 carrier count: "All 6" contradicted 7-row mapping table.
   Corrected to "All 7 mapping-table rows (6 §4.4 substrate carriers +
   CIWorkflowDag canonical composing carrier)".

2. §10 L211 phase label drift: "Worker brief Phase D" → "Worker brief
   Phase B.2" (matches worker §4.2 dispatchable location); cleaned up
   tense + cites Director msg_804cdc93 + rows #99/#100 explicitly.

3. Exploratory L78 alignment with worker §4.1: canvas Candidate A
   description said "grep src/v3/" while worker is two-pass YAML-
   structural. Updated to mirror worker §4.1 two-pass framing (Pass 1
   authority-surface enumeration + all-lines/YAML-structural + Pass 2
   keyword cross-check); worker §4.1 cited as authoritative.

INVARIANTS P2 single-authority bookkeeping aligned across canvas +
worker; dispatch ambiguity removed.

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

* docs(r3): gate #63 — cursor 11019 cross-ref + anti-pattern alignment

Cursor APPROVE_WITH_COMMENTS 11019 — 3 small editorial fixes:

1. canvas L167 broken §3.A pointer: §3 has Candidate A/B/C subsections,
   no §3.A anchor. Reworded to "§2 + §3 (Candidate A) + §10".

2. canvas §8 anti-patterns 4-item list vs worker §7 5-item list:
   added Mgr anti-pattern #5 (scope-broadening absorbs sibling-debt
   with own ledger rows; Director-ratified per msg_804cdc93) +
   tightened #4 framing on demo-vs-production narrowing. Enforcement
   checklist now aligned.

3. worker L156 "bridge-inventory grep receipt" misframed: §4.1 stresses
   grep cannot be sole receipt. Reworded to "two-pass bridge-inventory
   receipt (Pass-1 authority-surface enumeration + all-lines / YAML-
   structural classification authoritative; Pass-2 keyword grep
   cross-check only — see §4.1)".

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

* docs(r3): gate #63 worker — add CI-referenced scripts surface (codex 05e37ce)

Codex BLOCKING 05e37ce: Pass-1 authority-surface enumeration was
path-whitelisted to src/v3/ + dsl/ + .github/workflows/ but missed
CI-referenced shell scripts under scripts/. A script invoked from a
workflow YAML `run:` block can encode workflow/scheduling logic
(e.g., timing dispatch, matrix expansion, concurrency control) that
falls outside the keyword regex AND outside the explicit YAML keys.

Fix-forward:
- Pass-1 surface table: NEW row for CI-referenced shell scripts —
  discovery procedure parses every workflow YAML's
  jobs.*.steps[*].run + jobs.*.steps[*].uses to derive the closed
  script-set, then per-script classification (pass-through /
  allocated-survivor / unallocated-survivor). Script-encoded Class 4
  facts must either be pass-through-clean or Director-allocated to a
  §1.8 row.
- Pass-2 grep scope: scripts/ added to path list as cross-check.

INVARIANTS P2 + "Facts flow forward" extended to script surface.

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

* docs(r3): gate #63 — close openai-pro REQUEST_CHANGES 11242 (missing sibling failure)

Openai-pro REQUEST_CHANGES 11242 (highest-weight reviewer) — substantive
P2/P5 finding: canvas §1 sibling-failure inventory lists
`ci_workflow_as_data_demo_pins_*` topology/command tests as a sibling
failure, but worker §2 ledger-mapping table only mapped 5 of the 6
items. A worker faithfully following the brief could omit the
pins/topology/command failures from the allocation receipt, leaving
known Class 4 bridge survivors unallocated and violating the predicate
(b) discipline.

Fix-forward:
- Worker §2 ledger-mapping table: NEW row for `ci_workflow_as_data_demo_pins_*`
  topology/command failures → #99 (workflow-runtime topology/command
  emission arms) + #100 (Actions-projection topology dispatch).
- "5 sibling failures" → "6 sibling failures" across canvas + worker
  (§0, §1, §2, §6 STOP #4, §7 #5, §8 verification, §13 cite, §14
  out-of-scope, §16 BuildBuddy reference).
- Worker §4 cost-of-change: prior "no existing-file edits beyond
  #[ignore]" framing missed the Phase C §1.8 ledger edit. Corrected
  to acknowledge ledger edit + #[ignore] removal + new audit-doc file
  as the three deliverables.

PM-intent narrowing ("demo receipt + explicit residual allocation")
restored to closure-receipt completeness.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
…s predicate-execution; fix #99/#100 consumer-test citations

(1) Audit doc: revert #99/#100/#101 rows to NOT_EXECUTED. The
`r3-close-predicate-execution-2026-05-13.md` table tracks close-ceremony
predicate execution sweep status, NOT §1.8 ledger status. Conflating the
two surfaces collapsed a deliberate distinction; ledger status now lives
solely in `docs/r3-program-plan.md` §1.8 (pointed at from the
"pending close-ceremony sweep" note in each row).

(2) §1.8 row #99: replace `gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output`
(:783, YAML→DAG byte-drift guard) with `gunbc_ci_emission_substrate_compiles`
(:818) as the substrate-compile consumer. The :783 test docstring
(`t_ci_workflow_as_data_demo_test.rs:781`) explicitly states it is NOT the
emit-back consumer of `project_github_actions`.

(3) §1.8 row #100: drop "byte-for-byte pins projection codomain" claim.
The :783 drift guard does not exercise the .dag-authoritative
projection surface. Replace with :818 `gunbc_ci_emission_substrate_compiles`
type-check of the projection signature; explicitly note the :783 guard
is YAML-authority ratchet, not projection emit-back. Per-arm body
completion remains follow-on under #98.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
…3023)

* docs(r3): Ratify §1.8 gates #99 #100 #101 — T-WAD Slice 8 substrate completion

Flip three T-WAD substrate-shape gates from DECLARED → CONSUMER_LANDED + PASSING
in `docs/r3-program-plan.md` §1.8, with merged-PR receipts and consumer-test
citations. Mirror the status in the predicate-execution audit doc and the
remaining-work dependency graph note (which previously carried stale
"CLOSED-ish" / "see audit caveat" prose).

Substrate landed at HEAD (verified via git grep + ls):

- #99 `workflow_runtime_open_enum_landed` — `WorkflowRuntime = YamlStatic |
  BinaryShim | PythonShim` at `dsl/gunbc/ci_emission.dag:27`; PR #2774
  (proud-dove-838, merged 2026-05-12T23:39:42Z). Consumer: drift-guard
  integration test `gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output`
  at `t_ci_workflow_as_data_demo_test.rs:783`.

- #100 `project_github_actions_landed` — `fn project_github_actions(dag:
  CIWorkflowDag, runtime: WorkflowRuntime) -> Workflow` at `ci_emission.dag:87`
  with pinned binding `gunbc_ci_yml_workflow` at :95; PR #2774.

- #101 `test_cost_dimension_landed` — `type TestNodeCostDimension` at
  `src/v3/std/verification.dag:578` and `dsl/std/verification.dag:75`; PR
  #2761 (eager-crane-176, merged 2026-05-12T18:07:31Z). P5 hand-Rust
  receipt `test_cost_dimension_landed_on_test_node` at
  `test_runner_test.rs:287`.

Scope (per `docs/r3-actual-close-plan.md:281` Gap 7 cascade item 5 + T-WAD
scope doc): Slice 8 substrate-completion ratifications ONLY. Sibling
gates #98 (`ci_yml_hand_authority_dissolved`) and #103
(`ci_uses_affected_set_selection`) remain DECLARED — separate slices.

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

* docs(r3): Address codex BLOCKING #1-3 on PR #3023 — separate ledger vs predicate-execution; fix #99/#100 consumer-test citations

(1) Audit doc: revert #99/#100/#101 rows to NOT_EXECUTED. The
`r3-close-predicate-execution-2026-05-13.md` table tracks close-ceremony
predicate execution sweep status, NOT §1.8 ledger status. Conflating the
two surfaces collapsed a deliberate distinction; ledger status now lives
solely in `docs/r3-program-plan.md` §1.8 (pointed at from the
"pending close-ceremony sweep" note in each row).

(2) §1.8 row #99: replace `gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output`
(:783, YAML→DAG byte-drift guard) with `gunbc_ci_emission_substrate_compiles`
(:818) as the substrate-compile consumer. The :783 test docstring
(`t_ci_workflow_as_data_demo_test.rs:781`) explicitly states it is NOT the
emit-back consumer of `project_github_actions`.

(3) §1.8 row #100: drop "byte-for-byte pins projection codomain" claim.
The :783 drift guard does not exercise the .dag-authoritative
projection surface. Replace with :818 `gunbc_ci_emission_substrate_compiles`
type-check of the projection signature; explicitly note the :783 guard
is YAML-authority ratchet, not projection emit-back. Per-arm body
completion remains follow-on under #98.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 13, 2026
…NG is HARNESS_NAMED, bare CONSUMER_LANDED is N/A (cursor APPROVE exploratory note PR #3024)

Aligns the prose with the table: §1.8 'CONSUMER_LANDED + PASSING' (e.g.
rows #1, #97, #99, #101) flows to HARNESS_NAMED via the 'contains PASSING'
clause; bare 'CONSUMER_LANDED' (e.g. rows #2, #3, #96) is N/A_NOT_PASSING.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 14, 2026
…3024)

* docs(r3): R3 close predicate-execution log — Phase 2 fill (45 EXECUTED / 61 N/A_NOT_PASSING)

Populates docs/audit/r3-close-predicate-execution-2026-05-13.md (skeleton merged
via PR #3019) per Gap 10 Phase 2 of docs/r3-actual-close-plan.md.

For every §1.8 row at HEAD a2a7a88:
- Status = PASSING / SATISFIED-BY-CONSTRUCTION (45 rows) → predicate execution
  status EXECUTED; close-time harness = workspace ratchet batch (cargo fmt /
  clippy --all-targets -D warnings / cargo test --workspace) with per-row ratchet
  cited under §1.8 row Notes; result pointer → §Workspace batch receipt.
- Status = CONSUMER_LANDED / DECLARED / R3-LOAD-BEARING (decl-stage) /
  INTEGRATION_RECEIPT / CANVAS_RATIFIED (61 rows) → predicate execution status
  N/A_NOT_PASSING; per r3-close-interrogation.md §8 the predicate-execution
  requirement attaches only to PASSING gates.

Adds row #106 show_correct_code_diagnostic_coverage (merged PR #3020 / Gap 9) so
table mirrors §1.8 ledger one-for-one at HEAD (parity grep `grep -cE '^\\| [0-9]+ \\| `'
yields 106 on both surfaces).

Workspace batch receipt records cargo fmt --all --check exit 0 and clippy
--all-targets -D warnings exit 0; cargo test --workspace --exclude
gunbc-dag-tests is initiated and the §10 close-ceremony audit doc records the
final 24h-of-close re-sweep with the merge-commit SHA.

Overall verdict remains PENDING (61 gates not at PASSING at HEAD; close ceremony
not opened).

Authority: merged PR gunbc/gunbc#3013 Gap 10 close criterion; PR #3019 skeleton;
PR #3020 row #106; docs/r3-close-interrogation.md §8;
docs/r3-actual-close-plan.md Gap 10.

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

* docs(r3): weaken predicate-execution-log claims — Phase 2 = harness-naming, not execution receipt

Addresses codex/codex-default REQUEST_CHANGES on PR #3024
(/api/reviews/11316/artifacts/stdout.log, 2026-05-13T20:35:21Z):

1. Per-row status `EXECUTED` (45 rows) → `HARNESS_NAMED`. The Phase 2 PR
   names the close-time harness per PASSING / SATISFIED-BY-CONSTRUCTION
   gate so the §10 close-ceremony 24h workspace re-sweep has a
   mechanical command to run; it does NOT assert an execution receipt.
   Execution receipts (PASS/FAIL per gate, log pointers, merge-commit
   SHA) are produced by the §10 close-ceremony artifact
   `docs/audit/r3-close-YYYY-MM-DD.md`, not by this Phase 2 PR.
   This eliminates the conflation between "harness identification" and
   "execution receipt" flagged at lines 26/174/180.

2. SHA anchor: explicit "Ledger-snapshot anchor" section clarifies that
   `a2a7a8825` is the §1.8 ledger snapshot at this PR's base commit
   (`git merge-base HEAD main`), and that this PR adds only the audit
   doc — it does not modify §1.8 or any authority surface. The
   derivation is valid for any HEAD that includes `a2a7a8825` with no
   subsequent §1.8 edits. Resolves the "HEAD a98cbc5 vs claimed
   a2a7a88" single-authority/live-state mismatch (INVARIANTS P1/P2).

3. Workspace batch receipt: only `cargo fmt --all --check` and
   `cargo clippy --all-targets -- -D warnings` are recorded as Phase 2
   partial receipts (both clean against base commit `a2a7a8825`).
   `cargo test` is explicitly marked NOT_EXECUTED_BY_THIS_PR and
   anchored to §10 close-ceremony per r3-close-interrogation.md §8 +
   INVARIANTS.md P3 fail-closed/live-state discipline.

Status-bucket distribution table and verdict text updated consistently.

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

* docs(r3): fix 61→58 verdict count drift — bucket table is authority (PR #3024 cursor APPROVE_WITH_COMMENTS)

Addresses cursor/composer-2 review at 2026-05-13T21:09Z: line 28 verdict said 'remaining 61 gates' but Status-bucket table (20+30+4+3+1=58) is the mechanical authority. 48+58=106. Aligns narrative with single-authority / live-state discipline (INVARIANTS P1/P2).

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

* docs(r3): fix INVARIANTS P1→P2 label drift per openai-pro APPROVE_WITH_COMMENTS

§Ledger-snapshot anchor heading and References list incorrectly labeled the
single-authority / no-parallel-authority rule as P1 (Modeling Faithfulness).
The correct invariant is P2 Boundary Discipline (INVARIANTS.md:144). P3
Fail-Closed reference is unchanged.

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

* docs(r3): rebalance §1.8 status buckets — row #11 R3-LOAD-BEARING→DECLARED, row #100 PASSING→DECLARED+TEXT-RATCHETED; re-anchor to main 4b491e4

Addresses codex non-blocking finding on PR #3024 (status-bucket hygiene):
- Row #11 `tc1_eta_equivalence_executable`: per §1.8 the cell starts with
  "**DECLARED through R3**" (canvas-deferred past R3 per Path-A); prior
  parser priority matched the in-cell phrase "R3-load-bearing per §1.5"
  before the leading "DECLARED" keyword. Row is now DECLARED.
- Row #100 `project_github_actions_landed`: amended on main to
  "**DECLARED + TEXT-RATCHETED**" (post-merge ledger evolution beyond
  prior CONSUMER_LANDED + PASSING shape). Row is now DECLARED.

Re-derivation against current main (`4b491e46f`):
- PASSING 45→44 (row #100 demoted)
- DECLARED 30→32 (rows #11 + #100 added)
- R3-LOAD-BEARING 4→3 (row #11 removed)
- Other buckets unchanged.
- Total 106 (parity preserved).
- HARNESS_NAMED 48→47; N/A_NOT_PASSING 58→59.

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

* docs(r3): tighten Purpose bullets — composite CONSUMER_LANDED + PASSING is HARNESS_NAMED, bare CONSUMER_LANDED is N/A (cursor APPROVE exploratory note PR #3024)

Aligns the prose with the table: §1.8 'CONSUMER_LANDED + PASSING' (e.g.
rows #1, #97, #99, #101) flows to HARNESS_NAMED via the 'contains PASSING'
clause; bare 'CONSUMER_LANDED' (e.g. rows #2, #3, #96) is N/A_NOT_PASSING.

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

* docs(r3): split harness override for gate #71 — strict receipt is #[ignore]'d

Addresses BLOCKING inline comment on PR #3024 at line 135 (2026-05-13T23:22Z):

Gate #71 v3_self_host_demonstration: the canonical strict receipt test
r3_v3_self_host_demonstration_suite_passes_through_runner is #[ignore]'d at
HEAD pending T-FixedPoint / Lane 3 promotion (per the test's own ignore-doc
+ docs/design-fixed-point-ratchet.md). Plain `cargo test --workspace` skips
it, so the prior harness column overstated coverage for this row.

Fix: row #71 now uses HARNESS_NAMED (split) and cites:
1. Non-ignored portion that DOES fire under the default workspace sweep:
   r3_v3_self_host_demonstration_dag_lowers_with_substituted_bin_path
   (r3_v3_self_host_demonstration_dag_test.rs:38) + SG-0 census presence
   ratchet (sg0_census_test.rs:667).
2. Ignored strict receipt requiring explicit invocation:
   `cargo test -p v3-compiler --release -- --ignored \
    r3_v3_self_host_demonstration_suite_passes_through_runner`.

Adds a general convention to the §1.8 table preamble: any gate whose
canonical receipt is #[ignore]'d at HEAD is flagged HARNESS_NAMED (split)
and must cite both the default-sweep portion and the --ignored override.
Auditors verify §8 coverage by grepping for `HARNESS_NAMED (split)` and
confirming the §10 sweep includes every cited --ignored override.

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

* docs(r3): defer to close-plan per-gap dispositions; remove generic R4-defer escape hatch (codex BLOCKING PR #3024 #2)

Addresses codex BLOCKING finding #2 (line 24): the prior phrase
"or is operator-accepted as R4-DEFERRED per §10" reintroduced a generic
R4-defer escape hatch the higher-authority close plan explicitly
forecloses for Gaps 1/2/3/9 per operator §4 IN-R3 ratification
2026-05-13 (docs/r3-actual-close-plan.md §11).

Replacement defers to docs/r3-actual-close-plan.md's per-gap
disposition: PROVEN-with-landed-PR-only for Gaps 1/2/3/9 (R4-defer +
THESIS-reframe paths STRUCTURALLY FORECLOSED), close-plan
disposition for other gaps. This audit doc inherits dispositions and
does not author a parallel deferral semantics.

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

* docs(r3): manager fix-forward — strip generic R4-DEFER, split-harness gate #92, ctrl-build pointer

Addresses PM/Director fix-forward guidance (msg_42c90bfb 2026-05-14):

1. Line 24 close criteria: removed the remaining "R4-DEFERRED-with-operator-acceptance" language that codex review 11524 flagged as a generic escape hatch. New wording states no generic deferral; gap-specific structural blockage routes through docs/r3-actual-close-plan.md §1 + explicit Director/operator ratification recorded against the close-plan, not this audit doc. Re-swept for R4-DEFER / R4 defer / R4-defer / R4_DEFER — zero remaining occurrences in this audit doc.

2. Gate #92 row: promoted to HARNESS_NAMED (split). Even though PR #2737 removed the #[ignore] that PR #2723 added (per ledger Notes), fail-closed posture (INVARIANTS P3) requires the close-time command to explicitly invoke the named receipt rather than depend on the ignore-bit remaining off. Row now cites both the default workspace sweep portion and an explicit `cargo test -p v3-compiler -- --include-ignored complexity_violation_compile_error_demonstrated` invocation that fires the receipt regardless of ignore-bit state at the close-ceremony commit.

3. Cursor non-blocking exploratory note: added a one-line pointer that `ctrl-build` is the internal session-runtime BuildBuddy wrapper per CLAUDE.md, and that the §10 close-ceremony auditor substitutes the canonical local equivalent.

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

* docs(r3): re-anchor §1.8 ledger snapshot to current merge-base c055495; row #63 DECLARED→CANVAS_RATIFIED (codex BLOCKING PR #3024 review 11585)

Addresses codex BLOCKING (review 11585): the prior anchor 4b491e4 was
stale relative to git merge-base HEAD origin/main (now c055495 after main
auto-merged in PRs #3025, #3035, #3037, #3038, #3040, #3046, #3049, #3050).
The audit doc's single-authority claim must hold against the actual
merge-base, not a frozen prior commit. Codex's row count of 100 at
4b491e4 is incorrect on this worktree (verified 106 at both 4b491e4 and
c055495), but the anchor-drift point is valid: per INVARIANTS P2 the
authoritative §1.8 snapshot must be reproducible from the current
merge-base.

Re-derivation at c055495 (verified mechanically): PASSING 44 +
SATISFIED-BY-CONSTRUCTION 3 + CONSUMER_LANDED 20 + DECLARED 31 +
R3-LOAD-BEARING 3 + INTEGRATION_RECEIPT 3 + CANVAS_RATIFIED 2 = 106.
Versus prior anchor: row #63 substrate_gap_workflow_scheduling_closed
moved DECLARED→CANVAS_RATIFIED (PR #2831 squash 89df284); buckets
adjust DECLARED 32→31, CANVAS_RATIFIED 1→2. HARNESS_NAMED 47 and
N/A_NOT_PASSING 59 totals are unchanged (the moved row stays N/A).

Row #63 audit-doc cell flipped to cite CANVAS_RATIFIED label.

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls
briansrls deleted the cursor/workflow-engine-structure-fbcf branch June 1, 2026 18:41
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.

2 participants