From 0fcf7678a452df025d2d73d55d6ce9f1c78117d1 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 06:28:23 +0000 Subject: [PATCH 01/23] docs(scope): T-Workflow-As-Data FULL R3-close scope (operator elevation 2026-05-12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 75 +++++++++ ...-full-r3-emitter-dispatch-canvas-worker.md | 62 ++++++++ ...-t-workflow-as-data-full-r3-close-scope.md | 143 ++++++++++++++++++ 3 files changed, 280 insertions(+) create mode 100644 docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md create mode 100644 docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md create mode 100644 docs/r3-t-workflow-as-data-full-r3-close-scope.md diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md new file mode 100644 index 00000000000..2b9f29e3449 --- /dev/null +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -0,0 +1,75 @@ +# Worker brief — T-WAD FULL R3 ci.dag scaffold first-draft + +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12. +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698) — this is forward-looking scaffold; final ratification + emitter integration in Slice 4-5. +**Closure predicate**: scaffold authored at `dsl/extdeps/github/ci.dag` + Mgr-ratified shape; downstream Slice 4 YamlStatic emitter consumes; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. + +## Output + +`dsl/extdeps/github/ci.dag` — new file, captures current `.github/workflows/ci.yml` content as `Workflow` `.dag` data. + +## Scope + +Translate current `.github/workflows/ci.yml` into a `.dag` data instance using existing carriers at `dsl/extdeps/github/actions.dag`: + +1. **Trigger**: capture `on:` shape (push / PR / schedule) as `WorkflowTrigger` instance (per `dsl/extdeps/github/actions.dag:40`) +2. **Jobs**: each `job` in ci.yml becomes a `Step` (or composition of `Step`s) per `dsl/extdeps/github/actions.dag:103+` +3. **Dependencies**: `needs:` graph captured as Step dependency edges +4. **Matrix**: any `strategy.matrix:` captured as `MatrixStrategy` instance per `dsl/extdeps/github/actions.dag:66+` +5. **Runner selection**: `runs-on:` captured as `RunnerSpec` + `RunnerLabel` per `:88+` (use `gunbc-quick` / `gunbc-v3` / generic pools as appropriate) +6. **Layer 1 skip** (changes job): capture as `Step` with conditional output binding +7. **Layer 2 cluster skip** (Director template per PR #2721 — NOT YET WIRED): SKIP — capture as `[TODO]` marker; this is what Slice 7 affected-set integration will replace +8. **Slow-test ratchet**: SKIP `scripts/slow-test-exemptions.txt` reference for now (Slice 6 will replace with Cost dimension on test nodes) +9. **emission_target placeholder**: include comment-marker `// emission_target: YamlStatic` placeholder field (final shape ratified by emitter-dispatch canvas in WI-1; this scaffold can be revised when canvas ratifies) + +## Coverage scope + +This is a FIRST DRAFT — does NOT need to cover 100% of ci.yml. Coverage acceptance: + +- **MUST**: all `jobs:` represented as Step nodes +- **MUST**: `needs:` graph faithful +- **MUST**: trigger conditions captured (push/PR/schedule trio) +- **MUST**: runner pool selection per job correct +- **SHOULD**: matrix strategies for jobs that use them +- **SHOULD**: env / secrets references (Slice 1 substrate `WorkflowSecret` is HELD; use placeholder comment-markers for now) +- **NICE-TO-HAVE**: complete `with:` / `uses:` action references for each Step +- **DEFERRED**: Layer 2 cluster `if:` regex (TODO marker); slow-test-exemptions (TODO marker); affected-set wiring (TODO marker, Slice 7) + +## Reference materials + +- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope +- `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling brief; WI-1 emitter-dispatch canvas (this scaffold's emitter consumer) +- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate (`WorkflowSecret` not yet landed — placeholder) +- `dsl/extdeps/github/actions.dag` — existing carriers (read this first; reuse, don't duplicate) +- `.github/workflows/ci.yml` — source content to translate +- `docs/design-emission-model.md` — emission architecture + +## Acceptance gates + +1. `dsl/extdeps/github/ci.dag` exists; valid `.dag` syntax per existing v3 parser +2. All ci.yml `jobs:` represented as Step nodes (count matches) +3. `needs:` graph faithfully captured +4. Trigger conditions captured (push / PR / schedule trio) +5. Runner pool selection per job correct (`gunbc-quick` for fast jobs, `gunbc-v3` for v3 work, generic otherwise) +6. TODO markers explicit for: Layer 2 cluster `if:` regex; slow-test-exemptions reference; affected-set wiring; `WorkflowSecret` references (Slice 1 HELD) +7. `cargo test --workspace` green (no breakage of existing tests) +8. `cargo clippy --all-targets -- -D warnings` clean +9. `cargo fmt --all --check` clean + +## STOP / PING criteria + +- **STOP** if existing carriers at `dsl/extdeps/github/actions.dag` are insufficient (e.g., need new step-shape, new trigger-shape) — surface to Mgr; substrate-shape additions belong to Substrate Mgr canvas (per `feedback_substrate_shape_belongs_in_mgr_canvas`) +- **STOP** if Slice 1 substrate (`WorkflowSecret`) is genuinely required for scaffold coverage (e.g., secrets used in critical jobs that can't be TODO-markered) — surface; may need to wait on Slice 1 dispatch +- **STOP** if `ci.dag` requires `emission_target` field on existing `Workflow<>` carrier and that field isn't yet declared — surface; either add as placeholder comment OR wait for WI-1 canvas ratification +- **PING** PM (deep-wolf-155) on PR-open for review-routing +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 emitter-implementation dispatch routing + +## Sequencing + +- Dispatch-ready NOW (independent of Slice 1 substrate HOLD — uses existing carriers; TODOs marked for held substrate) +- Output is a scaffold/placeholder; final shape ratified during Slice 4 YamlStatic emitter implementation +- Slice 4 YamlStatic emitter consumes this `ci.dag` and emits `.github/workflows/ci.yml`-equivalent; equivalence is the Slice 4 acceptance gate + +--- + +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive. diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md new file mode 100644 index 00000000000..b83e5f67161 --- /dev/null +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -0,0 +1,62 @@ +# Worker brief — T-WAD FULL R3 emitter-dispatch architecture canvas + +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-1; operator FULL elevation 2026-05-12 (toggle design ratification). +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698) — this is forward-looking canvas; final ratification by Mgr + Director. +**Closure predicate**: design canvas authored + Director-ratified shape; downstream Slice 4-5 emitter implementation work consumes this canvas. + +## Output + +`docs/design-ci-workflow-emitter-dispatch.md` — new design canvas, ~400-800 lines target, matching the shape of `docs/design-affected-set-lens.md` (single-authority, locked-design). + +## Scope + +Design the emitter-dispatch architecture for `T-Workflow-As-Data` FULL R3-close: + +1. **`EmissionTarget` modeled field shape** — open enum `EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ...`; where it lives in the carrier hierarchy (on `Workflow<>` carrier? sibling node?); default value if absent (`YamlStatic` recommended) +2. **Emitter dispatch semantics** — single emitter reads `emission_target` from `ci.dag`, dispatches to per-target emitter module; how this composes with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`) +3. **Per-target semantics**: + - **YamlStatic**: emit `.github/workflows/ci.yml` from `ci.dag`; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly + - **BinaryShim**: emit compiled binary (Rust target) + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically + - **PythonShim**: same shim model, Python runtime substrate (Python target emit pattern reused) + - **InlineGunbc**: gunbc-as-runtime-orchestrator (longer-term option; sketch only) +4. **Affected-set integration shape** — how `BinaryShim` emitter consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.) +5. **Equivalence claim** — what does "same `ci.dag` emits semantically equivalent output across targets" mean precisely; what's the test claim +6. **Carrier dependencies** — what existing carriers at `dsl/extdeps/github/actions.dag` are reused vs new substrate needed (likely just `EmissionTarget` field addition + possibly `MatrixSpec` for dynamic dispatch) + +## Reference materials + +- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent) +- `docs/design-affected-set-lens.md` — affected-set lens substrate (Slice 7 consumer) +- `docs/design-emission-model.md` — existing emission architecture (the model this extends) +- `docs/design-clean-emission-contract.md` — emission contract authority +- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 carrier baseline (`WorkflowSecret` + `Cron`) +- `dsl/extdeps/github/actions.dag` — existing workflow carriers (`Workflow`, `WorkflowTrigger`, `Step`, `MatrixStrategy`, `RunnerSpec`) +- `.github/workflows/ci.yml` — current hand-authored CI (the deletion target) +- memory: `project_eliminate_emit_lang_files.md` — omni-emission consolidation thesis + +## Acceptance gates + +1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-6 above +2. Each per-target emitter (`YamlStatic`, `BinaryShim`, `PythonShim`) has explicit emission semantics + acceptance contract +3. `EmissionTarget` field shape ratifiable by Mgr without further canvas iteration (Substrate-Principle-Audit shape per memory `feedback_substrate_principle_audit`) +4. Cross-references to `design-affected-set-lens.md` §5 (CI integration sketch) explicit — canvas resolves the "CI integration deferred to R4 full delivery" placeholder +5. No parallel-representation debt: greps cleanly against existing `dsl/extdeps/github/actions.dag` (canvas extends carriers, doesn't duplicate) +6. Cargo / clippy / fmt clean (no code changes expected; doc-only PR) + +## STOP / PING criteria + +- **STOP** if canvas needs to introduce new substrate-shape carrier beyond `EmissionTarget` field on existing `Workflow<>` — surface to Mgr (substrate-shape questions belong to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`) +- **STOP** if the emitter-dispatch shape conflicts with `project_eliminate_emit_lang_files.md` consolidation thesis — surface; this canvas should EXTEND that thesis, not contradict +- **PING** PM (deep-wolf-155) on PR-open for review-routing +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification routing +- **PING** Verification Mgr (clever-tern-670) on PR-open if BinaryShim affected-set-integration shape is non-trivial (clever-tern-670 owns affected-set lens at PR #2713) + +## Sequencing + +- This canvas authors are dispatch-ready NOW (independent of Slice 1 substrate hold; no new substrate-fact introduction) +- Director ratification of canvas shape is the gate to dispatch Slice 4 (YamlStatic emitter implementation) + Slice 5 (BinaryShim emitter implementation) +- Canvas should reference but NOT depend on Slice 2 (timing carriers) — emitter dispatch is orthogonal to timing instrumentation + +--- + +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive. diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md new file mode 100644 index 00000000000..ab3373a709f --- /dev/null +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -0,0 +1,143 @@ +# T-Workflow-As-Data — FULL R3-close scope (operator elevation 2026-05-12) + +**Author**: deep-wolf-155 (PM) +**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is a **modeled toggle field on `ci.dag`**, not a hard-coded emitter choice. +**Routing**: Director (zesty-bear-812) ratifies new gate set + lane absorption; Substrate Mgr (warm-wolf-698) absorbs Slice 4-8 into existing T-WAD lane; Verification Mgr (clever-tern-670) absorbs affected-set integration (natural extension of PR #2713). +**Parent program**: T-Workflow-As-Data lane in `docs/r3-program-plan.md` §4.4 + §1.8 gates 53-58 + 63. +**Status**: PROPOSED; Director ratification pending. + +--- + +## §0. What changes vs existing T-WAD plan + +**Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. + +**FULL R3-close scope** (operator-ratified 2026-05-12): +1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) +2. **Hand-authored `ci.yml` DELETED** — replaced by static-regen artifact OR thin shim invoking compiled binary +3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision +4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) +5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally + +## §1. Proposed §1.8 gate additions (Director ratifies) + +Proposed new gates (or scope-expansion of existing #56): + +| Gate ID (proposed) | Predicate-family | Lane | Pass condition | +|---|---|---|---| +| **#56 (expanded)** | demonstration | T-WAD | ALL ci.yml workflow content modeled as `.dag` (not just demo); current `ci.yml` rebuilds from `ci.dag` via emitter | +| **NEW: `workflow_emission_target_toggle_proven`** | demonstration | T-WAD | Same `ci.dag` emits both YamlStatic + BinaryShim outputs; toggle exercises both emitter paths; equivalence at workflow-semantics level verified | +| **NEW: `ci_yml_dissolved`** | state-check | T-WAD | Hand-authored `.github/workflows/ci.yml` deleted; replaced by static-regen artifact OR thin shim (≤10 lines invoking compiled binary or python-shim) | +| **NEW: `ci_uses_affected_set_selection`** | demonstration | T-WAD + T-Verification | CI selection consumes `affected_set` lens output (per `docs/design-affected-set-lens.md`); Layer 2 path-regex `if:` gates removed from ci.yml | +| **NEW: `test_cost_dimension_landed`** | substrate-shape + state-check | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (`Step` carrier or test-as-data substrate); `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from Cost dimension | + +Alternative shape: scope-expand existing #56 + #63 (`substrate_gap_workflow_scheduling_closed`) to encompass all five. Director decides which framing is cleaner (gate-additive vs scope-expansion). + +## §2. Architectural shape (operator-ratified 2026-05-12) + +**`EmissionTarget` as modeled field on workflow node** (open enum, same shape as `Dimension`): + +```dag +type EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ... +type Workflow { + trigger: Trigger + steps: Steps + resources: Resources + emission_target: EmissionTarget // NEW — modeled field, default YamlStatic + ... +} +``` + +**Emitter dispatch** (parallel to `05_emit_*.dag` consolidation thesis per `project_eliminate_emit_lang_files.md`): + +- Single emitter reads `emission_target` from `ci.dag` +- Dispatches to YamlStatic emitter (regenerate `ci.yml`) OR BinaryShim emitter (compile binary + emit thin shim YAML) OR PythonShim (emit Python harness + thin shim YAML) +- Same `ci.dag` semantically equivalent across targets at workflow level +- A/B comparison is apples-to-apples (toggle one field, re-emit) + +**Why BinaryShim is the affected-set unlock**: Static YAML can't naturally express "compute affected-set at PR time, dispatch matrix dynamically." BinaryShim makes runtime decisions structural — binary reads git diff, computes `affected_set = ⋃ over dim of reachable(Δ, dim)`, dispatches matrix accordingly. + +## §3. Slice expansion + +Existing slices (already in T-WAD plan): +- **Slice 1**: substrate carriers (`WorkflowSecret` + `Cron` refinement) — brief at `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md`; **HELD** on auto-spawn fix per #2075 +- **Slice 2**: timing carriers (`TimingMeasurement` + `TimingObservationSet` + `WorkflowObservationAnchor` + `TimingBudget`); gates #54 #55; gated on T-LBP COMPLETE +- **Slice 3**: demonstration (gate #56) — bound to neat-badger-30; idle, gated on Slices 1+2 + +**New slices added by FULL elevation**: +- **Slice 4**: `EmissionTarget` field + YamlStatic emitter — gated on Slice 1 substrate + ci.dag scaffold +- **Slice 5**: BinaryShim emitter — gated on Slice 4 (or parallel); proves toggle +- **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution — gated on Phase 3 Cluster M settling (test-as-data substrate stable) +- **Slice 7**: Affected-set integration via BinaryShim — gated on Slice 5 + PR #2713 (✓ merged) +- **Slice 8**: ci.yml deletion + emission-target toggle finalized — gated on Slices 4-7 + acceptance verification + +## §4. Dependency graph + +``` +External prereqs (already in flight): + - Auto-spawn fix (cluster ctrl#217) → unblocks Slice 1 + - T-LBP COMPLETE → unblocks Slice 2 + - Phase 3 Cluster M settling (#2715/#2716, calm-newt-602 + silent-swift-300) → unblocks Slice 6 + - Affected-set lens (PR #2713) ✓ MERGED + +Critical path: + Slice 1 → Slice 3 → Slice 4 ──┐ + ├─→ Slice 7 → Slice 8 + Slice 5 ─┤ ↑ + Slice 2 ──────────────────────┘ │ + │ + Phase 3 Cluster M → Slice 6 ─────────────────┘ + +Parallelizable (start NOW, independent of held substrate): + - Emitter-dispatch architecture canvas (forward-looking design) + - ci.dag scaffold first-draft (uses existing carriers at dsl/extdeps/github/actions.dag) + - r3-program-plan.md §1.8 gate-addition canonical-ledger update (PM-direct) +``` + +## §5. Realistic R3-close timing + +Assumes: +- Auto-spawn fix lands within 1 week → Slice 1 dispatches +- T-LBP COMPLETE within 2-3 weeks → Slice 2 dispatches +- Phase 3 Cluster M settles within 2-4 weeks → Slice 6 unblocks +- Slices 4-5 take 1-2 weeks each (emitter implementation) +- Slice 7 (affected-set integration) takes 1-2 weeks +- Slice 8 (ci.yml deletion + acceptance) takes 1 week + +**Estimated R3-close-with-FULL**: 6-10 weeks from 2026-05-12. Tight but achievable if external gates resolve on schedule. Critical-path risk: T-LBP COMPLETE timing + Phase 3 Cluster M settling. + +## §6. Immediate parallel work (PM-direct work-items) + +Independent of held substrate; dispatchable now: + +**WI-1 (PM auto-spawn)**: T-WAD emitter-dispatch architecture canvas +- Output: `docs/design-ci-workflow-emitter-dispatch.md` +- Scope: How `emission_target` field routes to multiple emitters; consumer pattern; relationship to existing `05_emit_*.dag` consolidation thesis; YamlStatic semantics vs BinaryShim semantics; how affected-set output is consumed at runtime +- Authority: forward-looking; Mgr-tier preliminary (warm-wolf-698 + Director ratify final) + +**WI-2 (PM auto-spawn)**: T-WAD ci.dag scaffold first-draft +- Output: `dsl/extdeps/github/ci.dag` (new file) +- Scope: captures current `.github/workflows/ci.yml` jobs + steps + deps + runner selectors as `Workflow` instance; placeholder `emission_target: YamlStatic` field +- Authority: forward-looking; consumes existing carriers at `dsl/extdeps/github/actions.dag`; substrate-compatible at HEAD + +(Skipping a separate WI for §1.8 gate-addition — PM can author proposal directly in this scoping doc; Director ratifies via this doc's review.) + +## §7. Routing requests + +1. **Director (zesty-bear-812)**: Ratify FULL R3-close scope; ratify new gate set (or scope-expansion of #56/#63); decide owner-Mgr for Slice 4-8 (warm-wolf-698 absorb OR new T-CI-WAD Mgr spawn) +2. **Substrate Mgr (warm-wolf-698)**: Absorb Slice 4-5 (emitters) + Slice 8 (ci.yml deletion) into T-WAD lane scope; review WI-1 canvas + WI-2 ci.dag scaffold when drafted +3. **Verification Mgr (clever-tern-670)**: Absorb Slice 7 (affected-set integration into CI emitter) — natural extension of PR #2713 affected-set lens ownership; coordinate with Substrate Mgr at slice handoff +4. **Debt-Paydown Mgr (zesty-boar-261)**: Absorb Slice 6 sub-component (slow-test-exemptions.txt dissolution) — falls into existing slow-test ratchet ownership + +## §8. Cross-references + +- `docs/r3-program-plan.md` §1.4 (Class 4 closure) + §1.8 (gates 53-58, 63) + §4.4 (T-WAD lane) +- `docs/design-affected-set-lens.md` — affected-set lens substrate (PR #2713 ✓ merged); Slice 7 consumes +- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief +- `docs/ci-pipeline-optimization.md` — pre-v3 historical optimization (background context; not active program) +- `docs/briefs/r3-ci-layer-2-pm-prestaged-mgr-fill-template.md` — Layer 2 path-regex bridge (PR #2721 ✓ merged); dissolution target for Slice 7 +- `project_eliminate_emit_lang_files.md` (memory) — omni-emission consolidation thesis; inherited architecture for workflow-target dispatch + +--- + +**End of scoping doc.** From cc82ec4c80a2537859cb263cbcf0efa640a1b630 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 06:37:39 +0000 Subject: [PATCH 02/23] =?UTF-8?q?docs(scope):=20T-WAD=20FULL=20R3=20?= =?UTF-8?q?=E2=80=94=20Director=20ratification=20absorbed=20+=20codex=20BL?= =?UTF-8?q?OCKING=20#9970=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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` 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` / `jobs: List` / `env` / `permissions` - `:24` Workflow contains `jobs: List` (NOT steps directly) - `:110` `Job` is the per-ci.yml-job carrier - `:114` Each Job contains `steps: List` (Step is per ci.yml-step, NOT per-job) - `:115` `Job.needs: List` — 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`. 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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 132 +++++++----- ...-full-r3-emitter-dispatch-canvas-worker.md | 62 +++--- ...-t-workflow-as-data-full-r3-close-scope.md | 190 +++++++++++------- 3 files changed, 240 insertions(+), 144 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 2b9f29e3449..abca24fb5ae 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -1,75 +1,113 @@ -# Worker brief — T-WAD FULL R3 ci.dag scaffold first-draft +# Worker brief — T-WAD FULL R3 ci.dag extension (current ci.yml coverage) -**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12. -**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698) — this is forward-looking scaffold; final ratification + emitter integration in Slice 4-5. -**Closure predicate**: scaffold authored at `dsl/extdeps/github/ci.dag` + Mgr-ratified shape; downstream Slice 4 YamlStatic emitter consumes; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 2026-05-12. +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this is forward-looking scaffold; final ratification + emitter integration in Slice 4-5. +**Closure predicate**: `dsl/gunbc/ci.dag` extended to cover current `.github/workflows/ci.yml` content + Mgr-ratified shape; downstream Slice 4 YamlStatic emitter consumes; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. ## Output -`dsl/extdeps/github/ci.dag` — new file, captures current `.github/workflows/ci.yml` content as `Workflow` `.dag` data. +**Extend existing `dsl/gunbc/ci.dag`** to cover full current `.github/workflows/ci.yml` content. (This file ALREADY EXISTS — it is the gate-centric CI declaration; landed via PR #2371. Current shape: `CIGate` / `CIPipeline` / `GateSource` + 4 instantiated gates [lint_gate / test_gate / l1_gate / compile_gates_gate]. The extension work is to express the FULL workflow content — jobs, steps, triggers, runner selection, matrix — composing against existing platform carriers at `dsl/extdeps/github/actions.dag`.) ## Scope -Translate current `.github/workflows/ci.yml` into a `.dag` data instance using existing carriers at `dsl/extdeps/github/actions.dag`: - -1. **Trigger**: capture `on:` shape (push / PR / schedule) as `WorkflowTrigger` instance (per `dsl/extdeps/github/actions.dag:40`) -2. **Jobs**: each `job` in ci.yml becomes a `Step` (or composition of `Step`s) per `dsl/extdeps/github/actions.dag:103+` -3. **Dependencies**: `needs:` graph captured as Step dependency edges -4. **Matrix**: any `strategy.matrix:` captured as `MatrixStrategy` instance per `dsl/extdeps/github/actions.dag:66+` -5. **Runner selection**: `runs-on:` captured as `RunnerSpec` + `RunnerLabel` per `:88+` (use `gunbc-quick` / `gunbc-v3` / generic pools as appropriate) -6. **Layer 1 skip** (changes job): capture as `Step` with conditional output binding -7. **Layer 2 cluster skip** (Director template per PR #2721 — NOT YET WIRED): SKIP — capture as `[TODO]` marker; this is what Slice 7 affected-set integration will replace -8. **Slow-test ratchet**: SKIP `scripts/slow-test-exemptions.txt` reference for now (Slice 6 will replace with Cost dimension on test nodes) -9. **emission_target placeholder**: include comment-marker `// emission_target: YamlStatic` placeholder field (final shape ratified by emitter-dispatch canvas in WI-1; this scaffold can be revised when canvas ratifies) +Compose the current `.github/workflows/ci.yml` against existing platform carriers from `dsl/extdeps/github/actions.dag` (authority — single-authority per `feedback_audit_adjacent_authority_first`): + +**Carrier hierarchy** (per `dsl/extdeps/github/actions.dag`): + +``` +Workflow { // line :21 — concrete type, NOT generic + name: String + on: List // triggers + jobs: List // line :24 — workflow contains JOBS + env: Map + permissions: WorkflowPermissions? +} + +Job { // line :110 + id: String + steps: List // line :114 — job contains STEPS + needs: List // line :115 — job-id references (NOT step-level) + runner: RunnerSpec + strategy: MatrixStrategy? + ... +} + +Step // line :147 — RunStep | UsesStep sum + = RunStep { run, shell, env, ... } + | UsesStep { uses: ActionRef, with, ... } +``` + +**Mapping ci.yml → Workflow instance**: + +1. **Top-level `on:`** → `Workflow.on: List` (Push / PullRequest / Schedule / WorkflowDispatch variants from `:41`) +2. **Each `job:` in ci.yml** → `Job` element in `Workflow.jobs: List` (NOT a Step — Workflow contains Jobs, Jobs contain Steps) +3. **Per-job `needs:` field** → `Job.needs: List` (list of job-id references; NOT step-level dependencies) +4. **Per-job `steps:` field** → `Job.steps: List` (each `run:` → RunStep; each `uses:` → UsesStep) +5. **Per-job `strategy.matrix:`** → `Job.strategy: MatrixStrategy?` (per `:222`) +6. **Per-job `runs-on:`** → `Job.runner: RunnerSpec` (HostedRunner / SelfHosted variants from `:132`); use existing pool labels (`gunbc-quick` / `gunbc-v3` etc.) +7. **`if:` conditions** → `Job.if_condition: String?` or `Step.if_condition: String?` per appropriate level +8. **Layer 1 skip** (`changes` job) → first `Job` in pipeline; its output binding drives `if:` conditions on downstream jobs +9. **Layer 2 cluster skip** (template per PR #2721 — NOT WIRED into ci.yml at HEAD): leave as `// TODO Slice 7` marker — Slice 7 affected-set integration replaces +10. **Slow-test ratchet** (`scripts/slow-test-exemptions.txt`): represented as `Step` with `RunStep.run: "scripts/check-slow-test-ratchet.sh"` for now — leave `// TODO Slice 6` marker for Cost-dimension migration +11. **Secrets references**: use existing `WorkflowSecret { name: SecretName, scope: SecretScope }` carrier (per actions.dag `:102` — LANDED in PR #2160, **NOT held** as earlier brief incorrectly stated) +12. **Cron triggers**: use existing `CronSchedule` carrier from `dsl/extdeps/cron_schedule_model.dag` (LANDED) + +**Existing `gunbc/ci.dag` already declares** `CIGate` / `CIPipeline` / `GateSource` (gate-centric CI intent). The extension work integrates the platform-shape `Workflow` instance alongside (or composing through) the existing gate-centric declaration. **Open question for canvas/Mgr** (WI-1 may inform): does the new Workflow data go into `gunbc/ci.dag` as a sibling data, into a new file `dsl/gunbc/ci_workflow.dag`, or compose `CIPipeline` → `Workflow` via a derivation lens? Leave this in `// QUESTION ratify-via-Mgr` markers. ## Coverage scope -This is a FIRST DRAFT — does NOT need to cover 100% of ci.yml. Coverage acceptance: +This is a FIRST DRAFT extending the existing `dsl/gunbc/ci.dag`. Coverage acceptance: -- **MUST**: all `jobs:` represented as Step nodes -- **MUST**: `needs:` graph faithful -- **MUST**: trigger conditions captured (push/PR/schedule trio) -- **MUST**: runner pool selection per job correct -- **SHOULD**: matrix strategies for jobs that use them -- **SHOULD**: env / secrets references (Slice 1 substrate `WorkflowSecret` is HELD; use placeholder comment-markers for now) -- **NICE-TO-HAVE**: complete `with:` / `uses:` action references for each Step -- **DEFERRED**: Layer 2 cluster `if:` regex (TODO marker); slow-test-exemptions (TODO marker); affected-set wiring (TODO marker, Slice 7) +- **MUST**: All `jobs:` in `.github/workflows/ci.yml` represented as `Job` nodes (Workflow.jobs list) +- **MUST**: `needs:` graph faithful at Job-level (each Job.needs: List matches ci.yml `needs:` field for that job) +- **MUST**: Triggers captured (push / PR / schedule trio as List) +- **MUST**: Per-job runner pool selection correct (`gunbc-quick` / `gunbc-v3` / generic) +- **MUST**: Trigger conditions / runner labels validate against existing carriers (no new substrate types introduced) +- **SHOULD**: Matrix strategies for jobs that use them +- **SHOULD**: Steps within each Job captured (RunStep / UsesStep) +- **NICE-TO-HAVE**: complete `with:` / `uses:` action references per step +- **DEFERRED**: Layer 2 cluster `if:` regex (TODO Slice 7); slow-test-exemptions Cost-dim migration (TODO Slice 6); affected-set wiring (TODO Slice 7); emission_target field placement (TODO ratify via WI-1 canvas) ## Reference materials -- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope -- `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling brief; WI-1 emitter-dispatch canvas (this scaffold's emitter consumer) -- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate (`WorkflowSecret` not yet landed — placeholder) -- `dsl/extdeps/github/actions.dag` — existing carriers (read this first; reuse, don't duplicate) +- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent) +- `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling WI-1 brief (emitter-dispatch canvas; informs emission_target placement) +- `dsl/extdeps/github/actions.dag` — **canonical platform carriers** (authority for `Workflow` / `Job` / `Step` shapes; READ THIS FIRST — line numbers `:21` `:24` `:110` `:114` `:147` cited above) +- `dsl/gunbc/ci.dag` — **existing file to extend** (gate-centric declarations from PR #2371; do NOT duplicate) +- `dsl/extdeps/cron_schedule_model.dag` — `CronSchedule` carrier (Schedule trigger consumer) +- `dsl/extdeps/github/actions.dag:96-105` — `WorkflowSecret` + `SecretScope` carriers (LANDED PR #2160) - `.github/workflows/ci.yml` — source content to translate -- `docs/design-emission-model.md` — emission architecture ## Acceptance gates -1. `dsl/extdeps/github/ci.dag` exists; valid `.dag` syntax per existing v3 parser -2. All ci.yml `jobs:` represented as Step nodes (count matches) -3. `needs:` graph faithfully captured -4. Trigger conditions captured (push / PR / schedule trio) -5. Runner pool selection per job correct (`gunbc-quick` for fast jobs, `gunbc-v3` for v3 work, generic otherwise) -6. TODO markers explicit for: Layer 2 cluster `if:` regex; slow-test-exemptions reference; affected-set wiring; `WorkflowSecret` references (Slice 1 HELD) -7. `cargo test --workspace` green (no breakage of existing tests) -8. `cargo clippy --all-targets -- -D warnings` clean -9. `cargo fmt --all --check` clean +1. `dsl/gunbc/ci.dag` extended (NOT replaced); valid `.dag` syntax per existing v3 parser +2. All ci.yml `jobs:` represented as Job nodes in a `Workflow` instance — count matches +3. `Job.needs` faithfully captures each job's `needs:` field as job-id references +4. Triggers captured (push / PR / schedule trio) +5. Per-job runner selection correct +6. No new substrate types introduced (extends only — substrate-shape additions belong to Substrate Mgr per `feedback_substrate_shape_belongs_in_mgr_canvas`) +7. TODO markers explicit for: Layer 2 cluster `if:` regex (Slice 7); slow-test-exemptions (Slice 6); affected-set wiring (Slice 7); emission_target placement (ratify via WI-1 canvas) +8. `cargo test --workspace` green (no breakage of existing tests including `t_ci_workflow_as_data_demo`) +9. `cargo clippy --all-targets -- -D warnings` clean +10. `cargo fmt --all --check` clean ## STOP / PING criteria -- **STOP** if existing carriers at `dsl/extdeps/github/actions.dag` are insufficient (e.g., need new step-shape, new trigger-shape) — surface to Mgr; substrate-shape additions belong to Substrate Mgr canvas (per `feedback_substrate_shape_belongs_in_mgr_canvas`) -- **STOP** if Slice 1 substrate (`WorkflowSecret`) is genuinely required for scaffold coverage (e.g., secrets used in critical jobs that can't be TODO-markered) — surface; may need to wait on Slice 1 dispatch -- **STOP** if `ci.dag` requires `emission_target` field on existing `Workflow<>` carrier and that field isn't yet declared — surface; either add as placeholder comment OR wait for WI-1 canvas ratification +- **STOP** if existing carriers at `dsl/extdeps/github/actions.dag` are insufficient (e.g., need new step-shape, new trigger-shape) — surface to Substrate Mgr (substrate-shape additions belong to canvas-tier per `feedback_substrate_shape_belongs_in_mgr_canvas`) +- **STOP** if extending `gunbc/ci.dag` requires structural reframing of existing `CIGate` / `CIPipeline` declarations (e.g., they should compose under `Workflow` rather than parallel-represent) — surface to Mgr; this is a Mgr-canvas-tier decision +- **STOP** if `emission_target` field placement is forced before WI-1 canvas ratifies — leave `// QUESTION` markers, sibling worker (still-heron-763 / WI-1) is authoring the canvas in parallel - **PING** PM (deep-wolf-155) on PR-open for review-routing -- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 emitter-implementation dispatch routing +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 YamlStatic emitter dispatch routing +- **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas) if emission_target shape questions cross ## Sequencing -- Dispatch-ready NOW (independent of Slice 1 substrate HOLD — uses existing carriers; TODOs marked for held substrate) -- Output is a scaffold/placeholder; final shape ratified during Slice 4 YamlStatic emitter implementation -- Slice 4 YamlStatic emitter consumes this `ci.dag` and emits `.github/workflows/ci.yml`-equivalent; equivalence is the Slice 4 acceptance gate +- Dispatch-ready NOW (existing carriers + existing ci.dag suffice for first-draft extension) +- Slice 1 substrate LANDED (PR #2160) — `WorkflowSecret` + `CronSchedule` available; no held substrate +- Slice 3 demo LANDED (PR #2371) — `t_ci_workflow_as_data_demo.dag` exists; this WI extends scope from demo→full +- Final shape ratified during Slice 4 YamlStatic emitter implementation (Substrate Mgr dispatch) +- Slice 4 YamlStatic emitter consumes this extended `ci.dag` and emits `.github/workflows/ci.yml`-equivalent; equivalence is the Slice 4 acceptance gate --- -— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive. +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24; codex BLOCKING #9970 fixed 2026-05-12 (carrier hierarchy: Workflow > Job > Step, not flat job→Step). diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index b83e5f67161..c09059c7001 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -1,8 +1,8 @@ # Worker brief — T-WAD FULL R3 emitter-dispatch architecture canvas -**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-1; operator FULL elevation 2026-05-12 (toggle design ratification). -**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698) — this is forward-looking canvas; final ratification by Mgr + Director. -**Closure predicate**: design canvas authored + Director-ratified shape; downstream Slice 4-5 emitter implementation work consumes this canvas. +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-1; operator FULL elevation 2026-05-12 (toggle design ratification); Director ratification msg_5cbdad24 2026-05-12 (Slice 4-5/8 lane-absorbed to Substrate Mgr warm-wolf-698). +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698); this is forward-looking design canvas; final Mgr-tier ratification routes through warm-wolf-698, with Director co-sign at #828 if cross-tier confirmation needed. +**Closure predicate**: design canvas authored + Mgr-ratified shape; downstream Slice 4-5 emitter implementation work consumes this canvas. ## Output @@ -10,18 +10,23 @@ ## Scope -Design the emitter-dispatch architecture for `T-Workflow-As-Data` FULL R3-close: - -1. **`EmissionTarget` modeled field shape** — open enum `EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ...`; where it lives in the carrier hierarchy (on `Workflow<>` carrier? sibling node?); default value if absent (`YamlStatic` recommended) -2. **Emitter dispatch semantics** — single emitter reads `emission_target` from `ci.dag`, dispatches to per-target emitter module; how this composes with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`) -3. **Per-target semantics**: - - **YamlStatic**: emit `.github/workflows/ci.yml` from `ci.dag`; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly - - **BinaryShim**: emit compiled binary (Rust target) + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically - - **PythonShim**: same shim model, Python runtime substrate (Python target emit pattern reused) - - **InlineGunbc**: gunbc-as-runtime-orchestrator (longer-term option; sketch only) -4. **Affected-set integration shape** — how `BinaryShim` emitter consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.) -5. **Equivalence claim** — what does "same `ci.dag` emits semantically equivalent output across targets" mean precisely; what's the test claim -6. **Carrier dependencies** — what existing carriers at `dsl/extdeps/github/actions.dag` are reused vs new substrate needed (likely just `EmissionTarget` field addition + possibly `MatrixSpec` for dynamic dispatch) +Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close: + +1. **`EmissionTarget` open-enum shape** — `EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | …`; default value if absent (`YamlStatic` recommended baseline; default-toggle behavior preserves current ci.yml-equivalent regen) +2. **Where `emission_target` is carried** — OPEN QUESTION; canvas should evaluate three placements and propose one: + - **(a) Field on `Workflow`** (`dsl/extdeps/github/actions.dag:21`): platform-level — but actions.dag is "platform constraints, not CI logic" per its header; emission_target IS a CI logic choice, so this may violate the separation + - **(b) Field on `CIPipeline`** (`dsl/gunbc/ci.dag`): CI-intent-level — emission_target is a transport choice the CI consumer makes; natural fit per actions.dag's "consumers: gunbc/ci.dag" framing + - **(c) Wrapper node** (e.g., `WorkflowEmission { workflow: Workflow, target: EmissionTarget }`): preserves platform/CI separation cleanly; emission policy attaches to workflow-content via wrapper + - Canvas recommendation expected; Mgr ratifies. Operator-ratified shape per 2026-05-12: "either could work; the choice was just a toggle/modeling decision in the .dag code itself" — substance is that the choice is **modeled data**, not where it lives. +3. **Emitter dispatch semantics** — single emitter reads `emission_target` from wherever it lives, dispatches to per-target emitter module; how this composes with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`) +4. **Per-target emission semantics**: + - **YamlStatic**: emit `.github/workflows/ci.yml` from extended `dsl/gunbc/ci.dag`; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly. This is the Slice 4 deliverable. + - **BinaryShim**: emit compiled binary (Rust target) + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically. This is Slice 5; Slice 7 affected-set integration consumes. + - **PythonShim**: same shim model, Python runtime substrate (Python target emit pattern reused). Future; sketch only. + - **InlineGunbc**: gunbc-as-runtime-orchestrator (longer-term option); sketch only. +5. **Affected-set integration shape** — how `BinaryShim` emitter consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.); refer to Slice 7 owner (Verification Mgr clever-tern-670) for cross-tier coordination +6. **Equivalence claim** — what does "same `ci.dag` emits semantically equivalent output across targets" mean precisely; what's the test claim for `workflow_emission_target_toggle_proven` gate (substrate-shape, per Director ratification §1) +7. **Carrier reuse audit** — confirm existing `dsl/extdeps/github/actions.dag` carriers (concrete `Workflow` / `Job` / `Step` per actions.dag `:21` `:110` `:147`) are sufficient for YamlStatic emitter; identify any new substrate needed (likely minimal — possibly `EmissionTarget` enum + placement choice from §2) ## Reference materials @@ -29,34 +34,37 @@ Design the emitter-dispatch architecture for `T-Workflow-As-Data` FULL R3-close: - `docs/design-affected-set-lens.md` — affected-set lens substrate (Slice 7 consumer) - `docs/design-emission-model.md` — existing emission architecture (the model this extends) - `docs/design-clean-emission-contract.md` — emission contract authority -- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 carrier baseline (`WorkflowSecret` + `Cron`) -- `dsl/extdeps/github/actions.dag` — existing workflow carriers (`Workflow`, `WorkflowTrigger`, `Step`, `MatrixStrategy`, `RunnerSpec`) -- `.github/workflows/ci.yml` — current hand-authored CI (the deletion target) -- memory: `project_eliminate_emit_lang_files.md` — omni-emission consolidation thesis +- `dsl/extdeps/github/actions.dag` — **canonical platform carriers**: concrete `Workflow` (`:21`), `Job` (`:110`), `Step` (`:147`), `WorkflowSecret` (`:102`); LANDED per PR #2160 +- `dsl/gunbc/ci.dag` — **existing CI-intent declarations** (gate-centric: `CIGate` / `CIPipeline` / `GateSource`); landed PR #2371 +- `dsl/extdeps/cron_schedule_model.dag` — `CronSchedule` carrier +- `.github/workflows/ci.yml` — current hand-authored CI transport shim (the dissolution target) +- memory: `project_eliminate_emit_lang_files.md` — omni-emission consolidation thesis (inherited architecture) ## Acceptance gates -1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-6 above +1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-7 above 2. Each per-target emitter (`YamlStatic`, `BinaryShim`, `PythonShim`) has explicit emission semantics + acceptance contract -3. `EmissionTarget` field shape ratifiable by Mgr without further canvas iteration (Substrate-Principle-Audit shape per memory `feedback_substrate_principle_audit`) +3. `EmissionTarget` placement (Workflow vs CIPipeline vs wrapper) explicitly evaluated; canvas recommends one with reasoning; Mgr-ratifiable shape per `feedback_substrate_principle_audit` 4. Cross-references to `design-affected-set-lens.md` §5 (CI integration sketch) explicit — canvas resolves the "CI integration deferred to R4 full delivery" placeholder -5. No parallel-representation debt: greps cleanly against existing `dsl/extdeps/github/actions.dag` (canvas extends carriers, doesn't duplicate) +5. No parallel-representation debt: greps cleanly against existing `dsl/extdeps/github/actions.dag` + `dsl/gunbc/ci.dag` (canvas EXTENDS thinking, doesn't duplicate carriers) 6. Cargo / clippy / fmt clean (no code changes expected; doc-only PR) ## STOP / PING criteria -- **STOP** if canvas needs to introduce new substrate-shape carrier beyond `EmissionTarget` field on existing `Workflow<>` — surface to Mgr (substrate-shape questions belong to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`) +- **STOP** if canvas needs to introduce new substrate-shape carriers beyond `EmissionTarget` enum (e.g., new step-shape, new trigger-shape) — surface to Substrate Mgr warm-wolf-698 (substrate-shape questions belong to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`) - **STOP** if the emitter-dispatch shape conflicts with `project_eliminate_emit_lang_files.md` consolidation thesis — surface; this canvas should EXTEND that thesis, not contradict +- **STOP** if affected-set integration shape requires substantive negotiation with Verification Mgr clever-tern-670 — surface for cross-tier ratification (Slice 7 owner) - **PING** PM (deep-wolf-155) on PR-open for review-routing -- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification routing -- **PING** Verification Mgr (clever-tern-670) on PR-open if BinaryShim affected-set-integration shape is non-trivial (clever-tern-670 owns affected-set lens at PR #2713) +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification routing (lane owner per Director ratification msg_5cbdad24) +- **PING** Verification Mgr (clever-tern-670) on PR-open if BinaryShim affected-set-integration shape is non-trivial ## Sequencing -- This canvas authors are dispatch-ready NOW (independent of Slice 1 substrate hold; no new substrate-fact introduction) +- This canvas authoring is dispatch-ready NOW (Slice 1 substrate LANDED via PR #2160; no held prereq; no new substrate-fact introduction expected) - Director ratification of canvas shape is the gate to dispatch Slice 4 (YamlStatic emitter implementation) + Slice 5 (BinaryShim emitter implementation) - Canvas should reference but NOT depend on Slice 2 (timing carriers) — emitter dispatch is orthogonal to timing instrumentation +- Sibling worker cool-carp-720 (WI-2) is extending `dsl/gunbc/ci.dag` to full ci.yml coverage in parallel — coordinate if emission_target placement question crosses --- -— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive. +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24. diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index ab3373a709f..75ff61bb668 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -1,56 +1,73 @@ # T-Workflow-As-Data — FULL R3-close scope (operator elevation 2026-05-12) **Author**: deep-wolf-155 (PM) -**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is a **modeled toggle field on `ci.dag`**, not a hard-coded emitter choice. -**Routing**: Director (zesty-bear-812) ratifies new gate set + lane absorption; Substrate Mgr (warm-wolf-698) absorbs Slice 4-8 into existing T-WAD lane; Verification Mgr (clever-tern-670) absorbs affected-set integration (natural extension of PR #2713). +**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is a **modeled toggle field**, not a hard-coded emitter choice. Placement of the field is an open canvas question (see §2). +**Routing**: Director (zesty-bear-812) **RATIFIED** scope + framing at msg_5cbdad24 2026-05-12 ~06:35Z. Substrate Mgr (warm-wolf-698) lane-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). **Parent program**: T-Workflow-As-Data lane in `docs/r3-program-plan.md` §4.4 + §1.8 gates 53-58 + 63. -**Status**: PROPOSED; Director ratification pending. +**Status**: **RATIFIED 2026-05-12** (Director). PR #2744 + downstream Mgr-tier briefs/canvases proceeding. --- ## §0. What changes vs existing T-WAD plan -**Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. +**Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. **Slice 1 LANDED via PR #2160** (WorkflowSecret + CronExpression carriers). **Slice 3 demo LANDED via PR #2371** (`t_ci_workflow_as_data_demo.dag` + integration tests). -**FULL R3-close scope** (operator-ratified 2026-05-12): -1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) +**FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): +1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — extend `dsl/gunbc/ci.dag` to cover full `.github/workflows/ci.yml` 2. **Hand-authored `ci.yml` DELETED** — replaced by static-regen artifact OR thin shim invoking compiled binary -3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision +3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision. Field placement OPEN (see §2). 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally -## §1. Proposed §1.8 gate additions (Director ratifies) +## §1. §1.8 gate additions — RATIFIED 2026-05-12 (gate-additive) -Proposed new gates (or scope-expansion of existing #56): +**Authority**: Director ratification (zesty-bear-812) at msg_5cbdad24 2026-05-12 ~06:35Z. **Framing: GATE-ADDITIVE** (NOT scope-expand #56). Reasoning: #56 was authored as demonstration-class (one workflow proves feasibility); scope-expanding to "ALL workflow" would invalidate demonstration semantics + force a post-hoc reclassification of #56's status meaning. Cleaner: #56 stays as demonstration anchor (promotable to PASSING when first .dag workflow lands — likely closing soon given PR #2371 landed the demo); add 4 NEW gates for full-R3 closure surface. -| Gate ID (proposed) | Predicate-family | Lane | Pass condition | -|---|---|---|---| -| **#56 (expanded)** | demonstration | T-WAD | ALL ci.yml workflow content modeled as `.dag` (not just demo); current `ci.yml` rebuilds from `ci.dag` via emitter | -| **NEW: `workflow_emission_target_toggle_proven`** | demonstration | T-WAD | Same `ci.dag` emits both YamlStatic + BinaryShim outputs; toggle exercises both emitter paths; equivalence at workflow-semantics level verified | -| **NEW: `ci_yml_dissolved`** | state-check | T-WAD | Hand-authored `.github/workflows/ci.yml` deleted; replaced by static-regen artifact OR thin shim (≤10 lines invoking compiled binary or python-shim) | -| **NEW: `ci_uses_affected_set_selection`** | demonstration | T-WAD + T-Verification | CI selection consumes `affected_set` lens output (per `docs/design-affected-set-lens.md`); Layer 2 path-regex `if:` gates removed from ci.yml | -| **NEW: `test_cost_dimension_landed`** | substrate-shape + state-check | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (`Step` carrier or test-as-data substrate); `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from Cost dimension | +**Citation chain**: operator directive aligns with prior #846 c#4412330468 ("0 hand-Rust including tests AND stage0; bootstrap is data + self-generated") — `.github/workflows/ci.yml` is structurally identical to hand-Rust under that framing. Dissolution is load-bearing for R3 close. -Alternative shape: scope-expand existing #56 + #63 (`substrate_gap_workflow_scheduling_closed`) to encompass all five. Director decides which framing is cleaner (gate-additive vs scope-expansion). +| Gate ID | Predicate-family | Lane | Pass condition | +|---|---|---|---| +| **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | +| **NEW: `workflow_emission_target_toggle_proven`** | substrate-shape | T-WAD | `EmissionTarget` open enum proven via BOTH `YamlStatic` + `BinaryShim` emitters working from same `ci.dag` (Brian's modeling-decision-not-choice framing structurally encoded) | +| **NEW: `ci_yml_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` absent from repo + regression guard test prevents re-introduction | +| **NEW: `ci_uses_affected_set_selection`** | state-check | T-WAD + T-Verification | `BinaryShim` emitter consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:` gates removed from any remaining workflow files | +| **NEW: `test_cost_dimension_landed`** | substrate-shape + state-check | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes; `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from Cost dimension | ## §2. Architectural shape (operator-ratified 2026-05-12) -**`EmissionTarget` as modeled field on workflow node** (open enum, same shape as `Dimension`): +**`EmissionTarget` as modeled data** (open enum, same shape as `Dimension`): ```dag type EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ... -type Workflow { - trigger: Trigger - steps: Steps - resources: Resources - emission_target: EmissionTarget // NEW — modeled field, default YamlStatic - ... +``` + +**Operator-ratified semantic**: emission target is a modeled toggle, not a hard-coded compiler decision. Field PLACEMENT is open canvas question (WI-1 evaluates and recommends): + +- **(a) Field on `Workflow`** (`dsl/extdeps/github/actions.dag:21` — concrete type, NOT generic; has `name`/`on`/`jobs`/`env`/`permissions` fields): platform-level placement; but actions.dag header states "platform constraints, not CI logic" — emission_target IS CI logic, so this may violate the separation +- **(b) Field on `CIPipeline`** (`dsl/gunbc/ci.dag`): CI-intent-level placement; natural fit per actions.dag's "consumers: gunbc/ci.dag" framing +- **(c) Wrapper node** (`WorkflowEmission { workflow: Workflow, target: EmissionTarget }`): preserves platform/CI separation cleanly; emission policy attaches via wrapper + +**Carrier hierarchy** (per `dsl/extdeps/github/actions.dag` authority): + +``` +Workflow { // :21 — CONCRETE type, not generic + on: List // :23 + jobs: List // :24 — Workflow contains JOBS + env, permissions, ... } + +Job { // :110 + steps: List // :114 — Job contains STEPS + needs: List // :115 — job-id refs (NOT step-level) + runner, strategy, ... +} + +Step = RunStep | UsesStep // :147 — sum type ``` **Emitter dispatch** (parallel to `05_emit_*.dag` consolidation thesis per `project_eliminate_emit_lang_files.md`): -- Single emitter reads `emission_target` from `ci.dag` +- Single emitter reads `emission_target` from wherever placed (per §2 canvas decision) - Dispatches to YamlStatic emitter (regenerate `ci.yml`) OR BinaryShim emitter (compile binary + emit thin shim YAML) OR PythonShim (emit Python harness + thin shim YAML) - Same `ci.dag` semantically equivalent across targets at workflow level - A/B comparison is apples-to-apples (toggle one field, re-emit) @@ -59,85 +76,118 @@ type Workflow { ## §3. Slice expansion -Existing slices (already in T-WAD plan): -- **Slice 1**: substrate carriers (`WorkflowSecret` + `Cron` refinement) — brief at `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md`; **HELD** on auto-spawn fix per #2075 +Existing T-WAD slices (state at 2026-05-12): + +- **Slice 1**: substrate carriers (`WorkflowSecret { name: SecretName, scope: SecretScope }` + `CronSchedule`) — **LANDED via PR #2160 / #2169** (refined cron model). Brief at `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md`. - **Slice 2**: timing carriers (`TimingMeasurement` + `TimingObservationSet` + `WorkflowObservationAnchor` + `TimingBudget`); gates #54 #55; gated on T-LBP COMPLETE -- **Slice 3**: demonstration (gate #56) — bound to neat-badger-30; idle, gated on Slices 1+2 +- **Slice 3**: demonstration (gate #56) — `t_ci_workflow_as_data_demo.dag` **LANDED via PR #2371** ("post-S4 carriers"); existing `dsl/gunbc/ci.dag` provides gate-centric CI intent. Gate #56 may already be eligible for PASSING promotion; separate state-check sweep. + +**New slices added by FULL elevation** (Director-ratified absorption to lanes): -**New slices added by FULL elevation**: -- **Slice 4**: `EmissionTarget` field + YamlStatic emitter — gated on Slice 1 substrate + ci.dag scaffold -- **Slice 5**: BinaryShim emitter — gated on Slice 4 (or parallel); proves toggle -- **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution — gated on Phase 3 Cluster M settling (test-as-data substrate stable) -- **Slice 7**: Affected-set integration via BinaryShim — gated on Slice 5 + PR #2713 (✓ merged) -- **Slice 8**: ci.yml deletion + emission-target toggle finalized — gated on Slices 4-7 + acceptance verification +- **Slice 4**: `EmissionTarget` field landing (placement per WI-1 canvas) + YamlStatic emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges. +- **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. +- **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). +- **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). +- **Slice 8**: ci.yml deletion + emission-target toggle finalized + `ci_yml_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. ## §4. Dependency graph ``` -External prereqs (already in flight): - - Auto-spawn fix (cluster ctrl#217) → unblocks Slice 1 - - T-LBP COMPLETE → unblocks Slice 2 +External prereqs: + - T-LBP COMPLETE → unblocks Slice 2 (timing carriers) - Phase 3 Cluster M settling (#2715/#2716, calm-newt-602 + silent-swift-300) → unblocks Slice 6 - - Affected-set lens (PR #2713) ✓ MERGED - -Critical path: - Slice 1 → Slice 3 → Slice 4 ──┐ - ├─→ Slice 7 → Slice 8 - Slice 5 ─┤ ↑ - Slice 2 ──────────────────────┘ │ - │ - Phase 3 Cluster M → Slice 6 ─────────────────┘ - -Parallelizable (start NOW, independent of held substrate): - - Emitter-dispatch architecture canvas (forward-looking design) - - ci.dag scaffold first-draft (uses existing carriers at dsl/extdeps/github/actions.dag) - - r3-program-plan.md §1.8 gate-addition canonical-ledger update (PM-direct) + - PR #2713 (affected-set lens) ✓ MERGED + - PR #2160 + #2169 (Slice 1 substrate) ✓ MERGED + - PR #2371 (Slice 3 demo) ✓ MERGED + +Critical path (forward): + WI-1 canvas merge ──┐ + ├─→ Slice 4 (YamlStatic emitter) ──┐ + WI-2 ci.dag extend ─┤ │ + ├─→ Slice 5 (BinaryShim emitter) ──┼─→ Slice 7 (affected-set integration) ──┐ + │ │ + Phase 3 Cluster M settles → Slice 6 (Cost dim) ─────────────────────────┤ + │ + ├─→ Slice 8 (ci.yml deletion) + │ + └─→ all 4 NEW §1.8 gates PASSING + +Parallelizable (started 2026-05-12 — dispatched under PM): + - WI-1 emitter-dispatch architecture canvas (worker still-heron-763) + - WI-2 dsl/gunbc/ci.dag extension to full ci.yml coverage (worker cool-carp-720) ``` ## §5. Realistic R3-close timing Assumes: -- Auto-spawn fix lands within 1 week → Slice 1 dispatches - T-LBP COMPLETE within 2-3 weeks → Slice 2 dispatches - Phase 3 Cluster M settles within 2-4 weeks → Slice 6 unblocks +- WI-1 + WI-2 land within 1 week (drafts in flight) - Slices 4-5 take 1-2 weeks each (emitter implementation) - Slice 7 (affected-set integration) takes 1-2 weeks - Slice 8 (ci.yml deletion + acceptance) takes 1 week -**Estimated R3-close-with-FULL**: 6-10 weeks from 2026-05-12. Tight but achievable if external gates resolve on schedule. Critical-path risk: T-LBP COMPLETE timing + Phase 3 Cluster M settling. +**Estimated R3-close-with-FULL**: 6-10 weeks from 2026-05-12. Tight but achievable if external gates (T-LBP, Phase 3 Cluster M) resolve on schedule. + +## §6. Immediate parallel work (PM-direct work-items — DISPATCHED 2026-05-12) -## §6. Immediate parallel work (PM-direct work-items) +**WI-1**: T-WAD emitter-dispatch architecture canvas +- Output: `docs/design-ci-workflow-emitter-dispatch.md` (new) +- Worker: **still-heron-763** (PM auto-spawn 2026-05-12 ~06:30Z) +- Brief: `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` +- Independent of held substrate; Slice 1 LANDED -Independent of held substrate; dispatchable now: +**WI-2**: `dsl/gunbc/ci.dag` extension to full `.github/workflows/ci.yml` coverage +- Output: extended `dsl/gunbc/ci.dag` (existing file from PR #2371) using concrete `Workflow` / `Job` / `Step` carriers from `dsl/extdeps/github/actions.dag` +- Worker: **cool-carp-720** (PM auto-spawn 2026-05-12 ~06:30Z) +- Brief: `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` +- Independent of held substrate; Slice 1 LANDED -**WI-1 (PM auto-spawn)**: T-WAD emitter-dispatch architecture canvas -- Output: `docs/design-ci-workflow-emitter-dispatch.md` -- Scope: How `emission_target` field routes to multiple emitters; consumer pattern; relationship to existing `05_emit_*.dag` consolidation thesis; YamlStatic semantics vs BinaryShim semantics; how affected-set output is consumed at runtime -- Authority: forward-looking; Mgr-tier preliminary (warm-wolf-698 + Director ratify final) +Both workers briefed with brief-pointer messages 2026-05-12 ~06:30Z. Canvas + extension PRs expected within ~1 week. -**WI-2 (PM auto-spawn)**: T-WAD ci.dag scaffold first-draft -- Output: `dsl/extdeps/github/ci.dag` (new file) -- Scope: captures current `.github/workflows/ci.yml` jobs + steps + deps + runner selectors as `Workflow` instance; placeholder `emission_target: YamlStatic` field -- Authority: forward-looking; consumes existing carriers at `dsl/extdeps/github/actions.dag`; substrate-compatible at HEAD +## §7. Routing — RATIFIED 2026-05-12 -(Skipping a separate WI for §1.8 gate-addition — PM can author proposal directly in this scoping doc; Director ratifies via this doc's review.) +**Director (zesty-bear-812) ratified at msg_5cbdad24 2026-05-12 ~06:35Z**: -## §7. Routing requests +1. ✅ **FULL R3-close scope ratified** — operator directive aligns with #846 c#4412330468 framing; no R4 carve +2. ✅ **Gate framing: GATE-ADDITIVE** (NOT scope-expand #56); 4 NEW gates per §1 +3. ✅ **Owner-Mgr decision: LANE-ABSORB to Substrate Mgr (warm-wolf-698)** with explicit T-CI-WAD program-tag on work-items; no dedicated T-CI-WAD Mgr spawn (avoids standing-Mgr-bottleneck per `feedback_standing_managers_need_owned_deliverables`) +4. ✅ **Sequencing endorsed** (Slice 2 gated T-LBP; Slice 6 gated Phase 3 Cluster M; WI-1/WI-2 dispatched immediately) -1. **Director (zesty-bear-812)**: Ratify FULL R3-close scope; ratify new gate set (or scope-expansion of #56/#63); decide owner-Mgr for Slice 4-8 (warm-wolf-698 absorb OR new T-CI-WAD Mgr spawn) -2. **Substrate Mgr (warm-wolf-698)**: Absorb Slice 4-5 (emitters) + Slice 8 (ci.yml deletion) into T-WAD lane scope; review WI-1 canvas + WI-2 ci.dag scaffold when drafted -3. **Verification Mgr (clever-tern-670)**: Absorb Slice 7 (affected-set integration into CI emitter) — natural extension of PR #2713 affected-set lens ownership; coordinate with Substrate Mgr at slice handoff -4. **Debt-Paydown Mgr (zesty-boar-261)**: Absorb Slice 6 sub-component (slow-test-exemptions.txt dissolution) — falls into existing slow-test ratchet ownership +**Lane-absorption details** (Director-ratified): +- **Substrate Mgr (warm-wolf-698)**: absorbs Slices 4-5 (emitters) + Slice 8 (ci.yml deletion) into T-WAD lane with T-CI-WAD program-tag; consumes WI-1 canvas + WI-2 extension PR output +- **Verification Mgr (clever-tern-670)**: absorbs Slice 7 (affected-set integration in BinaryShim) — natural extension of PR #2713 ownership +- **Debt-Paydown Mgr (zesty-boar-261)**: absorbs Slice 6 sub-component (slow-test-exemptions.txt dissolution; Cost-dimension on tests integrates with Phase 3 Cluster M test-as-data substrate) + +PM-relay to warm-wolf-698 + Director co-sign at #828 if cross-tier confirmation needed. ## §8. Cross-references - `docs/r3-program-plan.md` §1.4 (Class 4 closure) + §1.8 (gates 53-58, 63) + §4.4 (T-WAD lane) - `docs/design-affected-set-lens.md` — affected-set lens substrate (PR #2713 ✓ merged); Slice 7 consumes -- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief +- `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief (LANDED PR #2160) +- `dsl/extdeps/github/actions.dag` — canonical platform carriers (`Workflow:21` `Job:110` `Step:147` `WorkflowSecret:102`) +- `dsl/gunbc/ci.dag` — existing CI intent declarations (PR #2371; gate-centric; WI-2 extends) +- `dsl/extdeps/cron_schedule_model.dag` — CronSchedule carrier (LANDED via PR #2169) - `docs/ci-pipeline-optimization.md` — pre-v3 historical optimization (background context; not active program) - `docs/briefs/r3-ci-layer-2-pm-prestaged-mgr-fill-template.md` — Layer 2 path-regex bridge (PR #2721 ✓ merged); dissolution target for Slice 7 - `project_eliminate_emit_lang_files.md` (memory) — omni-emission consolidation thesis; inherited architecture for workflow-target dispatch +- `feedback_audit_adjacent_authority_first` (memory) — grep authority before authoring; rule of record for codex BLOCKING #9970 fix below + +## §9. Acceptance-aggregator pattern pilot (Director-flagged 2026-05-12; parked) + +Director (msg_5cbdad24 §5 META) flagged T-CI-WAD as a natural pilot for the **acceptance-aggregator row-class** under discussion in Director↔user thread. + +Proposed gate (not blocking PR #2744 merge): + +| Proposed | Predicate-family | Lane | Closes when | +|---|---|---|---| +| `t_ci_wad_acceptance` | acceptance-aggregator | T-CI-WAD | All 5 constituent gates GREEN (#56 + 4 NEW gates from §1) | + +**Status**: PARKED — surfaces at next Director cadence tick for scaffold decision. If user-tier framing converges on broad aggregator pattern (Cluster M / Cluster F / Cluster K / T-V2-Retirement siblings), T-CI-WAD becomes #6 in aggregator set. PM available to author the §1.8 pattern-doc shape if Director elects to scaffold. --- **End of scoping doc.** + +— Authored by deep-wolf-155 (PM) 2026-05-12. Director ratification absorbed msg_5cbdad24. codex BLOCKING #9970 (carrier hierarchy: Workflow > Job > Step) fixed 2026-05-12 — earlier draft incorrectly stated `Workflow` generic + flat job→Step mapping; corrected to concrete `Workflow` per `dsl/extdeps/github/actions.dag:21` authority + nested Job-with-Steps hierarchy. From 5403053a15763318611fdf64a84d616ef0114bbb Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 06:58:44 +0000 Subject: [PATCH 03/23] =?UTF-8?q?docs(scope):=20fix=20Slice=201=20cron=20c?= =?UTF-8?q?arrier=20naming=20(CronExpression=20=E2=86=92=20CronSchedule)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 75ff61bb668..7d15a6ee75e 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -10,7 +10,7 @@ ## §0. What changes vs existing T-WAD plan -**Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. **Slice 1 LANDED via PR #2160** (WorkflowSecret + CronExpression carriers). **Slice 3 demo LANDED via PR #2371** (`t_ci_workflow_as_data_demo.dag` + integration tests). +**Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. **Slice 1 LANDED via PR #2160 + #2169** (`WorkflowSecret` + `CronSchedule` carriers — Slice 1 worker brief naming `CronExpression` was superseded by the landed `CronSchedule` model at `dsl/extdeps/cron_schedule_model.dag`; use `CronSchedule` as the grounded name). **Slice 3 demo LANDED via PR #2371** (`t_ci_workflow_as_data_demo.dag` + integration tests). **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — extend `dsl/gunbc/ci.dag` to cover full `.github/workflows/ci.yml` From 03545da651a1ec9bb1f584b6d2c234bb45676121 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:11:44 +0000 Subject: [PATCH 04/23] =?UTF-8?q?docs(briefs+scope):=20T-WAD=20FULL=20R3?= =?UTF-8?q?=20(c-refined)=20cascade=20=E2=80=94=20=C2=A71/=C2=A79=20gate-s?= =?UTF-8?q?et=20+=20WI-2=20re-brief?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 195 +++++++++--------- ...-t-workflow-as-data-full-r3-close-scope.md | 40 ++-- 2 files changed, 128 insertions(+), 107 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index abca24fb5ae..18876c692ff 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -1,113 +1,118 @@ -# Worker brief — T-WAD FULL R3 ci.dag extension (current ci.yml coverage) +# Worker brief — T-WAD FULL R3 ci_emission.dag substrate scaffold -**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 2026-05-12. -**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this is forward-looking scaffold; final ratification + emitter integration in Slice 4-5. -**Closure predicate**: `dsl/gunbc/ci.dag` extended to cover current `.github/workflows/ci.yml` content + Mgr-ratified shape; downstream Slice 4 YamlStatic emitter consumes; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e 2026-05-12. +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this WI lands the projection-function substrate that enables Slice 4 emitter implementation. +**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. + +## Substrate-shape ratification anchor + +The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e and self-corrected to via PR #2749 §7 (warm-wolf-698). The earlier (a) shape (`EmissionTarget?` field on `dsl/extdeps/github/actions.dag::Workflow`) was RETRACTED at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749 for INVARIANTS P1 violation (CI logic placed on platform carrier). + +**The ratified shape**: `EmissionTarget` is a parameter to a projection function in `dsl/gunbc/`, NOT a field on any carrier. The function's invocation pin produces the `Workflow` value the emitter consumes. ## Output -**Extend existing `dsl/gunbc/ci.dag`** to cover full current `.github/workflows/ci.yml` content. (This file ALREADY EXISTS — it is the gate-centric CI declaration; landed via PR #2371. Current shape: `CIGate` / `CIPipeline` / `GateSource` + 4 instantiated gates [lint_gate / test_gate / l1_gate / compile_gates_gate]. The extension work is to express the FULL workflow content — jobs, steps, triggers, runner selection, matrix — composing against existing platform carriers at `dsl/extdeps/github/actions.dag`.) - -## Scope - -Compose the current `.github/workflows/ci.yml` against existing platform carriers from `dsl/extdeps/github/actions.dag` (authority — single-authority per `feedback_audit_adjacent_authority_first`): - -**Carrier hierarchy** (per `dsl/extdeps/github/actions.dag`): - -``` -Workflow { // line :21 — concrete type, NOT generic - name: String - on: List // triggers - jobs: List // line :24 — workflow contains JOBS - env: Map - permissions: WorkflowPermissions? -} - -Job { // line :110 - id: String - steps: List // line :114 — job contains STEPS - needs: List // line :115 — job-id references (NOT step-level) - runner: RunnerSpec - strategy: MatrixStrategy? - ... -} - -Step // line :147 — RunStep | UsesStep sum - = RunStep { run, shell, env, ... } - | UsesStep { uses: ActionRef, with, ... } -``` - -**Mapping ci.yml → Workflow instance**: - -1. **Top-level `on:`** → `Workflow.on: List` (Push / PullRequest / Schedule / WorkflowDispatch variants from `:41`) -2. **Each `job:` in ci.yml** → `Job` element in `Workflow.jobs: List` (NOT a Step — Workflow contains Jobs, Jobs contain Steps) -3. **Per-job `needs:` field** → `Job.needs: List` (list of job-id references; NOT step-level dependencies) -4. **Per-job `steps:` field** → `Job.steps: List` (each `run:` → RunStep; each `uses:` → UsesStep) -5. **Per-job `strategy.matrix:`** → `Job.strategy: MatrixStrategy?` (per `:222`) -6. **Per-job `runs-on:`** → `Job.runner: RunnerSpec` (HostedRunner / SelfHosted variants from `:132`); use existing pool labels (`gunbc-quick` / `gunbc-v3` etc.) -7. **`if:` conditions** → `Job.if_condition: String?` or `Step.if_condition: String?` per appropriate level -8. **Layer 1 skip** (`changes` job) → first `Job` in pipeline; its output binding drives `if:` conditions on downstream jobs -9. **Layer 2 cluster skip** (template per PR #2721 — NOT WIRED into ci.yml at HEAD): leave as `// TODO Slice 7` marker — Slice 7 affected-set integration replaces -10. **Slow-test ratchet** (`scripts/slow-test-exemptions.txt`): represented as `Step` with `RunStep.run: "scripts/check-slow-test-ratchet.sh"` for now — leave `// TODO Slice 6` marker for Cost-dimension migration -11. **Secrets references**: use existing `WorkflowSecret { name: SecretName, scope: SecretScope }` carrier (per actions.dag `:102` — LANDED in PR #2160, **NOT held** as earlier brief incorrectly stated) -12. **Cron triggers**: use existing `CronSchedule` carrier from `dsl/extdeps/cron_schedule_model.dag` (LANDED) - -**Existing `gunbc/ci.dag` already declares** `CIGate` / `CIPipeline` / `GateSource` (gate-centric CI intent). The extension work integrates the platform-shape `Workflow` instance alongside (or composing through) the existing gate-centric declaration. **Open question for canvas/Mgr** (WI-1 may inform): does the new Workflow data go into `gunbc/ci.dag` as a sibling data, into a new file `dsl/gunbc/ci_workflow.dag`, or compose `CIPipeline` → `Workflow` via a derivation lens? Leave this in `// QUESTION ratify-via-Mgr` markers. - -## Coverage scope - -This is a FIRST DRAFT extending the existing `dsl/gunbc/ci.dag`. Coverage acceptance: - -- **MUST**: All `jobs:` in `.github/workflows/ci.yml` represented as `Job` nodes (Workflow.jobs list) -- **MUST**: `needs:` graph faithful at Job-level (each Job.needs: List matches ci.yml `needs:` field for that job) -- **MUST**: Triggers captured (push / PR / schedule trio as List) -- **MUST**: Per-job runner pool selection correct (`gunbc-quick` / `gunbc-v3` / generic) -- **MUST**: Trigger conditions / runner labels validate against existing carriers (no new substrate types introduced) -- **SHOULD**: Matrix strategies for jobs that use them -- **SHOULD**: Steps within each Job captured (RunStep / UsesStep) -- **NICE-TO-HAVE**: complete `with:` / `uses:` action references per step -- **DEFERRED**: Layer 2 cluster `if:` regex (TODO Slice 7); slow-test-exemptions Cost-dim migration (TODO Slice 6); affected-set wiring (TODO Slice 7); emission_target field placement (TODO ratify via WI-1 canvas) +**Create NEW file `dsl/gunbc/ci_emission.dag`** declaring: -## Reference materials +1. **`EmissionTarget` open enum** (sum-type with named arms; OPEN per design): + + ``` + EmissionTarget = YamlStatic + | BinaryShim + | PythonShim + | InlineGunbc + | ... // open enum — additional targets may be added + ``` + + Each arm is a tag indicating the emission strategy. Initial set covers the 4 strategies named in PM scoping doc §3. Open-enum discipline: the projection function must total-handle the declared arms; unknown arms compile-fail (per fail-closed discipline `feedback_fail_closed_discipline`). + +2. **`project_github_actions` projection function declaration**: + + ``` + project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow + ``` + + - Input domain: `(ci_workflow_dag: CIWorkflowDag, target: EmissionTarget)` + - Output codomain: `Workflow` (the `dsl/extdeps/github/actions.dag::Workflow` platform carrier) + - **This WI lands the DECLARATION + signature**, not the per-arm implementation. Per-arm bodies (YamlStatic projection, BinaryShim projection, etc.) are Slice 4+ work owned by Substrate Mgr. + - Leave function body as `// TODO Slice 4-5: per-arm projection implementations` with structural total-handling skeleton (match on `target` arms; each arm body marked TODO). + +3. **`gunbc_ci_yml_workflow` pinned-projection data binding**: + + ``` + gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) + ``` -- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent) -- `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling WI-1 brief (emitter-dispatch canvas; informs emission_target placement) -- `dsl/extdeps/github/actions.dag` — **canonical platform carriers** (authority for `Workflow` / `Job` / `Step` shapes; READ THIS FIRST — line numbers `:21` `:24` `:110` `:114` `:147` cited above) -- `dsl/gunbc/ci.dag` — **existing file to extend** (gate-centric declarations from PR #2371; do NOT duplicate) -- `dsl/extdeps/cron_schedule_model.dag` — `CronSchedule` carrier (Schedule trigger consumer) -- `dsl/extdeps/github/actions.dag:96-105` — `WorkflowSecret` + `SecretScope` carriers (LANDED PR #2160) -- `.github/workflows/ci.yml` — source content to translate + - `ci_workflow_dag` is the input — sourced from existing `dsl/gunbc/ci.dag` `CIPipeline` value or a new `CIWorkflowDag` carrier (see "CIWorkflowDag dependency sequencing" below) + - This is the **invocation pin** that defines the canonical YAML-emission point for downstream Slice 4 + - The pinned data binding is THE Workflow value Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output + +## CIWorkflowDag dependency sequencing + +The projection function takes a `CIWorkflowDag` input. Two valid sourcing paths: + +**Path (a) — reuse existing `dsl/gunbc/ci.dag` CIPipeline value**: pass the gate-centric `CIPipeline` from PR #2371 as the input domain; the projection function unpacks gates + pipeline structure into Workflow shape. **No new substrate type needed**. + +**Path (b) — introduce new `CIWorkflowDag` carrier**: declares a richer CI-logic shape that captures jobs/steps/needs/triggers at gunbc-substrate level (NOT platform-level), then projects into the `Workflow` platform carrier via the function. **Substrate-shape addition — belongs to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`**. + +**Disposition**: Path (a) preferred for this WI — minimal substrate addition, leverages existing `CIPipeline` authority. If Path (a) cannot express ci.yml fully (e.g., needs steps/runners that `CIPipeline` doesn't carry), **STOP and PING Substrate Mgr** to ratify Path (b) carrier shape via canvas. Do NOT introduce `CIWorkflowDag` without Mgr ratification. + +## Scope boundaries (DO / DON'T) + +**DO**: +- Create NEW file `dsl/gunbc/ci_emission.dag` (the projection-substrate file). +- Declare `EmissionTarget` open enum with 4 named arms + open marker. +- Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. +- Declare `gunbc_ci_yml_workflow` pinned-projection data binding (invocation pin with `YamlStatic`). +- Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. +- Cite existing `CIPipeline` from `dsl/gunbc/ci.dag` as the input source if Path (a). + +**DON'T**: +- Do NOT add fields to `dsl/extdeps/github/actions.dag` carriers (Workflow/Job/Step) — this is the INVARIANTS P1 violation the (c-refined) shape resolves. +- Do NOT extend `dsl/gunbc/ci.dag` with new substrate types — extension belongs to Mgr canvas tier. +- Do NOT implement per-arm projection bodies — those are Slice 4-5 work owned by Substrate Mgr after canvas ratification. +- Do NOT modify `.github/workflows/ci.yml` — Slice 8 deletes; this WI only lands the projection substrate. +- Do NOT introduce a `CIWorkflowDag` carrier without Substrate Mgr ratification (see "CIWorkflowDag dependency sequencing" above). ## Acceptance gates -1. `dsl/gunbc/ci.dag` extended (NOT replaced); valid `.dag` syntax per existing v3 parser -2. All ci.yml `jobs:` represented as Job nodes in a `Workflow` instance — count matches -3. `Job.needs` faithfully captures each job's `needs:` field as job-id references -4. Triggers captured (push / PR / schedule trio) -5. Per-job runner selection correct -6. No new substrate types introduced (extends only — substrate-shape additions belong to Substrate Mgr per `feedback_substrate_shape_belongs_in_mgr_canvas`) -7. TODO markers explicit for: Layer 2 cluster `if:` regex (Slice 7); slow-test-exemptions (Slice 6); affected-set wiring (Slice 7); emission_target placement (ratify via WI-1 canvas) -8. `cargo test --workspace` green (no breakage of existing tests including `t_ci_workflow_as_data_demo`) -9. `cargo clippy --all-targets -- -D warnings` clean -10. `cargo fmt --all --check` clean +1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. +2. `EmissionTarget` open enum declared with 4 named arms (`YamlStatic`, `BinaryShim`, `PythonShim`, `InlineGunbc`) + open-enum marker. +3. `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). +4. `gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic)` pinned-projection data binding declared. +5. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). +6. NO new fields on existing `dsl/gunbc/ci.dag` carriers (`CIGate` / `CIPipeline` / `GateSource`). +7. NO new substrate types introduced without Mgr ratification (per `feedback_substrate_shape_belongs_in_mgr_canvas`). +8. `cargo test --workspace` green (no breakage of existing tests including `t_ci_workflow_as_data_demo`). +9. `cargo clippy --all-targets -- -D warnings` clean. +10. `cargo fmt --all --check` clean. ## STOP / PING criteria -- **STOP** if existing carriers at `dsl/extdeps/github/actions.dag` are insufficient (e.g., need new step-shape, new trigger-shape) — surface to Substrate Mgr (substrate-shape additions belong to canvas-tier per `feedback_substrate_shape_belongs_in_mgr_canvas`) -- **STOP** if extending `gunbc/ci.dag` requires structural reframing of existing `CIGate` / `CIPipeline` declarations (e.g., they should compose under `Workflow` rather than parallel-represent) — surface to Mgr; this is a Mgr-canvas-tier decision -- **STOP** if `emission_target` field placement is forced before WI-1 canvas ratifies — leave `// QUESTION` markers, sibling worker (still-heron-763 / WI-1) is authoring the canvas in parallel -- **PING** PM (deep-wolf-155) on PR-open for review-routing -- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 YamlStatic emitter dispatch routing -- **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas) if emission_target shape questions cross +- **STOP** if existing `CIPipeline` from `dsl/gunbc/ci.dag` cannot supply enough input data for the projection function to produce a faithful `Workflow` value — surface to Substrate Mgr; Path (b) requires canvas-tier ratification. +- **STOP** if `EmissionTarget` open-enum declaration requires substrate-shape features not yet supported by current v3 surface (e.g., open-enum vocabulary missing) — surface to Substrate Mgr. +- **STOP** if `project_github_actions` function signature requires substrate features not yet supported (e.g., function-as-projection declaration vocabulary missing) — surface to Substrate Mgr; canvas-tier decision. +- **PING** PM (deep-wolf-155) on PR-open for review-routing. +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 emitter dispatch routing. +- **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas at PR #2749) — the canvas declares the (c-refined) shape this WI implements; if canvas re-ratifies the shape, this WI must follow. + +## Reference materials + +- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent); §1 gate `project_github_actions_landed` is the closure-gate for this WI. +- `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling WI-1 brief (declares the (c-refined) substrate shape this WI implements). +- PR #2749 (still-heron-763 WI-1 canvas) §7 — (c-refined) shape self-correction; THIS WI implements that shape. +- `dsl/extdeps/github/actions.dag:1-12` — platform-carrier scope header ("platform constraints, not CI logic (that lives in gunbc/ci.dag)"); the discriminator that grounds the (c-refined) shape. +- `dsl/extdeps/github/actions.dag:21` — `Workflow` carrier (codomain type for `project_github_actions`). +- `dsl/gunbc/ci.dag` — existing gate-centric CI substrate (Path (a) input source). +- `feedback_audit_extdeps_header_for_logic_vs_platform_discriminator.md` — the discipline that catches (a)-shape mis-placements at canvas-authoring time. ## Sequencing -- Dispatch-ready NOW (existing carriers + existing ci.dag suffice for first-draft extension) -- Slice 1 substrate LANDED (PR #2160) — `WorkflowSecret` + `CronSchedule` available; no held substrate -- Slice 3 demo LANDED (PR #2371) — `t_ci_workflow_as_data_demo.dag` exists; this WI extends scope from demo→full -- Final shape ratified during Slice 4 YamlStatic emitter implementation (Substrate Mgr dispatch) -- Slice 4 YamlStatic emitter consumes this extended `ci.dag` and emits `.github/workflows/ci.yml`-equivalent; equivalence is the Slice 4 acceptance gate +- Dispatch-ready NOW (existing `dsl/extdeps/github/actions.dag::Workflow` + existing `dsl/gunbc/ci.dag::CIPipeline` suffice for declaration scope). +- Slice 1 substrate LANDED (PR #2160) — `WorkflowSecret` + `CronSchedule` available; consumed downstream by Slice 4 emitter, not this WI. +- Slice 3 demo LANDED (PR #2371) — `t_ci_workflow_as_data_demo.dag` exists; this WI extends scope from demo-of-evaluation into projection-substrate-declaration. +- This WI lands the projection-function substrate; Slice 4 implements per-arm bodies; Slice 8 deletes hand-authored ci.yml. --- -— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24; codex BLOCKING #9970 fixed 2026-05-12 (carrier hierarchy: Workflow > Job > Step, not flat job→Step). +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e; revised after codex BLOCKING #9970 on PR #2749 (INVARIANTS P1: EmissionTarget belongs in gunbc-substrate projection function, not as field on actions.dag::Workflow). diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 7d15a6ee75e..4358d8ce0bd 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -19,19 +19,27 @@ 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally -## §1. §1.8 gate additions — RATIFIED 2026-05-12 (gate-additive) +## §1. §1.8 gate additions — RATIFIED 2026-05-12 (gate-additive; revised post-(c-refined) ratification) -**Authority**: Director ratification (zesty-bear-812) at msg_5cbdad24 2026-05-12 ~06:35Z. **Framing: GATE-ADDITIVE** (NOT scope-expand #56). Reasoning: #56 was authored as demonstration-class (one workflow proves feasibility); scope-expanding to "ALL workflow" would invalidate demonstration semantics + force a post-hoc reclassification of #56's status meaning. Cleaner: #56 stays as demonstration anchor (promotable to PASSING when first .dag workflow lands — likely closing soon given PR #2371 landed the demo); add 4 NEW gates for full-R3 closure surface. +**Authority**: Director ratification (zesty-bear-812): +- Initial gate-additive framing + 4 NEW gates: msg_5cbdad24 2026-05-12 ~06:35Z +- Revised gate set per (c-refined) canvas ratification + clarification: msg_4f7f536d + msg_f9fd669e 2026-05-12 ~07:00Z (6 NEW gates with substrate-shape vs state-check family splits per kernel-modeling discipline) + +**Framing**: GATE-ADDITIVE (NOT scope-expand #56). Reasoning: #56 was authored as demonstration-class (one workflow proves feasibility); scope-expanding to "ALL workflow" would invalidate demonstration semantics + force a post-hoc reclassification of #56's status meaning. Cleaner: #56 stays as demonstration anchor (promotable to PASSING when first .dag workflow lands — likely closing soon given PR #2371 landed the demo); add 6 NEW gates for full-R3 closure surface. **Citation chain**: operator directive aligns with prior #846 c#4412330468 ("0 hand-Rust including tests AND stage0; bootstrap is data + self-generated") — `.github/workflows/ci.yml` is structurally identical to hand-Rust under that framing. Dissolution is load-bearing for R3 close. +**Substrate-shape ratified** (per PR #2749 (c-refined)): `EmissionTarget` sum-type lives in gunbc namespace; `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` lives in gunbc; extdeps.github.actions.Workflow unmodified. Emission choice is invocation-time data (projection parameter), NOT carrier-time data. See PR #2749 for the comparison canvas authority. + | Gate ID | Predicate-family | Lane | Pass condition | |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | -| **NEW: `workflow_emission_target_toggle_proven`** | substrate-shape | T-WAD | `EmissionTarget` open enum proven via BOTH `YamlStatic` + `BinaryShim` emitters working from same `ci.dag` (Brian's modeling-decision-not-choice framing structurally encoded) | -| **NEW: `ci_yml_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` absent from repo + regression guard test prevents re-introduction | -| **NEW: `ci_uses_affected_set_selection`** | state-check | T-WAD + T-Verification | `BinaryShim` emitter consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:` gates removed from any remaining workflow files | -| **NEW: `test_cost_dimension_landed`** | substrate-shape + state-check | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes; `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from Cost dimension | +| **NEW: `ci_yml_deleted`** | state-check | T-WAD | `.github/workflows/ci.yml` absent from repo + regression guard test prevents re-introduction | +| **NEW: `emission_target_open_enum_landed`** | substrate-shape | T-WAD | `EmissionTarget` sum-type (`YamlStatic | BinaryShim | PythonShim | InlineGunbc | ...`) declared in gunbc namespace as open enum | +| **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | +| **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | +| **NEW: `slow_test_exemptions_dissolved`** | state-check | T-WAD + Debt-Paydown | `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from `Cost` dimension structurally (state-check sibling of `test_cost_dimension_landed` per kernel-modeling discipline split) | +| **NEW: `ci_uses_affected_set_selection`** | state-check | T-WAD + T-Verification | `BinaryShim` emitter consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:` gates removed from any remaining workflow files (cross-tier co-owned with clever-tern-670 Slice 7 work) | ## §2. Architectural shape (operator-ratified 2026-05-12) @@ -174,17 +182,25 @@ PM-relay to warm-wolf-698 + Director co-sign at #828 if cross-tier confirmation - `project_eliminate_emit_lang_files.md` (memory) — omni-emission consolidation thesis; inherited architecture for workflow-target dispatch - `feedback_audit_adjacent_authority_first` (memory) — grep authority before authoring; rule of record for codex BLOCKING #9970 fix below -## §9. Acceptance-aggregator pattern pilot (Director-flagged 2026-05-12; parked) +## §9. Acceptance-aggregator pattern pilot — Director scaffold LANDED (PR #2748); pilot row REVISED 2026-05-12 -Director (msg_5cbdad24 §5 META) flagged T-CI-WAD as a natural pilot for the **acceptance-aggregator row-class** under discussion in Director↔user thread. +Director scaffolded acceptance-aggregator pattern doc at `docs/design-section-1-8-acceptance-aggregator-pattern.md` (PR #2748). Pattern semantics: new §1.8 Family value 'acceptance-aggregator' + new 'depends_on:' column (comma-separated #-refs to constituent rows). Status derived as lattice-meet (DECLARED < CONSUMER_LANDED < PASSING) — machine-checkable; never hand-set. Aggregator rows are VIEWS over constituents; do NOT inflate 97→96 honest-close arithmetic. -Proposed gate (not blocking PR #2744 merge): +**T-CI-WAD pilot row** (Director-ratified at msg_4f7f536d + msg_f9fd669e 2026-05-12; depends_on revised 4→5→6 across Director iterations): -| Proposed | Predicate-family | Lane | Closes when | +| Proposed | Predicate-family | Lane | depends_on (lattice-meet status) | |---|---|---|---| -| `t_ci_wad_acceptance` | acceptance-aggregator | T-CI-WAD | All 5 constituent gates GREEN (#56 + 4 NEW gates from §1) | +| `t_ci_wad_acceptance` (or PM-named equivalent) | acceptance-aggregator | T-CI-WAD | **#56 + 6 NEW** (from §1): #56, `ci_yml_deleted`, `emission_target_open_enum_landed`, `project_github_actions_landed`, `test_cost_dimension_landed`, `slow_test_exemptions_dissolved`, `ci_uses_affected_set_selection` | + +**Status**: PARKED pending PR #2748 ratification (currently 1/2 approvals). When PR #2748 ratifies, this pilot row inserts into §1.8 ledger as the canonical T-CI-WAD aggregator. Sibling clusters (Cluster M / Cluster F / Cluster K / T-V2-Retirement) get the same template at low marginal cost. + +**Row is SHAPE-STABLE** post (c-refined) ratification: constituent gate-IDs finalized at Director msg_f9fd669e. depends_on revisions from #56+4→#56+5→#56+6 reflect canvas-driven gate-set refinement; aggregator semantics unchanged. -**Status**: PARKED — surfaces at next Director cadence tick for scaffold decision. If user-tier framing converges on broad aggregator pattern (Cluster M / Cluster F / Cluster K / T-V2-Retirement siblings), T-CI-WAD becomes #6 in aggregator set. PM available to author the §1.8 pattern-doc shape if Director elects to scaffold. +**Lattice-meet status derivation**: +- All constituents DECLARED → aggregator DECLARED +- All constituents CONSUMER_LANDED → aggregator CONSUMER_LANDED +- All constituents PASSING → aggregator PASSING +- ANY mix → aggregator status = minimum of constituents (per lattice-meet rule) --- From 19a1d8dfc3425f357b9f5dc1dfdc8e1a235d6ef8 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:15:06 +0000 Subject: [PATCH 05/23] =?UTF-8?q?docs(scope):=20fix=20ci=5Fyml=20gate=20se?= =?UTF-8?q?mantic=20=E2=80=94=20hand-authority=20dissolution,=20not=20file?= =?UTF-8?q?=20deletion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- ...3-t-workflow-as-data-full-r3-close-scope.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 4358d8ce0bd..5f0edcc07a1 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -14,7 +14,7 @@ **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — extend `dsl/gunbc/ci.dag` to cover full `.github/workflows/ci.yml` -2. **Hand-authored `ci.yml` DELETED** — replaced by static-regen artifact OR thin shim invoking compiled binary +2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some emission targets); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. 3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision. Field placement OPEN (see §2). 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally @@ -34,7 +34,7 @@ | Gate ID | Predicate-family | Lane | Pass condition | |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | -| **NEW: `ci_yml_deleted`** | state-check | T-WAD | `.github/workflows/ci.yml` absent from repo + regression guard test prevents re-introduction | +| **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some emission targets may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | | **NEW: `emission_target_open_enum_landed`** | substrate-shape | T-WAD | `EmissionTarget` sum-type (`YamlStatic | BinaryShim | PythonShim | InlineGunbc | ...`) declared in gunbc namespace as open enum | | **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | | **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | @@ -96,7 +96,7 @@ Existing T-WAD slices (state at 2026-05-12): - **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. - **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). - **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). -- **Slice 8**: ci.yml deletion + emission-target toggle finalized + `ci_yml_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. +- **Slice 8**: ci.yml hand-authority dissolution (hand-authored content replaced by emission artifact or thin-shim per chosen `EmissionTarget`) + emission-target toggle finalized + `ci_yml_hand_authority_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. **NOTE** (per briansrls BLOCKING #PR2744 2026-05-12): NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY, and YamlStatic / BinaryShim / PythonShim emission paths all require some `.github/workflows/ci.yml` artifact (full-emit or thin-shim) for GH Actions trigger discovery. ## §4. Dependency graph @@ -116,9 +116,9 @@ Critical path (forward): │ │ Phase 3 Cluster M settles → Slice 6 (Cost dim) ─────────────────────────┤ │ - ├─→ Slice 8 (ci.yml deletion) + ├─→ Slice 8 (ci.yml hand-authority dissolution) │ - └─→ all 4 NEW §1.8 gates PASSING + └─→ all 6 NEW §1.8 gates PASSING Parallelizable (started 2026-05-12 — dispatched under PM): - WI-1 emitter-dispatch architecture canvas (worker still-heron-763) @@ -133,7 +133,7 @@ Assumes: - WI-1 + WI-2 land within 1 week (drafts in flight) - Slices 4-5 take 1-2 weeks each (emitter implementation) - Slice 7 (affected-set integration) takes 1-2 weeks -- Slice 8 (ci.yml deletion + acceptance) takes 1 week +- Slice 8 (ci.yml hand-authority dissolution + acceptance) takes 1 week **Estimated R3-close-with-FULL**: 6-10 weeks from 2026-05-12. Tight but achievable if external gates (T-LBP, Phase 3 Cluster M) resolve on schedule. @@ -158,12 +158,12 @@ Both workers briefed with brief-pointer messages 2026-05-12 ~06:30Z. Canvas + ex **Director (zesty-bear-812) ratified at msg_5cbdad24 2026-05-12 ~06:35Z**: 1. ✅ **FULL R3-close scope ratified** — operator directive aligns with #846 c#4412330468 framing; no R4 carve -2. ✅ **Gate framing: GATE-ADDITIVE** (NOT scope-expand #56); 4 NEW gates per §1 +2. ✅ **Gate framing: GATE-ADDITIVE** (NOT scope-expand #56); 4 NEW gates per §1 (subsequently revised to 6 NEW per msg_f9fd669e + briansrls BLOCKING fix 2026-05-12 — see §1 current table) 3. ✅ **Owner-Mgr decision: LANE-ABSORB to Substrate Mgr (warm-wolf-698)** with explicit T-CI-WAD program-tag on work-items; no dedicated T-CI-WAD Mgr spawn (avoids standing-Mgr-bottleneck per `feedback_standing_managers_need_owned_deliverables`) 4. ✅ **Sequencing endorsed** (Slice 2 gated T-LBP; Slice 6 gated Phase 3 Cluster M; WI-1/WI-2 dispatched immediately) **Lane-absorption details** (Director-ratified): -- **Substrate Mgr (warm-wolf-698)**: absorbs Slices 4-5 (emitters) + Slice 8 (ci.yml deletion) into T-WAD lane with T-CI-WAD program-tag; consumes WI-1 canvas + WI-2 extension PR output +- **Substrate Mgr (warm-wolf-698)**: absorbs Slices 4-5 (emitters) + Slice 8 (ci.yml hand-authority dissolution) into T-WAD lane with T-CI-WAD program-tag; consumes WI-1 canvas + WI-2 extension PR output - **Verification Mgr (clever-tern-670)**: absorbs Slice 7 (affected-set integration in BinaryShim) — natural extension of PR #2713 ownership - **Debt-Paydown Mgr (zesty-boar-261)**: absorbs Slice 6 sub-component (slow-test-exemptions.txt dissolution; Cost-dimension on tests integrates with Phase 3 Cluster M test-as-data substrate) @@ -190,7 +190,7 @@ Director scaffolded acceptance-aggregator pattern doc at `docs/design-section-1- | Proposed | Predicate-family | Lane | depends_on (lattice-meet status) | |---|---|---|---| -| `t_ci_wad_acceptance` (or PM-named equivalent) | acceptance-aggregator | T-CI-WAD | **#56 + 6 NEW** (from §1): #56, `ci_yml_deleted`, `emission_target_open_enum_landed`, `project_github_actions_landed`, `test_cost_dimension_landed`, `slow_test_exemptions_dissolved`, `ci_uses_affected_set_selection` | +| `t_ci_wad_acceptance` (or PM-named equivalent) | acceptance-aggregator | T-CI-WAD | **#56 + 6 NEW** (from §1): #56, `ci_yml_hand_authority_dissolved`, `emission_target_open_enum_landed`, `project_github_actions_landed`, `test_cost_dimension_landed`, `slow_test_exemptions_dissolved`, `ci_uses_affected_set_selection` | **Status**: PARKED pending PR #2748 ratification (currently 1/2 approvals). When PR #2748 ratifies, this pilot row inserts into §1.8 ledger as the canonical T-CI-WAD aggregator. Sibling clusters (Cluster M / Cluster F / Cluster K / T-V2-Retirement) get the same template at low marginal cost. From 91a1f6b07e1c929089f37e9f16832a6f6c4896bb Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:16:43 +0000 Subject: [PATCH 06/23] =?UTF-8?q?docs(briefs):=20T-WAD=20WI-2=20=E2=80=94?= =?UTF-8?q?=20propagate=20briansrls=20BLOCKING=20substrate-fidelity=20conc?= =?UTF-8?q?erns=20to=20Slice=204-5=20canvas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit briansrls posted 4 BLOCKING inline reviews on PR #2744 (2026-05-12T06:58:55Z). Finding #1 (ci_yml gate semantic) addressed in commit 19a1d8dfc. Findings #2/#3/#4 target the OLD WI-2 brief content (compose-against-carriers scope) which was rewritten to declaration-only scope in commit 03545da65. 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 19a1d8dfc). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 18876c692ff..ca99194adbe 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -111,7 +111,18 @@ The projection function takes a `CIWorkflowDag` input. Two valid sourcing paths: - Dispatch-ready NOW (existing `dsl/extdeps/github/actions.dag::Workflow` + existing `dsl/gunbc/ci.dag::CIPipeline` suffice for declaration scope). - Slice 1 substrate LANDED (PR #2160) — `WorkflowSecret` + `CronSchedule` available; consumed downstream by Slice 4 emitter, not this WI. - Slice 3 demo LANDED (PR #2371) — `t_ci_workflow_as_data_demo.dag` exists; this WI extends scope from demo-of-evaluation into projection-substrate-declaration. -- This WI lands the projection-function substrate; Slice 4 implements per-arm bodies; Slice 8 deletes hand-authored ci.yml. +- This WI lands the projection-function substrate; Slice 4 implements per-arm bodies; Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per renamed gate `ci_yml_hand_authority_dissolved` — see scope doc §1 fix 2026-05-12). + +## Propagated substrate-fidelity concerns (Slice 4-5 — Substrate Mgr canvas) + +The following concerns are flagged by briansrls BLOCKING inline reviews on PR #2744 (2026-05-12T06:58:55Z) against the EARLIER brief content (when scope was "compose full ci.yml against existing carriers"). The CURRENT brief scope (declaration-only) does NOT make these claims, but the underlying substrate-fidelity concerns propagate to Slice 4-5 per-arm projection body work and must be addressed by Substrate Mgr (warm-wolf-698) canvas-tier before YamlStatic / BinaryShim / PythonShim implementations land. + +1. **Concurrency carrier absence**: current `.github/workflows/ci.yml` uses top-level `concurrency:` field; `dsl/extdeps/github/actions.dag::Workflow` does NOT model `concurrency`. P1/P2 fidelity requires extension (e.g., `Workflow.concurrency: Concurrency?` with `Concurrency { group, cancel_in_progress }`). +2. **`ready_for_review` PR activity absence**: current ci.yml uses `pull_request.types: [opened, synchronize, reopened, ready_for_review]`; `PullRequestActivity` enum in actions.dag may not carry `ready_for_review` arm. Audit + extend if missing. +3. **Trigger fidelity — NO fabrication**: current ci.yml declares only `push` and `pull_request` triggers — NOT `schedule`. Slice 4 YamlStatic emitter MUST emit faithfully (push + PR only); `Schedule` trigger arm exists in the carrier but is NOT instantiated for current ci.yml. **No fabrication of triggers absent from source.** +4. **Step body + action input completeness as MUST (not SHOULD / NICE-TO-HAVE)**: Slice 4 ci.yml-equivalent regeneration requires executable step bodies (`RunStep.run`, `RunStep.shell`, `RunStep.env`) and complete action references (`UsesStep.uses: ActionRef`, `UsesStep.with: Map`) as MUST acceptance. P1 modeling faithfulness fails if these are partial. + +These concerns are NOT acceptance gates for THIS WI (declaration-only scope). They are propagated to Slice 4-5 canvas as MUST-address-before-per-arm-body-PRs. --- From 9542b2865149bad54f721ec88dd797e33a2dea7c Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:20:09 +0000 Subject: [PATCH 07/23] =?UTF-8?q?docs(briefs):=20T-WAD=20WI-2=20=E2=80=94?= =?UTF-8?q?=20flip=20CIWorkflowDag=20sourcing=20to=20Path=20(b)=20per=20Su?= =?UTF-8?q?bstrate=20Mgr=20clarification?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per warm-wolf-698 msg_27d99080 (Substrate Mgr): Path (a) reusing CIPipeline is INSUFFICIENT. CIPipeline { name, gates: List } is a FLAT gates list without edge/dependency structure. project_github_actions consumes gate-DEPENDENCY (which gates depend on which); flat List cannot serve as projection input. Path (b) — CIWorkflowDag carrier from PR #2736 (neat-badger-30) — REQUIRED. CIWorkflowDag { name, nodes: List, edges: List } 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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index ca99194adbe..126d9fa91a9 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -2,7 +2,7 @@ **Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e 2026-05-12. **Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this WI lands the projection-function substrate that enables Slice 4 emitter implementation. -**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 deletes hand-authored `.github/workflows/ci.yml`. +**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per `ci_yml_hand_authority_dissolved` gate — see scope doc §1). ## Substrate-shape ratification anchor @@ -47,15 +47,25 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - This is the **invocation pin** that defines the canonical YAML-emission point for downstream Slice 4 - The pinned data binding is THE Workflow value Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output -## CIWorkflowDag dependency sequencing +## CIWorkflowDag dependency sequencing — Path (b) REQUIRED (Substrate Mgr clarification 2026-05-12 msg_27d99080) -The projection function takes a `CIWorkflowDag` input. Two valid sourcing paths: +**The projection function takes a `CIWorkflowDag` input.** Substrate Mgr (warm-wolf-698) clarified at msg_27d99080 that Path (a) is INSUFFICIENT: -**Path (a) — reuse existing `dsl/gunbc/ci.dag` CIPipeline value**: pass the gate-centric `CIPipeline` from PR #2371 as the input domain; the projection function unpacks gates + pipeline structure into Workflow shape. **No new substrate type needed**. +**Path (a) — reuse existing `dsl/gunbc/ci.dag::CIPipeline`** — REJECTED. `CIPipeline { name, gates: List }` is a FLAT gates list without edge/dependency structure. `project_github_actions` consumes gate-DEPENDENCY (which gates depend on which); flat `List` cannot serve as the projection input. Path (a) is INSUFFICIENT for the projection's input requirements. -**Path (b) — introduce new `CIWorkflowDag` carrier**: declares a richer CI-logic shape that captures jobs/steps/needs/triggers at gunbc-substrate level (NOT platform-level), then projects into the `Workflow` platform carrier via the function. **Substrate-shape addition — belongs to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`**. +**Path (b) — use `CIWorkflowDag` carrier from PR #2736 (neat-badger-30)** — REQUIRED. `CIWorkflowDag { name, nodes: List, edges: List }` is the load-bearing semantic carrier carrying gate-dependency structure. This is **ALREADY canvas-tier ratified** (PR #2749 §1 option (a) discussion + §2.4 / §7.4 tables explicitly position CIWorkflowDag as the gate-dependency authority on which (c-refined) composes) AND Director-ratified (msg_4f7f536d). PR #2736 is the carrier-introduction PR; canvas + Director ratification covers Path (b) — **no additional Mgr ratification needed for the CIWorkflowDag choice itself**. -**Disposition**: Path (a) preferred for this WI — minimal substrate addition, leverages existing `CIPipeline` authority. If Path (a) cannot express ci.yml fully (e.g., needs steps/runners that `CIPipeline` doesn't carry), **STOP and PING Substrate Mgr** to ratify Path (b) carrier shape via canvas. Do NOT introduce `CIWorkflowDag` without Mgr ratification. +**Disposition**: Proceed Path (b) directly. Use `CIWorkflowDag` from PR #2736 as the projection function's input domain. + +**Sequencing implication** (per Substrate Mgr msg_27d99080): +- WI-2 implementation **depends on PR #2736 merge** OR references the in-flight `CIWorkflowDag` type +- If PR #2736 is still HOLD-merging when cool-carp-720 opens WI-2: either (1) WI-2 holds until PR #2736 merges, OR (2) WI-2's PR rebases on PR #2736's branch (`session/neat-badger-30`) +- PR #2736 mergeable=CLEAN with all CI checks SUCCESS as of 2026-05-12 (no structural blocker; awaiting review tally) + +**STOP-and-route discipline** (revised): +- The CIWorkflowDag CARRIER CHOICE is canvas+Director-ratified — no STOP needed for this dimension. +- STOP still applies for OTHER substrate-shape questions (e.g., `EmissionTarget` open-enum vocabulary support, function-as-projection declaration vocabulary support) — see STOP / PING criteria below. +- PING-on-PR-open ratification covers shape (signature, derived-binding form, module placement), NOT the CIWorkflowDag choice in isolation. ## Scope boundaries (DO / DON'T) @@ -65,14 +75,16 @@ The projection function takes a `CIWorkflowDag` input. Two valid sourcing paths: - Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. - Declare `gunbc_ci_yml_workflow` pinned-projection data binding (invocation pin with `YamlStatic`). - Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. -- Cite existing `CIPipeline` from `dsl/gunbc/ci.dag` as the input source if Path (a). +- Reference `CIWorkflowDag` carrier from PR #2736 as the input domain type (canvas + Director-ratified per msg_4f7f536d). +- Sequence WI-2 PR after PR #2736 merge OR rebase WI-2's branch on PR #2736's `session/neat-badger-30` if PR #2736 is still HOLD-merging. **DON'T**: - Do NOT add fields to `dsl/extdeps/github/actions.dag` carriers (Workflow/Job/Step) — this is the INVARIANTS P1 violation the (c-refined) shape resolves. - Do NOT extend `dsl/gunbc/ci.dag` with new substrate types — extension belongs to Mgr canvas tier. +- Do NOT use `CIPipeline` from `dsl/gunbc/ci.dag` as the projection input — it is flat without edge structure and INSUFFICIENT for `project_github_actions` (per Substrate Mgr clarification msg_27d99080). - Do NOT implement per-arm projection bodies — those are Slice 4-5 work owned by Substrate Mgr after canvas ratification. -- Do NOT modify `.github/workflows/ci.yml` — Slice 8 deletes; this WI only lands the projection substrate. -- Do NOT introduce a `CIWorkflowDag` carrier without Substrate Mgr ratification (see "CIWorkflowDag dependency sequencing" above). +- Do NOT modify `.github/workflows/ci.yml` — Slice 8 dissolves hand-authority; this WI only lands the projection substrate. +- Do NOT introduce ALTERNATE carriers for the projection input — `CIWorkflowDag` from PR #2736 is the ratified authority. ## Acceptance gates @@ -89,26 +101,31 @@ The projection function takes a `CIWorkflowDag` input. Two valid sourcing paths: ## STOP / PING criteria -- **STOP** if existing `CIPipeline` from `dsl/gunbc/ci.dag` cannot supply enough input data for the projection function to produce a faithful `Workflow` value — surface to Substrate Mgr; Path (b) requires canvas-tier ratification. - **STOP** if `EmissionTarget` open-enum declaration requires substrate-shape features not yet supported by current v3 surface (e.g., open-enum vocabulary missing) — surface to Substrate Mgr. - **STOP** if `project_github_actions` function signature requires substrate features not yet supported (e.g., function-as-projection declaration vocabulary missing) — surface to Substrate Mgr; canvas-tier decision. +- **STOP** if PR #2736 (CIWorkflowDag introduction) is BLOCKED on something WI-2 implementation reveals (e.g., shape mismatch with what `project_github_actions` actually needs) — surface to Substrate Mgr; CIWorkflowDag carrier shape ratified-but-revisable. - **PING** PM (deep-wolf-155) on PR-open for review-routing. -- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification + Slice 4 emitter dispatch routing. +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification of overall shape (signature, derived-binding form, module placement; NOT CIWorkflowDag carrier choice — that's pre-ratified). - **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas at PR #2749) — the canvas declares the (c-refined) shape this WI implements; if canvas re-ratifies the shape, this WI must follow. +- **COORDINATE** with neat-badger-30 (PR #2736 CIWorkflowDag introduction) if shape questions arise about the input carrier itself. ## Reference materials - `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent); §1 gate `project_github_actions_landed` is the closure-gate for this WI. - `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling WI-1 brief (declares the (c-refined) substrate shape this WI implements). - PR #2749 (still-heron-763 WI-1 canvas) §7 — (c-refined) shape self-correction; THIS WI implements that shape. +- PR #2749 (still-heron-763 WI-1 canvas) §1 + §2.4 + §7.4 — canvas-tier ratification of `CIWorkflowDag` as the gate-dependency authority on which (c-refined) composes. +- PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; MERGEABLE with all checks SUCCESS as of 2026-05-12; awaiting review tally; this WI consumes `CIWorkflowDag` as the projection input domain. +- Director ratification msg_4f7f536d — covers Path (b) (CIWorkflowDag-as-input) per Substrate Mgr clarification msg_27d99080. - `dsl/extdeps/github/actions.dag:1-12` — platform-carrier scope header ("platform constraints, not CI logic (that lives in gunbc/ci.dag)"); the discriminator that grounds the (c-refined) shape. - `dsl/extdeps/github/actions.dag:21` — `Workflow` carrier (codomain type for `project_github_actions`). -- `dsl/gunbc/ci.dag` — existing gate-centric CI substrate (Path (a) input source). +- `dsl/gunbc/ci.dag::CIPipeline` — existing gate-centric CI substrate; INSUFFICIENT as projection input (flat without edge structure) per Substrate Mgr msg_27d99080. Do NOT use as `project_github_actions` input. - `feedback_audit_extdeps_header_for_logic_vs_platform_discriminator.md` — the discipline that catches (a)-shape mis-placements at canvas-authoring time. ## Sequencing -- Dispatch-ready NOW (existing `dsl/extdeps/github/actions.dag::Workflow` + existing `dsl/gunbc/ci.dag::CIPipeline` suffice for declaration scope). +- **Depends on PR #2736 merge** (CIWorkflowDag carrier introduction by neat-badger-30) — currently MERGEABLE, awaiting review tally. WI-2 implementation either holds for PR #2736 merge OR rebases on `session/neat-badger-30` branch. +- `dsl/extdeps/github/actions.dag::Workflow` already present — no upstream dependency for codomain type. - Slice 1 substrate LANDED (PR #2160) — `WorkflowSecret` + `CronSchedule` available; consumed downstream by Slice 4 emitter, not this WI. - Slice 3 demo LANDED (PR #2371) — `t_ci_workflow_as_data_demo.dag` exists; this WI extends scope from demo-of-evaluation into projection-substrate-declaration. - This WI lands the projection-function substrate; Slice 4 implements per-arm bodies; Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per renamed gate `ci_yml_hand_authority_dissolved` — see scope doc §1 fix 2026-05-12). From f0db4fa4111a0e15e9e2c08a291319c8b90d8643 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:24:13 +0000 Subject: [PATCH 08/23] =?UTF-8?q?docs(briefs):=20T-WAD=20WI-2=20=E2=80=94?= =?UTF-8?q?=20exhaustive=20carrier=20inventory=20per=20codex=20BLOCKING=20?= =?UTF-8?q?#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per codex BLOCKING scheduled review on cc82ec4c (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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 59 +++++++++++++++++-- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 126d9fa91a9..1d22722c600 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -132,14 +132,61 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an ## Propagated substrate-fidelity concerns (Slice 4-5 — Substrate Mgr canvas) -The following concerns are flagged by briansrls BLOCKING inline reviews on PR #2744 (2026-05-12T06:58:55Z) against the EARLIER brief content (when scope was "compose full ci.yml against existing carriers"). The CURRENT brief scope (declaration-only) does NOT make these claims, but the underlying substrate-fidelity concerns propagate to Slice 4-5 per-arm projection body work and must be addressed by Substrate Mgr (warm-wolf-698) canvas-tier before YamlStatic / BinaryShim / PythonShim implementations land. +These concerns are NOT acceptance gates for THIS WI (declaration-only scope). They are propagated to Slice 4-5 canvas as MUST-address-before-per-arm-body-PRs. -1. **Concurrency carrier absence**: current `.github/workflows/ci.yml` uses top-level `concurrency:` field; `dsl/extdeps/github/actions.dag::Workflow` does NOT model `concurrency`. P1/P2 fidelity requires extension (e.g., `Workflow.concurrency: Concurrency?` with `Concurrency { group, cancel_in_progress }`). -2. **`ready_for_review` PR activity absence**: current ci.yml uses `pull_request.types: [opened, synchronize, reopened, ready_for_review]`; `PullRequestActivity` enum in actions.dag may not carry `ready_for_review` arm. Audit + extend if missing. -3. **Trigger fidelity — NO fabrication**: current ci.yml declares only `push` and `pull_request` triggers — NOT `schedule`. Slice 4 YamlStatic emitter MUST emit faithfully (push + PR only); `Schedule` trigger arm exists in the carrier but is NOT instantiated for current ci.yml. **No fabrication of triggers absent from source.** -4. **Step body + action input completeness as MUST (not SHOULD / NICE-TO-HAVE)**: Slice 4 ci.yml-equivalent regeneration requires executable step bodies (`RunStep.run`, `RunStep.shell`, `RunStep.env`) and complete action references (`UsesStep.uses: ActionRef`, `UsesStep.with: Map`) as MUST acceptance. P1 modeling faithfulness fails if these are partial. +Authority: briansrls BLOCKING inline reviews on PR #2744 (2026-05-12T06:58:55Z) + codex BLOCKING scheduled review on cc82ec4c (2026-05-12T~07:14Z) flagged the audit as incomplete and requested "key-by-key inventory and STOP/reroute missing carriers before WI-2." This section provides the exhaustive top-level inventory. -These concerns are NOT acceptance gates for THIS WI (declaration-only scope). They are propagated to Slice 4-5 canvas as MUST-address-before-per-arm-body-PRs. +### Exhaustive top-level inventory (current ci.yml → actions.dag carriers) + +Verified 2026-05-12 against `.github/workflows/ci.yml` HEAD + `dsl/extdeps/github/actions.dag` HEAD: + +| ci.yml field | actions.dag carrier | Status | +|---|---|---| +| `name: ci` | `Workflow.name: String` | ✓ covered | +| `on.push.branches: [main]` | `Push { branches: List, paths: List }` | ⚠ `Push.paths` REQUIRED in carrier; ci.yml omits — needs Optional | +| `on.pull_request.branches: [main]` | `PullRequest { branches, types }` | ✓ covered | +| `on.pull_request.types: [opened, synchronize, reopened, ready_for_review]` | `PullRequestActivity = Opened \| Synchronize \| Reopened \| Closed` | ⚠ **MISSING `ReadyForReview` arm** | +| `permissions.contents: read` | `WorkflowPermissions.contents: PermissionLevel` | ✓ covered | +| `permissions.pull-requests: read` | `WorkflowPermissions.pull_requests: PermissionLevel` | ✓ covered | +| (ci.yml omits `permissions.issues`) | `WorkflowPermissions.issues: PermissionLevel` REQUIRED | ⚠ field required; ci.yml omits — needs Optional OR `PermUnset` arm | +| (ci.yml omits `permissions.actions`) | `WorkflowPermissions.actions: PermissionLevel` REQUIRED | ⚠ same as issues | +| `concurrency.group: ` | NO `Workflow.concurrency` field — only `Job.concurrency: ConcurrencySpec?` | ⚠ **MISSING `Workflow.concurrency`** | +| `concurrency.cancel-in-progress: true` | `ConcurrencySpec.cancel_in_progress: Bool` | (depends on adding `Workflow.concurrency`) | +| `env.CARGO_TERM_COLOR: always` | `Workflow.env: Map` | ✓ covered | +| `env.RUSTFLAGS: -D warnings` | `Workflow.env: Map` | ✓ covered | + +### Per-job inventory (representative — `fmt` job from ci.yml) + +| ci.yml field | actions.dag carrier | Status | +|---|---|---| +| `if: github.event.pull_request.draft != true` | `Job.if_condition: String?` (opaque expression string) | ✓ covered | +| `runs-on: ${{ vars.CI_RUNNER \|\| 'ubuntu-latest' }}` | `Job.runner: RunnerSpec = HostedRunner { RunnerLabel } \| SelfHosted { labels }` | ⚠ **EXPRESSION-SYNTAX GAP** — `RunnerLabel` is enum literal only; cannot represent GH Actions expression `${{ vars.X \|\| 'fallback' }}` | +| `timeout-minutes: 5` | `Job.timeout_minutes: Int?` | ✓ covered | +| `steps: [...]` | `Job.steps: List` | covered (per-step shape ratified) | + +### Per-step inventory (representative — `actions/checkout@v4` step from ci.yml) + +| ci.yml field | actions.dag carrier | Status | +|---|---|---| +| `name: Checkout` | `UsesStep.name: String?` | ✓ covered | +| `uses: actions/checkout@v4` | `UsesStep.uses: ActionRef { owner, repo, ref }` | ✓ covered | +| `with: ` | `UsesStep.with: Map` | ✓ covered | + +### 5 substantive carrier gaps requiring Slice 4 substrate-prereq PRs (cited in propagated concerns below) + +1. **`Workflow.concurrency` absence**: ci.yml uses top-level `concurrency:`; `dsl/extdeps/github/actions.dag::Workflow` does NOT model `concurrency` (only `Job.concurrency` exists). P1/P2 fidelity requires extension (`Workflow.concurrency: ConcurrencySpec?`). +2. **`PullRequestActivity.ReadyForReview` arm absence**: ci.yml uses `types: [..., ready_for_review]`; carrier only has `Opened | Synchronize | Reopened | Closed`. Audit + extend. +3. **`Push.paths` required-but-omitted**: carrier requires both `branches` and `paths`; ci.yml only declares `branches`. Make `paths` optional with default empty list OR document the existing-default semantic. +4. **`WorkflowPermissions.issues/.actions` required-but-omitted**: carrier requires all 4 permission fields; ci.yml only declares `contents` + `pull-requests`. Either (a) make fields Optional, OR (b) introduce `PermUnset` arm to represent "no permission scope set" structurally. +5. **`RunnerSpec` expression-syntax modeling**: ci.yml uses `runs-on: ${{ vars.CI_RUNNER || 'ubuntu-latest' }}` — a GH Actions expression with fallback. Current `RunnerLabel` is enum literal only; cannot represent expression sites. Decide: (a) generalize `RunnerSpec` to allow opaque expression strings (parallel to `if_condition: String?`), (b) introduce expression-AST carrier covering all expression sites (`concurrency.group`, `if_condition`, `with` values, `env` values, `runner`), or (c) declare expression-string opaque for runner only as minimal-surface fix. Choice IS substrate-shape — Mgr canvas-tier decision. + +### Carry-forward authoring concerns (Slice 4 acceptance discipline) + +6. **Trigger fidelity — NO fabrication**: current ci.yml declares only `push` and `pull_request` triggers — NOT `schedule`. Slice 4 YamlStatic emitter MUST emit faithfully (push + PR only); `Schedule` trigger arm exists in the carrier but is NOT instantiated for current ci.yml. **No fabrication of triggers absent from source.** +7. **Step body + action input completeness as MUST (not SHOULD / NICE-TO-HAVE)**: Slice 4 ci.yml-equivalent regeneration requires executable step bodies (`RunStep.run`, `RunStep.shell`, `RunStep.env`) and complete action references (`UsesStep.uses: ActionRef`, `UsesStep.with: Map`) as MUST acceptance. P1 modeling faithfulness fails if these are partial. +8. **Exhaustive inventory must extend per-job and per-step coverage**: this brief covers top-level + ONE representative job (`fmt`) + ONE representative step. Slice 4 canvas MUST inventory EVERY job (`fmt`, `ci`, `changes`, `v3`, `self_host_ratchet`, etc.) and EVERY step within each. STOP/reroute discipline applies per-job-per-step. + +These concerns will be encoded into the Slice 4 brief as MUST-address acceptance gates when Substrate Mgr (warm-wolf-698) authors post-canvas-merge. --- From c5bcb8e8732baf65815da73d6ec9206dbbc16dce Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:26:40 +0000 Subject: [PATCH 09/23] =?UTF-8?q?docs(briefs):=20T-WAD=20WI-2=20=E2=80=94?= =?UTF-8?q?=20fix=20canvas=20PR=20citation=20(PR=20#2746=20vs=20PR=20#2749?= =?UTF-8?q?=20author=20attribution)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 1d22722c600..47f105857b5 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -106,15 +106,15 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - **STOP** if PR #2736 (CIWorkflowDag introduction) is BLOCKED on something WI-2 implementation reveals (e.g., shape mismatch with what `project_github_actions` actually needs) — surface to Substrate Mgr; CIWorkflowDag carrier shape ratified-but-revisable. - **PING** PM (deep-wolf-155) on PR-open for review-routing. - **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification of overall shape (signature, derived-binding form, module placement; NOT CIWorkflowDag carrier choice — that's pre-ratified). -- **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas at PR #2749) — the canvas declares the (c-refined) shape this WI implements; if canvas re-ratifies the shape, this WI must follow. +- **COORDINATE** with sibling still-heron-763 (WI-1 emitter-dispatch canvas at PR #2746) — the canvas declares emitter-dispatch architecture this WI's projection function plugs into. PR #2749 (warm-wolf-698's adjacent substrate-shape comparison canvas) §7 is the (c-refined) ratification anchor; if either canvas re-ratifies the shape, this WI must follow. - **COORDINATE** with neat-badger-30 (PR #2736 CIWorkflowDag introduction) if shape questions arise about the input carrier itself. ## Reference materials - `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent); §1 gate `project_github_actions_landed` is the closure-gate for this WI. - `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` — sibling WI-1 brief (declares the (c-refined) substrate shape this WI implements). -- PR #2749 (still-heron-763 WI-1 canvas) §7 — (c-refined) shape self-correction; THIS WI implements that shape. -- PR #2749 (still-heron-763 WI-1 canvas) §1 + §2.4 + §7.4 — canvas-tier ratification of `CIWorkflowDag` as the gate-dependency authority on which (c-refined) composes. +- PR #2746 (still-heron-763 WI-1 emitter-dispatch canvas, `docs/design-ci-workflow-emitter-dispatch.md`) — the primary WI-1 canvas; declares emitter-dispatch architecture this WI's projection function plugs into. +- PR #2749 (warm-wolf-698 substrate-shape comparison canvas, `session/warm-wolf-698-substrate-shape-canvas`) §7 — (c-refined) shape self-correction; THIS WI implements that shape. PR #2749 §1 + §2.4 + §7.4 — canvas-tier ratification of `CIWorkflowDag` as the gate-dependency authority on which (c-refined) composes. - PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; MERGEABLE with all checks SUCCESS as of 2026-05-12; awaiting review tally; this WI consumes `CIWorkflowDag` as the projection input domain. - Director ratification msg_4f7f536d — covers Path (b) (CIWorkflowDag-as-input) per Substrate Mgr clarification msg_27d99080. - `dsl/extdeps/github/actions.dag:1-12` — platform-carrier scope header ("platform constraints, not CI logic (that lives in gunbc/ci.dag)"); the discriminator that grounds the (c-refined) shape. From 80c56efbd51588d23558e18bd40b5fe258a13d32 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:41:30 +0000 Subject: [PATCH 10/23] =?UTF-8?q?docs(scope):=20cursor=20BLOCKING=20fix=20?= =?UTF-8?q?=E2=80=94=20scope=20doc=20/=20brief=20single-authority=20+=20?= =?UTF-8?q?=C2=A72=20(c-refined)=20lock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per cursor BLOCKING review on 19a1d8dfc (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) --- ...-t-workflow-as-data-full-r3-close-scope.md | 76 +++++++++++++------ 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 5f0edcc07a1..133bec4ad4d 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -13,7 +13,7 @@ **Existing scope** (per `r3-program-plan.md` §1.8 gate #56): `ci_workflow_modeled_as_dag` = "at least one workflow as `.dag` data executes through evaluator." Slice 3 demonstration; consumes Slices 1+2 substrate. **Slice 1 LANDED via PR #2160 + #2169** (`WorkflowSecret` + `CronSchedule` carriers — Slice 1 worker brief naming `CronExpression` was superseded by the landed `CronSchedule` model at `dsl/extdeps/cron_schedule_model.dag`; use `CronSchedule` as the grounded name). **Slice 3 demo LANDED via PR #2371** (`t_ci_workflow_as_data_demo.dag` + integration tests). **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): -1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — extend `dsl/gunbc/ci.dag` to cover full `.github/workflows/ci.yml` +1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — `.github/workflows/ci.yml` content sourced from gunbc-substrate via projection function `project_github_actions(ci_workflow_dag, target) → Workflow`; WI-2 lands the projection-substrate (new file `dsl/gunbc/ci_emission.dag`); Slice 4-5 implements per-arm projection bodies that walk `CIWorkflowDag` (PR #2736) + emit the chosen target. 2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some emission targets); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. 3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision. Field placement OPEN (see §2). 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) @@ -41,7 +41,7 @@ | **NEW: `slow_test_exemptions_dissolved`** | state-check | T-WAD + Debt-Paydown | `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from `Cost` dimension structurally (state-check sibling of `test_cost_dimension_landed` per kernel-modeling discipline split) | | **NEW: `ci_uses_affected_set_selection`** | state-check | T-WAD + T-Verification | `BinaryShim` emitter consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:` gates removed from any remaining workflow files (cross-tier co-owned with clever-tern-670 Slice 7 work) | -## §2. Architectural shape (operator-ratified 2026-05-12) +## §2. Architectural shape (operator-ratified 2026-05-12; (c-refined) substrate-shape LOCKED 2026-05-12 per PR #2749 §7) **`EmissionTarget` as modeled data** (open enum, same shape as `Dimension`): @@ -49,24 +49,40 @@ type EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ... ``` -**Operator-ratified semantic**: emission target is a modeled toggle, not a hard-coded compiler decision. Field PLACEMENT is open canvas question (WI-1 evaluates and recommends): +**Substrate-shape RATIFIED** (per PR #2749 §7 + Director msg_237bde05 + msg_f9fd669e — (c-refined) shape; was option (c) wrapper, refined to projection-function): -- **(a) Field on `Workflow`** (`dsl/extdeps/github/actions.dag:21` — concrete type, NOT generic; has `name`/`on`/`jobs`/`env`/`permissions` fields): platform-level placement; but actions.dag header states "platform constraints, not CI logic" — emission_target IS CI logic, so this may violate the separation -- **(b) Field on `CIPipeline`** (`dsl/gunbc/ci.dag`): CI-intent-level placement; natural fit per actions.dag's "consumers: gunbc/ci.dag" framing -- **(c) Wrapper node** (`WorkflowEmission { workflow: Workflow, target: EmissionTarget }`): preserves platform/CI separation cleanly; emission policy attaches via wrapper +**`EmissionTarget` is an invocation-time parameter to the projection function in gunbc-substrate**, NOT a field on any carrier: -**Carrier hierarchy** (per `dsl/extdeps/github/actions.dag` authority): +```dag +// In dsl/gunbc/ci_emission.dag (NEW file, WI-2 lands it): +project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow +// Invocation pin (canonical YAML-emission point for Slice 4): +gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) ``` -Workflow { // :21 — CONCRETE type, not generic + +- **Input domain**: `CIWorkflowDag` (PR #2736 carrier; gate-dependency-bearing semantic source — flat `CIPipeline` is INSUFFICIENT per warm-wolf-698 msg_27d99080) +- **Output codomain**: `extdeps.github.actions.Workflow` (platform-faithful; UNMODIFIED — INVARIANTS P1) +- **Emission choice**: invocation-time argument (`target: EmissionTarget`); per-arm projection bodies are Slice 4-5 implementation + +**Prior framings — RETRACTED / DISSOLVED**: + +- **(a) Field on `Workflow` (extdeps platform carrier)** — RETRACTED 2026-05-12 at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749. INVARIANTS P1 violation: emission_target IS CI logic, not platform fact; cannot land on `dsl/extdeps/github/actions.dag` per its scope header ("platform constraints — not CI logic"). +- **(b) Field on `CIPipeline`** — superseded; `CIPipeline { name, gates: List }` is flat without edge structure; cannot serve as projection input per warm-wolf-698 msg_27d99080. Replaced by `CIWorkflowDag` (PR #2736) input domain. +- **(c) Wrapper node** `WorkflowEmission { workflow, target }` — superseded by (c-refined) projection function. Wrapper introduces an extra carrier; projection function is the cleaner shape (parameter-as-data preserves single-substrate-fact + cost-of-change ≤ 1). + +**Carrier hierarchy** (per `dsl/extdeps/github/actions.dag` authority — UNMODIFIED): + +``` +Workflow { // :21 — CONCRETE type, codomain for project_github_actions on: List // :23 - jobs: List // :24 — Workflow contains JOBS + jobs: List // :24 env, permissions, ... } Job { // :110 - steps: List // :114 — Job contains STEPS - needs: List // :115 — job-id refs (NOT step-level) + steps: List // :114 + needs: List // :115 runner, strategy, ... } @@ -75,13 +91,15 @@ Step = RunStep | UsesStep // :147 — sum type **Emitter dispatch** (parallel to `05_emit_*.dag` consolidation thesis per `project_eliminate_emit_lang_files.md`): -- Single emitter reads `emission_target` from wherever placed (per §2 canvas decision) -- Dispatches to YamlStatic emitter (regenerate `ci.yml`) OR BinaryShim emitter (compile binary + emit thin shim YAML) OR PythonShim (emit Python harness + thin shim YAML) -- Same `ci.dag` semantically equivalent across targets at workflow level -- A/B comparison is apples-to-apples (toggle one field, re-emit) +- Slice 4-5 emitter consumes the **pinned-projection invocation** `gunbc_ci_yml_workflow = project_github_actions(ci_workflow_dag, YamlStatic)` (or other `target` for BinaryShim / PythonShim / etc.) +- Per-arm projection bodies (Slice 4 = YamlStatic, Slice 5 = BinaryShim, future = PythonShim / InlineGunbc) walk `CIWorkflowDag` + emit the chosen target +- Same `ci_workflow_dag` value across all targets at workflow level; the emission STRATEGY is invocation-time +- A/B comparison is apples-to-apples (call `project_github_actions(ci_workflow_dag, BinaryShim)` vs `project_github_actions(ci_workflow_dag, YamlStatic)`) **Why BinaryShim is the affected-set unlock**: Static YAML can't naturally express "compute affected-set at PR time, dispatch matrix dynamically." BinaryShim makes runtime decisions structural — binary reads git diff, computes `affected_set = ⋃ over dim of reachable(Δ, dim)`, dispatches matrix accordingly. +**Open expression-substrate question — DEFERRED to canvas (NOT blocking this scope)**: GH Actions expression syntax modeling (`runs-on: ${{ vars.CI_RUNNER || 'ubuntu-latest' }}` etc.) is a Slice 4-5 substrate-shape question routed to warm-wolf-698 canvas authority (PR #2751 — Expression 🟡 YELLOW recommendation; Director ratification pending). NOT a §1 gate. + ## §3. Slice expansion Existing T-WAD slices (state at 2026-05-12): @@ -92,7 +110,7 @@ Existing T-WAD slices (state at 2026-05-12): **New slices added by FULL elevation** (Director-ratified absorption to lanes): -- **Slice 4**: `EmissionTarget` field landing (placement per WI-1 canvas) + YamlStatic emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges. +- **Slice 4**: YamlStatic projection-arm implementation — body of `project_github_actions(..., YamlStatic)` walks `CIWorkflowDag` and emits `Workflow` value byte-equivalent to current `.github/workflows/ci.yml` content; consumed by emission pipeline to produce the on-disk artifact → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges + PR #2736 (CIWorkflowDag) merge. NOTE: NOT an "EmissionTarget field landing" — per (c-refined) shape (§2), `EmissionTarget` is invocation-time projection parameter, not carrier-time data. - **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. - **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). - **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). @@ -109,10 +127,13 @@ External prereqs: - PR #2371 (Slice 3 demo) ✓ MERGED Critical path (forward): - WI-1 canvas merge ──┐ - ├─→ Slice 4 (YamlStatic emitter) ──┐ - WI-2 ci.dag extend ─┤ │ - ├─→ Slice 5 (BinaryShim emitter) ──┼─→ Slice 7 (affected-set integration) ──┐ + WI-1 canvas merge ───────┐ + ├─→ Slice 4 (YamlStatic projection-arm) ──┐ + WI-2 ci_emission.dag ────┤ │ + (proj-fn substrate) │ │ + │ │ + PR #2736 CIWorkflowDag ──┤ │ + ├─→ Slice 5 (BinaryShim projection-arm) ──┼─→ Slice 7 (affected-set integration) ──┐ │ │ Phase 3 Cluster M settles → Slice 6 (Cost dim) ─────────────────────────┤ │ @@ -122,7 +143,7 @@ Critical path (forward): Parallelizable (started 2026-05-12 — dispatched under PM): - WI-1 emitter-dispatch architecture canvas (worker still-heron-763) - - WI-2 dsl/gunbc/ci.dag extension to full ci.yml coverage (worker cool-carp-720) + - WI-2 new file dsl/gunbc/ci_emission.dag — declares EmissionTarget open enum + project_github_actions function signature + gunbc_ci_yml_workflow pinned-projection (worker cool-carp-720) ``` ## §5. Realistic R3-close timing @@ -145,11 +166,14 @@ Assumes: - Brief: `docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md` - Independent of held substrate; Slice 1 LANDED -**WI-2**: `dsl/gunbc/ci.dag` extension to full `.github/workflows/ci.yml` coverage -- Output: extended `dsl/gunbc/ci.dag` (existing file from PR #2371) using concrete `Workflow` / `Job` / `Step` carriers from `dsl/extdeps/github/actions.dag` +**WI-2**: NEW file `dsl/gunbc/ci_emission.dag` — projection-function substrate scaffold (per (c-refined) shape) +- Output: NEW file `dsl/gunbc/ci_emission.dag` declaring `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature + `gunbc_ci_yml_workflow` pinned-projection data binding +- Scope: DECLARATION + signature ONLY (per-arm projection bodies are Slice 4-5 owned by Substrate Mgr post-canvas-merge) - Worker: **cool-carp-720** (PM auto-spawn 2026-05-12 ~06:30Z) - Brief: `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` -- Independent of held substrate; Slice 1 LANDED +- Dependency: PR #2736 (CIWorkflowDag carrier introduction); WI-2 sequences after PR #2736 merge OR rebases on `session/neat-badger-30` +- **Does NOT extend `dsl/gunbc/ci.dag`** — existing gate-centric CI substrate from PR #2371 stays untouched (per (c-refined) shape; INVARIANTS P1 boundary) +- **Does NOT modify `dsl/extdeps/github/actions.dag`** — platform carriers stay platform-faithful (per (c-refined) shape; INVARIANTS P1) Both workers briefed with brief-pointer messages 2026-05-12 ~06:30Z. Canvas + extension PRs expected within ~1 week. @@ -175,7 +199,9 @@ PM-relay to warm-wolf-698 + Director co-sign at #828 if cross-tier confirmation - `docs/design-affected-set-lens.md` — affected-set lens substrate (PR #2713 ✓ merged); Slice 7 consumes - `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief (LANDED PR #2160) - `dsl/extdeps/github/actions.dag` — canonical platform carriers (`Workflow:21` `Job:110` `Step:147` `WorkflowSecret:102`) -- `dsl/gunbc/ci.dag` — existing CI intent declarations (PR #2371; gate-centric; WI-2 extends) +- `dsl/gunbc/ci.dag` — existing gate-centric CI intent declarations (PR #2371); WI-2 does NOT extend this file (per (c-refined) shape); CIPipeline is NOT used as projection input (flat without edge structure per warm-wolf-698 msg_27d99080) +- `dsl/gunbc/ci_emission.dag` — NEW file WI-2 creates (projection-function substrate; EmissionTarget enum + project_github_actions signature + pinned-projection binding) +- PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; WI-2 sources projection input from this - `dsl/extdeps/cron_schedule_model.dag` — CronSchedule carrier (LANDED via PR #2169) - `docs/ci-pipeline-optimization.md` — pre-v3 historical optimization (background context; not active program) - `docs/briefs/r3-ci-layer-2-pm-prestaged-mgr-fill-template.md` — Layer 2 path-regex bridge (PR #2721 ✓ merged); dissolution target for Slice 7 From db103a5f81a5e121a9cf6913af53882aeeef10e5 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:52:22 +0000 Subject: [PATCH 11/23] =?UTF-8?q?docs(briefs):=20codex=20BLOCKING=20fix=20?= =?UTF-8?q?=E2=80=94=20WI-1=20brief=20stale=20(a)-shape=20framing=20remove?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- ...-full-r3-emitter-dispatch-canvas-worker.md | 98 +++++++++++-------- 1 file changed, 58 insertions(+), 40 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index c09059c7001..98e5519ff19 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -1,70 +1,88 @@ # Worker brief — T-WAD FULL R3 emitter-dispatch architecture canvas -**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-1; operator FULL elevation 2026-05-12 (toggle design ratification); Director ratification msg_5cbdad24 2026-05-12 (Slice 4-5/8 lane-absorbed to Substrate Mgr warm-wolf-698). -**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698); this is forward-looking design canvas; final Mgr-tier ratification routes through warm-wolf-698, with Director co-sign at #828 if cross-tier confirmation needed. -**Closure predicate**: design canvas authored + Mgr-ratified shape; downstream Slice 4-5 emitter implementation work consumes this canvas. +**Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-1; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 + (c-refined) substrate-shape ratification msg_237bde05 + msg_f9fd669e + msg_2a68a4b5 2026-05-12. +**Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698); this design canvas; final Mgr-tier ratification routes through warm-wolf-698, with Director co-sign at #828 if cross-tier confirmation needed. +**Closure predicate**: design canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` + Mgr-ratified per-target emission semantics; downstream Slice 4-5 emitter implementation work consumes this canvas. + +## Substrate-shape ratification anchor + +**The (c-refined) substrate-shape is LOCKED** (post-2026-05-12 cascade): + +- `EmissionTarget` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow`, **NOT a field on any carrier**. +- `EmissionTarget` lives in gunbc namespace (`dsl/gunbc/ci_emission.dag` — NEW file landed by WI-2). +- `dsl/extdeps/github/actions.dag::Workflow` stays platform-faithful and UNMODIFIED. +- The earlier option (a) "field on Workflow" was **RETRACTED** at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749 (INVARIANTS P1 violation — CI logic on platform carrier). +- Option (b) "field on CIPipeline" was **SUPERSEDED** — `CIPipeline { name, gates: List }` is flat without edge structure; cannot serve as projection input per warm-wolf-698 msg_27d99080. Replaced by `CIWorkflowDag` (PR #2736) as input domain. +- Option (c) "wrapper node" was **SUPERSEDED** by (c-refined) projection function — parameter-as-data preserves single-substrate-fact + cost-of-change ≤ 1. + +**This brief does NOT reopen the placement question**. The canvas evaluates per-target emission semantics on top of the ratified substrate-shape, not the substrate-shape itself. ## Output -`docs/design-ci-workflow-emitter-dispatch.md` — new design canvas, ~400-800 lines target, matching the shape of `docs/design-affected-set-lens.md` (single-authority, locked-design). +`docs/design-ci-workflow-emitter-dispatch.md` — new design canvas matching the shape of `docs/design-affected-set-lens.md` (single-authority, locked-design). Canvas should consume the ratified (c-refined) shape as given, not re-derive it. ## Scope -Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close: - -1. **`EmissionTarget` open-enum shape** — `EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | …`; default value if absent (`YamlStatic` recommended baseline; default-toggle behavior preserves current ci.yml-equivalent regen) -2. **Where `emission_target` is carried** — OPEN QUESTION; canvas should evaluate three placements and propose one: - - **(a) Field on `Workflow`** (`dsl/extdeps/github/actions.dag:21`): platform-level — but actions.dag is "platform constraints, not CI logic" per its header; emission_target IS a CI logic choice, so this may violate the separation - - **(b) Field on `CIPipeline`** (`dsl/gunbc/ci.dag`): CI-intent-level — emission_target is a transport choice the CI consumer makes; natural fit per actions.dag's "consumers: gunbc/ci.dag" framing - - **(c) Wrapper node** (e.g., `WorkflowEmission { workflow: Workflow, target: EmissionTarget }`): preserves platform/CI separation cleanly; emission policy attaches to workflow-content via wrapper - - Canvas recommendation expected; Mgr ratifies. Operator-ratified shape per 2026-05-12: "either could work; the choice was just a toggle/modeling decision in the .dag code itself" — substance is that the choice is **modeled data**, not where it lives. -3. **Emitter dispatch semantics** — single emitter reads `emission_target` from wherever it lives, dispatches to per-target emitter module; how this composes with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`) -4. **Per-target emission semantics**: - - **YamlStatic**: emit `.github/workflows/ci.yml` from extended `dsl/gunbc/ci.dag`; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly. This is the Slice 4 deliverable. - - **BinaryShim**: emit compiled binary (Rust target) + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically. This is Slice 5; Slice 7 affected-set integration consumes. - - **PythonShim**: same shim model, Python runtime substrate (Python target emit pattern reused). Future; sketch only. - - **InlineGunbc**: gunbc-as-runtime-orchestrator (longer-term option); sketch only. -5. **Affected-set integration shape** — how `BinaryShim` emitter consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.); refer to Slice 7 owner (Verification Mgr clever-tern-670) for cross-tier coordination -6. **Equivalence claim** — what does "same `ci.dag` emits semantically equivalent output across targets" mean precisely; what's the test claim for `workflow_emission_target_toggle_proven` gate (substrate-shape, per Director ratification §1) -7. **Carrier reuse audit** — confirm existing `dsl/extdeps/github/actions.dag` carriers (concrete `Workflow` / `Job` / `Step` per actions.dag `:21` `:110` `:147`) are sufficient for YamlStatic emitter; identify any new substrate needed (likely minimal — possibly `EmissionTarget` enum + placement choice from §2) +Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on top of the locked (c-refined) substrate: + +1. **Per-target emission semantics** (the substantive canvas surface): + - **YamlStatic** (Slice 4 deliverable): body of `project_github_actions(ci_workflow_dag, YamlStatic)` walks `CIWorkflowDag` (PR #2736) and emits `Workflow` value byte-equivalent to current `.github/workflows/ci.yml` content; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly. + - **BinaryShim** (Slice 5): body of `project_github_actions(ci_workflow_dag, BinaryShim)` emits a Workflow value pointing to a compiled binary (Rust target) entry-point + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically. Slice 7 affected-set integration consumes. + - **PythonShim** (Future; sketch only): same shim model, Python runtime substrate (Python target emit pattern reused). + - **InlineGunbc** (DESIGN-ONLY per codex BLOCKING #9970 + PR #2746 §5.4; held out of initial enum until real consumer exists): gunbc-as-runtime-orchestrator longer-term option; sketch only — NO enum variant or emitter arm lands until a real runtime consumer exists. + +2. **Emitter dispatch composition** — how per-arm projection bodies compose with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`); how the projection function's pinned invocation (`gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic)`) flows into the existing emission pipeline. + +3. **Affected-set integration shape** — how `BinaryShim` arm consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.); cross-tier coordination with Slice 7 owner (Verification Mgr clever-tern-670). + +4. **Equivalence claim** — what does "same `CIWorkflowDag` emits semantically equivalent output across emission targets" mean precisely; test claim shape for `emission_target_open_enum_landed` + `project_github_actions_landed` gates (per scope doc §1). + +5. **GH Actions expression-substrate consumption** — per Director ratification of PR #2751 (warm-wolf-698 expression-substrate canvas): canvas should reference the ratified `Expression = OpaqueString(String)` 🟡 YELLOW shape + 5-site uniform migration (RunnerSpec / Job.if_condition / ConcurrencySpec.group / Step.with[k] / Step.env[k]); YamlStatic emission = "emit Expression::OpaqueString variant verbatim to YAML"; BinaryShim/PythonShim = "evaluate Expression at runtime" (opaque-passthrough until dissolution fires). + +6. **Carrier reuse audit** — confirm existing `dsl/extdeps/github/actions.dag` carriers (concrete `Workflow` `:21` / `Job` `:110` / `Step` `:147`) + ratified Expression carrier (PR #2751) are sufficient for YamlStatic emitter; identify any per-target-body substrate gaps (4 small substrate-prereq PRs are tracked: `Workflow.concurrency` / `PullRequestActivity.ReadyForReview` / `Push.paths` Optional / `WorkflowPermissions.*` Optional — per WI-2 brief Propagated Substrate-Fidelity Concerns section + warm-wolf-698 carrier-gap inventory). ## Reference materials -- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent) +- `docs/r3-t-workflow-as-data-full-r3-close-scope.md` — PM FULL scope (this brief's parent); §2 has the LOCKED (c-refined) substrate-shape statement +- `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` — sibling WI-2 brief (declares projection-function substrate in NEW file `dsl/gunbc/ci_emission.dag` — NOT extension of `dsl/gunbc/ci.dag`); this canvas plugs into the projection-function-shape that WI-2 lands - `docs/design-affected-set-lens.md` — affected-set lens substrate (Slice 7 consumer) -- `docs/design-emission-model.md` — existing emission architecture (the model this extends) +- `docs/design-emission-model.md` — existing emission architecture (the model this canvas extends) - `docs/design-clean-emission-contract.md` — emission contract authority -- `dsl/extdeps/github/actions.dag` — **canonical platform carriers**: concrete `Workflow` (`:21`), `Job` (`:110`), `Step` (`:147`), `WorkflowSecret` (`:102`); LANDED per PR #2160 -- `dsl/gunbc/ci.dag` — **existing CI-intent declarations** (gate-centric: `CIGate` / `CIPipeline` / `GateSource`); landed PR #2371 -- `dsl/extdeps/cron_schedule_model.dag` — `CronSchedule` carrier -- `.github/workflows/ci.yml` — current hand-authored CI transport shim (the dissolution target) -- memory: `project_eliminate_emit_lang_files.md` — omni-emission consolidation thesis (inherited architecture) +- PR #2749 §7 (warm-wolf-698 substrate-shape comparison canvas) — (c-refined) ratification anchor +- PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; projection input domain +- PR #2751 (warm-wolf-698 GH Actions expression substrate canvas) — `Expression` 🟡 YELLOW substrate; Director-ratified per msg_168005e1 +- `dsl/extdeps/github/actions.dag` — **canonical platform carriers**: concrete `Workflow` (`:21`), `Job` (`:110`), `Step` (`:147`), `WorkflowSecret` (`:102`) +- `dsl/gunbc/ci.dag` — **existing gate-centric CI substrate** (PR #2371); canvas does NOT extend this file (per (c-refined) shape); WI-2 lands the projection-function substrate in NEW file `dsl/gunbc/ci_emission.dag` +- memory: `project_eliminate_emit_lang_files.md` — omni-emission consolidation thesis ## Acceptance gates -1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-7 above -2. Each per-target emitter (`YamlStatic`, `BinaryShim`, `PythonShim`) has explicit emission semantics + acceptance contract -3. `EmissionTarget` placement (Workflow vs CIPipeline vs wrapper) explicitly evaluated; canvas recommends one with reasoning; Mgr-ratifiable shape per `feedback_substrate_principle_audit` -4. Cross-references to `design-affected-set-lens.md` §5 (CI integration sketch) explicit — canvas resolves the "CI integration deferred to R4 full delivery" placeholder -5. No parallel-representation debt: greps cleanly against existing `dsl/extdeps/github/actions.dag` + `dsl/gunbc/ci.dag` (canvas EXTENDS thinking, doesn't duplicate carriers) -6. Cargo / clippy / fmt clean (no code changes expected; doc-only PR) +1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-6 above +2. Each per-target emitter arm (`YamlStatic`, `BinaryShim`, `PythonShim`) has explicit emission semantics + acceptance contract +3. `InlineGunbc` documented as DESIGN-ONLY future target with explicit "no enum variant / emitter arm lands until real runtime consumer exists" exclusion rule +4. Substrate-shape placement is NOT re-evaluated — (c-refined) shape is consumed as given; canvas explicitly cites PR #2749 §7 as placement authority +5. Cross-references to `design-affected-set-lens.md` §5 (CI integration sketch) explicit — canvas resolves the "CI integration deferred" placeholder +6. Cross-references to PR #2751 (Expression substrate) for expression-site emission contracts +7. No parallel-representation debt: canvas does NOT extend `dsl/gunbc/ci.dag` or modify `dsl/extdeps/github/actions.dag` substrate-shape outside the (c-refined)-ratified surface +8. Cargo / clippy / fmt clean (no code changes expected; doc-only PR) ## STOP / PING criteria -- **STOP** if canvas needs to introduce new substrate-shape carriers beyond `EmissionTarget` enum (e.g., new step-shape, new trigger-shape) — surface to Substrate Mgr warm-wolf-698 (substrate-shape questions belong to Mgr canvas per `feedback_substrate_shape_belongs_in_mgr_canvas`) +- **STOP** if canvas reveals the (c-refined) shape doesn't actually compose with the existing emission pipeline — surface to warm-wolf-698 + Director for shape re-evaluation (would constitute substrate-shape re-ratification request) +- **STOP** if per-target emission body shape requires substantive new substrate carriers beyond the 4 small substrate-prereq PRs already tracked — surface to Substrate Mgr warm-wolf-698 - **STOP** if the emitter-dispatch shape conflicts with `project_eliminate_emit_lang_files.md` consolidation thesis — surface; this canvas should EXTEND that thesis, not contradict - **STOP** if affected-set integration shape requires substantive negotiation with Verification Mgr clever-tern-670 — surface for cross-tier ratification (Slice 7 owner) - **PING** PM (deep-wolf-155) on PR-open for review-routing -- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification routing (lane owner per Director ratification msg_5cbdad24) +- **PING** Substrate Mgr (warm-wolf-698) on PR-open for Mgr-tier ratification routing (lane owner) - **PING** Verification Mgr (clever-tern-670) on PR-open if BinaryShim affected-set-integration shape is non-trivial +- **COORDINATE** with sibling WI-2 worker cool-carp-720 — WI-2 lands the projection-function-substrate this canvas plugs into ## Sequencing -- This canvas authoring is dispatch-ready NOW (Slice 1 substrate LANDED via PR #2160; no held prereq; no new substrate-fact introduction expected) -- Director ratification of canvas shape is the gate to dispatch Slice 4 (YamlStatic emitter implementation) + Slice 5 (BinaryShim emitter implementation) +- Canvas authoring is dispatch-ready NOW (Slice 1 substrate LANDED via PR #2160; (c-refined) shape ratified at PR #2749; Expression substrate ratified at PR #2751 — all upstream) +- Canvas merge is the gate to dispatch Slice 4 (YamlStatic emitter implementation) + Slice 5 (BinaryShim emitter implementation) per-arm-body briefs - Canvas should reference but NOT depend on Slice 2 (timing carriers) — emitter dispatch is orthogonal to timing instrumentation -- Sibling worker cool-carp-720 (WI-2) is extending `dsl/gunbc/ci.dag` to full ci.yml coverage in parallel — coordinate if emission_target placement question crosses --- -— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24. +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24; revised 2026-05-12 per codex BLOCKING on PR #2744 (2026-05-12T07:49:06Z) — substrate-shape questions LOCKED to (c-refined) per ratification cascade; no longer "OPEN QUESTION"; WI-2 lands NEW file `dsl/gunbc/ci_emission.dag` not extension of `dsl/gunbc/ci.dag`. From e43aba3c0c884ce004ffc573aae39b1849c3de0b Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 07:59:32 +0000 Subject: [PATCH 12/23] =?UTF-8?q?docs(scope+briefs):=20openai-pro=20BLOCKI?= =?UTF-8?q?NG=20fix=20=E2=80=94=20InlineGunbc=20DESIGN-ONLY=20+=20scope-do?= =?UTF-8?q?c=20stale=20field=20language?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md | 9 ++++----- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 11 ++++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 47f105857b5..c08bd2b688d 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -20,11 +20,10 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an EmissionTarget = YamlStatic | BinaryShim | PythonShim - | InlineGunbc - | ... // open enum — additional targets may be added + | ... // open enum — additional targets land when real consumers exist ``` - Each arm is a tag indicating the emission strategy. Initial set covers the 4 strategies named in PM scoping doc §3. Open-enum discipline: the projection function must total-handle the declared arms; unknown arms compile-fail (per fail-closed discipline `feedback_fail_closed_discipline`). + Each arm is a tag indicating the emission strategy. **Initial set: 3 arms** (`YamlStatic`, `BinaryShim`, `PythonShim`). **`InlineGunbc` is DESIGN-ONLY** per PR #2746 §5.4 + WI-1 brief discipline + openai-pro BLOCKING on PR #2744 (2026-05-12 ~07:55Z) — NO `InlineGunbc` enum variant or emitter arm lands until a real runtime consumer exists. Open-enum discipline: the projection function must total-handle the declared arms; unknown arms compile-fail (per fail-closed discipline `feedback_fail_closed_discipline`); future arms (including `InlineGunbc`) land via separate substrate-prereq PRs paired with their consumers. 2. **`project_github_actions` projection function declaration**: @@ -71,7 +70,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an **DO**: - Create NEW file `dsl/gunbc/ci_emission.dag` (the projection-substrate file). -- Declare `EmissionTarget` open enum with 4 named arms + open marker. +- Declare `EmissionTarget` open enum with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open marker. **`InlineGunbc` is DESIGN-ONLY** — do NOT add as enum arm (per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). - Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. - Declare `gunbc_ci_yml_workflow` pinned-projection data binding (invocation pin with `YamlStatic`). - Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. @@ -89,7 +88,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an ## Acceptance gates 1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. -2. `EmissionTarget` open enum declared with 4 named arms (`YamlStatic`, `BinaryShim`, `PythonShim`, `InlineGunbc`) + open-enum marker. +2. `EmissionTarget` open enum declared with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open-enum marker. **NO `InlineGunbc` arm** — DESIGN-ONLY future target per PR #2746 §5.4; lands via separate substrate-prereq PR paired with consumer. 3. `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). 4. `gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic)` pinned-projection data binding declared. 5. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 133bec4ad4d..db028ed46df 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -1,7 +1,7 @@ # T-Workflow-As-Data — FULL R3-close scope (operator elevation 2026-05-12) **Author**: deep-wolf-155 (PM) -**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is a **modeled toggle field**, not a hard-coded emitter choice. Placement of the field is an open canvas question (see §2). +**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is **modeled data** (open enum, invocation-time projection parameter), not a hard-coded emitter choice. **Substrate-shape RATIFIED (c-refined)** per PR #2749 §7 + Director msg_237bde05 / msg_f9fd669e / msg_2a68a4b5: `EmissionTarget` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow`, NOT a field on any carrier. See §2 for full (a)/(b)/(c) RETRACTED/SUPERSEDED treatment. **Routing**: Director (zesty-bear-812) **RATIFIED** scope + framing at msg_5cbdad24 2026-05-12 ~06:35Z. Substrate Mgr (warm-wolf-698) lane-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). **Parent program**: T-Workflow-As-Data lane in `docs/r3-program-plan.md` §4.4 + §1.8 gates 53-58 + 63. **Status**: **RATIFIED 2026-05-12** (Director). PR #2744 + downstream Mgr-tier briefs/canvases proceeding. @@ -15,7 +15,7 @@ **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — `.github/workflows/ci.yml` content sourced from gunbc-substrate via projection function `project_github_actions(ci_workflow_dag, target) → Workflow`; WI-2 lands the projection-substrate (new file `dsl/gunbc/ci_emission.dag`); Slice 4-5 implements per-arm projection bodies that walk `CIWorkflowDag` (PR #2736) + emit the chosen target. 2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some emission targets); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. -3. **EmissionTarget toggle** — same `ci.dag` emits multiple target shapes (YamlStatic, BinaryShim, PythonShim, …); choice is a modeled field, not a build-system decision. Field placement OPEN (see §2). +3. **EmissionTarget toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (YamlStatic, BinaryShim, PythonShim, …; `InlineGunbc` is DESIGN-ONLY future target per PR #2746 §5.4, NOT in initial enum); `EmissionTarget` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally @@ -35,7 +35,7 @@ |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | | **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some emission targets may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | -| **NEW: `emission_target_open_enum_landed`** | substrate-shape | T-WAD | `EmissionTarget` sum-type (`YamlStatic | BinaryShim | PythonShim | InlineGunbc | ...`) declared in gunbc namespace as open enum | +| **NEW: `emission_target_open_enum_landed`** | substrate-shape | T-WAD | `EmissionTarget` sum-type with 3 initial arms (`YamlStatic \| BinaryShim \| PythonShim \| ...`) declared in gunbc namespace as open enum; `InlineGunbc` is DESIGN-ONLY per PR #2746 §5.4 — lands via separate substrate-prereq PR paired with a runtime consumer | | **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | | **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | | **NEW: `slow_test_exemptions_dissolved`** | state-check | T-WAD + Debt-Paydown | `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from `Cost` dimension structurally (state-check sibling of `test_cost_dimension_landed` per kernel-modeling discipline split) | @@ -46,7 +46,8 @@ **`EmissionTarget` as modeled data** (open enum, same shape as `Dimension`): ```dag -type EmissionTarget = YamlStatic | BinaryShim | PythonShim | InlineGunbc | ... +type EmissionTarget = YamlStatic | BinaryShim | PythonShim | ... +// InlineGunbc DESIGN-ONLY per PR #2746 §5.4 — NOT in initial enum; lands when runtime consumer exists ``` **Substrate-shape RATIFIED** (per PR #2749 §7 + Director msg_237bde05 + msg_f9fd669e — (c-refined) shape; was option (c) wrapper, refined to projection-function): @@ -92,7 +93,7 @@ Step = RunStep | UsesStep // :147 — sum type **Emitter dispatch** (parallel to `05_emit_*.dag` consolidation thesis per `project_eliminate_emit_lang_files.md`): - Slice 4-5 emitter consumes the **pinned-projection invocation** `gunbc_ci_yml_workflow = project_github_actions(ci_workflow_dag, YamlStatic)` (or other `target` for BinaryShim / PythonShim / etc.) -- Per-arm projection bodies (Slice 4 = YamlStatic, Slice 5 = BinaryShim, future = PythonShim / InlineGunbc) walk `CIWorkflowDag` + emit the chosen target +- Per-arm projection bodies (Slice 4 = YamlStatic, Slice 5 = BinaryShim, future = PythonShim) walk `CIWorkflowDag` + emit the chosen target. `InlineGunbc` is DESIGN-ONLY (not in initial enum) per PR #2746 §5.4 - Same `ci_workflow_dag` value across all targets at workflow level; the emission STRATEGY is invocation-time - A/B comparison is apples-to-apples (call `project_github_actions(ci_workflow_dag, BinaryShim)` vs `project_github_actions(ci_workflow_dag, YamlStatic)`) From 9013b4a46a338138b0430c9962acd4373e14f14e Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 08:08:19 +0000 Subject: [PATCH 13/23] =?UTF-8?q?docs(scope+briefs):=20cursor=20APPROVE=5F?= =?UTF-8?q?WITH=5FCOMMENTS=20=E2=80=94=20reconcile=20PR=20#2751=20ratifica?= =?UTF-8?q?tion=20status=20+=204-vs-5=20substrate-prereq=20framing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md | 4 ++-- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index 98e5519ff19..ed6ea1d20ff 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -39,7 +39,7 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on 5. **GH Actions expression-substrate consumption** — per Director ratification of PR #2751 (warm-wolf-698 expression-substrate canvas): canvas should reference the ratified `Expression = OpaqueString(String)` 🟡 YELLOW shape + 5-site uniform migration (RunnerSpec / Job.if_condition / ConcurrencySpec.group / Step.with[k] / Step.env[k]); YamlStatic emission = "emit Expression::OpaqueString variant verbatim to YAML"; BinaryShim/PythonShim = "evaluate Expression at runtime" (opaque-passthrough until dissolution fires). -6. **Carrier reuse audit** — confirm existing `dsl/extdeps/github/actions.dag` carriers (concrete `Workflow` `:21` / `Job` `:110` / `Step` `:147`) + ratified Expression carrier (PR #2751) are sufficient for YamlStatic emitter; identify any per-target-body substrate gaps (4 small substrate-prereq PRs are tracked: `Workflow.concurrency` / `PullRequestActivity.ReadyForReview` / `Push.paths` Optional / `WorkflowPermissions.*` Optional — per WI-2 brief Propagated Substrate-Fidelity Concerns section + warm-wolf-698 carrier-gap inventory). +6. **Carrier reuse audit** — confirm existing `dsl/extdeps/github/actions.dag` carriers (concrete `Workflow` `:21` / `Job` `:110` / `Step` `:147`) + ratified Expression carrier (PR #2751) are sufficient for YamlStatic emitter. **5 carrier gaps total** identified per WI-2 brief Propagated Substrate-Fidelity Concerns section + warm-wolf-698 inventory: **4 small extdeps-fidelity substrate-prereq PRs** (`Workflow.concurrency` / `PullRequestActivity.ReadyForReview` / `Push.paths` Optional / `WorkflowPermissions.*` Optional) PLUS **1 substrate-shape canvas + Expression carrier** for `RunnerSpec` expression-syntax (PR #2751 canvas RATIFIED at msg_168005e1; Expression carrier introduction is a separate substrate-prereq PR authored by warm-wolf-698 post-#2751-merge). The 5th gap is canvas-tier, not Slice-4-extdeps-fidelity. ## Reference materials @@ -69,7 +69,7 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on ## STOP / PING criteria - **STOP** if canvas reveals the (c-refined) shape doesn't actually compose with the existing emission pipeline — surface to warm-wolf-698 + Director for shape re-evaluation (would constitute substrate-shape re-ratification request) -- **STOP** if per-target emission body shape requires substantive new substrate carriers beyond the 4 small substrate-prereq PRs already tracked — surface to Substrate Mgr warm-wolf-698 +- **STOP** if per-target emission body shape requires substantive new substrate carriers beyond the 5 already-tracked gaps (4 small substrate-prereq PRs + 1 Expression carrier via PR #2751 canvas) — surface to Substrate Mgr warm-wolf-698 - **STOP** if the emitter-dispatch shape conflicts with `project_eliminate_emit_lang_files.md` consolidation thesis — surface; this canvas should EXTEND that thesis, not contradict - **STOP** if affected-set integration shape requires substantive negotiation with Verification Mgr clever-tern-670 — surface for cross-tier ratification (Slice 7 owner) - **PING** PM (deep-wolf-155) on PR-open for review-routing diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index db028ed46df..4da7fa03126 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -99,7 +99,7 @@ Step = RunStep | UsesStep // :147 — sum type **Why BinaryShim is the affected-set unlock**: Static YAML can't naturally express "compute affected-set at PR time, dispatch matrix dynamically." BinaryShim makes runtime decisions structural — binary reads git diff, computes `affected_set = ⋃ over dim of reachable(Δ, dim)`, dispatches matrix accordingly. -**Open expression-substrate question — DEFERRED to canvas (NOT blocking this scope)**: GH Actions expression syntax modeling (`runs-on: ${{ vars.CI_RUNNER || 'ubuntu-latest' }}` etc.) is a Slice 4-5 substrate-shape question routed to warm-wolf-698 canvas authority (PR #2751 — Expression 🟡 YELLOW recommendation; Director ratification pending). NOT a §1 gate. +**Expression-substrate question — RATIFIED at canvas-tier (NOT blocking this scope)**: GH Actions expression syntax modeling (`runs-on: ${{ vars.CI_RUNNER || 'ubuntu-latest' }}` etc.) is a Slice 4-5 substrate-shape question handled at warm-wolf-698 canvas authority (PR #2751 — Expression 🟡 YELLOW + single OpaqueString variant + three-condition dissolution trigger + 5-site uniform migration; **Director-ratified at msg_168005e1 2026-05-12**). Expression carrier introduction is a separate substrate-prereq PR authored by warm-wolf-698 post-#2751-merge (distinct from the 4 small extdeps-fidelity substrate-prereq PRs covering concurrency / ready_for_review / Push.paths / WorkflowPermissions). NOT a §1 gate. ## §3. Slice expansion From b2bc28110f7db18437176684349e978bb89afd45 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 08:24:44 +0000 Subject: [PATCH 14/23] =?UTF-8?q?docs(briefs):=20WI-2=20brief=20=E2=80=94?= =?UTF-8?q?=20close=20CIPipeline=20parallel-authority=20ambiguity=20at=20?= =?UTF-8?q?=C2=A73=20line=2045=20(codex=20BLOCKING=20#10028=20on=20PR=20#2?= =?UTF-8?q?744)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §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) --- docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index c08bd2b688d..91cd2b7e55e 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -42,7 +42,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) ``` - - `ci_workflow_dag` is the input — sourced from existing `dsl/gunbc/ci.dag` `CIPipeline` value or a new `CIWorkflowDag` carrier (see "CIWorkflowDag dependency sequencing" below) + - `ci_workflow_dag` is the input — sourced from the `CIWorkflowDag` carrier introduced in PR #2736 (neat-badger-30); `dsl/gunbc/ci.dag::CIPipeline` is INSUFFICIENT for this role and explicitly NOT a valid source (see "CIWorkflowDag dependency sequencing" below — Path (a) REJECTED per warm-wolf-698 msg_27d99080: flat gates list without edge/dependency structure cannot serve as projection input) - This is the **invocation pin** that defines the canonical YAML-emission point for downstream Slice 4 - The pinned data binding is THE Workflow value Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output From dd2922142ad024e9193eb13c71424a3a6762cdec Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 08:33:34 +0000 Subject: [PATCH 15/23] =?UTF-8?q?docs(scope+briefs):=20T-WAD=20=E2=80=94?= =?UTF-8?q?=20reframe=20Slice=204=20byte-equivalence=20claim=20(briansrls?= =?UTF-8?q?=20BLOCKING=20on=20PR=20#2744=202026-05-12T08:27:21Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §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) --- docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md | 2 +- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index ed6ea1d20ff..842a0ad60f9 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -26,7 +26,7 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on top of the locked (c-refined) substrate: 1. **Per-target emission semantics** (the substantive canvas surface): - - **YamlStatic** (Slice 4 deliverable): body of `project_github_actions(ci_workflow_dag, YamlStatic)` walks `CIWorkflowDag` (PR #2736) and emits `Workflow` value byte-equivalent to current `.github/workflows/ci.yml` content; deterministic; regenerated on workflow edit; consumer is GH Actions runner directly. + - **YamlStatic** (Slice 4 deliverable): body of `project_github_actions(ci_workflow_dag, YamlStatic)` walks `CIWorkflowDag` (PR #2736) and emits a `Workflow` value whose deterministic YAML encoding is **semantically equivalent** to current `.github/workflows/ci.yml` (same triggers / jobs / steps / runners / conditions / permissions / matrix as consumed by GitHub Actions); one-time migration rewrites committed file to canonical encoding (non-semantic facts — comments, whitespace, key ordering — discarded per P1: `Workflow` is single authority for CI semantics; load-bearing comments must migrate into substrate as modeled facts, not into parallel byte-authority); regression-guard gate compares on-disk artifact byte-wise to fresh projection output (internal byte-identity: projection-output ↔ committed-artifact, NOT external: substrate ↔ legacy hand-authored content); regenerated on workflow edit; consumer is GH Actions runner directly. - **BinaryShim** (Slice 5): body of `project_github_actions(ci_workflow_dag, BinaryShim)` emits a Workflow value pointing to a compiled binary (Rust target) entry-point + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically. Slice 7 affected-set integration consumes. - **PythonShim** (Future; sketch only): same shim model, Python runtime substrate (Python target emit pattern reused). - **InlineGunbc** (DESIGN-ONLY per codex BLOCKING #9970 + PR #2746 §5.4; held out of initial enum until real consumer exists): gunbc-as-runtime-orchestrator longer-term option; sketch only — NO enum variant or emitter arm lands until a real runtime consumer exists. diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 4da7fa03126..aa86a815eab 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -111,7 +111,7 @@ Existing T-WAD slices (state at 2026-05-12): **New slices added by FULL elevation** (Director-ratified absorption to lanes): -- **Slice 4**: YamlStatic projection-arm implementation — body of `project_github_actions(..., YamlStatic)` walks `CIWorkflowDag` and emits `Workflow` value byte-equivalent to current `.github/workflows/ci.yml` content; consumed by emission pipeline to produce the on-disk artifact → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges + PR #2736 (CIWorkflowDag) merge. NOTE: NOT an "EmissionTarget field landing" — per (c-refined) shape (§2), `EmissionTarget` is invocation-time projection parameter, not carrier-time data. +- **Slice 4**: YamlStatic projection-arm implementation — body of `project_github_actions(..., YamlStatic)` walks `CIWorkflowDag` and emits a `Workflow` value whose deterministic YAML encoding is **semantically equivalent** to current `.github/workflows/ci.yml` (same triggers, jobs, steps, runner specs, conditions, permissions, and matrix structure as consumed by GitHub Actions). One-time migration rewrites the committed file to the canonical emission output; non-semantic facts in pre-migration `ci.yml` (comments, blank-line whitespace, key ordering quirks) are discarded — they are not load-bearing CI logic per P1 (`Workflow` is the single authority for CI semantics). Any load-bearing comments in current `ci.yml` (workaround explanations, dissolution-trigger pointers) must migrate into substrate as modeled facts (e.g., 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. The regression-guard gate (per §1 row `ci_yml_hand_authority_dissolved` option (b)) compares the on-disk artifact byte-wise to **fresh projection output** (not to pre-migration `ci.yml`); the byte-identity is internal to the substrate (projection-output ↔ committed-artifact), not external (substrate-output ↔ legacy hand-authored content). Consumed by emission pipeline to produce the on-disk artifact → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges + PR #2736 (CIWorkflowDag) merge. NOTE: NOT an "EmissionTarget field landing" — per (c-refined) shape (§2), `EmissionTarget` is invocation-time projection parameter, not carrier-time data. - **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. - **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). - **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). From f830b988f79124ec9dcc2f72be3ad4730e17f3b2 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 08:41:00 +0000 Subject: [PATCH 16/23] =?UTF-8?q?docs(briefs):=20WI-2=20brief=20=E2=80=94?= =?UTF-8?q?=20defer=20pinned-binding=20to=20Slice=204=20+=20add=20Practice?= =?UTF-8?q?=204=20receipt=20gate=20(briansrls=202x=20BLOCKING=20on=20PR=20?= =?UTF-8?q?#2744)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two BLOCKING inline reviews from briansrls at 2026-05-12T08:30:15Z on current head dd2922142: 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 b2bc28110 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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 91cd2b7e55e..f64a2a0cc27 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -36,15 +36,19 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - **This WI lands the DECLARATION + signature**, not the per-arm implementation. Per-arm bodies (YamlStatic projection, BinaryShim projection, etc.) are Slice 4+ work owned by Substrate Mgr. - Leave function body as `// TODO Slice 4-5: per-arm projection implementations` with structural total-handling skeleton (match on `target` arms; each arm body marked TODO). -3. **`gunbc_ci_yml_workflow` pinned-projection data binding**: +3. **`gunbc_ci_yml_workflow` pinned-projection data binding** — **DEFERRED TO SLICE 4** (P2 single-authority lockdown): + + The binding will eventually take this form: ``` - gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) + gunbc_ci_yml_workflow: Workflow = project_github_actions(, YamlStatic) ``` - - `ci_workflow_dag` is the input — sourced from the `CIWorkflowDag` carrier introduced in PR #2736 (neat-badger-30); `dsl/gunbc/ci.dag::CIPipeline` is INSUFFICIENT for this role and explicitly NOT a valid source (see "CIWorkflowDag dependency sequencing" below — Path (a) REJECTED per warm-wolf-698 msg_27d99080: flat gates list without edge/dependency structure cannot serve as projection input) - - This is the **invocation pin** that defines the canonical YAML-emission point for downstream Slice 4 - - The pinned data binding is THE Workflow value Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output + But WI-2 does **NOT** land this binding. Rationale (per briansrls BLOCKING on PR #2744 2026-05-12T08:30:15Z c#3224878308): the binding requires a concrete `CIWorkflowDag` *instance* whose authority is locked to a canonical source. No such canonical instance exists in main today — `CIWorkflowDag` was introduced as a carrier (type) by PR #2736 (neat-badger-30), but the first canonical *value* (the CI-workflow-as-data corresponding to current `.github/workflows/ci.yml`) lands as part of **Slice 4** (YamlStatic projection-arm implementation, Substrate Mgr warm-wolf-698 lane). If WI-2 landed the binding now, the worker would have to either (a) invent a placeholder `CIWorkflowDag` value inline in `ci_emission.dag` (creating a parallel authority alongside the eventual Slice 4 canonical instance — P2 violation), or (b) build a `CIWorkflowDag` value from `CIPipeline` via inline conversion (reopens Path (a) authority despite the explicit Path (b) rejection below — P2 violation), or (c) leave the binding as a non-compiling forward-reference. + + **WI-2 scope therefore lands only items 1 (`EmissionTarget` enum) + 2 (function signature)**. The pinned-projection binding is a Slice 4 deliverable, not a WI-2 deliverable. Slice 4 authors the canonical `CIWorkflowDag` instance and the pinned-projection binding together, sourcing the binding's `ci_workflow_dag` argument from that canonical instance (single authority, P2-clean). + + Forward reference for Slice 4 (informational, not WI-2 work): the pinned binding will be the canonical YAML-emission point Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output (per scope-doc §3 Slice 4). ## CIWorkflowDag dependency sequencing — Path (b) REQUIRED (Substrate Mgr clarification 2026-05-12 msg_27d99080) @@ -72,7 +76,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - Create NEW file `dsl/gunbc/ci_emission.dag` (the projection-substrate file). - Declare `EmissionTarget` open enum with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open marker. **`InlineGunbc` is DESIGN-ONLY** — do NOT add as enum arm (per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). - Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. -- Declare `gunbc_ci_yml_workflow` pinned-projection data binding (invocation pin with `YamlStatic`). +- Author Practice 4 coproduct-dissolution receipt for `EmissionTarget` (🟡 YELLOW classification + named dissolution trigger + coordinate-dissolution sketch per WI-1 brief discipline; see acceptance gate 3). - Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. - Reference `CIWorkflowDag` carrier from PR #2736 as the input domain type (canvas + Director-ratified per msg_4f7f536d). - Sequence WI-2 PR after PR #2736 merge OR rebase WI-2's branch on PR #2736's `session/neat-badger-30` if PR #2736 is still HOLD-merging. @@ -84,19 +88,26 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - Do NOT implement per-arm projection bodies — those are Slice 4-5 work owned by Substrate Mgr after canvas ratification. - Do NOT modify `.github/workflows/ci.yml` — Slice 8 dissolves hand-authority; this WI only lands the projection substrate. - Do NOT introduce ALTERNATE carriers for the projection input — `CIWorkflowDag` from PR #2736 is the ratified authority. +- Do NOT land the `gunbc_ci_yml_workflow` pinned-projection data binding in this PR — DEFERRED to Slice 4 per §3 + acceptance gate 5 (P2 single-authority lockdown; the binding requires a canonical `CIWorkflowDag` instance, which Slice 4 authors alongside the binding). +- Do NOT author a placeholder `CIWorkflowDag` instance to satisfy the binding shape — that creates parallel authority alongside Slice 4's canonical instance (P2 violation per briansrls BLOCKING c#3224878308). +- Do NOT land the `EmissionTarget` enum WITHOUT its Practice 4 receipt — receipt is a co-equal substrate authoring artifact, not optional documentation (per briansrls BLOCKING c#3224878313). ## Acceptance gates 1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. 2. `EmissionTarget` open enum declared with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open-enum marker. **NO `InlineGunbc` arm** — DESIGN-ONLY future target per PR #2746 §5.4; lands via separate substrate-prereq PR paired with consumer. -3. `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). -4. `gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic)` pinned-projection data binding declared. -5. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). -6. NO new fields on existing `dsl/gunbc/ci.dag` carriers (`CIGate` / `CIPipeline` / `GateSource`). -7. NO new substrate types introduced without Mgr ratification (per `feedback_substrate_shape_belongs_in_mgr_canvas`). -8. `cargo test --workspace` green (no breakage of existing tests including `t_ci_workflow_as_data_demo`). -9. `cargo clippy --all-targets -- -D warnings` clean. -10. `cargo fmt --all --check` clean. +3. **Practice 4 coproduct-dissolution receipt for `EmissionTarget`** (consistent with WI-1 brief discipline; per `feedback_coproduct_dissolution` + `modeling-discipline.md` Practice 4; addresses briansrls BLOCKING c#3224878313 on PR #2744 2026-05-12T08:30:15Z): + - Receipt classification: **🟡 YELLOW scaffold** (flat enum with named dimensions noted: artifact-shape `StaticYaml` vs `ThinShim` × runner-realization `CompiledBinary` vs `EmittedPython`) + - Named dissolution trigger: first additional shim runtime OR first need to share runner metadata across shim targets + - Coordinate-dissolution sketch (in-doc, not code): the eventual factoring is `EmissionArtifactShape × ShimRunnerKind` per WI-1 canvas §3 (PR #2746 merged 08:29:09Z); declare the receipt as a `.dag` comment block at the `EmissionTarget` declaration site OR as a `modeling-discipline.md`-style receipt header in `ci_emission.dag` preamble. WI-2 worker MUST NOT land the enum without the receipt — receipt is part of substrate authoring discipline, not optional documentation. +4. `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). +5. **NO pinned-projection data binding** (`gunbc_ci_yml_workflow`) in WI-2's PR — DEFERRED to Slice 4 per §3 above (P2 single-authority lockdown; canonical `CIWorkflowDag` instance lands with Slice 4, binding lands with the canonical instance). +6. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). +7. NO new fields on existing `dsl/gunbc/ci.dag` carriers (`CIGate` / `CIPipeline` / `GateSource`). +8. NO new substrate types introduced without Mgr ratification (per `feedback_substrate_shape_belongs_in_mgr_canvas`). +9. `cargo test --workspace` green (no breakage of existing tests including `t_ci_workflow_as_data_demo`). +10. `cargo clippy --all-targets -- -D warnings` clean. +11. `cargo fmt --all --check` clean. ## STOP / PING criteria From 70a49acb351076085c46e4ebdfba36ccb36eaf7a Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 09:38:30 +0000 Subject: [PATCH 17/23] =?UTF-8?q?docs(scope+briefs):=20T-WAD=20=E2=80=94?= =?UTF-8?q?=20EmissionTarget=20=E2=86=92=20WorkflowRuntime=20rename=20(nam?= =?UTF-8?q?e=20collision=20with=20SELF=5FHOSTING.md:609;=20warm-wolf-698?= =?UTF-8?q?=20PR=20#2749=20commit=20575eb7e36=20cascade)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 575eb7e36 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) --- .../r3-t-wad-full-r3-cidag-scaffold-worker.md | 36 ++++++++--------- ...-full-r3-emitter-dispatch-canvas-worker.md | 6 +-- ...-t-workflow-as-data-full-r3-close-scope.md | 40 ++++++++++--------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index f64a2a0cc27..8b84f003afd 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -2,22 +2,22 @@ **Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e 2026-05-12. **Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this WI lands the projection-function substrate that enables Slice 4 emitter implementation. -**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per `ci_yml_hand_authority_dissolved` gate — see scope doc §1). +**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `WorkflowRuntime` open enum + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per `ci_yml_hand_authority_dissolved` gate — see scope doc §1). ## Substrate-shape ratification anchor -The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e and self-corrected to via PR #2749 §7 (warm-wolf-698). The earlier (a) shape (`EmissionTarget?` field on `dsl/extdeps/github/actions.dag::Workflow`) was RETRACTED at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749 for INVARIANTS P1 violation (CI logic placed on platform carrier). +The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e and self-corrected to via PR #2749 §7 (warm-wolf-698). The earlier (a) shape (`WorkflowRuntime?` field on `dsl/extdeps/github/actions.dag::Workflow`) was RETRACTED at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749 for INVARIANTS P1 violation (CI logic placed on platform carrier). -**The ratified shape**: `EmissionTarget` is a parameter to a projection function in `dsl/gunbc/`, NOT a field on any carrier. The function's invocation pin produces the `Workflow` value the emitter consumes. +**The ratified shape**: `WorkflowRuntime` is a parameter to a projection function in `dsl/gunbc/`, NOT a field on any carrier. The function's invocation pin produces the `Workflow` value the emitter consumes. ## Output **Create NEW file `dsl/gunbc/ci_emission.dag`** declaring: -1. **`EmissionTarget` open enum** (sum-type with named arms; OPEN per design): +1. **`WorkflowRuntime` open enum** (sum-type with named arms; OPEN per design): ``` - EmissionTarget = YamlStatic + WorkflowRuntime = YamlStatic | BinaryShim | PythonShim | ... // open enum — additional targets land when real consumers exist @@ -28,10 +28,10 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an 2. **`project_github_actions` projection function declaration**: ``` - project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow + project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow ``` - - Input domain: `(ci_workflow_dag: CIWorkflowDag, target: EmissionTarget)` + - Input domain: `(ci_workflow_dag: CIWorkflowDag, target: WorkflowRuntime)` - Output codomain: `Workflow` (the `dsl/extdeps/github/actions.dag::Workflow` platform carrier) - **This WI lands the DECLARATION + signature**, not the per-arm implementation. Per-arm bodies (YamlStatic projection, BinaryShim projection, etc.) are Slice 4+ work owned by Substrate Mgr. - Leave function body as `// TODO Slice 4-5: per-arm projection implementations` with structural total-handling skeleton (match on `target` arms; each arm body marked TODO). @@ -46,7 +46,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an But WI-2 does **NOT** land this binding. Rationale (per briansrls BLOCKING on PR #2744 2026-05-12T08:30:15Z c#3224878308): the binding requires a concrete `CIWorkflowDag` *instance* whose authority is locked to a canonical source. No such canonical instance exists in main today — `CIWorkflowDag` was introduced as a carrier (type) by PR #2736 (neat-badger-30), but the first canonical *value* (the CI-workflow-as-data corresponding to current `.github/workflows/ci.yml`) lands as part of **Slice 4** (YamlStatic projection-arm implementation, Substrate Mgr warm-wolf-698 lane). If WI-2 landed the binding now, the worker would have to either (a) invent a placeholder `CIWorkflowDag` value inline in `ci_emission.dag` (creating a parallel authority alongside the eventual Slice 4 canonical instance — P2 violation), or (b) build a `CIWorkflowDag` value from `CIPipeline` via inline conversion (reopens Path (a) authority despite the explicit Path (b) rejection below — P2 violation), or (c) leave the binding as a non-compiling forward-reference. - **WI-2 scope therefore lands only items 1 (`EmissionTarget` enum) + 2 (function signature)**. The pinned-projection binding is a Slice 4 deliverable, not a WI-2 deliverable. Slice 4 authors the canonical `CIWorkflowDag` instance and the pinned-projection binding together, sourcing the binding's `ci_workflow_dag` argument from that canonical instance (single authority, P2-clean). + **WI-2 scope therefore lands only items 1 (`WorkflowRuntime` enum) + 2 (function signature)**. The pinned-projection binding is a Slice 4 deliverable, not a WI-2 deliverable. Slice 4 authors the canonical `CIWorkflowDag` instance and the pinned-projection binding together, sourcing the binding's `ci_workflow_dag` argument from that canonical instance (single authority, P2-clean). Forward reference for Slice 4 (informational, not WI-2 work): the pinned binding will be the canonical YAML-emission point Slice 4's YamlStatic emitter walks to produce `.github/workflows/ci.yml`-equivalent output (per scope-doc §3 Slice 4). @@ -67,16 +67,16 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an **STOP-and-route discipline** (revised): - The CIWorkflowDag CARRIER CHOICE is canvas+Director-ratified — no STOP needed for this dimension. -- STOP still applies for OTHER substrate-shape questions (e.g., `EmissionTarget` open-enum vocabulary support, function-as-projection declaration vocabulary support) — see STOP / PING criteria below. +- STOP still applies for OTHER substrate-shape questions (e.g., `WorkflowRuntime` open-enum vocabulary support, function-as-projection declaration vocabulary support) — see STOP / PING criteria below. - PING-on-PR-open ratification covers shape (signature, derived-binding form, module placement), NOT the CIWorkflowDag choice in isolation. ## Scope boundaries (DO / DON'T) **DO**: - Create NEW file `dsl/gunbc/ci_emission.dag` (the projection-substrate file). -- Declare `EmissionTarget` open enum with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open marker. **`InlineGunbc` is DESIGN-ONLY** — do NOT add as enum arm (per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). +- Declare `WorkflowRuntime` open enum with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open marker. **`InlineGunbc` is DESIGN-ONLY** — do NOT add as enum arm (per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). - Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. -- Author Practice 4 coproduct-dissolution receipt for `EmissionTarget` (🟡 YELLOW classification + named dissolution trigger + coordinate-dissolution sketch per WI-1 brief discipline; see acceptance gate 3). +- Author Practice 4 coproduct-dissolution receipt for `WorkflowRuntime` (🟡 YELLOW classification + named dissolution trigger + coordinate-dissolution sketch per WI-1 brief discipline; see acceptance gate 3). - Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. - Reference `CIWorkflowDag` carrier from PR #2736 as the input domain type (canvas + Director-ratified per msg_4f7f536d). - Sequence WI-2 PR after PR #2736 merge OR rebase WI-2's branch on PR #2736's `session/neat-badger-30` if PR #2736 is still HOLD-merging. @@ -90,17 +90,17 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an - Do NOT introduce ALTERNATE carriers for the projection input — `CIWorkflowDag` from PR #2736 is the ratified authority. - Do NOT land the `gunbc_ci_yml_workflow` pinned-projection data binding in this PR — DEFERRED to Slice 4 per §3 + acceptance gate 5 (P2 single-authority lockdown; the binding requires a canonical `CIWorkflowDag` instance, which Slice 4 authors alongside the binding). - Do NOT author a placeholder `CIWorkflowDag` instance to satisfy the binding shape — that creates parallel authority alongside Slice 4's canonical instance (P2 violation per briansrls BLOCKING c#3224878308). -- Do NOT land the `EmissionTarget` enum WITHOUT its Practice 4 receipt — receipt is a co-equal substrate authoring artifact, not optional documentation (per briansrls BLOCKING c#3224878313). +- Do NOT land the `WorkflowRuntime` enum WITHOUT its Practice 4 receipt — receipt is a co-equal substrate authoring artifact, not optional documentation (per briansrls BLOCKING c#3224878313). ## Acceptance gates 1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. -2. `EmissionTarget` open enum declared with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open-enum marker. **NO `InlineGunbc` arm** — DESIGN-ONLY future target per PR #2746 §5.4; lands via separate substrate-prereq PR paired with consumer. -3. **Practice 4 coproduct-dissolution receipt for `EmissionTarget`** (consistent with WI-1 brief discipline; per `feedback_coproduct_dissolution` + `modeling-discipline.md` Practice 4; addresses briansrls BLOCKING c#3224878313 on PR #2744 2026-05-12T08:30:15Z): +2. `WorkflowRuntime` open enum declared with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open-enum marker. **NO `InlineGunbc` arm** — DESIGN-ONLY future target per PR #2746 §5.4; lands via separate substrate-prereq PR paired with consumer. +3. **Practice 4 coproduct-dissolution receipt for `WorkflowRuntime`** (consistent with WI-1 brief discipline; per `feedback_coproduct_dissolution` + `modeling-discipline.md` Practice 4; addresses briansrls BLOCKING c#3224878313 on PR #2744 2026-05-12T08:30:15Z): - Receipt classification: **🟡 YELLOW scaffold** (flat enum with named dimensions noted: artifact-shape `StaticYaml` vs `ThinShim` × runner-realization `CompiledBinary` vs `EmittedPython`) - Named dissolution trigger: first additional shim runtime OR first need to share runner metadata across shim targets - - Coordinate-dissolution sketch (in-doc, not code): the eventual factoring is `EmissionArtifactShape × ShimRunnerKind` per WI-1 canvas §3 (PR #2746 merged 08:29:09Z); declare the receipt as a `.dag` comment block at the `EmissionTarget` declaration site OR as a `modeling-discipline.md`-style receipt header in `ci_emission.dag` preamble. WI-2 worker MUST NOT land the enum without the receipt — receipt is part of substrate authoring discipline, not optional documentation. -4. `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). + - Coordinate-dissolution sketch (in-doc, not code): the eventual factoring is `EmissionArtifactShape × ShimRunnerKind` per WI-1 canvas §3 (PR #2746 merged 08:29:09Z); declare the receipt as a `.dag` comment block at the `WorkflowRuntime` declaration site OR as a `modeling-discipline.md`-style receipt header in `ci_emission.dag` preamble. WI-2 worker MUST NOT land the enum without the receipt — receipt is part of substrate authoring discipline, not optional documentation. +4. `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). 5. **NO pinned-projection data binding** (`gunbc_ci_yml_workflow`) in WI-2's PR — DEFERRED to Slice 4 per §3 above (P2 single-authority lockdown; canonical `CIWorkflowDag` instance lands with Slice 4, binding lands with the canonical instance). 6. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). 7. NO new fields on existing `dsl/gunbc/ci.dag` carriers (`CIGate` / `CIPipeline` / `GateSource`). @@ -111,7 +111,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an ## STOP / PING criteria -- **STOP** if `EmissionTarget` open-enum declaration requires substrate-shape features not yet supported by current v3 surface (e.g., open-enum vocabulary missing) — surface to Substrate Mgr. +- **STOP** if `WorkflowRuntime` open-enum declaration requires substrate-shape features not yet supported by current v3 surface (e.g., open-enum vocabulary missing) — surface to Substrate Mgr. - **STOP** if `project_github_actions` function signature requires substrate features not yet supported (e.g., function-as-projection declaration vocabulary missing) — surface to Substrate Mgr; canvas-tier decision. - **STOP** if PR #2736 (CIWorkflowDag introduction) is BLOCKED on something WI-2 implementation reveals (e.g., shape mismatch with what `project_github_actions` actually needs) — surface to Substrate Mgr; CIWorkflowDag carrier shape ratified-but-revisable. - **PING** PM (deep-wolf-155) on PR-open for review-routing. @@ -200,4 +200,4 @@ These concerns will be encoded into the Slice 4 brief as MUST-address acceptance --- -— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e; revised after codex BLOCKING #9970 on PR #2749 (INVARIANTS P1: EmissionTarget belongs in gunbc-substrate projection function, not as field on actions.dag::Workflow). +— Authored by deep-wolf-155 (PM) 2026-05-12 per operator FULL elevation directive + Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e; revised after codex BLOCKING #9970 on PR #2749 (INVARIANTS P1: WorkflowRuntime belongs in gunbc-substrate projection function, not as field on actions.dag::Workflow). diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index 842a0ad60f9..2345cadd11f 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -8,8 +8,8 @@ **The (c-refined) substrate-shape is LOCKED** (post-2026-05-12 cascade): -- `EmissionTarget` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow`, **NOT a field on any carrier**. -- `EmissionTarget` lives in gunbc namespace (`dsl/gunbc/ci_emission.dag` — NEW file landed by WI-2). +- `WorkflowRuntime` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow`, **NOT a field on any carrier**. +- `WorkflowRuntime` lives in gunbc namespace (`dsl/gunbc/ci_emission.dag` — NEW file landed by WI-2). - `dsl/extdeps/github/actions.dag::Workflow` stays platform-faithful and UNMODIFIED. - The earlier option (a) "field on Workflow" was **RETRACTED** at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749 (INVARIANTS P1 violation — CI logic on platform carrier). - Option (b) "field on CIPipeline" was **SUPERSEDED** — `CIPipeline { name, gates: List }` is flat without edge structure; cannot serve as projection input per warm-wolf-698 msg_27d99080. Replaced by `CIWorkflowDag` (PR #2736) as input domain. @@ -35,7 +35,7 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on 3. **Affected-set integration shape** — how `BinaryShim` arm consumes `affected_set(Dag_before, Dag_after)` from `docs/design-affected-set-lens.md`; what the runtime decision surface looks like (matrix-spec emission, job-skip emission, etc.); cross-tier coordination with Slice 7 owner (Verification Mgr clever-tern-670). -4. **Equivalence claim** — what does "same `CIWorkflowDag` emits semantically equivalent output across emission targets" mean precisely; test claim shape for `emission_target_open_enum_landed` + `project_github_actions_landed` gates (per scope doc §1). +4. **Equivalence claim** — what does "same `CIWorkflowDag` emits semantically equivalent output across workflow runtimes" mean precisely; test claim shape for `workflow_runtime_open_enum_landed` + `project_github_actions_landed` gates (per scope doc §1). 5. **GH Actions expression-substrate consumption** — per Director ratification of PR #2751 (warm-wolf-698 expression-substrate canvas): canvas should reference the ratified `Expression = OpaqueString(String)` 🟡 YELLOW shape + 5-site uniform migration (RunnerSpec / Job.if_condition / ConcurrencySpec.group / Step.with[k] / Step.env[k]); YamlStatic emission = "emit Expression::OpaqueString variant verbatim to YAML"; BinaryShim/PythonShim = "evaluate Expression at runtime" (opaque-passthrough until dissolution fires). diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index aa86a815eab..52fc42e17f5 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -1,7 +1,7 @@ # T-Workflow-As-Data — FULL R3-close scope (operator elevation 2026-05-12) **Author**: deep-wolf-155 (PM) -**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: emission target is **modeled data** (open enum, invocation-time projection parameter), not a hard-coded emitter choice. **Substrate-shape RATIFIED (c-refined)** per PR #2749 §7 + Director msg_237bde05 / msg_f9fd669e / msg_2a68a4b5: `EmissionTarget` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow`, NOT a field on any carrier. See §2 for full (a)/(b)/(c) RETRACTED/SUPERSEDED treatment. +**Authority**: operator directive 2026-05-12 (Brian; transcript-cited at gunbc#846 / Director inbox routing) — elevate T-CI-Workflow-As-Data to FULL R3-close criterion (not just demonstration). Operator design ratification: workflow runtime is **modeled data** (open enum, invocation-time projection parameter), not a hard-coded emitter choice. **Substrate-shape RATIFIED (c-refined)** per PR #2749 §7 + Director msg_237bde05 / msg_f9fd669e / msg_2a68a4b5: `WorkflowRuntime` is an invocation-time parameter to `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow`, NOT a field on any carrier. See §2 for full (a)/(b)/(c) RETRACTED/SUPERSEDED treatment. **Routing**: Director (zesty-bear-812) **RATIFIED** scope + framing at msg_5cbdad24 2026-05-12 ~06:35Z. Substrate Mgr (warm-wolf-698) lane-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). **Parent program**: T-Workflow-As-Data lane in `docs/r3-program-plan.md` §4.4 + §1.8 gates 53-58 + 63. **Status**: **RATIFIED 2026-05-12** (Director). PR #2744 + downstream Mgr-tier briefs/canvases proceeding. @@ -14,8 +14,8 @@ **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — `.github/workflows/ci.yml` content sourced from gunbc-substrate via projection function `project_github_actions(ci_workflow_dag, target) → Workflow`; WI-2 lands the projection-substrate (new file `dsl/gunbc/ci_emission.dag`); Slice 4-5 implements per-arm projection bodies that walk `CIWorkflowDag` (PR #2736) + emit the chosen target. -2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some emission targets); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. -3. **EmissionTarget toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (YamlStatic, BinaryShim, PythonShim, …; `InlineGunbc` is DESIGN-ONLY future target per PR #2746 §5.4, NOT in initial enum); `EmissionTarget` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. +2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some workflow runtimes); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. +3. **WorkflowRuntime toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (YamlStatic, BinaryShim, PythonShim, …; `InlineGunbc` is DESIGN-ONLY future target per PR #2746 §5.4, NOT in initial enum); `WorkflowRuntime` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally @@ -29,34 +29,36 @@ **Citation chain**: operator directive aligns with prior #846 c#4412330468 ("0 hand-Rust including tests AND stage0; bootstrap is data + self-generated") — `.github/workflows/ci.yml` is structurally identical to hand-Rust under that framing. Dissolution is load-bearing for R3 close. -**Substrate-shape ratified** (per PR #2749 (c-refined)): `EmissionTarget` sum-type lives in gunbc namespace; `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` lives in gunbc; extdeps.github.actions.Workflow unmodified. Emission choice is invocation-time data (projection parameter), NOT carrier-time data. See PR #2749 for the comparison canvas authority. +**Substrate-shape ratified** (per PR #2749 (c-refined)): `WorkflowRuntime` sum-type lives in gunbc namespace; `project_github_actions: (CIWorkflowDag, WorkflowRuntime) → Workflow` lives in gunbc; extdeps.github.actions.Workflow unmodified. Emission choice is invocation-time data (projection parameter), NOT carrier-time data. See PR #2749 for the comparison canvas authority. + +**Type-name rename `EmissionTarget` → `WorkflowRuntime`** (2026-05-12 per warm-wolf-698 PR #2749 commit `575eb7e36` addressing operator BLOCKING at PR #2749 :666 / :672): the original `EmissionTarget` name collided with the canonical Shape-A carrier `type EmissionTarget { language: LanguageSpec, rendering: RenderingSpec? }` declared at `src/v3/SELF_HOSTING.md:609`. Per INVARIANTS P2 (single-authority for type names across gunbc surface), the rename is structurally required; Director ratification msg_4f7f536d at sum-type-name level is superseded by post-ratification name-collision discovery per `feedback_pre_compaction_framings_self_supersede`. All OTHER ratified elements stand: variant names (`YamlStatic | BinaryShim | PythonShim`), 22-site migration scope (per PR #2751 §5.5 expansion), 🟡 YELLOW Practice 4 receipt, projection function signature shape, gunbc-namespace placement, named dissolution trigger. Cascade renames coordinated across PR #2746 merged content (follow-on PR), PR #2745 WI-2 implementation (cool-carp-720 surfaced), and PR #2750 ledger sync (gate-ID rename `emission_target_open_enum_landed` → `workflow_runtime_open_enum_landed`). | Gate ID | Predicate-family | Lane | Pass condition | |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | -| **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some emission targets may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | -| **NEW: `emission_target_open_enum_landed`** | substrate-shape | T-WAD | `EmissionTarget` sum-type with 3 initial arms (`YamlStatic \| BinaryShim \| PythonShim \| ...`) declared in gunbc namespace as open enum; `InlineGunbc` is DESIGN-ONLY per PR #2746 §5.4 — lands via separate substrate-prereq PR paired with a runtime consumer | -| **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, EmissionTarget) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | +| **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some workflow runtimes may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | +| **NEW: `workflow_runtime_open_enum_landed`** | substrate-shape | T-WAD | `WorkflowRuntime` sum-type with 3 initial arms (`YamlStatic \| BinaryShim \| PythonShim \| ...`) declared in gunbc namespace as open enum; `InlineGunbc` is DESIGN-ONLY per PR #2746 §5.4 — lands via separate substrate-prereq PR paired with a runtime consumer | +| **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, WorkflowRuntime) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | | **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | | **NEW: `slow_test_exemptions_dissolved`** | state-check | T-WAD + Debt-Paydown | `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from `Cost` dimension structurally (state-check sibling of `test_cost_dimension_landed` per kernel-modeling discipline split) | | **NEW: `ci_uses_affected_set_selection`** | state-check | T-WAD + T-Verification | `BinaryShim` emitter consumes affected-set lens output from PR #2713; Layer 2 path-regex `if:` gates removed from any remaining workflow files (cross-tier co-owned with clever-tern-670 Slice 7 work) | ## §2. Architectural shape (operator-ratified 2026-05-12; (c-refined) substrate-shape LOCKED 2026-05-12 per PR #2749 §7) -**`EmissionTarget` as modeled data** (open enum, same shape as `Dimension`): +**`WorkflowRuntime` as modeled data** (open enum, same shape as `Dimension`): ```dag -type EmissionTarget = YamlStatic | BinaryShim | PythonShim | ... +type WorkflowRuntime = YamlStatic | BinaryShim | PythonShim | ... // InlineGunbc DESIGN-ONLY per PR #2746 §5.4 — NOT in initial enum; lands when runtime consumer exists ``` **Substrate-shape RATIFIED** (per PR #2749 §7 + Director msg_237bde05 + msg_f9fd669e — (c-refined) shape; was option (c) wrapper, refined to projection-function): -**`EmissionTarget` is an invocation-time parameter to the projection function in gunbc-substrate**, NOT a field on any carrier: +**`WorkflowRuntime` is an invocation-time parameter to the projection function in gunbc-substrate**, NOT a field on any carrier: ```dag // In dsl/gunbc/ci_emission.dag (NEW file, WI-2 lands it): -project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow +project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow // Invocation pin (canonical YAML-emission point for Slice 4): gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) @@ -64,11 +66,11 @@ gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlSt - **Input domain**: `CIWorkflowDag` (PR #2736 carrier; gate-dependency-bearing semantic source — flat `CIPipeline` is INSUFFICIENT per warm-wolf-698 msg_27d99080) - **Output codomain**: `extdeps.github.actions.Workflow` (platform-faithful; UNMODIFIED — INVARIANTS P1) -- **Emission choice**: invocation-time argument (`target: EmissionTarget`); per-arm projection bodies are Slice 4-5 implementation +- **Emission choice**: invocation-time argument (`target: WorkflowRuntime`); per-arm projection bodies are Slice 4-5 implementation **Prior framings — RETRACTED / DISSOLVED**: -- **(a) Field on `Workflow` (extdeps platform carrier)** — RETRACTED 2026-05-12 at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749. INVARIANTS P1 violation: emission_target IS CI logic, not platform fact; cannot land on `dsl/extdeps/github/actions.dag` per its scope header ("platform constraints — not CI logic"). +- **(a) Field on `Workflow` (extdeps platform carrier)** — RETRACTED 2026-05-12 at Director msg_b4151f45 + codex BLOCKING #9970 on PR #2749. INVARIANTS P1 violation: workflow_runtime IS CI logic, not platform fact; cannot land on `dsl/extdeps/github/actions.dag` per its scope header ("platform constraints — not CI logic"). - **(b) Field on `CIPipeline`** — superseded; `CIPipeline { name, gates: List }` is flat without edge structure; cannot serve as projection input per warm-wolf-698 msg_27d99080. Replaced by `CIWorkflowDag` (PR #2736) input domain. - **(c) Wrapper node** `WorkflowEmission { workflow, target }` — superseded by (c-refined) projection function. Wrapper introduces an extra carrier; projection function is the cleaner shape (parameter-as-data preserves single-substrate-fact + cost-of-change ≤ 1). @@ -111,11 +113,11 @@ Existing T-WAD slices (state at 2026-05-12): **New slices added by FULL elevation** (Director-ratified absorption to lanes): -- **Slice 4**: YamlStatic projection-arm implementation — body of `project_github_actions(..., YamlStatic)` walks `CIWorkflowDag` and emits a `Workflow` value whose deterministic YAML encoding is **semantically equivalent** to current `.github/workflows/ci.yml` (same triggers, jobs, steps, runner specs, conditions, permissions, and matrix structure as consumed by GitHub Actions). One-time migration rewrites the committed file to the canonical emission output; non-semantic facts in pre-migration `ci.yml` (comments, blank-line whitespace, key ordering quirks) are discarded — they are not load-bearing CI logic per P1 (`Workflow` is the single authority for CI semantics). Any load-bearing comments in current `ci.yml` (workaround explanations, dissolution-trigger pointers) must migrate into substrate as modeled facts (e.g., 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. The regression-guard gate (per §1 row `ci_yml_hand_authority_dissolved` option (b)) compares the on-disk artifact byte-wise to **fresh projection output** (not to pre-migration `ci.yml`); the byte-identity is internal to the substrate (projection-output ↔ committed-artifact), not external (substrate-output ↔ legacy hand-authored content). Consumed by emission pipeline to produce the on-disk artifact → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges + PR #2736 (CIWorkflowDag) merge. NOTE: NOT an "EmissionTarget field landing" — per (c-refined) shape (§2), `EmissionTarget` is invocation-time projection parameter, not carrier-time data. +- **Slice 4**: YamlStatic projection-arm implementation — body of `project_github_actions(..., YamlStatic)` walks `CIWorkflowDag` and emits a `Workflow` value whose deterministic YAML encoding is **semantically equivalent** to current `.github/workflows/ci.yml` (same triggers, jobs, steps, runner specs, conditions, permissions, and matrix structure as consumed by GitHub Actions). One-time migration rewrites the committed file to the canonical emission output; non-semantic facts in pre-migration `ci.yml` (comments, blank-line whitespace, key ordering quirks) are discarded — they are not load-bearing CI logic per P1 (`Workflow` is the single authority for CI semantics). Any load-bearing comments in current `ci.yml` (workaround explanations, dissolution-trigger pointers) must migrate into substrate as modeled facts (e.g., 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. The regression-guard gate (per §1 row `ci_yml_hand_authority_dissolved` option (b)) compares the on-disk artifact byte-wise to **fresh projection output** (not to pre-migration `ci.yml`); the byte-identity is internal to the substrate (projection-output ↔ committed-artifact), not external (substrate-output ↔ legacy hand-authored content). Consumed by emission pipeline to produce the on-disk artifact → **Substrate Mgr (warm-wolf-698) lane**. Gated on WI-1 + WI-2 PR merges + PR #2736 (CIWorkflowDag) merge. NOTE: NOT an "WorkflowRuntime field landing" — per (c-refined) shape (§2), `WorkflowRuntime` is invocation-time projection parameter, not carrier-time data. - **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. - **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). - **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). -- **Slice 8**: ci.yml hand-authority dissolution (hand-authored content replaced by emission artifact or thin-shim per chosen `EmissionTarget`) + emission-target toggle finalized + `ci_yml_hand_authority_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. **NOTE** (per briansrls BLOCKING #PR2744 2026-05-12): NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY, and YamlStatic / BinaryShim / PythonShim emission paths all require some `.github/workflows/ci.yml` artifact (full-emit or thin-shim) for GH Actions trigger discovery. +- **Slice 8**: ci.yml hand-authority dissolution (hand-authored content replaced by emission artifact or thin-shim per chosen `WorkflowRuntime`) + workflow-runtime toggle finalized + `ci_yml_hand_authority_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. **NOTE** (per briansrls BLOCKING #PR2744 2026-05-12): NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY, and YamlStatic / BinaryShim / PythonShim emission paths all require some `.github/workflows/ci.yml` artifact (full-emit or thin-shim) for GH Actions trigger discovery. ## §4. Dependency graph @@ -144,7 +146,7 @@ Critical path (forward): Parallelizable (started 2026-05-12 — dispatched under PM): - WI-1 emitter-dispatch architecture canvas (worker still-heron-763) - - WI-2 new file dsl/gunbc/ci_emission.dag — declares EmissionTarget open enum + project_github_actions function signature + gunbc_ci_yml_workflow pinned-projection (worker cool-carp-720) + - WI-2 new file dsl/gunbc/ci_emission.dag — declares WorkflowRuntime open enum + project_github_actions function signature + gunbc_ci_yml_workflow pinned-projection (worker cool-carp-720) ``` ## §5. Realistic R3-close timing @@ -168,7 +170,7 @@ Assumes: - Independent of held substrate; Slice 1 LANDED **WI-2**: NEW file `dsl/gunbc/ci_emission.dag` — projection-function substrate scaffold (per (c-refined) shape) -- Output: NEW file `dsl/gunbc/ci_emission.dag` declaring `EmissionTarget` open enum + `project_github_actions: (CIWorkflowDag, EmissionTarget) -> Workflow` function signature + `gunbc_ci_yml_workflow` pinned-projection data binding +- Output: NEW file `dsl/gunbc/ci_emission.dag` declaring `WorkflowRuntime` open enum + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` function signature + `gunbc_ci_yml_workflow` pinned-projection data binding - Scope: DECLARATION + signature ONLY (per-arm projection bodies are Slice 4-5 owned by Substrate Mgr post-canvas-merge) - Worker: **cool-carp-720** (PM auto-spawn 2026-05-12 ~06:30Z) - Brief: `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` @@ -201,7 +203,7 @@ PM-relay to warm-wolf-698 + Director co-sign at #828 if cross-tier confirmation - `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief (LANDED PR #2160) - `dsl/extdeps/github/actions.dag` — canonical platform carriers (`Workflow:21` `Job:110` `Step:147` `WorkflowSecret:102`) - `dsl/gunbc/ci.dag` — existing gate-centric CI intent declarations (PR #2371); WI-2 does NOT extend this file (per (c-refined) shape); CIPipeline is NOT used as projection input (flat without edge structure per warm-wolf-698 msg_27d99080) -- `dsl/gunbc/ci_emission.dag` — NEW file WI-2 creates (projection-function substrate; EmissionTarget enum + project_github_actions signature + pinned-projection binding) +- `dsl/gunbc/ci_emission.dag` — NEW file WI-2 creates (projection-function substrate; WorkflowRuntime enum + project_github_actions signature + pinned-projection binding) - PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; WI-2 sources projection input from this - `dsl/extdeps/cron_schedule_model.dag` — CronSchedule carrier (LANDED via PR #2169) - `docs/ci-pipeline-optimization.md` — pre-v3 historical optimization (background context; not active program) @@ -217,7 +219,7 @@ Director scaffolded acceptance-aggregator pattern doc at `docs/design-section-1- | Proposed | Predicate-family | Lane | depends_on (lattice-meet status) | |---|---|---|---| -| `t_ci_wad_acceptance` (or PM-named equivalent) | acceptance-aggregator | T-CI-WAD | **#56 + 6 NEW** (from §1): #56, `ci_yml_hand_authority_dissolved`, `emission_target_open_enum_landed`, `project_github_actions_landed`, `test_cost_dimension_landed`, `slow_test_exemptions_dissolved`, `ci_uses_affected_set_selection` | +| `t_ci_wad_acceptance` (or PM-named equivalent) | acceptance-aggregator | T-CI-WAD | **#56 + 6 NEW** (from §1): #56, `ci_yml_hand_authority_dissolved`, `workflow_runtime_open_enum_landed`, `project_github_actions_landed`, `test_cost_dimension_landed`, `slow_test_exemptions_dissolved`, `ci_uses_affected_set_selection` | **Status**: PARKED pending PR #2748 ratification (currently 1/2 approvals). When PR #2748 ratifies, this pilot row inserts into §1.8 ledger as the canonical T-CI-WAD aggregator. Sibling clusters (Cluster M / Cluster F / Cluster K / T-V2-Retirement) get the same template at low marginal cost. From 011ddbc650c8181e38bd6e5f99767096e3e3c4d8 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 09:48:01 +0000 Subject: [PATCH 18/23] =?UTF-8?q?docs(briefs):=20WI-2=20brief=20=E2=80=94?= =?UTF-8?q?=20fix=20closure-predicate=20vs=20=C2=A73=20inconsistency=20on?= =?UTF-8?q?=20pinned-projection=20binding=20(briansrls=20BLOCKING=20on=20P?= =?UTF-8?q?R=20#2744=202026-05-12T09:44:22Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 f830b988f 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 f830b988f 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 f830b988f) 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) --- docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index 8b84f003afd..cab8789cce6 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -2,7 +2,7 @@ **Authority**: PM scoping doc `docs/r3-t-workflow-as-data-full-r3-close-scope.md` §6 WI-2; operator FULL elevation 2026-05-12; Director ratification msg_5cbdad24 + (c-refined) ratification msg_237bde05 / msg_f9fd669e 2026-05-12. **Parent**: T-Workflow-As-Data lane (Substrate Mgr warm-wolf-698 lane-absorbed Slices 4-5/8 per Director); this WI lands the projection-function substrate that enables Slice 4 emitter implementation. -**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `WorkflowRuntime` open enum + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` projection function + `gunbc_ci_yml_workflow` pinned-projection data binding; downstream Slice 4 YamlStatic emitter consumes the projection; downstream Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per `ci_yml_hand_authority_dissolved` gate — see scope doc §1). +**Closure predicate**: `dsl/gunbc/ci_emission.dag` declares `WorkflowRuntime` open enum + Practice 4 coproduct-dissolution receipt (per acceptance gate 3) + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` projection function signature with TODO-marked total-handling skeleton. The `gunbc_ci_yml_workflow` pinned-projection data binding is **DEFERRED to Slice 4** per §3 + acceptance gate 5 (P2 single-authority lockdown — the binding requires a canonical `CIWorkflowDag` instance which Slice 4 authors alongside the binding; WI-2 landing the binding now would force placeholder-or-conversion authority creation per briansrls BLOCKING c#3224878308 fix in commit `f830b988f`). Downstream Slice 4 YamlStatic emitter consumes the projection and authors the pinned binding; downstream Slice 8 dissolves hand-authority over `.github/workflows/ci.yml` (per `ci_yml_hand_authority_dissolved` gate — see scope doc §1). ## Substrate-shape ratification anchor From d25a56ab445bfb83a60c8e7b53dfc3f3dae22062 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 09:50:26 +0000 Subject: [PATCH 19/23] =?UTF-8?q?docs(scope):=20T-WAD=20=E2=80=94=20propag?= =?UTF-8?q?ate=20pinned-binding=20deferral=20to=20scope-doc=20summaries=20?= =?UTF-8?q?+=20dependency=20graph=20(codex=20BLOCKING=20on=20PR=20#2744=20?= =?UTF-8?q?commit=20f830b988)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit codex BLOCKING review #10090 on commit f830b988 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 f830b988f (WI-2 brief acceptance gate 5 deferral) + 011ddbc65 (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 (f830b988f + 011ddbc65). 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 011ddbc65 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) --- ...r3-t-workflow-as-data-full-r3-close-scope.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 52fc42e17f5..194a739c04e 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -57,11 +57,16 @@ type WorkflowRuntime = YamlStatic | BinaryShim | PythonShim | ... **`WorkflowRuntime` is an invocation-time parameter to the projection function in gunbc-substrate**, NOT a field on any carrier: ```dag -// In dsl/gunbc/ci_emission.dag (NEW file, WI-2 lands it): +// In dsl/gunbc/ci_emission.dag (NEW file, WI-2 lands the signature): project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow -// Invocation pin (canonical YAML-emission point for Slice 4): -gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic) +// Invocation pin DEFERRED to Slice 4 (canonical CIWorkflowDag instance lands with Slice 4; +// WI-2 landing the binding now would force placeholder-or-conversion authority creation — +// P2 single-authority lockdown per WI-2 brief §3 + acceptance gate 5): +// +// gunbc_ci_yml_workflow: Workflow = project_github_actions(, YamlStatic) +// +// Slice 4 authors the canonical CIWorkflowDag instance AND this pinned binding together. ``` - **Input domain**: `CIWorkflowDag` (PR #2736 carrier; gate-dependency-bearing semantic source — flat `CIPipeline` is INSUFFICIENT per warm-wolf-698 msg_27d99080) @@ -146,7 +151,7 @@ Critical path (forward): Parallelizable (started 2026-05-12 — dispatched under PM): - WI-1 emitter-dispatch architecture canvas (worker still-heron-763) - - WI-2 new file dsl/gunbc/ci_emission.dag — declares WorkflowRuntime open enum + project_github_actions function signature + gunbc_ci_yml_workflow pinned-projection (worker cool-carp-720) + - WI-2 new file dsl/gunbc/ci_emission.dag — declares WorkflowRuntime open enum + Practice 4 receipt + project_github_actions function signature (DECLARATION + signature only; gunbc_ci_yml_workflow pinned-projection DEFERRED to Slice 4 per P2 single-authority lockdown — worker cool-carp-720) ``` ## §5. Realistic R3-close timing @@ -170,7 +175,7 @@ Assumes: - Independent of held substrate; Slice 1 LANDED **WI-2**: NEW file `dsl/gunbc/ci_emission.dag` — projection-function substrate scaffold (per (c-refined) shape) -- Output: NEW file `dsl/gunbc/ci_emission.dag` declaring `WorkflowRuntime` open enum + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` function signature + `gunbc_ci_yml_workflow` pinned-projection data binding +- Output: NEW file `dsl/gunbc/ci_emission.dag` declaring `WorkflowRuntime` open enum + Practice 4 coproduct-dissolution receipt + `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` function signature with TODO-marked total-handling skeleton. The `gunbc_ci_yml_workflow` pinned-projection data binding is **DEFERRED to Slice 4** (P2 single-authority lockdown — canonical `CIWorkflowDag` instance lands with Slice 4, binding lands with the canonical instance; WI-2 brief §3 + acceptance gate 5). - Scope: DECLARATION + signature ONLY (per-arm projection bodies are Slice 4-5 owned by Substrate Mgr post-canvas-merge) - Worker: **cool-carp-720** (PM auto-spawn 2026-05-12 ~06:30Z) - Brief: `docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md` @@ -203,7 +208,7 @@ PM-relay to warm-wolf-698 + Director co-sign at #828 if cross-tier confirmation - `docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md` — Slice 1 substrate carrier brief (LANDED PR #2160) - `dsl/extdeps/github/actions.dag` — canonical platform carriers (`Workflow:21` `Job:110` `Step:147` `WorkflowSecret:102`) - `dsl/gunbc/ci.dag` — existing gate-centric CI intent declarations (PR #2371); WI-2 does NOT extend this file (per (c-refined) shape); CIPipeline is NOT used as projection input (flat without edge structure per warm-wolf-698 msg_27d99080) -- `dsl/gunbc/ci_emission.dag` — NEW file WI-2 creates (projection-function substrate; WorkflowRuntime enum + project_github_actions signature + pinned-projection binding) +- `dsl/gunbc/ci_emission.dag` — NEW file WI-2 creates (projection-function substrate; WorkflowRuntime enum + Practice 4 receipt + project_github_actions signature; `gunbc_ci_yml_workflow` pinned-projection DEFERRED to Slice 4 per P2 single-authority lockdown) - PR #2736 (neat-badger-30) — `CIWorkflowDag` carrier introduction; WI-2 sources projection input from this - `dsl/extdeps/cron_schedule_model.dag` — CronSchedule carrier (LANDED via PR #2169) - `docs/ci-pipeline-optimization.md` — pre-v3 historical optimization (background context; not active program) From 338a83fd3c6c2d2a5adf01f6e5e5b686ddf09b97 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 10:54:10 +0000 Subject: [PATCH 20/23] =?UTF-8?q?docs(scope+briefs):=20T-WAD=20=E2=80=94?= =?UTF-8?q?=20demote=20PythonShim=20to=20DESIGN-ONLY=20(briansrls=20BLOCKI?= =?UTF-8?q?NG=20on=20PR=20#2744=202026-05-12T10:46:59Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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/r3-t-wad-full-r3-cidag-scaffold-worker.md | 7 +++---- ...r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md | 6 +++--- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 11 ++++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index cab8789cce6..a5f2b6e71ea 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -19,11 +19,10 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an ``` WorkflowRuntime = YamlStatic | BinaryShim - | PythonShim | ... // open enum — additional targets land when real consumers exist ``` - Each arm is a tag indicating the emission strategy. **Initial set: 3 arms** (`YamlStatic`, `BinaryShim`, `PythonShim`). **`InlineGunbc` is DESIGN-ONLY** per PR #2746 §5.4 + WI-1 brief discipline + openai-pro BLOCKING on PR #2744 (2026-05-12 ~07:55Z) — NO `InlineGunbc` enum variant or emitter arm lands until a real runtime consumer exists. Open-enum discipline: the projection function must total-handle the declared arms; unknown arms compile-fail (per fail-closed discipline `feedback_fail_closed_discipline`); future arms (including `InlineGunbc`) land via separate substrate-prereq PRs paired with their consumers. + Each arm is a tag indicating the emission strategy. **Initial set: 2 arms** (`YamlStatic`, `BinaryShim`) — both have concrete consumer-paired slices (Slice 4 / Slice 5). **`PythonShim` AND `InlineGunbc` are DESIGN-ONLY** held out of the initial enum until real runtime consumers exist. Per INVARIANTS P5 / Pure Bootstrap discipline + sibling WI-1 brief framing (PythonShim "Future; sketch only" — no concrete Slice consumer in scope) + PR #2746 §5.4 (InlineGunbc) + openai-pro BLOCKING on PR #2744 (2026-05-12 ~07:55Z) for InlineGunbc + briansrls BLOCKING on PR #2744 (2026-05-12T10:46:59Z) for PythonShim asymmetry: NO enum variant or emitter arm lands without a concrete consumer-paired slice. Open-enum discipline: the projection function must total-handle the declared arms; unknown arms compile-fail (per fail-closed discipline `feedback_fail_closed_discipline`); future arms (`PythonShim`, `InlineGunbc`, and any others) land via separate substrate-prereq PRs paired with their consumers. 2. **`project_github_actions` projection function declaration**: @@ -74,7 +73,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an **DO**: - Create NEW file `dsl/gunbc/ci_emission.dag` (the projection-substrate file). -- Declare `WorkflowRuntime` open enum with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open marker. **`InlineGunbc` is DESIGN-ONLY** — do NOT add as enum arm (per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). +- Declare `WorkflowRuntime` open enum with **2** named arms (`YamlStatic`, `BinaryShim`) + open marker. **`PythonShim` AND `InlineGunbc` are DESIGN-ONLY** — do NOT add either as enum arm (PythonShim per briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z; InlineGunbc per WI-1 brief §scope + PR #2746 §5.4 + openai-pro BLOCKING on PR #2744). Both land via separate substrate-prereq PRs paired with their concrete runtime consumers. - Declare `project_github_actions` function signature with TODO-marked total-handling skeleton. - Author Practice 4 coproduct-dissolution receipt for `WorkflowRuntime` (🟡 YELLOW classification + named dissolution trigger + coordinate-dissolution sketch per WI-1 brief discipline; see acceptance gate 3). - Reference existing `Workflow` carrier from `dsl/extdeps/github/actions.dag` as the codomain type. @@ -95,7 +94,7 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an ## Acceptance gates 1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. -2. `WorkflowRuntime` open enum declared with **3** named arms (`YamlStatic`, `BinaryShim`, `PythonShim`) + open-enum marker. **NO `InlineGunbc` arm** — DESIGN-ONLY future target per PR #2746 §5.4; lands via separate substrate-prereq PR paired with consumer. +2. `WorkflowRuntime` open enum declared with **2** named arms (`YamlStatic`, `BinaryShim`) + open-enum marker. **NEITHER `PythonShim` NOR `InlineGunbc` arms** — both DESIGN-ONLY future targets (PythonShim per briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z; InlineGunbc per PR #2746 §5.4); each lands via separate substrate-prereq PR paired with its concrete runtime consumer per INVARIANTS P5. 3. **Practice 4 coproduct-dissolution receipt for `WorkflowRuntime`** (consistent with WI-1 brief discipline; per `feedback_coproduct_dissolution` + `modeling-discipline.md` Practice 4; addresses briansrls BLOCKING c#3224878313 on PR #2744 2026-05-12T08:30:15Z): - Receipt classification: **🟡 YELLOW scaffold** (flat enum with named dimensions noted: artifact-shape `StaticYaml` vs `ThinShim` × runner-realization `CompiledBinary` vs `EmittedPython`) - Named dissolution trigger: first additional shim runtime OR first need to share runner metadata across shim targets diff --git a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md index 2345cadd11f..19c7ab5b00d 100644 --- a/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md @@ -28,7 +28,7 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on 1. **Per-target emission semantics** (the substantive canvas surface): - **YamlStatic** (Slice 4 deliverable): body of `project_github_actions(ci_workflow_dag, YamlStatic)` walks `CIWorkflowDag` (PR #2736) and emits a `Workflow` value whose deterministic YAML encoding is **semantically equivalent** to current `.github/workflows/ci.yml` (same triggers / jobs / steps / runners / conditions / permissions / matrix as consumed by GitHub Actions); one-time migration rewrites committed file to canonical encoding (non-semantic facts — comments, whitespace, key ordering — discarded per P1: `Workflow` is single authority for CI semantics; load-bearing comments must migrate into substrate as modeled facts, not into parallel byte-authority); regression-guard gate compares on-disk artifact byte-wise to fresh projection output (internal byte-identity: projection-output ↔ committed-artifact, NOT external: substrate ↔ legacy hand-authored content); regenerated on workflow edit; consumer is GH Actions runner directly. - **BinaryShim** (Slice 5): body of `project_github_actions(ci_workflow_dag, BinaryShim)` emits a Workflow value pointing to a compiled binary (Rust target) entry-point + thin shim YAML (≤10 lines invoking binary); binary reads diff at PR-time, computes affected-set, dispatches matrix dynamically. Slice 7 affected-set integration consumes. - - **PythonShim** (Future; sketch only): same shim model, Python runtime substrate (Python target emit pattern reused). + - **PythonShim** (DESIGN-ONLY per briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z; held out of initial enum until real consumer exists): same shim model, Python runtime substrate (Python target emit pattern reused); sketch only — NO enum variant or emitter arm lands until a real runtime consumer exists (symmetric treatment with InlineGunbc per INVARIANTS P5 / Pure Bootstrap). - **InlineGunbc** (DESIGN-ONLY per codex BLOCKING #9970 + PR #2746 §5.4; held out of initial enum until real consumer exists): gunbc-as-runtime-orchestrator longer-term option; sketch only — NO enum variant or emitter arm lands until a real runtime consumer exists. 2. **Emitter dispatch composition** — how per-arm projection bodies compose with existing `05_emit_rust.dag` / `_python.dag` / `_go.dag` consolidation thesis (per memory `project_eliminate_emit_lang_files.md`); how the projection function's pinned invocation (`gunbc_ci_yml_workflow: Workflow = project_github_actions(ci_workflow_dag, YamlStatic)`) flows into the existing emission pipeline. @@ -58,8 +58,8 @@ Design the emitter-dispatch architecture for T-Workflow-As-Data FULL R3-close on ## Acceptance gates 1. Canvas authored at `docs/design-ci-workflow-emitter-dispatch.md` per scope §1-6 above -2. Each per-target emitter arm (`YamlStatic`, `BinaryShim`, `PythonShim`) has explicit emission semantics + acceptance contract -3. `InlineGunbc` documented as DESIGN-ONLY future target with explicit "no enum variant / emitter arm lands until real runtime consumer exists" exclusion rule +2. Each per-target emitter arm in the initial enum (`YamlStatic`, `BinaryShim`) has explicit emission semantics + acceptance contract +3. `PythonShim` AND `InlineGunbc` documented as DESIGN-ONLY future targets with explicit "no enum variant / emitter arm lands until real runtime consumer exists" exclusion rule (symmetric treatment per INVARIANTS P5) 4. Substrate-shape placement is NOT re-evaluated — (c-refined) shape is consumed as given; canvas explicitly cites PR #2749 §7 as placement authority 5. Cross-references to `design-affected-set-lens.md` §5 (CI integration sketch) explicit — canvas resolves the "CI integration deferred" placeholder 6. Cross-references to PR #2751 (Expression substrate) for expression-site emission contracts diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 194a739c04e..829c5f8361e 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -15,7 +15,7 @@ **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — `.github/workflows/ci.yml` content sourced from gunbc-substrate via projection function `project_github_actions(ci_workflow_dag, target) → Workflow`; WI-2 lands the projection-substrate (new file `dsl/gunbc/ci_emission.dag`); Slice 4-5 implements per-arm projection bodies that walk `CIWorkflowDag` (PR #2736) + emit the chosen target. 2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some workflow runtimes); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. -3. **WorkflowRuntime toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (YamlStatic, BinaryShim, PythonShim, …; `InlineGunbc` is DESIGN-ONLY future target per PR #2746 §5.4, NOT in initial enum); `WorkflowRuntime` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. +3. **WorkflowRuntime toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (initial enum: `YamlStatic | BinaryShim | ...`; `PythonShim` AND `InlineGunbc` are DESIGN-ONLY future targets per INVARIANTS P5 — held out of initial enum until real consumers exist; PythonShim per briansrls BLOCKING 2026-05-12T10:46:59Z, InlineGunbc per PR #2746 §5.4); `WorkflowRuntime` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally @@ -37,7 +37,7 @@ |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | | **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some workflow runtimes may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | -| **NEW: `workflow_runtime_open_enum_landed`** | substrate-shape | T-WAD | `WorkflowRuntime` sum-type with 3 initial arms (`YamlStatic \| BinaryShim \| PythonShim \| ...`) declared in gunbc namespace as open enum; `InlineGunbc` is DESIGN-ONLY per PR #2746 §5.4 — lands via separate substrate-prereq PR paired with a runtime consumer | +| **NEW: `workflow_runtime_open_enum_landed`** | substrate-shape | T-WAD | `WorkflowRuntime` sum-type with **2 initial arms** (`YamlStatic \| BinaryShim \| ...`) declared in gunbc namespace as open enum; `PythonShim` AND `InlineGunbc` are DESIGN-ONLY per INVARIANTS P5 (PythonShim per briansrls BLOCKING 2026-05-12T10:46:59Z; InlineGunbc per PR #2746 §5.4) — both land via separate substrate-prereq PRs paired with their runtime consumers | | **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, WorkflowRuntime) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | | **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | | **NEW: `slow_test_exemptions_dissolved`** | state-check | T-WAD + Debt-Paydown | `scripts/slow-test-exemptions.txt` deleted; slow-test ratchet derives from `Cost` dimension structurally (state-check sibling of `test_cost_dimension_landed` per kernel-modeling discipline split) | @@ -48,8 +48,9 @@ **`WorkflowRuntime` as modeled data** (open enum, same shape as `Dimension`): ```dag -type WorkflowRuntime = YamlStatic | BinaryShim | PythonShim | ... -// InlineGunbc DESIGN-ONLY per PR #2746 §5.4 — NOT in initial enum; lands when runtime consumer exists +type WorkflowRuntime = YamlStatic | BinaryShim | ... +// PythonShim DESIGN-ONLY per briansrls BLOCKING 2026-05-12T10:46:59Z — NOT in initial enum; lands when Python runtime consumer exists +// InlineGunbc DESIGN-ONLY per PR #2746 §5.4 — NOT in initial enum; lands when gunbc-runtime consumer exists ``` **Substrate-shape RATIFIED** (per PR #2749 §7 + Director msg_237bde05 + msg_f9fd669e — (c-refined) shape; was option (c) wrapper, refined to projection-function): @@ -100,7 +101,7 @@ Step = RunStep | UsesStep // :147 — sum type **Emitter dispatch** (parallel to `05_emit_*.dag` consolidation thesis per `project_eliminate_emit_lang_files.md`): - Slice 4-5 emitter consumes the **pinned-projection invocation** `gunbc_ci_yml_workflow = project_github_actions(ci_workflow_dag, YamlStatic)` (or other `target` for BinaryShim / PythonShim / etc.) -- Per-arm projection bodies (Slice 4 = YamlStatic, Slice 5 = BinaryShim, future = PythonShim) walk `CIWorkflowDag` + emit the chosen target. `InlineGunbc` is DESIGN-ONLY (not in initial enum) per PR #2746 §5.4 +- Per-arm projection bodies (Slice 4 = YamlStatic, Slice 5 = BinaryShim) walk `CIWorkflowDag` + emit the chosen target. **`PythonShim` AND `InlineGunbc` are DESIGN-ONLY** (not in initial enum) — PythonShim per briansrls BLOCKING 2026-05-12T10:46:59Z, InlineGunbc per PR #2746 §5.4; each lands via separate substrate-prereq PR paired with its concrete runtime consumer per INVARIANTS P5 - Same `ci_workflow_dag` value across all targets at workflow level; the emission STRATEGY is invocation-time - A/B comparison is apples-to-apples (call `project_github_actions(ci_workflow_dag, BinaryShim)` vs `project_github_actions(ci_workflow_dag, YamlStatic)`) From e6d302352a7ce6f25de07e8d78eff6770f3cc1c6 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 10:56:01 +0000 Subject: [PATCH 21/23] =?UTF-8?q?docs(briefs):=20WI-2=20brief=20=E2=80=94?= =?UTF-8?q?=20fix=20Practice=204=20dissolution=20sketch=20admits-impossibl?= =?UTF-8?q?e-states=20(briansrls=20BLOCKING=20on=20PR=20#2744=20line=20101?= =?UTF-8?q?=202026-05-12T10:46:59Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md index a5f2b6e71ea..17281161d54 100644 --- a/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md +++ b/docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md @@ -96,9 +96,9 @@ The (c-refined) shape was ratified by Director at msg_237bde05 + msg_f9fd669e an 1. New file `dsl/gunbc/ci_emission.dag` exists with valid `.dag` syntax per existing v3 parser. 2. `WorkflowRuntime` open enum declared with **2** named arms (`YamlStatic`, `BinaryShim`) + open-enum marker. **NEITHER `PythonShim` NOR `InlineGunbc` arms** — both DESIGN-ONLY future targets (PythonShim per briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z; InlineGunbc per PR #2746 §5.4); each lands via separate substrate-prereq PR paired with its concrete runtime consumer per INVARIANTS P5. 3. **Practice 4 coproduct-dissolution receipt for `WorkflowRuntime`** (consistent with WI-1 brief discipline; per `feedback_coproduct_dissolution` + `modeling-discipline.md` Practice 4; addresses briansrls BLOCKING c#3224878313 on PR #2744 2026-05-12T08:30:15Z): - - Receipt classification: **🟡 YELLOW scaffold** (flat enum with named dimensions noted: artifact-shape `StaticYaml` vs `ThinShim` × runner-realization `CompiledBinary` vs `EmittedPython`) - - Named dissolution trigger: first additional shim runtime OR first need to share runner metadata across shim targets - - Coordinate-dissolution sketch (in-doc, not code): the eventual factoring is `EmissionArtifactShape × ShimRunnerKind` per WI-1 canvas §3 (PR #2746 merged 08:29:09Z); declare the receipt as a `.dag` comment block at the `WorkflowRuntime` declaration site OR as a `modeling-discipline.md`-style receipt header in `ci_emission.dag` preamble. WI-2 worker MUST NOT land the enum without the receipt — receipt is part of substrate authoring discipline, not optional documentation. + - Receipt classification: **🟡 YELLOW scaffold** (flat enum with named coordinates noted: `Static` artifact branch has NO runner; `Shim` artifact branch parameterized by runner-kind — per WI-1 canvas §3 illegal-states-unrepresentable factoring; coordinates are NOT independent dimensions) + - Named dissolution trigger: first additional shim runtime (e.g., `EmittedPython` joining `CompiledBinary` under `Shim`) OR first need to share runner metadata across shim targets + - Coordinate-dissolution sketch (in-doc, not code): the eventual factoring is **sum-of-tagged-coordinates** per WI-1 canvas §3 (PR #2746 merged 08:29:09Z) — i.e. `Static(EmissionArtifactShape) | Shim { runner: ShimRunnerKind }`, NOT a Cartesian product `EmissionArtifactShape × ShimRunnerKind` (the product admits impossible states like `(StaticYaml, CompiledBinary)` — there is no runner on a Static artifact; per INVARIANTS P2 illegal-states-unrepresentable discipline; addresses briansrls BLOCKING on PR #2744 2026-05-12T10:46:59Z at line 101). Declare the receipt as a `.dag` comment block at the `WorkflowRuntime` declaration site OR as a `modeling-discipline.md`-style receipt header in `ci_emission.dag` preamble. WI-2 worker MUST NOT land the enum without the receipt — receipt is part of substrate authoring discipline, not optional documentation. 4. `project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow` function signature declared with structural total-handling skeleton (match on `target`; each arm body TODO-marked). 5. **NO pinned-projection data binding** (`gunbc_ci_yml_workflow`) in WI-2's PR — DEFERRED to Slice 4 per §3 above (P2 single-authority lockdown; canonical `CIWorkflowDag` instance lands with Slice 4, binding lands with the canonical instance). 6. NO modifications to `dsl/extdeps/github/actions.dag` (INVARIANTS P1). From 50f2314d3f558d491611ea600acd1b8e9d08e57e Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 10:58:04 +0000 Subject: [PATCH 22/23] =?UTF-8?q?docs(scope):=20T-WAD=20=E2=80=94=20remove?= =?UTF-8?q?=20"absent"=20pass=20option=20from=20ci=5Fyml=5Fhand=5Fauthorit?= =?UTF-8?q?y=5Fdissolved=20gate=20(openai-pro=20REQUEST=5FCHANGES=20on=20P?= =?UTF-8?q?R=20#2744=202026-05-12T10:51:06Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 338a83fd3). --- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 829c5f8361e..9be3c2786f3 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -14,7 +14,7 @@ **FULL R3-close scope** (operator-ratified 2026-05-12; Director-ratified gate-additive framing msg_5cbdad24): 1. **ALL** CI workflow authored as `.dag` (not just one demo workflow) — `.github/workflows/ci.yml` content sourced from gunbc-substrate via projection function `project_github_actions(ci_workflow_dag, target) → Workflow`; WI-2 lands the projection-substrate (new file `dsl/gunbc/ci_emission.dag`); Slice 4-5 implements per-arm projection bodies that walk `CIWorkflowDag` (PR #2736) + emit the chosen target. -2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim / PythonShim) OR absent (some workflow runtimes); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12**: NOT file deletion — P5 / Pure Bootstrap dissolves authority; YamlStatic and shim targets STILL require some `.github/workflows/ci.yml` artifact for GH Actions trigger discovery. +2. **Hand-authored `ci.yml` AUTHORITY DISSOLVED** — `.github/workflows/ci.yml` content authored by gunbc emission (not hand-edited); file present as full-emit artifact (YamlStatic) OR thin-shim entry-point (BinaryShim); regression-guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 2026-05-12 + openai-pro REQUEST_CHANGES on PR #2744 2026-05-12T10:51:06Z**: NOT file deletion — P5 / Pure Bootstrap dissolves AUTHORITY, not file presence; both initial-enum WorkflowRuntime arms (YamlStatic + BinaryShim) REQUIRE the artifact for GH Actions trigger discovery. The "absent" option is structurally impossible for the initial enum (only conceivable for future DESIGN-ONLY runtimes like InlineGunbc that don't target GH Actions; such runtimes land via separate substrate-prereq PR and would extend this gate description at that time). 3. **WorkflowRuntime toggle** — same `CIWorkflowDag` (PR #2736 carrier) projects through `project_github_actions(ci_workflow_dag, target)` to multiple target shapes (initial enum: `YamlStatic | BinaryShim | ...`; `PythonShim` AND `InlineGunbc` are DESIGN-ONLY future targets per INVARIANTS P5 — held out of initial enum until real consumers exist; PythonShim per briansrls BLOCKING 2026-05-12T10:46:59Z, InlineGunbc per PR #2746 §5.4); `WorkflowRuntime` is invocation-time projection parameter (modeled data), NOT carrier-time field. Substrate-shape LOCKED per (c-refined) ratification — see §2 for full treatment. 4. **Affected-set integration** — Layer 2 path-regex bridge (PR #2718/#2721/#2727) dissolved; CI selection consumes affected-set lens output (PR #2713 ✓ merged) 5. **Cost dimension on test nodes** — `slow-test-exemptions.txt` dissolved; slow-test ratchet derives from Cost dimension structurally @@ -36,7 +36,7 @@ | Gate ID | Predicate-family | Lane | Pass condition | |---|---|---|---| | **#56** (unchanged) | demonstration | T-WAD | At least one workflow as `.dag` data executes through evaluator (existing scope — promotable when PR #2371 demo + integration is gate-PASSING) | -| **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) absent (some workflow runtimes may not require a `.github/workflows/` artifact), (b) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (c) thin-shim entry-point invoking the emitted binary/python (BinaryShim / PythonShim); in NO case is it hand-edited CI logic. Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves authority, not file presence. | +| **NEW: `ci_yml_hand_authority_dissolved`** | state-check | T-WAD | `.github/workflows/ci.yml` is no longer hand-authored CI logic — file is either (a) committed-emission-artifact byte-identical to `project_github_actions(ci_workflow_dag, target)` output with regression-guard test (YamlStatic), or (b) thin-shim entry-point invoking the emitted binary (BinaryShim); in NO case is it hand-edited CI logic AND in NO case is the artifact absent (both initial-enum WorkflowRuntime arms require `.github/workflows/ci.yml` for GH Actions trigger discovery). Regression guard test prevents hand-authored re-introduction. **Per briansrls BLOCKING #PR2744 inline review 2026-05-12T06:58:55Z + openai-pro REQUEST_CHANGES on PR #2744 2026-05-12T10:51:06Z**: deleting hand-maintenance ≠ deleting executable artifact; P5 / Pure Bootstrap dissolves AUTHORITY, not file presence; "absent" pass condition is structurally impossible for initial enum (only conceivable for future DESIGN-ONLY runtimes that don't target GH Actions, e.g., InlineGunbc — would extend this gate at land-time via substrate-prereq PR). | | **NEW: `workflow_runtime_open_enum_landed`** | substrate-shape | T-WAD | `WorkflowRuntime` sum-type with **2 initial arms** (`YamlStatic \| BinaryShim \| ...`) declared in gunbc namespace as open enum; `PythonShim` AND `InlineGunbc` are DESIGN-ONLY per INVARIANTS P5 (PythonShim per briansrls BLOCKING 2026-05-12T10:46:59Z; InlineGunbc per PR #2746 §5.4) — both land via separate substrate-prereq PRs paired with their runtime consumers | | **NEW: `project_github_actions_landed`** | substrate-shape | T-WAD | `project_github_actions: (CIWorkflowDag, WorkflowRuntime) → Workflow` projection function declared in gunbc namespace; consumes `extdeps.github.actions.Workflow` as output type; per (c-refined) substrate-shape per PR #2749 §7 | | **NEW: `test_cost_dimension_landed`** | substrate-shape | T-WAD + Debt-Paydown | `Cost` dimension declared on test nodes (substrate-shape only — splits from state-check sibling below) | @@ -123,7 +123,7 @@ Existing T-WAD slices (state at 2026-05-12): - **Slice 5**: BinaryShim emitter implementation → **Substrate Mgr (warm-wolf-698) lane**. Parallel to Slice 4; proves toggle. - **Slice 6**: Cost dimension on test nodes + slow-test-exemptions.txt dissolution → **Debt-Paydown Mgr (zesty-boar-261) lane** (sub-component). Gated on Phase 3 Cluster M settling (test-as-data substrate stable). - **Slice 7**: Affected-set integration via BinaryShim → **Verification Mgr (clever-tern-670) lane**. Gated on Slice 5 + PR #2713 (✓ merged). -- **Slice 8**: ci.yml hand-authority dissolution (hand-authored content replaced by emission artifact or thin-shim per chosen `WorkflowRuntime`) + workflow-runtime toggle finalized + `ci_yml_hand_authority_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. **NOTE** (per briansrls BLOCKING #PR2744 2026-05-12): NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY, and YamlStatic / BinaryShim / PythonShim emission paths all require some `.github/workflows/ci.yml` artifact (full-emit or thin-shim) for GH Actions trigger discovery. +- **Slice 8**: ci.yml hand-authority dissolution (hand-authored content replaced by emission artifact or thin-shim per chosen `WorkflowRuntime`) + workflow-runtime toggle finalized + `ci_yml_hand_authority_dissolved` gate PASSING → **Substrate Mgr (warm-wolf-698) lane**. Gated on Slices 4-7 + acceptance verification. **NOTE** (per briansrls BLOCKING #PR2744 2026-05-12 + openai-pro REQUEST_CHANGES on PR #2744 2026-05-12T10:51:06Z): NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY, not file presence. Both initial-enum WorkflowRuntime arms (YamlStatic + BinaryShim) require `.github/workflows/ci.yml` (full-emit or thin-shim) for GH Actions trigger discovery; "absent" is NOT a valid pass condition for the initial enum. ## §4. Dependency graph From 89a84583d7025c85428b2b4a58931bf2b2073fd3 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Tue, 12 May 2026 11:02:32 +0000 Subject: [PATCH 23/23] =?UTF-8?q?docs(scope):=20T-WAD=20=E2=80=94=20clarif?= =?UTF-8?q?y=20rename-paragraph=20variant-names=20listing=20per=20PythonSh?= =?UTF-8?q?im=20DESIGN-ONLY=20status=20(openai-pro=20APPROVE=5FWITH=5FCOMM?= =?UTF-8?q?ENTS=20on=20PR=20#2744=202026-05-12T10:58Z)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Line 34 (rename-context paragraph) listed "All OTHER ratified elements stand: variant names (YamlStatic | BinaryShim | PythonShim)" — but PythonShim is now DESIGN-ONLY per commit 338a83fd3 (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". --- docs/r3-t-workflow-as-data-full-r3-close-scope.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/r3-t-workflow-as-data-full-r3-close-scope.md b/docs/r3-t-workflow-as-data-full-r3-close-scope.md index 9be3c2786f3..f26d445b0fc 100644 --- a/docs/r3-t-workflow-as-data-full-r3-close-scope.md +++ b/docs/r3-t-workflow-as-data-full-r3-close-scope.md @@ -31,7 +31,7 @@ **Substrate-shape ratified** (per PR #2749 (c-refined)): `WorkflowRuntime` sum-type lives in gunbc namespace; `project_github_actions: (CIWorkflowDag, WorkflowRuntime) → Workflow` lives in gunbc; extdeps.github.actions.Workflow unmodified. Emission choice is invocation-time data (projection parameter), NOT carrier-time data. See PR #2749 for the comparison canvas authority. -**Type-name rename `EmissionTarget` → `WorkflowRuntime`** (2026-05-12 per warm-wolf-698 PR #2749 commit `575eb7e36` addressing operator BLOCKING at PR #2749 :666 / :672): the original `EmissionTarget` name collided with the canonical Shape-A carrier `type EmissionTarget { language: LanguageSpec, rendering: RenderingSpec? }` declared at `src/v3/SELF_HOSTING.md:609`. Per INVARIANTS P2 (single-authority for type names across gunbc surface), the rename is structurally required; Director ratification msg_4f7f536d at sum-type-name level is superseded by post-ratification name-collision discovery per `feedback_pre_compaction_framings_self_supersede`. All OTHER ratified elements stand: variant names (`YamlStatic | BinaryShim | PythonShim`), 22-site migration scope (per PR #2751 §5.5 expansion), 🟡 YELLOW Practice 4 receipt, projection function signature shape, gunbc-namespace placement, named dissolution trigger. Cascade renames coordinated across PR #2746 merged content (follow-on PR), PR #2745 WI-2 implementation (cool-carp-720 surfaced), and PR #2750 ledger sync (gate-ID rename `emission_target_open_enum_landed` → `workflow_runtime_open_enum_landed`). +**Type-name rename `EmissionTarget` → `WorkflowRuntime`** (2026-05-12 per warm-wolf-698 PR #2749 commit `575eb7e36` addressing operator BLOCKING at PR #2749 :666 / :672): the original `EmissionTarget` name collided with the canonical Shape-A carrier `type EmissionTarget { language: LanguageSpec, rendering: RenderingSpec? }` declared at `src/v3/SELF_HOSTING.md:609`. Per INVARIANTS P2 (single-authority for type names across gunbc surface), the rename is structurally required; Director ratification msg_4f7f536d at sum-type-name level is superseded by post-ratification name-collision discovery per `feedback_pre_compaction_framings_self_supersede`. All OTHER ratified elements stand: 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`), 22-site migration scope (per PR #2751 §5.5 expansion), 🟡 YELLOW Practice 4 receipt, projection function signature shape, gunbc-namespace placement, named dissolution trigger. Cascade renames coordinated across PR #2746 merged content (follow-on PR), PR #2745 WI-2 implementation (cool-carp-720 surfaced), and PR #2750 ledger sync (gate-ID rename `emission_target_open_enum_landed` → `workflow_runtime_open_enum_landed`). | Gate ID | Predicate-family | Lane | Pass condition | |---|---|---|---|