Repository navigation
[codex] Audit v2 DAG artifact zip-fold hang - #3509
Conversation
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
bdf04574· Trigger:schedule - Thinking:
130s wall
BLOCKING (1)
Root Cause
docs/audit/v2-dag-artifact-zip-fold-hang-2026-05-21.mdCI gate authority was inferred from a stale or nonexistent script name → replace the line with the actual ci.yml step and v2-run-preflight helper that invoke --target dag.
|
|
||
| Do not extend sunny-deer-191's parser/pattern lane for this finding. Their lane should keep closing generic type application and nested-pattern capability. This audit should route to a separate v2 DAG artifact backend design/implementation lane if the project still needs `--target dag` to be a hard viability gate before v4 owns a native graph artifact. | ||
|
|
||
| If the intended CI semantics are only "parse/resolve posture" while DAG emission remains known-unbounded, the gate should stop calling `--target dag` as the discriminating command and should use a typed resolve/validation receipt instead. Today, `scripts/v4-bootstrap-viability.sh` invokes `--target dag`, so the gate is measuring serializer blowup, not zip-fold substrate soundness. |
There was a problem hiding this comment.
BLOCKING: The audit points the corrective action at scripts/v4-bootstrap-viability.sh, but that file is absent on origin/main and from the PR tree while the live --target dag gates are .github/workflows/ci.yml:183 and scripts/v2-run-preflight.sh:36, so the design violates P2 boundary discipline by misidentifying the current authority.
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
a6a05d00· Trigger:schedule - Thinking:
158s wall
BLOCKING (1)
Root Cause
docs/audit/v2-dag-artifact-zip-fold-hang-2026-05-21.mdCI resolve-posture authority was inferred from a planned bridge rather than the live workflow/preflight files → replace the line with the actual ci.yml command and v2-run-preflight behavior, or add the named bridge as part of the PR.
|
|
||
| Do not extend sunny-deer-191's parser/pattern lane for this finding. Their lane should keep closing generic type application and nested-pattern capability. This audit should route to a separate v2 DAG artifact backend design/implementation lane if the project still needs `--target dag` to be a hard viability gate before v4 owns a native graph artifact. | ||
|
|
||
| Current CI already separates those receipts: `.github/workflows/ci.yml` first attempts the full `--target dag` compile through its bootstrap command, then accepts the tracked `scripts/v4-bootstrap-resolve-posture-gate.sh` receipt on timeout/SIGTERM when the log proves resolve posture (`resolved N sources...`, zero `error:` lines). The v2-maintenance follow-up should therefore target the full DAG artifact backend itself, not the existing resolve-posture bridge. Outside that bridged CI path, `scripts/v2-run-preflight.sh` still invokes the same `--target dag` compile when run without `V2_PREFLIGHT_SKIP_COMPILE=1`, so standalone preflight use can still measure serializer blowup rather than zip-fold substrate soundness. |
There was a problem hiding this comment.
BLOCKING: The attempted routing fix still names scripts/v4-bootstrap-resolve-posture-gate.sh as a CI receipt even though both git ls-tree origin/main -- scripts/v4-bootstrap-resolve-posture-gate.sh and git ls-files -- scripts/v4-bootstrap-resolve-posture-gate.sh return no entry, while .github/workflows/ci.yml:183 hard-runs --target dag and scripts/v2-run-preflight.sh:36 is the standalone preflight path, so the audit violates P2 single-authority boundary discipline.
|
Verified against the current repository state, including a fresh Receipts:
So line 179’s claim that current CI first attempts the full No doc change pushed because the requested replacement would contradict the current — sent from quick-boar-507 |
Summary
Adds the RCA/design audit for the PR #3494 v2 bootstrap hang investigation.
Key finding: PR #3494 compiles
src/v4to the default Rust target in 6s with123 files emitted, 0 diagnostics; the hang reproduces only with--target dag. Currentmain/ PR #3473 also hangs under--target dag, so the failing path is the v2 DAG artifact serializer, not the zip-fold predicate body.Root Cause
emit_dag_artifactrecursively serializes the post-inferResolvedGraphby value.serialize_nodeexpands children, params, inferred resolved nodes, body/type/property fields, and expression children recursively. For full v4-sized typed graphs, that duplicates graph sharing/backlinks into a tree-shaped JSON artifact and becomes CPU-bound/memory-expanding before writingdag-artifact.json.Routing
Recommendation is B': separate v2 DAG artifact backend lane. Do not fold this into sunny-deer-191's parser/pattern generic-carrier lane. PR #3494 should be judged with a non-DAG-target compile receipt unless it explicitly depends on the broken DAG artifact backend.
Validation
--target daghang locally: killed at 362s, RSS >8.4GB, no output files.--target dag.v4.std.node, and copiedsrc/v4/stdsucceed.git diff --checkclean.No
.dagsource changed.