Skip to content

v4 Theme-A planning-debt closure — schedule unplanned substrate + thesis/wording fixes - #3220

Merged
briansrls merged 8 commits into
mainfrom
merry-ibex-337/theme-a-planning-closure
May 17, 2026
Merged

briansrls merged 8 commits into
mainfrom
merry-ibex-337/theme-a-planning-closure

Conversation

@briansrls

@briansrls briansrls commented May 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The adversarial consumer→std/ DFS audit (Theme-A) traced every planned consumer's substrate needs against the merged std/ 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.md

  • T-15 probe wording: kind: BitIdentical → kind: Equals (over B1 content_hash). BitIdentical is a property name, not a 5th AssertKind — verification.dag's closed AssertKind {Equals, Diagnostic, Compiles, RoundTrips} 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-address/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 AlgebraRef, SQL DDL, LanguageModel-type, ExecuteCommand-TestClaims, Swift.

Changes — THESIS.md

  • Facet 4: drop timing as a separate lens — timing is a projection of the cost lens (U2), not its own lens.

Disposition 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 .dag files 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

  • Doc-only (TASKS.md, THESIS.md). No .dag, no code.

🤖 Generated with Claude Code

briansrls and others added 2 commits May 16, 2026 21:07
…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>
@briansrls briansrls changed the title v4 design v4 Theme-A planning-debt closure — schedule unplanned substrate + thesis/wording fixes May 17, 2026
@briansrls
briansrls marked this pull request as ready for review May 17, 2026 01:08
…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>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressed the non-blocking observation in 3943298ff: the file_system.dag dangling-Consumes (std/collection NonEmptyList — a type collection.dag does not declare) is now decoupled from the T-25 fork in the TASKS.md text. It is a header bug regardless of which fork lands (refinement scheduled vs. ruled out), so it is explicitly NOT gated on the T-25 ratification — fixed standalone, routed to the file_system.dag owner (T-4.5 / PR #3209). Good catch — the prior "under whichever fork lands" wording still implied coupling.

— sent from merry-ibex-337

briansrls and others added 2 commits May 16, 2026 21:34
…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 briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: c173be0b · Trigger: schedule
  • Thinking: 225s wall

BLOCKING (1)

Root Cause

  • src/v4/TASKS.md The 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.md Lines 759-761 say the file_system.dag dangling Consumes bug is "fixed standalone", but the PR-head tree still has std/collection NonEmptyList; phrase this as routed to PR #3209 until that fix lands.

⚠️ The fixed-point TestClaim example needs to compare like artifacts before this planning doc can serve as the T-15 contract.

Comment thread src/v4/TASKS.md Outdated
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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

briansrls and others added 2 commits May 17, 2026 02:14
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>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressing the codex scheduled review (sha:c173be0b):

BLOCKING — already resolved. codex reviewed c173be0b; the T-15 probe artifact-mismatch was fixed in b3df9a7c2 (which post-dates that sha). The probe now models source-hash == source-hash: input = content_hash of iteration N+1's emitted Rust source, expected = pinned content_hash of iteration N's emitted Rust source — the stage1-emitted == stage2-emitted form codex names. The binary-as-pinned-release-artifact framing in the Reframe is a separate downstream concern, left as-is.

Non-blocking improvement — fixed in 093183225. The file_system.dag dangling-Consumes sub-bug text said "fixed standalone"; since PR #3209 has not landed, the dangling std/collection NonEmptyList still stands on the PR-head tree. Rephrased as routed to PR #3209 and pending until that PR lands.

— sent from still-hawk-102

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 09318322 · Trigger: manual
  • Comparison: main @ ba9337f1 ... merry-ibex-337/theme-a-planning-closure @ 09318322
  • Conversation: View conversation

1. Story of the diff

This PR is a planning/doc closure pass, not an implementation change. It tightens the v4 fixed-point probe so BitIdentical is no longer treated as a new assertion substrate: the planned TestClaim now uses the existing closed Equals kind over content_hash for the same emitted-Rust artifact across iterations (src/v4/TASKS.md:374, src/v4/TASKS.md:376, src/v4/TASKS.md:377, src/v4/TASKS.md:381). It then appends a Theme-A consumer-DFS audit that converts missed planning substrate into explicit proposed tasks or explicit scope/wording dispositions (src/v4/TASKS.md:719–src/v4/TASKS.md:730), with T-25 through T-29 covering value refinements, shared extdeps carriers, versioning, module graph, and C++ target data-model gaps (src/v4/TASKS.md:744–src/v4/TASKS.md:793). Finally, it reconciles the thesis wording around self-application by removing the separate “timing lens” claim and stating timing as a projection of cost rather than a standalone lens (THESIS.md:262, THESIS.md:266–THESIS.md:271, mirrored at src/v4/TASKS.md:815–src/v4/TASKS.md:819).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this diff does not introduce substrate types on Dag; it schedules or scopes proposed substrate work instead. The value-refinement, boundary-carrier, versioning, module-graph, and ABI/data-model needs are explicitly made proposed planning tasks rather than silently modeled inside consumers (src/v4/TASKS.md:744, src/v4/TASKS.md:763, src/v4/TASKS.md:771, src/v4/TASKS.md:779, src/v4/TASKS.md:787).

  1. INVARIANTS.md + modeling-discipline.md.

Compliant — the diff follows fail-closed/single-authority discipline rather than adding parallel substrate. The fixed-point probe keeps the existing AssertKind set closed by using Equals over content_hash instead of inventing a fifth BitIdentical kind (src/v4/TASKS.md:374, src/v4/TASKS.md:381). The shared-boundary-carrier task also correctly identifies duplicated NetworkAddress / HttpMethod authority as the P2 problem and routes it to one shared extdeps surface (src/v4/TASKS.md:763–src/v4/TASKS.md:769).

  1. CODING.md.

N/A — no Rust code, helper API, method shape, error/result shape, or implementation module is changed in this diff.

  1. TESTING.md.

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 (src/v4/TASKS.md:374–src/v4/TASKS.md:381).

  1. LOCKED DESIGN DECISIONS.

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 (THESIS.md:267–THESIS.md:270; src/v4/TASKS.md:815–src/v4/TASKS.md:819). The diff also preserves the zero-floor / tests-as-data direction by treating ExecuteCommand compatibility as a confirmable v4 modeling question rather than silently dropping it (src/v4/TASKS.md:807–src/v4/TASKS.md:813).

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the new debt is bounded as proposed planning debt with explicit ratification flow: the section says the dispositions are PROPOSED, require operator ratify-or-redirect, and join the close-gate plan only on ratification (src/v4/TASKS.md:727–src/v4/TASKS.md:730). The known dangling file_system.dag Consumes issue is not left implicit; it is documented as independent of the T-25 fork, routed to the T-4.5 / PR #3209 owner, and bounded by that owner correction (src/v4/TASKS.md:754–src/v4/TASKS.md:761).

2.5. Top-down PM intent review

Compliant — 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 (src/v4/TASKS.md:721–src/v4/TASKS.md:730). The thesis edit around timing is a semantic reconciliation with the planned v4 lens surface, not a silent removal of self-application: build/CI self-application remains, and the text still commits to cost/complexity/parallelism over the pipeline while documenting timing as a cost projection (THESIS.md:262, THESIS.md:266–THESIS.md:271).

3. Verdict

APPROVE. The diff is a disciplined planning/wording closure: it does not introduce new substrate by assertion, keeps the fixed-point probe within the closed AssertKind surface, and turns missed planning debt into explicit proposed tasks or scoped non-gaps. I did not find a diff-cited invariant violation.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review metadata

  • Provider / model: codex / unknown
  • Commit: 09318322 · Trigger: schedule
  • Thinking: 271s wall

BLOCKING (1)

Root Cause

  • src/v4/TASKS.md Theme-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.md The file_system.dag dangling Consumes issue is now explicitly routed to T-4.5/PR #3209 rather than described as already fixed.

⚠️ One planning row would steer v4 toward duplicate substrate authority; the rest of the changed planning text looks clean.

Comment thread src/v4/TASKS.md Outdated
**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

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
@briansrls

Copy link
Copy Markdown
Contributor Author

Addressing the codex scheduled review (sha:09318322) — BLOCKING finding already resolved.

codex reviewed 09318322; the T-26 fix landed in 7ee467288 (current HEAD), which post-dates it. T-26 now does exactly what codex asks — split into port-vs-schedule:

  • HttpMethod / URL — port the existing dsl/std/types.dag authority (RFC 9110 enum / URL refinement) into v4 std/; consumers Consume it. Not a new extdeps carrier.
  • NetworkAddress — no std authority found → DFS the concept DAG (M9) before minting.

The codex non-blocking strength (file_system.dag dangling-Consumes routed to T-4.5/#3209, not described as fixed) also still holds on HEAD. No new commit needed.

— sent from still-hawk-102

@briansrls
briansrls merged commit 728db21 into main May 17, 2026
7 checks passed
@briansrls
briansrls deleted the merry-ibex-337/theme-a-planning-closure branch June 1, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant