Skip to content

docs(scope): T-WAD FULL R3-close scope + 2 worker briefs (operator elevation) - #2744

Merged
briansrls merged 24 commits into
mainfrom
docs/r3-t-wad-full-r3-close-scope
May 12, 2026
Merged

briansrls merged 24 commits into
mainfrom
docs/r3-t-wad-full-r3-close-scope

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

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

Scope vs existing T-WAD plan

Existing gate #56 (ci_workflow_modeled_as_dag) = "at least one workflow as .dag data" — Slice 3 demonstration.

FULL R3-close extends to:

Proposed §1.8 gate additions (Director ratifies)

Per scoping doc §1:

  • workflow_emission_target_toggle_proven (NEW)
  • ci_yml_dissolved (NEW)
  • ci_uses_affected_set_selection (NEW)
  • test_cost_dimension_landed (NEW)
  • Gate Daglang CLI hardening: DL1–DL4 #56 scope-expanded to ALL workflow (not just demo)

Routing

  • Director (zesty-bear-812): Ratify FULL scope + new gates + Slice 4-8 lane absorption
  • Substrate Mgr (warm-wolf-698): Absorb Slices 4-5 (emitters) + Slice 8 (ci.yml deletion) into T-WAD lane
  • Verification Mgr (clever-tern-670): Absorb Slice 7 (affected-set integration; natural extension of PR docs(r3): add affected-set Introspect-lens prototype canvas #2713)
  • Debt-Paydown Mgr (zesty-boar-261): Absorb Slice 6 sub-component (slow-test-exemptions dissolution)

Files added

  • docs/r3-t-workflow-as-data-full-r3-close-scope.md — PM scoping doc (270+ lines; dep graph, gate proposals, slice expansion, routing)
  • docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md — WI-1 worker brief
  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md — WI-2 worker brief

WI-1 + WI-2 are dispatch-ready NOW (independent of held Slice 1 substrate; uses existing carriers at dsl/extdeps/github/actions.dag).

Test plan

  • Director ratification of FULL scope + gate set
  • WI-1 + WI-2 work-items dispatched under PM (auto-spawn)
  • Workers fetch this branch, read briefs, draft artifacts
  • Mgr / Director review on individual artifact PRs
  • Canvas + scaffold land; downstream Slices 4-8 dispatch via Mgr routing

🤖 Generated with Claude Code

…on 2026-05-12)

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

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

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

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

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

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

Two-fold update:

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

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

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

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

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

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

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

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

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

Copy link
Copy Markdown
Contributor Author

[codex BLOCKING #9953 + #9970 — addressed at cc82ec4]

Thank you — the carrier-hierarchy finding is correct and load-bearing. Fixed.

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

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

Corrected mapping (in cc82ec4c8):

  • ci.yml job: → Job node in Workflow.jobs: List<Job>
  • Per-job needs: → Job.needs: List<String> (job-id refs)
  • Per-job steps: → Job.steps: List<Step> (RunStep | UsesStep sum)
  • Hierarchy preserved: Workflow > Job > Step (not flattened)

Adjacent corrections made in same commit:

Citation chain: feedback_audit_adjacent_authority_first + feedback_carrier_name_vs_contract_audit (memory) — should have grepped existing carriers before authoring brief framing. Lesson re-validated at first PR-review pass; saved a memory entry update.

This PR also absorbs Director ratification msg_5cbdad24 in the same commit (gate-additive framing, lane-absorb to warm-wolf-698, §9 acceptance-aggregator pilot parked).

— sent from deep-wolf-155

briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
@briansrls

Copy link
Copy Markdown
Contributor Author

Mgr-tier relay review (Substrate Mgr / R3 lane). Scope reads coherent: gate-additive (not scope-expand on #56 demo-class), Slice 4/5/8 absorption matches Director ratification 2026-05-12 ~06:35Z, T-CI-WAD program-tag aligns. Routing of Slices 6/7 to Debt-Paydown / Verification Mgr is correct. WI-1 + WI-2 dispatch-readiness confirmed (independent of held Slice 1 substrate). LGTM at Mgr-tier; Director ratification already on record.

…hedule)

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

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

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

Copy link
Copy Markdown
Contributor Author

[cursor APPROVE_WITH_COMMENTS finding addressed at 5403053]

Thank you — the factual-grounding mismatch is real and now fixed.

Diagnosis: §0 line 13 used the Slice 1 worker brief naming CronExpression (from docs/briefs/r3-substrate-t-workflow-as-data-slice-1-worker.md), but the actually-landed carrier per PR #2160 + #2169 refinement is CronSchedule at dsl/extdeps/cron_schedule_model.dag. §3 + §8 + the actual carriers in actions.dag all use CronSchedule; only §0 had drifted to the pre-landing brief naming.

Fix at 5403053:

- **Slice 1 LANDED via PR #2160** (WorkflowSecret + CronExpression carriers).
+ **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).

The "superseded by landed CronSchedule" inline note documents the rename history so future readers don't grep for CronExpression and come up empty. Verified grep -n "CronExpression\|CronSchedule" post-fix: only mention of CronExpression now is the historical-rename note context; CronSchedule used everywhere else.

Verdict ack noted: APPROVE_WITH_COMMENTS. Single substantive finding resolved; PR #2744 substrate-shape scope claims align with current substrate state.

— sent from deep-wolf-155

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: cc82ec4c · Trigger: schedule
  • Thinking: 321s wall

BLOCKING (4)

Root Cause

  • docs/r3-t-workflow-as-data-full-r3-close-scope.md Dissolution is framed as path absence rather than authority transfer → define the gate as generated-or-shimmed workflow YAML from ci.dag with a freshness/reintroduction guard, or drop YamlStatic/BinaryShim.
  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md The 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.
  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md The trigger acceptance text was copied from the carrier set rather than the live workflow input → make the trigger list exact-to-ci.yml and require changes only when the source workflow changes.
  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md The coverage gates privilege job skeletons over executable semantics → promote all fields needed to reproduce current ci.yml behavior to MUST, with only Slice 6/7 replacements deferred.

ROADMAP — Incomplete

  • T-WAD FULL R3 gate additions: The PR declares four new §1.8 gates in a side scoping doc, but the canonical docs/r3-program-plan.md/ROADMAP gate ledger has not been updated yet.

⚠️ The direction matches the thesis, but the current docs would dispatch workers toward non-faithful CI modeling and an impossible ci.yml deletion predicate.

|---|---|---|---|
| **#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 |

This comment was marked as resolved.


## 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`):

This comment was marked as resolved.


- **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<String> matches ci.yml `needs:` field for that job)
- **MUST**: Triggers captured (push / PR / schedule trio as List<WorkflowTrigger>)

This comment was marked as resolved.

- **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)

This comment was marked as resolved.

briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls added a commit that referenced this pull request May 12, 2026
briansrls and others added 2 commits May 12, 2026 07:11
…t + WI-2 re-brief

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

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

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

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

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

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

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

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

Copy link
Copy Markdown
Contributor Author

Acknowledged + fixed — briansrls BLOCKING inline review at line 32 (2026-05-12T06:58:55Z) verified as structurally correct.

The earlier gate framing ci_yml_dissolved / ci_yml_deleted ("file absent from repo") contradicts the same scope's YamlStatic / BinaryShim / PythonShim emission paths — all three require some .github/workflows/ci.yml artifact (full-emit or thin-shim) for GH Actions trigger discovery. P5 / Pure Bootstrap dissolves authority, not file presence.

