Repository navigation
Conversation
… instrumentation Implements Lane C (Workflow cutover/perf): WF6: Workflow executor that runs CI via typed planner units instead of monolithic DAG execution. Each unit maps to a shell command; CachedHit units are skipped, Execute units run in topological order with ledger persistence. WF7: test-all workflow shares the same executor path. Cross-workflow dedup via WorkIdentity ensures codegen/build units produce identical ledger keys across ci and test-all flows. WF8: make ci and make test-all are now thin wrappers that delegate to gunbc-workflow ci/test-all. Core workflow entries added to makegen registry; render.rs emits single-line cargo run commands. WF9: SLO budget checking with warm-noop and total-duration thresholds. Top-slow-units reporting and typed execution summary with critical-path output. Default budgets: ci warm-noop 5s, test-all warm-noop 10s. New modules: workflow/executor.rs, workflow/slo.rs, workflow/unit_commands.rs Updated: bin/workflow.rs (run mode + plan mode), lib.rs re-exports, makegen registry + render Tests: 13 contract tests + 12 unit tests (80 total workflow tests pass) https://claude.ai/code/session_017pfGYUCdnm2fTB1ui2VJyQ
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b7c7611ba2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| WorkflowSpec::core( | ||
| "ci", | ||
| "Run CI via workflow planner (typed units, deterministic keying)", | ||
| &[], | ||
| ), |
There was a problem hiding this comment.
Stop registering
ci as both core workflow and tool
Adding ci to default_core_workflows here while MANUAL_TOOL_DEFS still includes ManualToolDef::pipeline("ci") causes makegen to emit two ci: targets (one core workflow wrapper and one tool target). Since targets are rendered from core_workflows and then tools (makegen/render.rs), the legacy gunbc-ci recipe can override the new workflow wrapper, so make ci does not reliably cut over to gunbc-workflow ci as intended.
Useful? React with 👍 / 👎.
| work_id: node_plan.work_id.clone(), | ||
| key: node_plan.key.clone(), | ||
| status, | ||
| output_hashes: BTreeMap::from([(PortName::from("result"), hash)]), |
There was a problem hiding this comment.
Prevent failed units from being cached as hits
This entry persists status plus an output hash even for failed executions, which makes failed runs look materialized for the same key. In the planner, the digest-match branch treats any rehydratable prior entry as CachedHit (workflow/planner.rs), so a unit that failed once can be skipped on the next run without re-executing, producing false-green workflow outcomes.
Useful? React with 👍 / 👎.
| status: LedgerStatus::Skipped { | ||
| blocked_by: node_plan.node_id.clone(), | ||
| }, | ||
| output_hashes: BTreeMap::new(), |
There was a problem hiding this comment.
Prevent skipped units from being cached as hits
Skipped units are written with the same key and output_hashes: {}; rehydrating an empty map succeeds, so the planner's digest-match path can classify previously skipped units as CachedHit. After a transient upstream failure, downstream units may remain permanently skipped/cached until inputs or upstream keys change, which breaks rerun correctness.
Useful? React with 👍 / 👎.
Record CONSUMER_LANDED for recursive_flex_demonstration_landed on the YAML↔ci_github_actions_workflow.dag regression guard; document bootstrap demo authority and defer isolated compile_to_dag receipts to M1(2.8) fix. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Address codex + inline BLOCKING: do not treat the YAML→generator drift test as the recursive-flex emit-back consumer. §1.8 row #59 stays DECLARED until `project_github_actions(ci_workflow_dag, YamlStatic)` (or direct-execution) is the cited receipt; document the supporting ratchet and fix rustdoc authority direction (YAML upstream, `.dag` derived). Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* WIP: recursive_flex_demonstration_landed * WIP: recursive_flex_demonstration_landed * docs(r3): gate #59 recursive_flex emit-back ledger + test citation Record CONSUMER_LANDED for recursive_flex_demonstration_landed on the YAML↔ci_github_actions_workflow.dag regression guard; document bootstrap demo authority and defer isolated compile_to_dag receipts to M1(2.8) fix. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(r3): tighten gate #59 §1.8 row (review ergonomics) Co-authored-by: Cursor <cursoragent@cursor.com> * fix(r3): gate #59 DECLARED; YAML upstream vs emit-back receipt split Address codex + inline BLOCKING: do not treat the YAML→generator drift test as the recursive-flex emit-back consumer. §1.8 row #59 stays DECLARED until `project_github_actions(ci_workflow_dag, YamlStatic)` (or direct-execution) is the cited receipt; document the supporting ratchet and fix rustdoc authority direction (YAML upstream, `.dag` derived). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(r3): drop process-flavored clause from gate #59 §1.8 row Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
- recursive_flex_demonstration_landed: structural equality of CI workflow carrier vs gunbc_ci_github_actions_workflow + ci_emission.dag source ratchet (YamlStatic arm and gunbc_ci_yml_workflow binding) - r3-program-plan §1.8 row #59: document M1(2.8) scope for emission-module compile Co-authored-by: Cursor <cursoragent@cursor.com>
… 11920) Remove misleading full-file compile_to_dag wording on the YAML drift test; point readers at recursive_flex_demonstration_landed + module M1(2.8) note. Co-authored-by: Cursor <cursoragent@cursor.com>
…tion) (#3110) * WIP: R3 gate #59: recursive_flex_demonstration_landed (T-Lens-Self-Applicatio * fix(r3): land gate #59 receipt without full ci_emission compile (M1 2.8) - recursive_flex_demonstration_landed: structural equality of CI workflow carrier vs gunbc_ci_github_actions_workflow + ci_emission.dag source ratchet (YamlStatic arm and gunbc_ci_yml_workflow binding) - r3-program-plan §1.8 row #59: document M1(2.8) scope for emission-module compile Co-authored-by: Cursor <cursoragent@cursor.com> * docs(test): align gate #59 rustdoc with linked-bundle receipt (review 11920) Remove misleading full-file compile_to_dag wording on the YAML drift test; point readers at recursive_flex_demonstration_landed + module M1(2.8) note. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
/#81/#91 §1.8 is canonical (INVARIANTS P2). Re-derive §3 T-Numeric residuals (drop stale #23 DECLARED; ETA lists #23 as landed), fix T-CostLens #40 vs #70 wording, and refresh the predicate-execution index: HARNESS_NAMED rows + verdict/buckets now match mechanical §1.8 Status classification at HEAD (61 harness-eligible). Co-authored-by: Cursor <cursoragent@cursor.com>
…tion) (#3097) * WIP: R3 gate #20: numeric_inherited_bake_ins_dissolved (T-Numeric-Constructio * WIP: R3 gate #20: numeric_inherited_bake_ins_dissolved (T-Numeric-Constructio * docs(r3): promote gate #20 numeric_inherited_bake_ins_dissolved to PASSING Record CONSUMER_LANDED + PASSING in §1.8 with producer/consumer citations (types.dag Int refinements + m2_substrate_inhabitance_test ratchet). Refresh §3 T-Numeric-Construction snapshot, PM compile note, and close-predicate index (HARNESS_NAMED, bucket counts, ledger anchor text). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(r3): align PM compile note header with 2026-05-14 §3 amendments Optional editorial consistency from composer-2 review (cadence stamp vs audit follow-up date). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: R3 gate #20: numeric_inherited_bake_ins_dissolved (T-Numeric-Constructio * WIP: R3 gate #20: numeric_inherited_bake_ins_dissolved (T-Numeric-Constructio * docs(r3): align §3 + predicate audit with §1.8 for gates #23/#40/#59/#63/#81/#91 §1.8 is canonical (INVARIANTS P2). Re-derive §3 T-Numeric residuals (drop stale #23 DECLARED; ETA lists #23 as landed), fix T-CostLens #40 vs #70 wording, and refresh the predicate-execution index: HARNESS_NAMED rows + verdict/buckets now match mechanical §1.8 Status classification at HEAD (61 harness-eligible). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(r3): sync PM compile T-CostLens clause with §1.8 + §3 lane row §1.8 rows #37/#40/#70 are not both DECLARED; #40 is CONSUMER_LANDED + PASSING and #70 INTEGRATION_RECEIPT (P2 single-authority vs §3 T-CostLens snapshot). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
… instrumentation
Implements Lane C (Workflow cutover/perf):
WF6: Workflow executor that runs CI via typed planner units instead of monolithic DAG execution. Each unit maps to a shell command; CachedHit units are skipped, Execute units run in topological order with ledger persistence.
WF7: test-all workflow shares the same executor path. Cross-workflow dedup via WorkIdentity ensures codegen/build units produce identical ledger keys across ci and test-all flows.
WF8: make ci and make test-all are now thin wrappers that delegate to gunbc-workflow ci/test-all. Core workflow entries added to makegen registry; render.rs emits single-line cargo run commands.
WF9: SLO budget checking with warm-noop and total-duration thresholds. Top-slow-units reporting and typed execution summary with critical-path output. Default budgets: ci warm-noop 5s, test-all warm-noop 10s.
New modules: workflow/executor.rs, workflow/slo.rs, workflow/unit_commands.rs Updated: bin/workflow.rs (run mode + plan mode), lib.rs re-exports, makegen registry + render
Tests: 13 contract tests + 12 unit tests (80 total workflow tests pass)
https://claude.ai/code/session_017pfGYUCdnm2fTB1ui2VJyQ