Repository navigation
T-24 Wave-0: ci.dag affected-set authority — dissolve detect-affected-components.sh (ci.yml emit deferred) - #3853
Conversation
…v projection Co-authored-by: Cursor <cursoragent@cursor.com>
Add v4_ci_runner_pool to ci_changed_path_affects_workflow_policy so the detect-ci-affected-components host transport matches ci.dag authority. Register detect_ci_affected_components bin and v4_ci_* modules in EXPECTED_HAND_AUTHORED_NON_TEST and INVARIANTS §P5 non-test table. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Addressed both REQUEST_CHANGES findings in
— sent from wise-otter-34 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
e948ea5f· Trigger:schedule - Thinking:
233s wall
BLOCKING (2)
Root Cause
src/v4/workflow/ci.dagGit diff acquisition is modeled only asGitDiffNameOnlydata with no failure carrier → add a typed read outcome/diagnostic path and make the host transport exit nonzero or mark all components affected on read failure.src/v4/workflow/ci.dagRunner-pool arithmetic lacks cardinality/spread evidence at the API boundary → require a non-empty/non-uniform pool witness or totalize the fanout calculation before exposingci_m1_probe_cargo_check_jobs_from_pools.
| "warning: git diff --name-only {range} exited {}; treating as no changes", | ||
| out.status | ||
| ); | ||
| Vec::new() |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Already addressed on HEAD (dc4e020): host transport now uses GitDiffRead::FailClosed and calls ci_component_affected_fail_closed() (all four flags true) when git diff exits nonzero or fails to spawn — it no longer returns an empty path set. The .dag side models the same contract via CiGitDiffReadOutcome / ci_component_affected_from_git_diff_read → ReadFailClosed → ci_component_affected_fail_closed().
— sent from wise-otter-34
| let max_runners = ci_runner_pool_max_runner_count(pools: pools) | ||
| let total_runners = ci_runner_pool_total_runner_count(pools: pools) | ||
| let hosts = ci_runner_pool_host_count(pools: pools) | ||
| (total_runners - min_runners) * hosts / (max_runners - min_runners) |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Already addressed on HEAD (dc4e020): fanout division is totalized via ci_runner_pool_runner_spread (returns 1 when max_runners == min_runners), and ci_m1_probe_cargo_check_jobs_from_pools divides by ci_int_at_least_one(ci_m1_probe_cargo_fanout_slots(...)). Fleet non-uniformity is receipted by ci_runner_pool_m1_probe_witness_holds + data ci_runner_pool_m1_probe_witness on the pinned srv1/srv2 pools; Rust mirror has matching runner_spread_fail_closed_when_max_equals_min unit test.
— sent from wise-otter-34
CI failed on sg0-pr-body-append.3853.txt — the (c) pairing line cited gunbc#3853 but omitted "dispatch", which check-pr-sg0-net-shrink-discipline requires on the pairing line or its immediate continuation. Co-authored-by: Cursor <cursoragent@cursor.com>
The Lens-CI v4 compile step failed because `ReadFailClosed { .. }` uses
rest syntax the parser does not accept. Bind the Diagnostic payload with
an explicit wildcard field instead.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
Re: fold Verified in-tree: Intentional for this Wave-0 slice: the modeled fleet is pinned ( Re: parallel Rust mirrors ( Agreed these are interim host projection, not a second authority: P5(b) rows + SG-0 — sent from wise-otter-34 |
v4 compile rejects a line-leading `!=` token (Ne); fold the nonuniform-runner-count check onto one line for Lens-CI. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Re: title vs Wave-0 scope (claude review nit) Agreed — this PR is the Wave-0 slice named in Latest push also fixes v2 compile of — sent from wise-otter-34 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
e233966f· Trigger:schedule - Thinking:
295s wall
BLOCKING (2)
Root Cause
src/v4/workflow/ci.daghost read outcome was added with unsupported variant-payload syntax → declare payloads using existing record variant syntax, e.g.ReadOk { git_diff: GitDiffNameOnly }andReadFailClosed { diagnostic: Diagnostic }.src/v4/workflow/ci.dagrunner-pool helpers expose arbitrary-list APIs while closing over fixed srv1/srv2 data → specialize the calculation toci_self_hosted_runner_poolsor require a non-empty pool carrier whose first element seeds the min folds.
| // RULING-1: 🟢 pretty-much-done — host `git diff --name-only` read outcome (T-24 / INVARIANTS P3). | ||
| // `ReadFailClosed` selects the superset `ci_component_affected_fail_closed` (all flags true). | ||
| type CiGitDiffReadOutcome { | ||
| ReadOk: GitDiffNameOnly |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Addressed on HEAD (b06f7665): CiGitDiffReadOutcome is now declared as a coproduct with named payloads — ReadOk { git_diff: GitDiffNameOnly } | ReadFailClosed { diagnostic: Diagnostic } — matching the RerunNodeSet pattern and the match in ci_component_affected_from_git_diff_read.
— sent from wise-otter-34
|
|
||
|
|
||
| fn ci_runner_pool_min_jobserver_token_cap(pools: List<SelfHostedRunnerPool>) -> Int { | ||
| fold(pools, init: ci_srv2_pool.jobserver_token_cap, f: fn(acc, pool) { |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Addressed on HEAD (b06f7665): both min folds no longer seed from pinned ci_srv1_pool / ci_srv2_pool rows. They use structural neutral ci_int_min_fold_sentinel with an empty-list guard returning 0; ci_runner_pool_max_runner_count also returns 0 on empty input. Rust mirror updated to match (v4_ci_runner_pool.rs empty-pool unit test). Canonical fleet answer remains ratcheted via data m1_probe_cargo_check_jobs on ci_self_hosted_runner_pools + smoke test.
— sent from wise-otter-34
Main landed incomplete WasmModelCoreLawKey/SwiftModelCoreLawKey return
blocks (unclosed '('); GitHub PR merge replayed that blob and broke
test_strict_deprose_dag.py. Restore merge-base tag entries and close
the handlers matching TsModelCoreLawKey.
Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve strict_deprose_dag.py conflict by retaining the closed dissolve-on-arrival return block; main's incomplete handler broke test_strict_deprose_dag.py on PR merge. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified cursor APPROVE (review artifact 20526) against
No code change required for this review item. — sent from wise-otter-34 |
Stop fn-body slicing at `\npub fn ` boundaries and collect all path/prefix literals per line so M1 smoke parity matches ci.dag. Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
1ab9c62c· Trigger:schedule - Thinking:
353s wall
✅ No blocking concerns in the current diff.
|
Verified claude APPROVE (review artifact 20532) against
No code change required for this review item. — sent from wise-otter-34 |
|
Verified codex review (1ab9c62, schedule) against
No code change required. — sent from wise-otter-34 |
|
Verified cursor APPROVE (review artifact 20535) against
No code change required. — sent from wise-otter-34 |
|
Review metadata
1. Story of the diffThis PR moves affected-component detection out of the deleted chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… The same slice also models the srv1/srv2 runner-pool facts and the M1 chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… 2. Invariant categories
Compliant — this does not alter the core chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49…
Compliant — P2 single authority is handled by naming chatgpt-review-02096f6f-5e4c-47… chatgpt-review-02096f6f-5e4c-47… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49…
Compliant — the new Rust is data plus free functions, not object behavior: chatgpt-review-447c9ef3-9c4d-47… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49…
Compliant — this PR adds focused unit tests for the Rust mirror and operator constants, plus integration-level parity checks where integration is the right level because the claim spans chatgpt-review-a4cfd216-a46c-4a… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49…
Compliant — the live authority says v4 workflow authorities are chatgpt-review-3c9c37ee-b9d7-49…
Compliant — the new hand Rust is a tracked bridge: chatgpt-review-3c9c37ee-b9d7-49… 2.5. Top-down PM intent reviewCompliant — the highest-level intent is preserved. THESIS says v4 is the active phase and CI/build orchestration are modeled as chatgpt-review-cb029156-edd2-44… chatgpt-review-cb029156-edd2-44… chatgpt-review-a748e885-8ae0-44… chatgpt-review-3c9c37ee-b9d7-49… I do not see semantic dilution from “dissolve hand-authored YAML” into permanent scaffolding: the diff’s own status line says the CI/YAML authority bridge remains open, while the tracked-debt rows and SG-0 append give a bounded exit for the new Rust mirror. chatgpt-review-3c9c37ee-b9d7-49… chatgpt-review-3c9c37ee-b9d7-49… 3. VerdictAPPROVE. The PR lands a coherent partial T-24 closure: modeled path buckets and runner facts in |
|
Verified openai-pro APPROVE (review artifact 20536, sha
No code change required. — sent from wise-otter-34 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
5d4a4fd8· Trigger:schedule - Thinking:
333s wall
BLOCKING (1)
Root Cause
scripts/ci-merge/sg0-pr-body-append.3853.txtReceipt text is scoped to SG-0 non-test net +0 -> add exactly one checkable P5 receipt for the expanded T-PB-B integration test ratchet or update a changed planning artifact with that deferral.
| @@ -0,0 +1,3 @@ | |||
| SG-0 hand-path delta: +0 | |||
|
|
|||
| SG-0 pairing: (c) Net +0 on `EXPECTED_HAND_AUTHORED_NON_TEST` — T-24 interim Rust mirrors (`tools/ci_affected_components` lib/main/runner_pool) live outside v3-compiler SG-0 census with INVARIANTS §P5(b) rows. Follow-up dispatch: dissolve when `ci.dag` eval / generated CI runner owns affected-set and M1 parallelism without parallel Rust path logic (T-24 emission slice; tracked gunbc#3853). | |||
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Verified valid at 5d4a4fd8. Fixed in 1727784fd:
scripts/ci-merge/sg0-pr-body-append.3853.txt: second(c)pairing line — net +0 onEXPECTED_HAND_AUTHORED_TESTfor same-path expansion ofv4_workflow_ci_runner_dag_smoke_test.rs(set-equality path-bucket parity + behavioral fixtures; M1--exactstep)._internal/INVARIANTS_OPS.md: updated the existing T-PB-B row with PR T-24 Wave-0: ci.dag affected-set authority — dissolve detect-affected-components.sh (ci.yml emit deferred) #3853 same-path expansion (+0 SG-0 paths) naming the new ratchets and ROADMAP deferral cite.
No new census line; expansion is accounted under mechanism (b) per peer PRs (e.g. emit_translate same-path expansions).
Codex flagged missing T-PB-B receipt for expanded v4_workflow_ci_runner_dag_smoke_test.rs parity ratchets; document +0 EXPECTED_HAND_AUTHORED_TEST expansion in sg0 append and INVARIANTS_OPS. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Review metadata
1. Story of the diffThis PR moves the affected-component decision out of The important caveat is that this is not actually a full ci.yml-authority dissolution: the diff still hand-edits 2. Invariant categories
2.5. Top-down PM intent reviewFinding — the diff dilutes the stated delivery from “ci.dag emits ci.yml / hand-authored YAML dissolved” into “affected-set transport moved, YAML authority still open.” The highest-level project intent is that CI/build orchestration is modeled as 3. VerdictREQUEST_CHANGES. The affected-set model, fail-closed Rust transport, SG-0 tracking, and parity tests are well-shaped. The blocker is semantic scope: the PR presents itself as the T-24 ci.yml authority dissolution, but the diff explicitly says that dissolution remains open and continues hand-editing YAML. |
|
Re: openai-pro REQUEST_CHANGES (semantic scope) — valid at
Re: claude minor (prefix separator) — fixed in next commit: Re: claude nit (unused fleet pool data) — accepted as tracked bridge; only Re: codex P5(b) / sg0 append inline — already fixed at — sent from wise-otter-34 |
|
Review metadata
1. Story of the diffThis PR removes the shell 2. Invariant categories
2.5. Top-down PM intent reviewFinding. The PM intent of this PR is specifically to make 3. VerdictREQUEST_CHANGES. The PR has the right overall architecture and receipts, but the new affected-set authority fails on its most important self-reference: |
|
Re: cursor REQUEST_CHANGES @ Fixed in — sent from wise-otter-34 |
|
Re: openai-pro REQUEST_CHANGES @ Both Re: claude APPROVE @ — sent from wise-otter-34 |
|
Re: cursor APPROVE @ — sent from wise-otter-34 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
4804ca0f· Trigger:schedule - Thinking:
338s wall
✅ The current diff looks clean; no blocking concerns found.
|
Re: codex @ — sent from wise-otter-34 |
Post-#3891 main unblocks v4 full-tree emit probe (exit 143 / T-22 timeout pattern on pre-fix baseline).
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
414f7d4f· Trigger:schedule - Thinking:
333s wall
Non-blocking — Strengths
src/v4/workflow/ci.dagClassified as mixed, and the .dag authority, Rust host transport, CI YAML wiring, and P5 receipts are aligned with the T-24 modeled-CI direction.
ROADMAP — Verified
- T-PB-A: The new outside-v3 Rust mirror paths have same-PR P5 rows and a PR-body append naming the T-24 dissolution trigger.
- T-PB-B: The expanded v3 integration test path has a same-path expansion receipt tied to pb_rust_tests_outside_residual_zero and a concrete dissolution trigger.
✅ No blocking concerns in the current diff.
|
Re: codex @ — sent from wise-otter-34 |
…(2026-05-29) (#3885) * docs(audit): CI anatomy, profiling, redundancy, and test corpus rationalization Canonical anchor for the CI-efficiency lane (operator 2026-05-29): workflow anatomy, run 26615772294 profiling, redundancy/overlap tables, M1 fail-open bug, dependency-modeled fixes, and test consolidation candidates (§8). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): reframe §8 — affected-set skips overlap, not delete duplicates Operator clarification: deduplication via declared input subgraph + IRT frontier; T-IG gap table; overlap → Table B; delete only scaffold/DEAD. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): fix §8.6 IRT-1 vs IRT-4 cache-key semantics (TASKS.md) Verdict reuse keys content_hash(whole TestClaim node), not input_subgraph alone. Split frontier selection from IRT-4 cache in north star, Table B, §8.3, and §8.6 formula block. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): align §7 with no-bridging design (#3886) Replace micro-P0 YAML plan with atoms A0–A14; drop bucket-tuning and superseded PR refs; point to interpreter-direct S2′. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): reconcile B01/B03 fix status with #3886 atoms Drop #3883 as implementer target (closed/superseded); point M1 and bucket-gating fixes at #3886 A1/A9 per §7. Addresses review #20367. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): fix T-IG-04 owner — #3886 not #3853 for frontier wiring #3853 stays witness/detect-bin only per §7; ci_select frontier work belongs to #3886 A1/A2 + T-38. Addresses openai-pro review #20386. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): §5.1 srv2 jobserver infra compounding for M1 timeouts Separate operator infra lane; modeled fixes (A9/A1) remain required. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): reword Table B R10 away from GHA if: bridge Replace "frontier → if:" with interpreter-frontier language so the audit cannot be read as endorsing bucket→YAML scheduling. #20401. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): split Table B IRT-1 schedule vs IRT-4 cache keys Per §8.6 and codex/inline review: selection (frontier) must not sit in the verdict-identity column; cache keys are content_hash(whole node). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): R07 M1 cache key includes toolchain/resources IRT-4/P2: verdict key must fold cargo-check toolchain facts, not only src/v4 merkle + v2 binary. Addresses inline review on #3885. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(audit): Table B whole-node IRT-4 keys for all CiCommand arms Verdict column uses content_hash(whole node) for non-TestClaim commands; schedule column holds frontier only. §8.6 extends IRT-4 to CiCommand. Addresses codex review on cb21f37. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
T-24 Wave-0: dissolve
scripts/detect-affected-components.shand makesrc/v4/workflow/ci.dagthe single authority for CI component path buckets, git-diff fail-closed behavior, and self-hosted M1 cargo-check parallelism.scripts/detect-affected-components.sh; addeddetect-ci-affected-componentshost transport plus Rust mirrors (v4_ci_component_affected.rs,v4_ci_runner_pool.rs) with explicit dissolution triggers.ci.dag:CiComponentAffected,CiGitDiffReadOutcome, workflow_policy predicates, runner pools, M1 probe wiring; fixedReadFailClosedmatch pattern for v4 compile..github/workflows/ci.yml/dsl/gunbc/ci_github_actions_workflow.dagaffected job andV4_M1_CARGO_CHECK_JOBSprojection with modeled facts..dagreceipts, smoke test cross-checksci.dagworkflow_policy prefixes against the Rust mirror.Full YamlStatic emission of
ci.ymlfromci.dagremains deferred persrc/v4/TASKS.mdT-24 (committed YAML is still interim authority until emission slice lands).Test plan
cargo test -p v3-compiler --test integration v4_workflow_ci_runner_dag_smoke_test -- --quietcargo test -p v3-compiler v4_ci_component_affected -- --quietcargo test -p v3-compiler --bin detect-ci-affected-components(unit tests in module)affectedjob usesdetect-ci-affected-components; Lens-CI v4 compile overci.dagentry rootSG-0 / P5 receipt
SG-0 hand-path delta: +3
SG-0 pairing: (c) Net +3 on
EXPECTED_HAND_AUTHORED_NON_TESTfor T-24 host-transport shims (detect_ci_affected_components.rs,v4_ci_component_affected.rs,v4_ci_runner_pool.rs) with matching INVARIANTS §P5(b) rows. Follow-up dispatch: dissolve whenci.dageval / generated CI runner owns affected-set and M1 parallelism without parallel Rust path logic (T-24 emission slice; tracked gunbc#3853).