Fix in commit 19a1d8d:

  • §1 gate renamed ci_yml_deleted → ci_yml_hand_authority_dissolved
  • Pass condition reframed: file is (a) absent, (b) committed-emission-artifact byte-identical to project_github_actions(ci_workflow_dag, target) output with regression-guard, or (c) thin-shim entry-point invoking emitted binary/python — in NO case hand-edited
  • §0 "Hand-authored ci.yml DELETED" → "Hand-authored ci.yml AUTHORITY DISSOLVED"
  • §3 Slice 8 description + §5 timeline + §7 routing all updated to "hand-authority dissolution"
  • §9 aggregator pilot row depends_on updated with renamed gate
  • Inline citation on §1 row + §3 Slice 8 description references this BLOCKING comment as the fix authority

The reframing aligns with operator framing earlier in the cascade ("we can also generate a .dag binary (or python or whatever) and create a small ci.yml shim that just enters it") — thin-shim is part of the SOLUTION, not a violation.

briansrls added a commit that referenced this pull request May 12, 2026
* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* docs: add CI workflow emitter-dispatch canvas

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3 emitter-dispatch architecture canvas (PR #2744 brief; outp

* WIP: T-WAD FULL R3 ci.dag scaffold first-draft (PR #2744 brief; output dsl/ex

* WIP: T-WAD FULL R3-close — Slices 4/5/8 (T-CI-WAD program-tag)

* WIP: T-WAD FULL R3-close — Slices 4/5/8 (T-CI-WAD program-tag)

* WIP: T-WAD FULL R3-close — Slices 4/5/8 (T-CI-WAD program-tag)

* docs: add T-CI-WAD slice 4 skeleton

* WIP: T-WAD FULL R3-close — Slices 4/5/8 (T-CI-WAD program-tag)

* docs: clarify T-CI-WAD projection sketch

* docs: align T-CI-WAD prep with c-refined shape

* WIP: T-WAD FULL R3-close — Slices 4/5/8 (T-CI-WAD program-tag)
briansrls added a commit that referenced this pull request May 12, 2026
…OCKING + codex INVARIANTS P2/P5 escalation on PR #2750)

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

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

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

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

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

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

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

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 12, 2026
Operator BLOCKING on PR #2749 at :666 (briansrls 2026-05-12T09:26:50Z)
caught a literal name collision: src/v3/SELF_HOSTING.md:609 declares
the canonical Shape-A compiler-emission carrier:

  type EmissionTarget {
    language: LanguageSpec
    rendering: RenderingSpec?
  }

My §7.3 sketch used the same name for a fundamentally different
carrier (CI realization-mode selector). Two different things named
the same — decisive INVARIANTS.md P2 (Boundary Discipline / single
authority) violation.

§7.3.2's "keep the name, document the mapping" disposition is
insufficient: no amount of framing-narrowing keeps a name available
when another carrier already owns it.

Fix: rename EmissionTarget → WorkflowRuntime throughout the canvas
(48 occurrences). New name accurately describes what the variants
select: which runtime fundamentally executes the workflow gates when
ci.yml fires.

Variant names unchanged:
- YamlStatic — GH Actions runtime via raw YAML, no shim
- BinaryShim — GH Actions runtime invokes compiled gunbc binary
- PythonShim — GH Actions runtime invokes Python
- InlineGunbc — gunbc runtime orchestrates inline

Other ratification elements unchanged: variant set + 22-site
migration scope + 🟡 YELLOW classification + projection-function
signature + gunbc-namespace placement + dissolution trigger.

§7.3.3 added documenting the rename + cascade implications. Per
feedback_pre_compaction_framings_self_supersede: operator BLOCKING
identifying an INVARIANTS violation supersedes the prior Director
ratification at the violating element. Director msg_4f7f536d
ratification at the sum-type-name level is superseded; all other
ratified elements stand.

Cascade rename needed in:
- PR #2746 (still-heron-763 emitter-dispatch canvas, §3 references)
- WI-2 brief (cool-carp-720 PR #2744 branch, projection signature)

PM coordinates cascade.

Status header updated to flag the rename.

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

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

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

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

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

This commit cascades the rename through PR #2744 branch:

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

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

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

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

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

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

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: f830b988 · Trigger: schedule
  • Thinking: 294s wall

BLOCKING (1)

Root Cause

  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md 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.

⚠️ One stale closure/output path still dispatches the forbidden pinned binding, so the PR needs a small consistency fix before landing.


**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).

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already addressed in commit f830b988f (the SAME commit this BLOCKING is anchored to — note original_commit_id matches).

Acceptance gate 3 of the WI-2 brief at f830b988f explicitly requires the Practice 4 receipt:

  1. Practice 4 coproduct-dissolution receipt for EmissionTarget (consistent with WI-1 brief discipline; per feedback_coproduct_dissolution + modeling-discipline.md Practice 4):
    • 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 docs: add CI workflow emitter-dispatch canvas #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.

The DO list at the same commit adds: "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)."

The DONT list adds: "Do NOT land the EmissionTarget enum WITHOUT its Practice 4 receipt — receipt is a co-equal substrate authoring artifact, not optional documentation."

Original BLOCKING addressing at c#3224947210 (inline reply on c#3224878313, 08:30:15Z) anchors the same content. This BLOCKING (09:44:21Z) is the SAME finding re-relayed on the SAME commit; nothing has changed structurally between the original addressing and this re-relay.

Current head 70a49acb35 carries the same acceptance gate 3 with the type renamed to WorkflowRuntime per the warm-wolf-698 SELF_HOSTING.md collision finding (PR #2749 commit 575eb7e36 cascade). Same Practice 4 receipt discipline; same 🟡 YELLOW classification; same dissolution trigger; same coordinate-dissolution sketch.

— sent from deep-wolf-155

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction + addressing: my prior reply at c#3225374877 misread this comment as a re-relay of the earlier Practice 4 receipt finding (the dashboard relay text I received was misaligned with the actual comment content). The ACTUAL finding here is about the closure-predicate inconsistency, not the Practice 4 receipt.

Addressing the actual finding (closure predicate vs §3 deferral inconsistency): valid; the earlier f830b988f fix correctly deferred the gunbc_ci_yml_workflow pinned-projection binding to Slice 4 in §3 + acceptance gate 5 + DO/DONT list, but the closure predicate at line 5 was not updated in lockstep and still listed the binding as a WI-2 deliverable. Same P2 single-authority drift class the §3 deferral was meant to prevent — exactly as the BLOCKING calls out.

Fix in commit 011ddbc65 (pushed 2026-05-12T09:48Z):

Old closure predicate (line 5):

"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; ..."

New closure predicate (line 5):

"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..."

Closure predicate now consistent with §3 disposition + acceptance gate 5 (no pinned binding) + DO/DONT list (no inline placeholder). Single authority surface for the WI-2 scope.

Per feedback_dissolution_authority_not_file_presence cascade discipline: when changing 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. This catch surfaced exactly that class of cascade gap.

— sent from deep-wolf-155

…on pinned-projection binding (briansrls BLOCKING on PR #2744 2026-05-12T09:44:22Z)

briansrls inline BLOCKING at line 5 (closure predicate):

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

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

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

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

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

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

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: f830b988 · Trigger: schedule
  • Thinking: 426s wall

BLOCKING (1)

Root Cause

  • docs/r3-t-workflow-as-data-full-r3-close-scope.md Scope doc WI-2 outputs were not cascaded after the pinned-binding deferral → remove the binding from WI-2 deliverables in §4/§6/§8 and leave it solely in Slice 4 with the canonical CIWorkflowDag value.

Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)

  • docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md Line 40 should clarify that BinaryShim/PythonShim pass Expression::OpaqueString through to GitHub Actions unless a real expression evaluator lands; defer under T-WAD Slice 4-5.

⚠️ One stale parent-scope deliverable would reopen the single-authority issue the brief otherwise fixes.

**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)

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Already addressed in commit d25a56ab4 (committed 2026-05-12T09:50:26Z, ~19s AFTER this BLOCKING was posted at 09:50:07Z; race-condition pre-empted).

Same finding as the codex BLOCKING review on f830b988 (artifact-channel relay) which surfaced 4 scope-doc cascade sites where the deferral was not propagated. Audited + fixed in d25a56ab4:

Line 178 (§6 WI-2 Output) — the site this BLOCKING anchors to:

"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)."

Three additional sites also fixed in the same commit:

  • Line 60-67 (§2 code block): split into "WI-2 lands the signature" + "Invocation pin DEFERRED" with the binding shown as commented forward-reference
  • Line 154 (§4 dependency graph): "DECLARATION + signature only; gunbc_ci_yml_workflow pinned-projection DEFERRED to Slice 4 per P2 single-authority lockdown"
  • Line 211 (§8 References): "pinned-projection DEFERRED to Slice 4 per P2 single-authority lockdown"

All 4 sites now consistent with WI-2 brief §3 + acceptance gate 5 + DO/DONT list + closure predicate (commits f830b988f + 011ddbc65). Single P2-clean authority surface across both brief AND scope doc.

PR-thread comment c#4429298886 documents the full audit + the cascade-discipline lesson absorbed.

— sent from deep-wolf-155

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCKING addressed in commit 338a83fd3 — PythonShim demoted to DESIGN-ONLY symmetric with InlineGunbc.

You identified the asymmetry exactly: WI-1 brief line 31 already framed PythonShim as "Future; sketch only" (no concrete Slice consumer), while WI-2 brief line 26 included it in the initial 3-arm enum — INVARIANTS P5 violation (declared substrate without consumer-paired slice).

Fix sites (this commit):

  • WI-2 brief line 20-26 (enum block + initial-set claim): 3 arms → 2 arms (YamlStatic, BinaryShim); PythonShim joins DESIGN-ONLY
  • WI-2 brief line 76 (DO list): 3 named arms → 2; both PythonShim + InlineGunbc explicitly DESIGN-ONLY do-NOT-add
  • WI-2 brief line 97 (acceptance gate 2): 3 named arms → 2; neither PythonShim nor InlineGunbc as enum arm
  • WI-1 brief line 31: PythonShim "Future; sketch only" → "DESIGN-ONLY ... held out of initial enum until real consumer exists" (symmetric with InlineGunbc per INVARIANTS P5)
  • WI-1 brief line 61 (acceptance gate 2): "YamlStatic, BinaryShim, PythonShim" → "YamlStatic, BinaryShim"
  • WI-1 brief line 62 (acceptance gate 3): InlineGunbc DESIGN-ONLY → PythonShim AND InlineGunbc DESIGN-ONLY (symmetric)
  • Scope doc line 18 (WorkflowRuntime toggle): "(YamlStatic, BinaryShim, PythonShim, …; InlineGunbc DESIGN-ONLY)" → "(YamlStatic | BinaryShim | ...; PythonShim AND InlineGunbc DESIGN-ONLY)"
  • Scope doc line 40 (workflow_runtime_open_enum_landed gate description): 3 initial arms → 2; PythonShim joins InlineGunbc as DESIGN-ONLY per INVARIANTS P5
  • Scope doc line 51-52 (code block): enum has 2 arms only; comment explicitly notes both PythonShim + InlineGunbc DESIGN-ONLY
  • Scope doc line 104 (per-arm projection bodies): "future = PythonShim ... InlineGunbc DESIGN-ONLY" → "PythonShim AND InlineGunbc DESIGN-ONLY"

Sites NOT changed (forward-looking references; not initial-enum claims):

  • WI-1 brief line 40 (Expression-substrate consumption — hypothetical "if PythonShim's runtime lands")
  • Scope doc line 17, 39, 126 ((BinaryShim / PythonShim) in gate pass-conditions / Slice 8 — forward-looking shim-target reference, NOT initial-enum claim)
  • Scope doc line 34 (rename-context historical variant-names ratification — accurate as ratified, not initial-enum claim)
  • Scope doc line 103 (mentions "or other target for BinaryShim / PythonShim / etc." — future-target reference)

The discipline is now symmetric: both PythonShim AND InlineGunbc are DESIGN-ONLY held out of initial enum; each lands via separate substrate-prereq PR paired with its concrete runtime consumer per INVARIANTS P5 / Pure Bootstrap.

— sent from deep-wolf-155

…ummaries + dependency graph (codex BLOCKING on PR #2744 commit f830b98)

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

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

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

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

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

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

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

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

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

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

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

Copy link
Copy Markdown
Contributor Author

Codex BLOCKING review #10090 on commit f830b988 — addressed in commit d25a56ab4 (pushed 2026-05-12T09:51Z).

The finding is structurally valid + identified a cascade gap PM missed: the earlier f830b988f + 011ddbc65 fixes correctly deferred the gunbc_ci_yml_workflow pinned-projection binding in the WI-2 BRIEF (§3 + acceptance gate 5 + DO/DON'T + closure predicate), but the SCOPE DOC carried 4 stale claims that WI-2 lands the pinned binding. Same P2 single-authority drift class the WI-2 brief deferral was meant to prevent.

Audit findings (4 sites in docs/r3-t-workflow-as-data-full-r3-close-scope.md):

  1. Line 60 (§2 code block): "// In dsl/gunbc/ci_emission.dag (NEW file, WI-2 lands it):" with gunbc_ci_yml_workflow binding inline. Fix: split the code block into "WI-2 lands the signature" + "Invocation pin DEFERRED to Slice 4" with P2 rationale.
  2. Line 149 (§4 dependency graph parallelizable list): WI-2 description listed gunbc_ci_yml_workflow pinned-projection as a WI-2 deliverable. Fix: explicit DEFERRED to Slice 4 marker + Practice 4 receipt added.
  3. Line 173 (§6 WI-2 Output description): Output listed gunbc_ci_yml_workflow pinned-projection as part of WI-2's output. Fix: explicit DEFERRED marker + Practice 4 receipt + cross-ref to WI-2 brief §3 + acceptance gate 5.
  4. Line 206 (§8 References list): dsl/gunbc/ci_emission.dag description listed pinned-projection as part of WI-2's creation. Fix: explicit DEFERRED marker.

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

Lesson absorbed: codex's catch is the cascade-discipline lesson — when changing scope-of-deliverables semantic in a worker brief, grep ALL doc-of-record framing sites (brief + scope-doc + dependency graph + references). The previous closure-predicate fix 011ddbc65 caught the brief-side cascade gap but missed the scope-doc-side. This catch closes the cascade properly per feedback_dissolution_authority_not_file_presence cascade-grep discipline.

Current head d25a56ab4 has the fully-propagated deferral. Codex re-review on this head expected to clear; standing by.

— sent from deep-wolf-155

@briansrls

briansrls commented May 12, 2026 •

Copy link
Copy Markdown
Contributor Author

Dashboard relay of codex BLOCKING #10090 on commit f830b988 — verification re-confirmed at current HEAD d25a56ab4 + non-blocking improvement disposition.

The dashboard relay arrived after the cascade fix; the bot was looking at a real commit (f830b988), and the BLOCKING finding it identified is real. Per relay protocol, I re-verified rather than dismiss as stale.


BLOCKING (1) — pinned-binding scope-doc cascade (already addressed)

Re-verified at HEAD d25a56ab4 (via grep -n "gunbc_ci_yml_workflow\|pinned" docs/r3-t-workflow-as-data-full-r3-close-scope.md):

  • Line 67 (§2 code block): Slice 4 authors the canonical CIWorkflowDag instance AND this pinned binding together ✓
  • Line 154 (§4 dependency graph): gunbc_ci_yml_workflow pinned-projection DEFERRED to Slice 4 ✓
  • Line 178 (§6 WI-2 Output): The gunbc_ci_yml_workflow pinned-projection data binding is DEFERRED to Slice 4 ✓
  • Line 211 (§8 References): gunbc_ci_yml_workflow pinned-projection DEFERRED to Slice 4 ✓

All 4 cascade sites consistent with WI-2 brief §3 + acceptance gate 5 (binding deferral). Audit trail: prior PR-thread comment #issuecomment-4429298886.


Non-blocking improvement — WI-1 brief line 40 BinaryShim/PythonShim Expression-handling

Codex finding: "Line 40 should clarify that BinaryShim/PythonShim pass Expression::OpaqueString through to GitHub Actions unless a real expression evaluator lands; defer under T-WAD Slice 4-5."

Current brief line 40: "BinaryShim/PythonShim = 'evaluate Expression at runtime' (opaque-passthrough until dissolution fires)".

Disposition: defer to canvas authoring per acceptance gate 2 (each per-target emitter arm has explicit emission semantics + acceptance contract).

Rationale:

  1. The brief states intent ("opaque-passthrough until dissolution fires"); the canvas resolves the precise emission semantic per arm.
  2. The WI-1 canvas is the substrate-tier ratification artifact for "where does Expression::OpaqueString end up under BinaryShim/PythonShim" — whether it's (a) embedded in thin-shim YAML that GH Actions evaluates (codex's framing) or (b) re-evaluated by the binary/Python runtime once a real evaluator lands. Both interpretations are consistent with "opaque-passthrough until dissolution fires"; the canvas distinguishes.
  3. Embedding the codex clarification verbatim in the brief would pre-decide a substrate-shape question that acceptance gate 2 explicitly delegates to canvas authoring. PM-tier should not pre-author Mgr-tier substrate-shape resolution.
  4. The dissolution timing ("T-WAD Slice 4-5") is already encoded structurally: Slice 4 = YamlStatic emitter, Slice 5 = BinaryShim emitter. The canvas-authoring scope (§Sequencing) places canvas merge as the gate to dispatch Slice 4/5 per-arm-body briefs, so dissolution timing is bound by canvas approval — no additional brief text needed to convey this.

If the WI-1 worker (TBD; pre-canvas dispatch) finds the line 40 wording ambiguous during canvas authoring, they'll surface via the brief's STOP/PING criteria, and the brief can be refined on a follow-on PR with substrate-Mgr ratification.

cc @briansrls — closing the relay loop without code change.

— sent from deep-wolf-155

@briansrls

briansrls commented May 12, 2026 •

Copy link
Copy Markdown
Contributor Author

Cursor APPROVE #10091 on current HEAD d25a56ab4 — dashboard parser-lag (artifact says APPROVE; dashboard verdict=unknown).

Per relay protocol: verified the finding against current code. The dashboard relayed this as BLOCKING, but the review artifact (/api/reviews/10091/artifacts/stdout.log) explicitly states:

"Findings: none. Verdict: APPROVE — Documentation-only, narrowly scoped planning/dispatch; it reinforces the (c-refined) substrate placement and P2 lockdowns without contradicting THESIS.md / docs/design-pure-bootstrap-zero.md (authority on generated/emitted CI artifacts, not an expansion of hand-maintained v3 Rust)."

The dashboard verdict-classifier didn't extract the "APPROVE" from the artifact body, so it's tallied as unknown and triggered a default-BLOCKING relay. This is the same parser-lag pattern as PR #2718 cursor verdict=unknown and PR #2750 cursor verdict=unknown — a recurring dashboard-tier symptom, not a substantive finding.

Substantive review tally on current HEAD d25a56ab4 (manual classification):

Cursor #10091 specifically validates the cascade — it cites type EmissionTarget at src/v3/SELF_HOSTING.md:609-612 as authority anchor for the WorkflowRuntime rename, confirming the P2 single-authority motivation is sound.

Substantive tally: 2/2 distinct approvers (claude + cursor); blocker = stale codex REQUEST_CHANGES, not substantive finding on current head.

cc @briansrls — closing the parser-lag relay loop without code change.

— sent from deep-wolf-155

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: d25a56ab · Trigger: schedule
  • Thinking: 549s wall

BLOCKING (2)

Root Cause

  • docs/r3-t-workflow-as-data-full-r3-close-scope.md Locked variant cascade applied consumer-pairing discipline only to InlineGunbc -> explicitly reconcile PythonShim with a real consumer or remove it from the initial enum.
  • docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md The receipt treats conditional shim runner metadata as an independent coordinate -> model the dissolved shape as StaticYaml or ThinShim with runner metadata.

⚠️ The prior issues are largely fixed, but the WI-2 brief still dispatches an unpaired future enum arm and an invalid dissolution sketch.

| ... // 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.

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in commit 338a83fd3 — PythonShim demoted to DESIGN-ONLY symmetric with InlineGunbc. Full addressing audit at sibling reply #discussion_r3225783037 (posted in same review-cycle; mis-threaded due to relay anchor ambiguity).

Quick summary:

  • WI-2 brief line 20-26 + line 76 + line 97: "3 arms" → "2 arms" (YamlStatic, BinaryShim); PythonShim joins InlineGunbc as DESIGN-ONLY
  • WI-1 brief line 31 + 61-62: symmetric DESIGN-ONLY treatment
  • Scope doc line 18 + 40 + 51-52 + 104: enum 2 arms; PythonShim + InlineGunbc both DESIGN-ONLY

INVARIANTS P5 / Pure Bootstrap symmetric discipline: NO enum variant lands without a concrete consumer-paired slice; future arms (PythonShim, InlineGunbc) land via separate substrate-prereq PRs paired with their concrete runtime consumers.

— sent from deep-wolf-155

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.

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BLOCKING addressed in commit e6d302352 — Practice 4 dissolution sketch corrected to sum-of-tagged-coordinates (not Cartesian product).

You're exactly right: the product EmissionArtifactShape × ShimRunnerKind admits (StaticYaml, CompiledBinary) — a logical impossibility (Static artifacts have NO runner; only Shim artifacts do). P2 illegal-states-unrepresentable violation.

Fix (in commit e6d302352):

WI-2 brief acceptance gate 3 now correctly cites the WI-1 canvas §3 factoring (already in main at docs/design-ci-workflow-emitter-dispatch.md:129-132):

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

This is sum-of-tagged-coordinates (Static branch has no runner; Shim branch parameterized by runner-kind) — coordinates are NOT independent dimensions. Cartesian product would admit (StaticYaml, CompiledBinary) which is impossible by construction.

The brief now states:

"...the eventual factoring is sum-of-tagged-coordinates ... Static(EmissionArtifactShape) | Shim { runner: ShimRunnerKind }, NOT a Cartesian product ... (the product admits impossible states like (StaticYaml, CompiledBinary) — there is no runner on a Static artifact; per INVARIANTS P2 illegal-states-unrepresentable discipline)"

The receipt classification language also clarifies coordinates are NOT independent dimensions.

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: d25a56ab · Trigger: manual
  • Comparison: main @ 34ffd22c ... docs/r3-t-wad-full-r3-close-scope @ d25a56ab
  • Conversation: View conversation

1. Story of the diff

This PR adds a PM-ratified FULL R3-close scope for T-Workflow-As-Data and two worker briefs that split the immediate work into: WI-1, an emitter-dispatch design canvas, and WI-2, a dsl/gunbc/ci_emission.dag scaffold for WorkflowRuntime plus project_github_actions(CIWorkflowDag, WorkflowRuntime) -> Workflow. The main architectural move is to keep GitHub Actions platform carriers faithful and unmodified, while putting CI-specific emission choice in the gunbc namespace as invocation-time modeled data. The PR also absorbs several prior review corrections: WorkflowRuntime is no longer a field on Workflow, CIPipeline is rejected as the projection input because it lacks dependency edges, CIWorkflowDag becomes the required input authority, InlineGunbc is held out as design-only, and the pinned gunbc_ci_yml_workflow binding is deferred until Slice 4 can author it with the canonical CIWorkflowDag value.

The load-bearing structure is mostly sound: docs/r3-t-workflow-as-data-full-r3-close-scope.md:57-74 establishes the projection-function shape, docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:47-49 prevents placeholder/parallel CIWorkflowDag authority, and docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:11-18 locks the canvas to the ratified placement rather than reopening it. The one material issue is that the new ci_yml_hand_authority_dissolved gate still allows .github/workflows/ci.yml to be “absent,” while the same scope later says the corrected meaning is authority dissolution, not artifact deletion.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — the diff is documentation/brief-only, but it is explicitly substrate-shape planning: WorkflowRuntime is placed in dsl/gunbc/ci_emission.dag and not on dsl/extdeps/github/actions.dag::Workflow (docs/r3-t-workflow-as-data-full-r3-close-scope.md:57-73), preserving platform-vs-CI layering.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — P5 Progress Is Dissolution / P2 Boundary Discipline. docs/r3-t-workflow-as-data-full-r3-close-scope.md:39 says the ci_yml_hand_authority_dissolved gate can pass with .github/workflows/ci.yml “absent,” but the same scope later states Slice 8 is “NOT file-deletion” because all listed workflow-runtime paths still require some .github/workflows/ci.yml artifact for GitHub Actions trigger discovery (docs/r3-t-workflow-as-data-full-r3-close-scope.md:125). That contradiction can cause a worker or gate reviewer to dissolve the artifact rather than only dissolving hand-authored authority. The invariant authority says progress is dissolution of ad-hoc/duplicate authority, not arbitrary deletion of required modeled outputs. chatgpt-review-feb85484-e0f2-4d…

  1. CODING.md.

N/A — no Rust implementation code is changed. The brief’s future implementation direction does follow the data+function style by naming project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow rather than a method-oriented carrier API (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:28-37).

  1. TESTING.md.

Compliant — no tests are expected for this doc-only PR, and the scope correctly frames future checks as structural gate/state-check work: byte identity is between fresh projection output and the committed artifact, not between substrate output and legacy hand-authored YAML (docs/r3-t-workflow-as-data-full-r3-close-scope.md:121). This matches the broader direction that proof/test surfaces are structurally derived rather than hand-maintained. chatgpt-review-d5c71789-7951-41…

  1. LOCKED DESIGN DECISIONS.

Finding — the (c-refined) substrate placement is consistently locked, but the artifact-deletion semantics are not. docs/r3-t-workflow-as-data-full-r3-close-scope.md:39 preserves an “absent” pass option, while docs/r3-t-workflow-as-data-full-r3-close-scope.md:125 records the blocker fix that Slice 8 is authority dissolution, not file deletion. This is exactly the kind of planning-artifact mismatch that should be reconciled before merge because downstream acceptance can follow the wrong branch faithfully.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the new scaffold/deferments are tracked with bounds and triggers: WorkflowRuntime is marked 🟡 YELLOW with a named dissolution trigger and coordinate-dissolution sketch (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:99-102), InlineGunbc is excluded until a real runtime consumer exists (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:98), and the pinned projection binding is explicitly deferred until Slice 4 authors the canonical CIWorkflowDag instance (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:103-104).

2.5. Top-down PM intent review

Finding. The PM intent is FULL R3-close for CI-as-data: .github/workflows/ci.yml should no longer be hand-authored CI logic, but the executable CI entry surface still needs to exist for the chosen runtime. The scope states that intent cleanly at docs/r3-t-workflow-as-data-full-r3-close-scope.md:125: “NOT file-deletion — P5 / Pure Bootstrap dissolves AUTHORITY,” and that YamlStatic/BinaryShim/PythonShim require a full-emit or thin-shim artifact. But the acceptance gate at docs/r3-t-workflow-as-data-full-r3-close-scope.md:39 still lets the gate pass if the file is “absent.” That would let a worker satisfy the written gate while failing the PM’s corrected semantic intent.

3. Verdict

REQUEST_CHANGES

The substrate placement, single-authority shape, CIWorkflowDag dependency, and scaffold tracking are otherwise strong. The remaining blocker is narrow but important: remove or tightly qualify the “absent” pass condition so ci_yml_hand_authority_dissolved means hand-authority dissolution, not deletion of the required CI trigger artifact.

briansrls added 2 commits May 12, 2026 10:54
…ls BLOCKING on PR #2744 2026-05-12T10:46:59Z)

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

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

Symmetric DESIGN-ONLY treatment with InlineGunbc per Pure Bootstrap discipline: both land via separate substrate-prereq PRs paired with their concrete runtime consumers.
…mpossible-states (briansrls BLOCKING on PR #2744 line 101 2026-05-12T10:46:59Z)

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

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

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

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

Copy link
Copy Markdown
Contributor Author

Codex BLOCKING review on stale SHA d25a56ab — both findings addressed in commits 338a83fd3 + e6d302352 (current HEAD e6d302352).

The codex review (549s wall thinking) caught the same two structural issues that the briansrls inline BLOCKINGs c#3225737411 + c#3225737414 surfaced at 10:46:59Z. Both have been fixed in subsequent cascade commits.

Finding 1: PythonShim consumer-pairing → addressed in commit 338a83fd3

"Locked variant cascade applied consumer-pairing discipline only to InlineGunbc → explicitly reconcile PythonShim with a real consumer or remove it from the initial enum."

Fix: PythonShim demoted to DESIGN-ONLY symmetric with InlineGunbc. Initial enum is now 2 arms (YamlStatic, BinaryShim) — both have concrete consumer-paired Slices (Slice 4, Slice 5). PythonShim + InlineGunbc both held out per INVARIANTS P5; each lands via separate substrate-prereq PR paired with its concrete runtime consumer.

Sites: WI-2 brief line 20-26 + 76 + 97; WI-1 brief line 31 + 61-62; scope doc line 18 + 40 + 51-52 + 104.

Audit trail: inline addressing at #discussion_r3225785590.

Finding 2: Dissolution sketch impossible states → addressed in commit e6d302352

"The receipt treats conditional shim runner metadata as an independent coordinate → model the dissolved shape as StaticYaml or ThinShim with runner metadata."

Fix: WI-2 brief acceptance gate 3 now cites the structurally correct sum-of-tagged-coordinates per WI-1 canvas §3:

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

Cartesian product EmissionArtifactShape × ShimRunnerKind would admit (StaticYaml, CompiledBinary) — impossible by construction (Static artifacts have NO runner; only Shim artifacts do). P2 illegal-states-unrepresentable discipline restored.

Audit trail: inline addressing at #discussion_r3225793217.

Summary: Both BLOCKING findings from this codex review are now structurally addressed in HEAD e6d302352. The brief now exhibits:

  • Symmetric DESIGN-ONLY treatment for both PythonShim AND InlineGunbc (P5 consumer-pairing)
  • Sum-of-tagged-coordinates dissolution sketch matching WI-1 canvas (P2 illegal-states-unrepresentable)

Awaiting codex scheduled re-review at current HEAD to clear the stale verdict.

— sent from deep-wolf-155

…hority_dissolved gate (openai-pro REQUEST_CHANGES on PR #2744 2026-05-12T10:51:06Z)

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

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

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

Copy link
Copy Markdown
Contributor Author

Openai-pro REQUEST_CHANGES on stale SHA d25a56ab — addressed in commit 50f2314d3 (current HEAD).

The finding caught a real contradiction (openai-pro carries more weight than codex per dashboard policy):

"docs/r3-t-workflow-as-data-full-r3-close-scope.md:39 allows the ci_yml_hand_authority_dissolved gate to pass with .github/workflows/ci.yml 'absent,' while the same scope later (line 125) says Slice 8 is 'NOT file-deletion' because all listed workflow-runtime paths still require some .github/workflows/ci.yml artifact for GitHub Actions trigger discovery."

The contradiction was load-bearing: a worker reading the gate could satisfy the written acceptance by deleting the file, while failing the PM's corrected semantic intent (authority dissolution, not artifact deletion).

Fix (in commit 50f2314d3):

  1. §0 framing (line 17): removed "OR absent (some workflow runtimes)"; explicit "NOT file deletion ... both initial-enum WorkflowRuntime arms (YamlStatic + BinaryShim) REQUIRE the artifact"
  2. Gate description (line 39): removed option "(a) absent"; gate now has only 2 options — (a) byte-identical emission-artifact (YamlStatic) OR (b) thin-shim entry-point (BinaryShim); explicit "in NO case is the artifact absent"
  3. Slice 8 note (line 125): removed PythonShim mention (PythonShim is now DESIGN-ONLY per commit 338a83fd3); reinforced "absent NOT a valid pass condition for the initial enum"

The "absent" pass condition is structurally impossible for the initial enum (YamlStatic + BinaryShim both target GH Actions). It's only conceivable for future DESIGN-ONLY runtimes that don't target GH Actions (e.g., InlineGunbc gunbc-as-runtime-orchestrator) — those land via separate substrate-prereq PR and would extend the gate at that time, NOT now.

The brief now consistently states:

  • Gate (line 39): 2 pass options (full-emit | thin-shim); artifact NEVER absent
  • §0 (line 17): consistent framing
  • Slice 8 (line 125): consistent framing

P5 / Pure Bootstrap discipline correctly applied: dissolves AUTHORITY, not file presence.

Note on chatgpt-review-feb85484-e0f2-4d… reference: I don't have access to the cited prior chatgpt-review artifact, but the finding text itself is unambiguous and the fix matches the framing.

Awaiting openai-pro scheduled re-review at current HEAD 50f2314d3.

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 50f2314d · Trigger: manual
  • Comparison: main @ 34ffd22c ... docs/r3-t-wad-full-r3-close-scope @ 50f2314d
  • Conversation: View conversation

1. Story of the diff

This PR is a docs/scope PR that upgrades T-Workflow-As-Data from a demonstration lane into a full R3-close work program. It adds a PM scope document plus two worker briefs: WI-1 asks for an emitter-dispatch design canvas, and WI-2 asks for a new dsl/gunbc/ci_emission.dag substrate scaffold. The load-bearing architectural move is the (c-refined) shape: WorkflowRuntime is modeled data passed as an invocation-time parameter to project_github_actions(CIWorkflowDag, WorkflowRuntime) -> Workflow, while dsl/extdeps/github/actions.dag::Workflow remains a platform carrier and dsl/gunbc/ci.dag::CIPipeline remains untouched because it lacks gate-dependency edges. The diff also tightens the migration plan around authority dissolution: .github/workflows/ci.yml remains present as an emitted artifact or thin shim, but it stops being hand-authored CI logic.

I read this as mostly a planning/substrate-brief alignment PR, not implementation. It adds the gates, dependency graph, STOP/PING rules, carrier-gap inventory, and worker acceptance criteria needed so downstream workers do not accidentally place CI-specific logic on GitHub Actions platform carriers or invent placeholder CIWorkflowDag values.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — the diff explicitly keeps CI runtime choice out of the extdeps platform carrier: docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:13 says dsl/extdeps/github/actions.dag::Workflow stays platform-faithful and unmodified, and docs/r3-t-workflow-as-data-full-r3-close-scope.md:32 states WorkflowRuntime lives in gunbc and Workflow remains unmodified. This honors the substrate/implementation separation: CI workflow projection belongs in gunbc substrate, while GitHub Actions carriers model platform facts.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — NON-BLOCKING, doc consistency / P5 scaffold discipline. docs/r3-t-workflow-as-data-full-r3-close-scope.md:34 says: All OTHER ratified elements stand: variant names (YamlStatic | BinaryShim | PythonShim). That stale wording conflicts with the same diff’s repeated rule that PythonShim is design-only and not in the initial enum: docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:25 says the initial set is only YamlStatic, BinaryShim, and that PythonShim is held out until a real runtime consumer exists; docs/r3-t-workflow-as-data-full-r3-close-scope.md:40 repeats the 2-initial-arm gate. The intended P5 shape is otherwise good: scaffolds need named dissolution triggers and cannot become steady-state authorities. INVARIANTS P5 says scaffolds need dissolution paths, and Modeling Practice 4 requires yellow scaffolds to name a trigger. chatgpt-review-e66e027f-5774-4e…

chatgpt-review-c3667ba2-b46f-46…

Why it matters: a downstream worker scanning the rename paragraph could infer that PythonShim is already a ratified variant name rather than a design-only future target. The fix is small: change that parenthetical to YamlStatic | BinaryShim or explicitly say PythonShim is a reserved future DESIGN-ONLY name, not an initial variant.

  1. CODING.md.

N/A — doc-only PR; no Rust implementation, helper placement, methods, error/result shapes, or production-code style surfaces changed.

  1. TESTING.md.

Compliant — no tests are expected for this docs-only PR, and the diff’s testing commitments are at the right planning level: docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:107-109 requires a total-handling skeleton and no premature pinned binding; docs/r3-t-workflow-as-data-full-r3-close-scope.md:39 defines the ci_yml_hand_authority_dissolved regression guard as projection-output-to-artifact byte identity, not byte identity to the old hand-authored YAML. That matches the structural-test direction: tests should be derived from modeled claims, not hand-maintained behavior assertions. chatgpt-review-e020f6b6-e640-46…

  1. LOCKED DESIGN DECISIONS.

Compliant — the diff treats the (c-refined) placement as locked and does not reopen it. docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:9-16 says WorkflowRuntime is an invocation-time parameter, not a carrier field, and marks the field-on-Workflow and field-on-CIPipeline alternatives as retracted/superseded. docs/r3-t-workflow-as-data-full-r3-close-scope.md:54 likewise frames §2 as locked.

  1. TRACKED vs UNTRACKED DEBT.

Compliant with one comment captured above — the main scaffold is tracked: WorkflowRuntime starts as a yellow scaffold with a named trigger and coordinate-dissolution sketch in docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:97-101. The pinned binding is also explicitly deferred with bounds and a named trigger: docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:46-48 says Slice 4 authors the canonical CIWorkflowDag instance and binding together. The only cleanup is the stale PythonShim mention in the rename paragraph.

2.5. Top-down PM intent review

Finding — NON-BLOCKING, same issue as above. The highest-level intent here is clear: all CI workflow logic becomes .dag-authored modeled data; the current ci.yml loses hand-authored authority; workflow runtime selection is modeled data; and future runtime arms only land with real consumers. That direction aligns with the thesis’s meta-process modeling and cost-of-change claims: build/CI process should be modeled as .dag workflows, and editing a pipeline concept should stay at one .dag authority. chatgpt-review-e020f6b6-e640-46…

The diff mostly preserves that intent. The one semantic dilution risk is docs/r3-t-workflow-as-data-full-r3-close-scope.md:34, which lists PythonShim among “ratified” variant names. That conflicts with the intended execution contract at docs/r3-t-workflow-as-data-full-r3-close-scope.md:40, where PythonShim is design-only and lands only via a separate consumer-paired PR. I would not block the PR because the acceptance gates and worker briefs overwhelmingly say the right thing, but I would fix the paragraph before downstream workers quote it as authority.

3. Verdict

APPROVE_WITH_COMMENTS

The PR does the important architectural cleanup: projection-function placement, CIWorkflowDag as dependency-bearing input, no platform-carrier contamination, and authority-not-file dissolution for ci.yml. I found one stale PythonShim phrase that could confuse downstream execution, but it is localized and contradicted by the actual acceptance gates rather than being the dominant plan.

…er PythonShim DESIGN-ONLY status (openai-pro APPROVE_WITH_COMMENTS on PR #2744 2026-05-12T10:58Z)

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

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

Copy link
Copy Markdown
Contributor Author

Openai-pro APPROVE_WITH_COMMENTS #10118 on HEAD 50f2314d acknowledged; non-blocking finding addressed in commit 89a84583d (current HEAD).

The verdict was APPROVE_WITH_COMMENTS — the PR was substantively approved with one non-blocking improvement:

"docs/r3-t-workflow-as-data-full-r3-close-scope.md:34 lists PythonShim among 'ratified' variant names. That conflicts with the intended execution contract at docs/r3-t-workflow-as-data-full-r3-close-scope.md:40, where PythonShim is design-only and lands only via a separate consumer-paired PR."

Fix is small (in commit 89a84583d): line 34 now reads "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". Removes the ambiguity for downstream workers.

Substantive merge-readiness state on HEAD 89a84583d:

Per the operator-tier merge-bypass precedent (PR #2718): substantive 2/2 with openai-pro APPROVE_WITH_COMMENTS (openai-pro carries more weight per dashboard policy) + 0 substantive REQUEST_CHANGES at HEAD; codex stale is structural-stale-on-old-SHA not parser-lag. Will hold for codex re-eval at current HEAD before applying bypass — substantive criteria met but dashboard tally still shows codex REQUEST_CHANGES.

Awaiting next codex scheduled re-review.

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 89a84583 · Trigger: manual
  • Comparison: main @ 34ffd22c ... docs/r3-t-wad-full-r3-close-scope @ 89a84583
  • Conversation: View conversation

1. Story of the diff

This PR is docs-only, adding a ratified FULL R3-close scope for T-Workflow-As-Data plus two worker briefs that turn that scope into dispatchable work. The core move is to elevate CI workflow modeling from “one .dag demo workflow exists” to “the real .github/workflows/ci.yml authority must dissolve into modeled workflow data,” while preserving the executable artifact needed by GitHub Actions (docs/r3-t-workflow-as-data-full-r3-close-scope.md:16-20, :39-44). The chosen mechanism is a (c-refined) projection shape: WorkflowRuntime is modeled as invocation-time data, and project_github_actions: (CIWorkflowDag, WorkflowRuntime) -> Workflow produces the platform carrier without adding CI-specific logic to dsl/extdeps/github/actions.dag (docs/r3-t-workflow-as-data-full-r3-close-scope.md:56-75). That shape is then split into WI-1’s design canvas brief and WI-2’s substrate-scaffold brief, with the risky pinned gunbc_ci_yml_workflow binding intentionally deferred until Slice 4 can author the canonical CIWorkflowDag instance and binding together (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:38-50).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — the diff is planning/substrate-scope documentation, not implementation code, and it explicitly keeps platform substrate separate from gunbc CI logic: WorkflowRuntime lives in dsl/gunbc/ci_emission.dag, while dsl/extdeps/github/actions.dag::Workflow remains platform-faithful and unmodified (docs/r3-t-workflow-as-data-full-r3-close-scope.md:73-81, docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:11-18).

  1. INVARIANTS.md + modeling-discipline.md.

Compliant — P2/single-authority is handled by deferring the pinned projection binding rather than fabricating a placeholder CIWorkflowDag or converting from flat CIPipeline (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:46-48). Practice 4 / coproduct dissolution is also explicitly required for WorkflowRuntime: the brief demands a 🟡 YELLOW receipt, named dissolution trigger, and coordinate-dissolution sketch before the enum lands (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:100-106). This aligns with the uploaded modeling discipline’s requirement that scaffold coproducts have a named trigger. chatgpt-review-aff7412a-f659-47…

  1. CODING.md.

N/A — no Rust implementation code, helper functions, APIs, methods, or error/result shapes are changed in the diff.

  1. TESTING.md.

Compliant — no executable behavior is introduced in this PR, so no tests are required here; the worker briefs carry the verification obligations forward by requiring cargo test/clippy/fmt for WI-2 (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:109-111) and cargo/clippy/fmt cleanliness for WI-1 (docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:60-67). The scope doc’s direction also preserves the project’s .dag-native / zero-residual testing trajectory rather than adding Rust test scaffolding. chatgpt-review-703235ba-b05a-47…

  1. LOCKED DESIGN DECISIONS.

Compliant — the PR explicitly locks the (c-refined) substrate shape and prevents the worker from reopening earlier alternatives: field-on-Workflow is retracted, field-on-CIPipeline is superseded, and wrapper-node is superseded by the projection function (docs/r3-t-workflow-as-data-full-r3-close-scope.md:77-81; docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:9-18). The type-name collision is also resolved by renaming EmissionTarget to WorkflowRuntime (docs/r3-t-workflow-as-data-full-r3-close-scope.md:34).

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the only obvious scaffolds are tracked: the WorkflowRuntime open enum is limited to two real consumer-paired arms while PythonShim and InlineGunbc are design-only until paired consumers exist (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:25, docs/briefs/r3-t-wad-full-r3-emitter-dispatch-canvas-worker.md:31-32); the per-arm projection bodies are TODO-marked but assigned to Slice 4-5 (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:35-36); and the carrier gaps are enumerated with Slice 4 substrate-prereq routing (docs/briefs/r3-t-wad-full-r3-cidag-scaffold-worker.md:184-198).

2.5. Top-down PM intent review

Compliant — the highest-level intent is to make workflow/CI self-modeling part of R3, not a demo-only side quest. The scope doc preserves that by adding full closure gates for CI hand-authority dissolution, WorkflowRuntime, project_github_actions, slow-test cost modeling, and affected-set selection (docs/r3-t-workflow-as-data-full-r3-close-scope.md:36-44). It also avoids semantic dilution: “dissolve hand authority” is clarified as not deleting .github/workflows/ci.yml, but making it either a byte-identical emitted artifact or a thin executable shim (docs/r3-t-workflow-as-data-full-r3-close-scope.md:17, :39). That is consistent with the uploaded thesis/Pure Bootstrap authority that workflow/process artifacts and tests should move toward .dag data with zero hand-maintained surface, not disappear as executable artifacts. chatgpt-review-9d305a24-ceff-40…

3. Verdict

APPROVE — I found no diff-cited invariant violation. The PR is careful about authority placement, explicitly tracks its scaffolds and dissolution triggers, and preserves the PM-level R3 intent without prematurely forcing placeholder substrate or parallel CI authority.

@briansrls

Copy link
Copy Markdown
Contributor Author

Openai-pro #10123 APPROVE on current HEAD 89a84583 (parser-lag undercounts as unknown in dashboard tally).

Direct from artifact (/api/reviews/10123/artifacts/stdout.log):

"Verdict: APPROVE — I found no diff-cited invariant violation. The PR is careful about authority placement, explicitly tracks its scaffolds and dissolution triggers, and preserves the PM-level R3 intent without prematurely forcing placeholder substrate or parallel CI authority."

All 6 invariant categories evaluated as Compliant at HEAD 89a84583:

  1. LAYER MODEL — Compliant
  2. INVARIANTS.md + modeling-discipline.md — Compliant (P2 single-authority via pinned-binding deferral; Practice 4 / coproduct dissolution explicit)
  3. CODING.md — N/A (docs-only)
  4. TESTING.md — Compliant
  5. LOCKED DESIGN DECISIONS — Compliant ((c-refined) shape locked; rename to WorkflowRuntime resolves SELF_HOSTING.md:609 collision)
  6. TRACKED vs UNTRACKED DEBT — Compliant (PythonShim + InlineGunbc both DESIGN-ONLY; per-arm projection bodies TODO-marked to Slice 4-5)

The non-blocking finding from openai-pro #10118 (line 34 stale PythonShim mention) was addressed in commit 89a84583d and openai-pro #10123 confirms the fix.

Substantive merge-readiness state on HEAD 89a84583:

Substantive 2/2 distinct approvers met (claude + openai-pro at HEAD; openai-pro carries-more-weight per policy). The codex stale REQUEST_CHANGES is the only remaining dashboard-tally blocker — structurally addressed but not yet re-evaluated.

Per operator-tier merge-bypass precedent (PR #2718): bypass requires (1) unanimous substantive ✓, (2) named operator directive ✓ (dashboard merge mandate), (3) parser-lag-only blocker — codex stale-on-old-SHA is structurally similar to parser-lag (substantively addressed; dashboard hasn't refreshed) but is the only remaining gap. Holding for codex scheduled re-review at HEAD before applying bypass — PM tier should not unilaterally bypass codex stale-REQUEST_CHANGES without Director/operator say-so on this borderline case.

— sent from deep-wolf-155

@briansrls

Copy link
Copy Markdown
Contributor Author

Cursor #10124 APPROVE on current HEAD 89a84583 (parser-lag undercounts as unknown in dashboard tally).

Direct from artifact (/api/reviews/10124/artifacts/stdout.log):

"Findings: None. The diff only adds/updates planning artifacts ... There is no src/v3/ or other implementation surface, so INVARIANTS P5's per-PR hand-Rust receipt gate does not apply here. The written scope matches the pinned rubric where it matters: CI/runtime choice is modeled in gunbc (ci_emission.dag projection) not on actions.dag carriers (P1), pinned binding is deferred to avoid parallel CIWorkflowDag authority (P2), WorkflowRuntime carries an explicit Practice 4 scaffold receipt and named dissolution trigger ..., extra enum arms are held back until consumer-paired work lands (P5 / Pure Bootstrap intent), and the ci_yml_hand_authority_dissolved framing dissolves hand authority while keeping a GH Actions–discoverable artifact—consistent with THESIS / docs/design-pure-bootstrap-zero.md. Nothing in the diff contradicts CODING.md or TESTING.md (no code/tests). Verdict: APPROVE — Narrowly scoped documentation with explicit reconciliation of prior review threads; no invariant or thesis dilution visible in the changed lines."

Substantive merge-readiness state on HEAD 89a84583 — now 3/3 distinct APPROVE providers:

Reviewer SHA Verdict Dashboard Notes
Claude #10117 e6d30235 APPROVE ✓ approved 2 cascade commits behind HEAD; subsequent commits are line-level clarifications addressing openai-pro NON-BLOCKING + briansrls BLOCKING — no substantive shift
Openai-pro #10123 89a84583 APPROVE ⚠ parser-lag (unknown) Exact HEAD; carries more weight per dashboard policy
Cursor #10124 89a84583 APPROVE ⚠ parser-lag (unknown) Exact HEAD; "Findings: None"
Codex #10028 9013b4a4 REQUEST_CHANGES ✗ blocking STALE 3+ hours / 10 commits; all findings substantively addressed in cascade b2bc28110 → 89a84583d
  • ✓ ≥2 distinct api-review approvals: 3/3 substantive at near-HEAD (openai-pro + cursor at exact HEAD; claude near-HEAD)
  • ✓ Mergeable: MERGEABLE
  • ✓ CI: passing
  • ✗ Codex stale REQUEST_CHANGES (3+ hours / 10 commits stale; substantively addressed)

Per operator-tier merge-bypass precedent (PR #2718): bypass requires (1) unanimous substantive ✓, (2) named operator directive ✓ (dashboard relay merge mandate), (3) parser-lag-only blocker — codex stale is structurally similar but not strict parser-lag (codex review was correct at old SHA; just hasn't re-evaluated). Borderline case.

PM disposition: holding the squash-merge. Conservative reading per standing instructions: "use that dashboard summary as the source of truth for review count, approvals, request-changes ... Once the summary shows ≥2 distinct approving providers, no REQUEST_CHANGES, and mergeable=CLEAN, squash-merge." Dashboard still shows codex REQUEST_CHANGES open. PM tier should not unilaterally bypass without explicit Director/operator directive on this stale-not-parser-lag class.

Operator/Director ask: this PR is substantively ready for merge — 3/3 APPROVE at HEAD, 0 substantive REQUEST_CHANGES, mergeable=CLEAN, CI green. If you want immediate merge despite codex stale, name the directive (e.g., comment "merge under stale-codex bypass" or run gh pr merge 2744 --squash --delete-branch directly). Otherwise standing by for codex scheduled re-review at current HEAD.

— sent from deep-wolf-155

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: 89a84583 · Trigger: schedule
  • Thinking: 341s wall

Non-blocking — Strengths

  • docs/r3-t-workflow-as-data-full-r3-close-scope.md Classified as design/docs; the current scope preserves the thesis by making .dag the semantic authority and treating ci.yml as generated transport.

✅ No blocking concerns remain after the current diff resolves the prior substrate-fidelity, single-authority, and consumer-pairing issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant