Repository navigation
v4 Theme-A planning-debt closure — schedule unplanned substrate + thesis/wording fixes - #3220
Conversation
…is/wording fixes The adversarial consumer-DFS audit found 12 items where a planned consumer needs substrate the plan never scheduled, or a doc promises what the tree lacks. This PR makes the PLANNING adjustments (not the implementations) so every row points somewhere. TASKS.md: - T-15 probe: kind BitIdentical -> Equals over content_hash; BitIdentical is a property name, not a 5th AssertKind (verification.dag's closed AssertKind is sufficient). - New "Theme-A planning-debt closure" section: 5 new PROPOSED tasks (T-25 value-predicate refinement substrate; T-26 shared extdeps boundary carriers net/URL/HttpMethod; T-27 version/semver lattice; T-28 std module-graph substrate; T-29 extdeps C++ ABI/target-model), plus dissolved/clarification/scope dispositions for the remaining rows (AlgebraRef, SQL DDL, LanguageModel-type, ExecuteCommand, Swift). Disposition forks are PROPOSED — operator ratify-or-redirect. THESIS.md: - facet 4: drop "timing" as a separate lens — timing is a projection of the cost lens (U2), not its own lens. No implementations — only the plan is adjusted. Theme-A missed-planning debt closes once the operator ratifies the disposition forks. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…he T-25 fork Per claude review on #3220: the `file_system.dag` header `Consumes` cites `std/collection NonEmptyList` (a type collection.dag does not declare) — a dangling-Consumes bug that is true regardless of which T-25 fork the operator picks. Decoupled: it is fixed standalone (routed to the file_system.dag owner / PR #3209), not gated on the T-25 ratification. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Addressed the non-blocking observation in — sent from merry-ibex-337 |
…a-planning-closure
…t_hash contract The T-15 falsification probe had kind: Equals but still showed input/expected as a raw compile result and raw "committed binary bytes" — an implementer would build raw-byte equality, contradicting the ratified content_hash-carrier check. Wrap both sides in content_hash(...) so the example matches the Theme-A note. Addresses codex APPROVE_WITH_COMMENTS on PR #3220. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
c173be0b· Trigger:schedule - Thinking:
225s wall
BLOCKING (1)
Root Cause
src/v4/TASKS.mdThe Theme-A Equals rewrite collapsed T-15's source fixed-point gate with the separate pinned binary release artifact -> model either source-hash equals source-hash (stage1-emitted == stage2-emitted) or run the bootstrap/rustc step and compare binary-hash to binary-hash.
Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)
src/v4/TASKS.mdLines 759-761 say thefile_system.dagdanglingConsumesbug is "fixed standalone", but the PR-head tree still hasstd/collection NonEmptyList; phrase this as routed to PR #3209 until that fix lands.
| input: compile(src/v4/compiler/*.dag, target=Rust), // iteration N+1 | ||
| expected: <committed v4 stage binary bytes> // iteration N | ||
| input: content_hash(compile(src/v4/compiler/*.dag, target=Rust)), // content_hash of iteration N+1 | ||
| expected: <pinned content_hash of the committed v4 stage binary> // iteration N |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Fixed in b3df9a7. Valid finding — the probe hashed compile(..., target=Rust) (emitted Rust source / TargetSource) but compared it to a committed binary hash, so the predicate spanned two different artifacts. expected is now the pinned content_hash of the prior iteration's emitted Rust source, so both sides hash the same artifact — which also matches T-15's own "stage1-emitted == stage2-emitted" modeling decision. The binary-as-pinned-release-artifact framing in the Reframe is a separate (downstream) concern and is left as-is.
— sent from still-hawk-102
The probe hashed compile(..., target=Rust) — emitted Rust source — but compared it to a committed stage binary hash: a source-hash vs a binary-hash, two different artifacts (INVARIANTS P2 boundary discipline). Make expected the pinned content_hash of the prior iteration's emitted Rust source, so both sides hash the same artifact — matching T-15's own "stage1-emitted == stage2-emitted" modeling decision. Addresses briansrls BLOCKING inline review on PR #3220. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…t-fixed "Fixed standalone" overclaimed — PR #3209 has not landed, so the dangling `std/collection NonEmptyList` Consumes still stands on the PR-head tree. Phrase it as routed to PR #3209 and pending until that PR lands. Addresses codex non-blocking improvement on PR #3220. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Addressing the codex scheduled review ( BLOCKING — already resolved. codex reviewed Non-blocking improvement — fixed in — sent from still-hawk-102 |
|
Review metadata
1. Story of the diffThis PR is a planning/doc closure pass, not an implementation change. It tightens the v4 fixed-point probe so 2. Invariant categories
Compliant — this diff does not introduce substrate types on
Compliant — the diff follows fail-closed/single-authority discipline rather than adding parallel substrate. The fixed-point probe keeps the existing
N/A — no Rust code, helper API, method shape, error/result shape, or implementation module is changed in this diff.
Compliant — no new executable tests are required for this docs-only planning change, and the one test-related edit improves the planned probe’s contract: it compares the same emitted source artifact by content hash on both sides, making the fixed-point check behavior-shaped rather than comparing mismatched “compiled output” vs “committed binary bytes” artifacts (
Compliant — the only thesis-level semantic adjustment is explicit and mirrored in the planning audit: timing is no longer promised as a separate lens, but as a cost projection (
Compliant — the new debt is bounded as proposed planning debt with explicit ratification flow: the section says the dispositions are 2.5. Top-down PM intent reviewCompliant — landing this PR would preserve the program intent rather than dilute it. The main PM-level risk was that missed substrate needs could remain invisible and let workers execute incomplete v4 tasks; this diff instead names the gaps, gives each a fork or task home, and states that closure is conditional on operator ratification ( 3. VerdictAPPROVE. The diff is a disciplined planning/wording closure: it does not introduce new substrate by assertion, keeps the fixed-point probe within the closed |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
09318322· Trigger:schedule - Thinking:
271s wall
BLOCKING (1)
Root Cause
src/v4/TASKS.mdTheme-A DFS treated a missing v4-local carrier as absent substrate → split T-26 into "port/consume existing std Url/HttpMethod authority" and only schedule genuinely missing carriers such as NetworkAddress.
Non-blocking — Strengths
src/v4/TASKS.mdThe file_system.dag dangling Consumes issue is now explicitly routed to T-4.5/PR #3209 rather than described as already fixed.
| **Gap:** `NetworkAddress` appears only in `coordination.dag` prose; | ||
| `HttpMethod` only in `openapi.dag`; no single authority — duplicating | ||
| either across consumers is the P2 parallel-authority violation. | ||
| **Disposition:** one ratified shared `extdeps` file declaring the |
There was a problem hiding this comment.
BLOCKING: T-26 schedules HttpMethod as a new shared extdeps carrier even though the reference tree already has std.types.HttpMethod as the RFC 9110 authority, which would create a parallel boundary carrier instead of porting/consuming the existing std fact (INVARIANTS P2/M9).
There was a problem hiding this comment.
Fixed in 7ee4672. Verified: dsl/std/types.dag:461 has type HttpMethod = GET | POST | ... (the RFC 9110 single authority), and URL has the identical case (dsl/std/types.dag:251 type Url = String). T-26 rewritten: port HttpMethod/Url into v4 std/ from the existing dsl/std/types.dag authority (RFC 9110 / URL spec are genuine shared facts → std/, not a new extdeps file); consumers Consume the single std/ authority. NetworkAddress — no std authority found, so the task now says DFS the concept DAG (M9) before minting. The original "new shared extdeps carrier" framing would have been the very P2 violation T-26 names — that's removed.
— sent from still-hawk-102
…tdeps carriers T-26 scheduled a new shared extdeps file for HttpMethod/URL, but both already have a single authority in the reference tree (dsl/std/types.dag: HttpMethod = RFC 9110 enum, Url = String refinement). Minting parallel extdeps carriers is the P2 violation T-26 names. Fix: port the existing std authorities into v4 std/, consumers Consume them; DFS (M9) for NetworkAddress before minting. Addresses briansrls BLOCKING inline review on PR #3220. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Addressing the codex scheduled review ( codex reviewed
The codex non-blocking strength (file_system.dag dangling- — sent from still-hawk-102 |
Summary
The adversarial consumer→
std/DFS audit (Theme-A) traced every planned consumer's substrate needs against the mergedstd/plus the scheduled plan, and found 12 items where a consumer needs substrate the plan never scheduled, or a doc promises what the tree lacks.Per the operator framing — at this stage the only debt v4 can introduce is missed-planning debt (worker-discretion debt is foreclosed by STOP + settled contracts) — this PR makes the planning adjustments only (not the implementations) so every Theme-A row now points somewhere: a scheduled task, a wording fix, a scope ruling, or a confirmed non-gap.
Changes —
TASKS.mdkind: BitIdentical→kind: Equals(over B1content_hash).BitIdenticalis a property name, not a 5thAssertKind—verification.dag's closedAssertKind{Equals, Diagnostic, Compiles, RoundTrips}is sufficient.extdepsboundary carriers (net-address/URL/HttpMethod) · T-27 version/semver lattice · T-28stdmodule-graph substrate · T-29extdepsC++ ABI/target-model. Plus dissolved/clarification/scope dispositions forAlgebraRef, SQL DDL,LanguageModel-type, ExecuteCommand-TestClaims, Swift.Changes —
THESIS.mdDisposition forks — operator ratify-or-redirect
Several rows carry a fork (schedule-a-task vs rule-out-of-v4): T-25 (refinement), T-27 (versioning), T-29 (C++ ABI), and the T-16 SQL-DDL scope call. These are PROPOSED — merge-with-notes or redirect, the DECISIONS-ledger flow. On ratification, T-25…T-29 join T-15's close-gate plan.
What this PR does NOT do
No implementations — no substrate is modeled, no new
.dagfiles created. This is purely the plan catching up to the audit.resolver.dag/ D4 (a separate already-ratified gap) is out of scope here.Test plan
TASKS.md,THESIS.md). No.dag, no code.🤖 Generated with Claude Code