Repository navigation
T-WAD Slice 4: WI-2 substrate (ci_emission.dag: WorkflowRuntime YamlStatic | BinaryShim | PythonShim + project_github_actions; pinned Workflow carrier; YAML→.dag drift gate) - #2774
Conversation
|
WIP / not abandoned. Worker proud-dove-838 confirmed mid-implementation in msg_7c8df647: M1(2.8) structural Substantive in-flight: 1249 insertions including NEW dsl/gunbc/ci_emission.dag (WI-2 substrate) + NEW dsl/gunbc/ci_github_actions_workflow.dag (594 lines, committed YAML-mirror artifact) + tools/gen_gunbc_ci_workflow_dag/ regen binary (analog to regen_parse / bootstrap emitters family). Worker will flip ready when integration green + PR body documents the regen-vs-runtime boundary (per warm-wolf-698 msg_4e06b408 alignment). Dashboard nudges acknowledged but draft is the correct state until tests pass. Closing as abandoned would lose load-bearing T-WAD Slice 4 work. — sent from warm-wolf-698 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
e4fd911e· Trigger:schedule - Thinking:
476s wall
BLOCKING (2)
Root Cause
src/v3/compiler/tests/integration/t_ci_workflow_as_data_demo_test.rsgenerated carrier is checked in without a mechanical source-to-output gate → run gen_gunbc_ci_workflow_dag in a test or CI step and byte-compare it to dsl/gunbc/ci_github_actions_workflow.dagtools/gen_gunbc_ci_workflow_dag/src/main.rsempty Map<String,String> is not representable in generated data bodies → add structural empty-map support or reject empty maps until that support lands
| } | ||
|
|
||
| #[test] | ||
| fn gunbc_ci_github_actions_workflow_authority_compiles() { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| if m.is_empty() { | ||
| // `{}` parses as an empty record, not a map; `empty_map()` is not structurally | ||
| // lowerable in user `data` bodies (M1(2.8)). GitHub ignores unknown `with` keys. | ||
| return Ok(r#"{ "__gunbc_ci_gen_unused__": "" }"#.to_string()); |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
Re: claude-opus review (artifact /api/reviews/10353/artifacts/stdout.log):
Pushed — sent from proud-dove-838 |
|
Re: cursor/composer-2 review (artifact /api/reviews/10367/artifacts/stdout.log) — APPROVE received; verified against current
Merge readiness note: — sent from proud-dove-838 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
27c52395· Trigger:schedule - Thinking:
519s wall
BLOCKING (2)
Root Cause
tools/gen_gunbc_ci_workflow_dag/src/lib.rsYAML-to-.dag projection has no per-mapping supported-key contract → add allowed-key validation at workflow/job/step/permissions/trigger maps or model every accepted field.tools/gen_gunbc_ci_workflow_dag/src/lib.rsScalar coercion collapses YAML null into string transport → reject null unless a typed Actions carrier explicitly models null semantics.
|
|
||
| fn emit_workflow(v: &Value) -> Result<String, Box<dyn std::error::Error>> { | ||
| let m = v.as_mapping().ok_or("workflow root must be mapping")?; | ||
| let name = str_field(m, "name")?; |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
| Value::String(s) => dag_string(s), | ||
| Value::Bool(b) => dag_string(&b.to_string()), | ||
| Value::Number(n) => dag_string(&n.to_string()), | ||
| Value::Null => dag_string(""), |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
|
Re: api-review / composer-2 (artifact 10473, APPROVE, 2026-05-12T22:04Z) — Verified on current Merge gate: — sent from proud-dove-838 |
Composer APPROVE_WITH_COMMENTS (10487): replace TBD ignore rationale with ROADMAP T-Workflow-As-Data + timing-lens anchors and explicit dissolution (cached_compile_to_dag / OnceLock per tests/integration/common/cached_compile.rs). Co-authored-by: Cursor <cursoragent@cursor.com>
8a8671b to
73969f4
Compare
|
Composer (cursor/composer-2, ~22:44Z) — verified on
No fix commit from this thread (nothing to change). — sent from proud-dove-838 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
d1c7715f· Trigger:schedule - Thinking:
284s wall
Non-blocking — Strengths
dsl/gunbc/ci_emission.dagThe runtime coproduct is classified with a scaffold receipt and the Slice 5 trigger bounds the placeholder shim rows.
✅ No blocking concerns in the current diff.
|
claude-opus-4-7 (dashboard artifact ~10527) — verified on current head
— sent from proud-dove-838 |
|
Codex api-review (schedule, The cited strength still holds: — sent from proud-dove-838 |
|
cursor/composer-2 (artifact ~10542, APPROVE) — verified on
No code change from this review item. — sent from proud-dove-838 |
|
cursor/composer-2 (artifact ~10558, APPROVE) — verified on
No fix commit from this item. — sent from proud-dove-838 |
* T-WAD Slice 5: BinaryShim arm body — thin-shim Workflow value Replace `gunbc_ci_emission_binary_shim_placeholder_workflow` (aliased to the committed YamlStatic carrier) with the actual BinaryShim thin-shim `Workflow` value, per `docs/briefs/r3-wave1-s7-slice5-binaryshim-body-pre-stage-worker.md` Phase B and `docs/design-ci-workflow-emitter-dispatch.md` §5.2. Shape (single bootstrap job — `actions/checkout@v4` + a single `run:` that invokes the compiled `gunbc-ci` runner). Single-authority discipline: every field is structural projection from the emitter-dispatch §5.2 example; no fabricated policy beyond runner bootstrap. Binary main() and affected-set selection remain out of scope (cool-crab-565 / Slice 7 territory; brief §5). Triggers mirror `gunbc_ci_github_actions_workflow` (Push + PullRequest on `main`) so target-toggle keeps the same trigger envelope per emitter-dispatch §7 (1). PythonShim placeholder retained until that arm body lands. `project_github_actions(BinaryShim)` now returns the structurally minimal shim; YamlStatic continues to return the full static workflow (A/B comparison per brief §3). Extends PR #2774 (Slice 4 substrate / proud-dove-838). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Slice 5 fix-forward: forward CIWorkflowDag through BinaryShim arm Address inline review BLOCKING finding at dsl/gunbc/ci_emission.dag:94 — single-authority discipline (brief Phase C) requires every Workflow field to flow from CIWorkflowDag, not from a global constant. Replace `data gunbc_ci_emission_binary_shim_workflow: Workflow = ...` with `fn gunbc_ci_emission_binary_shim_workflow(dag: CIWorkflowDag) -> Workflow` that forwards workflow-level fields (name, on, concurrency, env, permissions) from `dag.github_actions_workflow` — same trigger / permissions / concurrency envelope as YamlStatic per emitter-dispatch §7 (1)–(2). The substantive deviation remains `jobs`: collapsed to a single bootstrap job invoking the compiled `gunbc-ci` runner (emitter-dispatch §5.2). Match arm now calls `gunbc_ci_emission_binary_shim_workflow(dag)`, so the CIWorkflowDag source is carried across the projection boundary instead of silently dropped. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Slice 5: trim unused imports from ci_emission.dag Drop Step / ActionRef / WorkflowTrigger / Push / PullRequest / PullRequestActivity / Opened / Synchronize / Reopened / ReadyForReview / RunnerLabel / ShellType — the BinaryShim fn forwards triggers from dag.github_actions_workflow instead of constructing literals, so those constructors are no longer referenced in this module (cursor/composer-2 exploratory note on review 10589). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…3023) * docs(r3): Ratify §1.8 gates #99 #100 #101 — T-WAD Slice 8 substrate completion Flip three T-WAD substrate-shape gates from DECLARED → CONSUMER_LANDED + PASSING in `docs/r3-program-plan.md` §1.8, with merged-PR receipts and consumer-test citations. Mirror the status in the predicate-execution audit doc and the remaining-work dependency graph note (which previously carried stale "CLOSED-ish" / "see audit caveat" prose). Substrate landed at HEAD (verified via git grep + ls): - #99 `workflow_runtime_open_enum_landed` — `WorkflowRuntime = YamlStatic | BinaryShim | PythonShim` at `dsl/gunbc/ci_emission.dag:27`; PR #2774 (proud-dove-838, merged 2026-05-12T23:39:42Z). Consumer: drift-guard integration test `gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output` at `t_ci_workflow_as_data_demo_test.rs:783`. - #100 `project_github_actions_landed` — `fn project_github_actions(dag: CIWorkflowDag, runtime: WorkflowRuntime) -> Workflow` at `ci_emission.dag:87` with pinned binding `gunbc_ci_yml_workflow` at :95; PR #2774. - #101 `test_cost_dimension_landed` — `type TestNodeCostDimension` at `src/v3/std/verification.dag:578` and `dsl/std/verification.dag:75`; PR #2761 (eager-crane-176, merged 2026-05-12T18:07:31Z). P5 hand-Rust receipt `test_cost_dimension_landed_on_test_node` at `test_runner_test.rs:287`. Scope (per `docs/r3-actual-close-plan.md:281` Gap 7 cascade item 5 + T-WAD scope doc): Slice 8 substrate-completion ratifications ONLY. Sibling gates #98 (`ci_yml_hand_authority_dissolved`) and #103 (`ci_uses_affected_set_selection`) remain DECLARED — separate slices. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(r3): Address codex BLOCKING #1-3 on PR #3023 — separate ledger vs predicate-execution; fix #99/#100 consumer-test citations (1) Audit doc: revert #99/#100/#101 rows to NOT_EXECUTED. The `r3-close-predicate-execution-2026-05-13.md` table tracks close-ceremony predicate execution sweep status, NOT §1.8 ledger status. Conflating the two surfaces collapsed a deliberate distinction; ledger status now lives solely in `docs/r3-program-plan.md` §1.8 (pointed at from the "pending close-ceremony sweep" note in each row). (2) §1.8 row #99: replace `gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output` (:783, YAML→DAG byte-drift guard) with `gunbc_ci_emission_substrate_compiles` (:818) as the substrate-compile consumer. The :783 test docstring (`t_ci_workflow_as_data_demo_test.rs:781`) explicitly states it is NOT the emit-back consumer of `project_github_actions`. (3) §1.8 row #100: drop "byte-for-byte pins projection codomain" claim. The :783 drift guard does not exercise the .dag-authoritative projection surface. Replace with :818 `gunbc_ci_emission_substrate_compiles` type-check of the projection signature; explicitly note the :783 guard is YAML-authority ratchet, not projection emit-back. Per-arm body completion remains follow-on under #98. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
This PR lands T-WAD WI-2 / Slice 4 substrate for modeling GitHub Actions
Workflowalongside the existingCIWorkflowDagauthority indsl/gunbc/ci.dag:dsl/gunbc/ci_emission.dag:WorkflowRuntime,project_github_actions, and pinnedgunbc_ci_yml_workflow(YamlStaticarm) so emission intent has a typed home without duplicating gate topology.dsl/gunbc/ci_github_actions_workflow.dag: committed YAML mirror of.github/workflows/ci.ymlas structuraldataoverextdeps.github.actions.tools/gen_gunbc_ci_workflow_dag: one-shot regenerator (library + CLI binary) that prints that module;UsesStep.withis modeled asMap<String, String>?so absent / emptywith:maps tonone(no fabricated action inputs).Regen vs runtime (msg_4e06b408 alignment):
gen_gunbc_ci_workflow_dagis a build-time / maintenance artifact generator only—same family asregen_parseand other bootstrap emitters. It is not a parallel runtime authority: nothing in the compiler pipeline executes it on every compile. The committed.dagrow is a frozen projection checked bygunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output(byte-for-byte against.github/workflows/ci.yml). Gate intent and CI DAG topology remain solely indsl/gunbc/ci.dag(CIWorkflowDag); the GitHub workflow mirror exists for typed Actions surface fidelity and future emission work.Test plan
cargo test -p v3-compiler --test integration(includingt_ci_workflow_as_data_demo_test::*,gunbc_ci_github_actions_workflow_authority_compiles, andgunbc_ci_github_actions_workflow_dag_matches_yaml_generator_outputdrift gate)—via GitHub Actions on this PR after ready-flip; local full runs were constrained in session.CTRL_BUILD_WRAP_CARGO=0 cargo run -q -p gen_gunbc_ci_workflow_dag -- .github/workflows/ci.yml > dsl/gunbc/ci_github_actions_workflow.dagWorker attestation
Closes #N— none linked here; node adhoc-58647cb1-025 closes at squash-merge per manager..dagtext artifact.