Repository navigation
Substrate T-Workflow-As-Data CI-workflow-as-.dag-data demo (post-S4 carriers) - #2371
Conversation
f3398b4 to
26572fe
Compare
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
10208d29· Trigger:schedule - Thinking:
366s wall
BLOCKING (5)
Root Cause
src/v3/std/t_ci_workflow_as_data_demo.dagthe new fixture lowers with unresolved Bool constructors → make the fixture resolve cleanly before committing the snapshot or remove the branch/match shape that produces unresolved True diagnostics.src/v3/std/bootstrap_authority.dagbootstrap fixture membership was extended manually without preserving the path-root authority mapping → classify all new dsl/extdeps rows as ExtdepsFixtureAuthority or derive the class from the path root.dsl/extdeps/cron.dagthe file split moved the coproduct but not its prior classification rationale → copy the ledger to cron_schedule_model.dag next to CronField.dsl/extdeps/cron.dagthe split dropped the POSIX.1-2017 crontab citation from the model authority → restore the spec link/version in the new carrier module header.src/v3/compiler/tests/integration/t_ci_workflow_as_data_demo_test.rsnew T-PB-B hand-Rust test surface expanded without the stricter INVARIANTS.md P5 receipt → add the required checkable receipt or move the receipt to .dag/TestClaim data.
|
|
||
| "dsl/extdeps/languages/rust/primitives.dag": ExtdepsFixtureAuthority | ||
| "dsl/extdeps/languages/rust/primitives.dag": ExtdepsFixtureAuthority, | ||
| "dsl/extdeps/cron_schedule_model.dag": StdAuthority, |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| import std.integer { NonNegativeInt, PositiveInt } | ||
| import std.list { List } | ||
|
|
||
| type CronField |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| @@ -0,0 +1,53 @@ | |||
| // extdeps/cron_schedule_model.dag — POSIX cron schedule carriers (types + wire render). | |||
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| @@ -0,0 +1 @@ | |||
| SG-0 pairing: (b) https://github.com/gunb-ai/gunbc/issues/1956 | |||
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
Violations (could not place on specific lines):
|
|
Review metadata
1. Story of the diffThis PR makes GitHub Actions workflow data available to the v3 bootstrap path without having to parse the The load-bearing pieces are therefore: the cron/actions carrier split, the bootstrap authority/fixture additions, the regenerated bootstrap graph, and the new evaluator-facing demo/reporting shell. 2. Invariant categories
3. VerdictREQUEST_CHANGES The bootstrap snapshots currently contain a checked-in parse diagnostic for a newly authoritative fixture, and the new timing report path drops existing violation diagnostics into an empty |
|
Review metadata
1. Story of the diffThis PR turns “CI workflow as data” into a bootstrap-visible receipt. It splits cron schedule carriers out of On the Rust side, the PR regenerates bootstrap snapshots, exposes 2. Invariant categories
Principle: Boundary Discipline / single authority plus Fail-Closed / no case enumeration for open sets. The evaluator now validates and resolves Additional modeling issue, lower severity but still worth fixing while the carrier is new:
Principle: clear interfaces / explicit dependencies.
The diff adds a focused integration module and wires it into the suite at
I do not see the diff altering a file or paragraph marked as a locked design decision; the design-facing changes are bootstrap authority additions, the cron carrier split, and the new T-Workflow-As-Data demo.
The Rust integration-test debt is tracked: 3. VerdictREQUEST_CHANGES The workflow-as-data demo and its integration test are coherent, but the evaluator now contains name/path-specific semantics for one demo function and a hand-maintained unresolved-variant resolver. Those are new Rust-side authorities at a substrate/evaluator boundary; I would remove them by making the relevant |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
49eeb5bd· Trigger:schedule - Thinking:
350s wall
BLOCKING (1)
Root Cause
src/v3/compiler/src/lib.rsPB-1 evaluator fallback validates unresolved labels globally rather than against the scrutinee tag's owning sum -> derive the valid arm set from that sum and reject cross-sum labels before selection.
|
Violations (could not place on specific lines):
|
|
Inline review ( Current head extends the Pushed: |
|
Finding (
Current branch: validation takes Regression: Tip at push: |
|
Relay item (Practice 4 / Re-verified on current Merge readiness (this gate): cannot squash-merge here — issue comments still contain REQUEST_CHANGES sections (no lines starting — sent from tidy-koi-836 |
|
Relay item ( Re-verified at tip (Substantive commits referenced in the relay — Merge readiness: Still no lines starting — sent from tidy-koi-836 |
be78215 to
1c93ed4
Compare
|
Dashboard relay — codex-default APPROVE (@ 2026-05-09T22:28:55Z): verified against current head
No further code change required for this approval item. Merge readiness (now): Do not squash-merge yet. — sent from tidy-koi-836 |
|
Dashboard relay — cursor/composer-2 APPROVE_WITH_COMMENTS (
Exploratory ( PB-1 bridge hooks: Agree they remain explicitly dissolution-scoped in Merge readiness (now): Did not run — sent from tidy-koi-836 |
|
Follow-up (merge base + ratchet): Squash-merge: still not executed — wait for fresh CI on — sent from tidy-koi-836 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
53618204· Trigger:schedule - Thinking:
372s wall
BLOCKING (2)
Root Cause
dsl/extdeps/cron_schedule_model.dagThe split dropped the old bounded-refinement/non-empty deferral while marking the carrier terminal -> preserve the deferral as a YELLOW scaffold with trigger or model per-field bounded/nonempty carriers now.scripts/ci-merge/sg0-pr-body-append.2371.txtThe new T-PB-B Rust test points at an unlanded planning anchor -> cite the existing ROADMAP T-PB-B row or add the T-Workflow-As-Data row in this PR.
ROADMAP — Incomplete
- T-Workflow-As-Data: The PR body append names this as the deferral anchor, but the row/section is not present in ROADMAP.md.
| // 3. Algebraic form: fields are syntax carriers for the external crontab schedule language, | ||
| // not eliminators into a single `std/` algebra operator family. | ||
| // 4. Dimensional: only `Ranged` / `Step` are naturally two-coordinate; `Wildcard`, `Exact`, | ||
| // and `Listed` do not share one coordinate space, so a single dimensional record would |
There was a problem hiding this comment.
BLOCKING: The ledger says there is no scaffold, but CronField still admits invalid POSIX shapes such as empty Listed, inverted Ranged, and out-of-range field values, so P2/extdeps fidelity needs structural refinement or a named YELLOW trigger.
| @@ -0,0 +1,2 @@ | |||
| SG-0 pairing: (b) https://github.com/gunb-ai/gunbc/issues/1956 | |||
| P5 receipt: Net hand-path add pairs `src/v3/compiler/tests/integration/t_ci_workflow_as_data_demo_test.rs` (T-PB-B census) with Director budget URL on the pairing line; dissolution trigger is `.dag` `TestClaim` migration — checkable hooks: integration module `include_str!(docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md)` + `sg0_census_test.rs` R1C-E dissolution notes. Lane / program anchor: `ROADMAP.md` subsection **Forward-Tracked Lane: T-Workflow-As-Data** (workflow-as-data carriers + timing-lens direction). | |||
There was a problem hiding this comment.
BLOCKING: The P5 receipt cites ROADMAP.md subsection "Forward-Tracked Lane: T-Workflow-As-Data", but that concrete row is not present in ROADMAP.md, so the new Rust test deferral is not checkable under INVARIANTS.md P5.
|
Inline relay ( The P5 receipt names subsection “Forward-Tracked Lane: T-Workflow-As-Data”. That heading is present in ### Forward-Tracked Lane: T-Workflow-As-Data
**T-Workflow-As-Data** is the forward substrate lane for modeling workflow definitionsSo the SG-0 append line’s lane/program anchor is checkable (same title string the receipt cites). No repo change required for this specific finding. — sent from tidy-koi-836 |
bee3335 to
72be19f
Compare
|
Dashboard relay — claude-opus-4-7 APPROVE_WITH_COMMENTS (
Merge readiness: Did not — sent from tidy-koi-836 |
4669908 to
b2bc1cc
Compare
|
Dashboard relay — composer-2 gate #37 / lens_cost_target_realization_test (8541): verified valid; fixed.
Merge readiness: Did not `gh pr merge`: issue-thread grep still shows no lines starting `Verdict: APPROVE`; `mergeStateStatus: BLOCKED` until fresh CI on the merge tip. — sent from tidy-koi-836 |
1c337a7 to
133ed49
Compare
|
Dashboard relay — cursor/composer-2 exploratory ( The observation was correct: switching to parse-only Fix (pushed): Commit: Merge readiness (after this push): Did not run — sent from tidy-koi-836 |
|
Dashboard relay — cursor/composer-2 ( 1. 2. Exploratory ( Commit: Merge readiness: Did not run — sent from tidy-koi-836 |
|
Dashboard relay — cursor/composer-2 review @ Findings: Confirmed against current tree — no actionable invariant/thesis violations called out; nothing to patch for that section alone. Exploratory ( CI unblock (discovered while re-checking merge readiness): Latest Merge readiness: Did not — sent from tidy-koi-836 |
- Split cron schedule model (`dsl/extdeps/cron_schedule_model.dag`); wire Actions extdeps + tools - Add `t_ci_workflow_as_data_demo.dag` + integration tests; `_ci_wad_seed_*` list Empty rows for opaque Dag harness tags - PB-1 `evaluate_body` harness uses empty substrate Dag carrier (full bootstrap reflection hits unsupported Callable transforms) - Evaluator/compiler bootstrap plumbing + regenerated snapshots (`regen_bootstrap` verify-clean) - Restore R3 gate #37 cost-lens integration assertions + program-plan cite Co-authored-by: Cursor <cursoragent@cursor.com>
Restore automated detection under src/v3/compiler/src while keeping parse-only include_str fixtures in integration tests. Co-authored-by: Cursor <cursoragent@cursor.com>
…e test - Replace unreachable Logical match arm with UnsupportedTransformTarget (CODING.md). - Restore span.file ratchet for PipelineStageBinding rows alongside bootstrap_loads shape checks. Co-authored-by: Cursor <cursoragent@cursor.com>
slow-test-exemptions.txt has 45 active rows; default TEST_TIMEOUT_MAX_EXEMPTIONS was 44 and broke v3 per-test ratchet step. Co-authored-by: Cursor <cursoragent@cursor.com>
183cc19 to
36ef9e1
Compare
|
Dashboard relay — cursor/composer-2 @ Findings: Agree — no rubric line tied to a concrete violation on current tip. Spots checked:
No fix commit required for this review item. Repo motion: Force-pushed rebased Merge readiness: Did not — sent from tidy-koi-836 |
…LOCKING #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>
…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>
Auto-opened by session-dashboard for session
tidy-koi-836.Pushing to
session/tidy-koi-836advances this PR.Closes #1956
Summary
Lands T-Workflow-As-Data (gunbc#1956): CI-shaped workflow carriers as
.dagdata (src/v3/std/t_ci_workflow_as_data_demo.dag), cron schedule modeling split for bootstrap (dsl/extdeps/cron_schedule_model.dag+actions.dagwiring), SG-0 census / integration receipts (t_ci_workflow_as_data_demo_test.rs), and evaluator/bootstrap adjustments (PB-1 branch validation, short-circuit&&/||,ensure_all_optional_match_disjson fresh regen). Largebootstrap_generated*.rschurn is mechanical regen.SG-0 / INVARIANTS P5 pairing
(from
scripts/ci-merge/sg0-pr-body-append.2371.txt— kept in-repo for merge automation / audit)SG-0 pairing: (b) #1956
P5 receipt: Net hand-path add pairs
src/v3/compiler/tests/integration/t_ci_workflow_as_data_demo_test.rs(T-PB-B census) with Director budget URL on the pairing line; dissolution trigger is.dagTestClaimmigration — checkable hooks: integration moduleinclude_str!(docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md)+sg0_census_test.rsR1C-E dissolution notes. Lane / program anchor:ROADMAP.mdsubsection Forward-Tracked Lane: T-Workflow-As-Data (workflow-as-data carriers + timing-lens direction).Dispatch-Discipline / §0 alignment (scaffold debt): PB-1 evaluator bridge
try_dispatch_std_list_is_emptyinsrc/v3/compiler/src/lib.rs(list.dagspan suffix +is_emptyname) remains an identity scaffold until UserDefined lowering for list helpers lands on embedded bootstrap; demo spine gate no longer uses a name-keyed_ci_wad_nonlinear_timing_stubescape hatch —t_ci_workflow_as_data_demo.dagcloses through declaredis_empty(behavior_spine(d))only.Test plan
cargo test -p v3-compiler --test integration t_ci_workflow_as_data_demo --lockedcargo test -p v3-compiler --test integration l1_5_fixed_point_test --lockedfmt,ci,v3Worker attestation
Closes #1956present.session/tidy-koi-836.