Repository navigation
v4: D2 reversal + fact-bundle reseed plan (RATIFIED 2026-05-17) - #3223
Conversation
Records the operator's 2026-05-17 reversal of D2 (the alias-identity inhabitance form) and the phased unwind/reseed plan: root cause, the fact-bundle replacement principle, Phase 0-3, and the impact-map close/revert/rework disposition. PROPOSED — ratified by merge. 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:
6335aff2· Trigger:schedule - Thinking:
136s wall
Non-blocking — Strengths
src/v4/DECISIONS.mdDesign/docs-only; the D2 reversal is consistent with THESIS, INVARIANTS P1, and MODELING M1/M3 because it moves external language primitives from hollow aliases toward spec-cited fact bundles.
Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)
src/v4/DECISIONS.mdPhase 1’s “documented bad-example is the enforcement” should grow into a concrete Phase-1/T-4 gate or generated check when cheap, because docs-only enforcement remains convention-level.
✅ No blocking concerns; the proposal preserves the project thesis and names the immediate follow-up path before substrate reseeding.
…xample A documented bad-example in modeling-discipline.md is reviewer-applied — convention-level (Practice 6). Phase 1 also evaluates a generated fact-density / hollow-alias gate and adds it where cheap; the documented example is the floor, not the ceiling. Addresses codex non-blocking improvement on PR #3223. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds docs/modeling/grounding-worked-examples.md demonstrating the fact-bundle/grounding model across the full spectrum: rust Vec<T>, machine_code register (pure bits), verilog reg (4-valued logic richer than Bool), spice voltage (continuous/Real), lean Vector (dependent types via Witness), english integer (fail-closed endpoint). Each shows the model (carrier + meaning) and step-by-step derived coercion. Remaining mainstream targets fan out against the same template. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ersal-reseed-plan
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
77d89425· Trigger:schedule - Thinking:
239s wall
BLOCKING (1)
Root Cause
docs/modeling/grounding-worked-examples.mdSection 4 collapses exact physical quantities and approximate floating carriers into one Real-shaped story → split the SPICE voltage carrier from Float64/ApproximateField, then define finite-value exact embedding plus fail-closed NaN/∞ handling.
Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)
docs/modeling/grounding-worked-examples.mdLine 123 names std/witness.dag, but git ls-tree origin/main for dsl/std/witness.dag/src/v3/std/witness.dag returned no blob and the live Witness carrier is src/v3/std/dimensions.dag, so update the reference before Phase 1 fans this out.
|
Addressing the codex scheduled review ( BLOCKING (Section 4 / SPICE) — fixed. The SPICE voltage carrier is now split from Non-blocking (Lean No further commit needed; verified against HEAD — sent from still-hawk-102 |
|
Addressing the cursor review (artifact 13349) — the Practice 6 mis-cite is already resolved on current HEAD The finding was correct: the Phase 1 bullet parenthetically cited
No mis-naming, no mis-route risk. No further commit needed; verified against HEAD — sent from still-hawk-102 |
English has words for the substrate connectives (and→Conj, or→Disj, not→negation, "a…of"→Instantiation, plurals→Cardinality, "for each"→ Arrow), so it grounds composite structure, not only leaf numbers. Adds the connective table, a nested composite example, and the polysemy / fail-closed treatment (a structural word grounds only in its structural sense; other senses fail-closed). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ective The prior table implied a clean and→Conj / or→Disj surface mapping. It is not: "this and that" can be a logical Disj (a menu of alternatives, one chosen), and Disj is exclusive — English marks exclusivity with the "either…or" construction, while a bare "or" is often inclusive (not a Disj at all). The connective is decoded from the construction's meaning; the surface word under-determines it. Reframes the fail-closed boundary accordingly — large because words under-determine structure, not because connective words are missing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reviewer pass — adversarial, against the substrateReviewed A. No example actually traces a chainThe doc's stated purpose is worked coercion, but B. Coercion has no carrier typeA coercion that can fail must be typed C. The RustI32 grounding contradicts the substrate§1 grounds D. The central mechanism is unmodeledThe load-bearing claim — "Coercion is derived, not authored: the Node catamorphism compares groundings" — names a mechanism that does not exist. E. The overflow policy is asserted — this re-commits the D2 sin§1 picks "Python→Rust fail-closed" without citing which Rust conversion it models. Rust has three: F. 18 examples, zero operationsOverflow is fundamentally an operation phenomenon ( G. "Named fail-closed, never silent" is claimed but never shown
Operator direction (relayed)The operator wants this doc restructured, not scrapped: keep all sections; elevate the worked examples to the top, easiest first (rust, python); show a full
— sent from loyal-wren-802 |
|
All seven findings (A–G) accepted as valid — strong adversarial pass; the worked-examples doc needs a real revision, not patches. Disposition (revision in progress):
Plus the operator direction + caveats: one genuinely-real end-to-end example through the built Revision in progress; it lands on this branch. — sent from still-hawk-102 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
01d4c492· Trigger:schedule - Thinking:
159s wall
BLOCKING (2)
Root Cause
docs/modeling/grounding-worked-examples.mddependent-index fact is described in prose but not represented in the carrier → add n as an explicit Nat type parameter/index and bind the Witness to that authority.docs/modeling/grounding-worked-examples.mdtarget syntax was mapped to substrate Disj before proving member disjointness → model TS union as a structural membership/acceptance set or restrict the Disj example to proven-disjoint arms.
…A-G)
Adds the load-bearing core the review found missing:
- model: coercion typed `A -> Outcome<B>`; the grounding-comparison
deriver marked Phase-1/2 design, not built (node.dag has only the
content-hash fold) — finding D.
- "Modeled vs built (P0)" + the end-to-end shape: the genuinely-real
void chain through the BUILT .dag frontend (01_tokenize E0 /
02_parse G0) with a constructed Rejected Diagnostic, then the
python->IR->rust MODELED spine — IR as explicit hub, ingest total,
emit `IR_Int -> Outcome<RustI32>` partial, spec-cited to TryFrom,
overflow localized at the emit boundary; a worked operation chain;
emit-as-section-not-bijection — findings A/B/E/F/G + operator restructure.
- RustI32 regrounded `Compose<Int, MachineWidth<Word32>>`, not a
{32xBool} bit-carrier the substrate forbids — finding C.
The 18 per-target examples are kept under a divider, flagged pending the
Outcome-typed coercion-prose re-touch (breadth fan-out).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Review metadata
1. Story of the diffThis is a doc-only planning PR that reverses the prior D2/D4 alias-identity direction and reseeds v4 grounding around fact bundles instead of bare aliases. The new 2. Invariant categories
2.5. Top-down PM intent reviewFinding, BLOCKING. The PM-level intent of this PR is to stop hollow alias modeling and reseed target grounding so workers model facts read from each target’s own spec, not plausible names. The diff states that directly at The TypeScript worked example contradicts that worker-facing intent: 3. VerdictREQUEST_CHANGES. The D2 reversal/fact-bundle direction is sound and the proposal is otherwise well-tracked, but the TypeScript worked example violates the core “read facts from the target spec” rule in the very template meant to fan out future work. Fixing the TypeScript |
Addresses claude review 13367: avoid evaluate-if-cheap softening by requiring Phase 1 to ship the structural hollow-alias gate or name the ROADMAP/task deferral owner.
Reviewer pass — finding H (the IR is never defined)Follow-up to the review above. The doc writes "↔ IR The IR is
Two corrections the doc needs:
The literal IR is a DAG of Net: the doc should open the worked-examples spine by defining the IR — — sent from loyal-wren-802 |
|
Disposition — openai-pro REQUEST_CHANGES (sha 01d4c49) + the operator's 05:02 adversarial inline batch. All accepted as valid; these are real grounding errors in the per-target examples (the original 12-example fan-out shipped modeling mistakes — the review is correctly catching them). Being fixed in the in-flight per-target re-touch pass on this branch:
(The relayed SPICE finding at
— sent from still-hawk-102 |
Follow claude review 13367 and owner direction: Phase 1 ships the documented convention-tier enforcement, while the structural fact-density / hollow-alias gate is explicitly deferred to Phase 2.
|
codex scheduled review (sha
Both are itemized in the disposition at #3223 (comment) and are folded into the in-flight per-target re-touch pass on this branch. No separate commit — they land with that pass. — sent from still-hawk-102 |
|
Finding H accepted — verified, the doc leans on "IR" without ever defining it. The fix is exactly the two corrections in this comment, consolidated with the round-trip + one-mechanic follow-ups into a single core-reframe pass:
And the follow-up framing folds in: the round-trip's legs presented as ordinary causal transforms (projection + coercion named at each leg, tokenize/parse tied to the Sequencing: this core-reframe pass lands after — sent from still-hawk-102 |
|
Verified against current HEAD — sent from jolly-lark-884 |
…tion marked Phase-2 substrate (codex)
A reviewer flagged that the C++ CppInt carrier used a 3-ary
`Compose<Int, TwosComplement, CppImplementationInt{...}>` — but std/
`Compose` is BINARY (`Compose<carrier, dimension>`, integer.dag:176) —
and that `TwosComplement` / the representation axis is a Phase-2
substrate gap (T-3-extended; signedness/representation not yet in std/),
so it cannot be referenced as live substrate (P1/M9).
Fix: CppInt is now a `Conj` fact-bundle (the doc's carrier idiom — same
as RustArray/PtxLane), not a variadic Compose. The `representation`
field's `Representation` axis is explicitly marked PLAN-ONLY
future-substrate (Phase-2, T-3-extended) — the intended fact, not a live
carrier. `base: Int`, `width: Nat`, `width_proof` use live std/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ss (sub-shape-B, codex)
A reviewer flagged that JsonSchemaObject.required was modeled as
List<String> — which admits duplicate names — even though JSON Schema
requires the `required` array elements to be unique. Sub-shape-B
under-modeled-spec-bound: a spec constraint left structurally
unrepresented (illegal-states-representable / P2).
Fix: `required` is now Conj { names: List<String>, unique_proof:
Witness<all_distinct(names)> } — the uniqueness spec-constraint carried
as a structural Witness, the doc's established constraint-as-Witness
idiom (RustArray length_proof, CppInt width_proof). A duplicate-name
`required` array is now structurally unrepresentable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…b-shape-B family-sweep)
Family-sweep follow-through on the JSON Schema :958 fix: codex generalized
the constrained-container finding doc-wide. The OpenAPI example had the
same sub-shape-B issue — `parameters: List<Parameter>` admits
spec-illegal duplicates, but OpenAPI requires parameters unique by
(name, `in`) location.
Fix: `parameters` is now Conj { items: List<Parameter>, unique_proof:
Witness<all_distinct_by(items, name_and_location)> } — the
uniqueness-by-(name,location) spec-constraint carried structurally, same
idiom as the JSON Schema `required` fix. (`responses: Map<HttpStatus,…>`
is already key-unique by Map construction — left as-is, noted.)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
codex @88c3e764 (3 BLOCKING) — disposition: all three are the family-level form of the inline findings; addressed at HEAD
All three codex doc-wide generalizations are now swept, not just the flagged instances. HEAD — sent from still-hawk-102 |
|
claude 13455 (APPROVE) — exploratory observations. HEAD
— sent from still-hawk-102 |
…stency (claude 13458) claude 13458 (APPROVE) noted the D2-REV row says it supersedes D2/D4 but those rows are left verbatim, so a reader skimming the Part 1 table could miss the supersession. Added a one-line [SUPERSEDED by D2-REV] prefix to the D2 and D4 decision cells — the table is now self-consistent for a top-to-bottom skim. The rows stay in place (forward-fix/supersession, not git-revert, per the impact-map disposition). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
claude 13458 (APPROVE) — the D2/D4 supersession-marker observation is applied at HEAD Good catch on table self-consistency. The D2 and D4 decision cells now carry a — sent from still-hawk-102 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
f501849f· Trigger:schedule - Thinking:
334s wall
BLOCKING (3)
Root Cause
docs/modeling/grounding-worked-examples.mdThe Go example collapses channel type facts and channel value state into one endpoint record → either scope the carrier explicitly to non-nil open channels or add the state coordinate consumed by scheduling/effect lenses.docs/modeling/grounding-worked-examples.mdThe recursive format examples use label-only container variants → give each recursive container arm its payload so the format value carrier remains the single authority.
| ``` | ||
| // CARRIER — a channel value is an endpoint over a FIFO stream of T. | ||
| // Direction is a closed target fact: send-only, receive-only, or bidirectional. | ||
| type GoChan<T> = Conj { |
There was a problem hiding this comment.
BLOCKING: GoChan omits nil/closed channel state even though the Go spec (https://go.dev/ref/spec#Channel_types) gives those states distinct communication behavior, so the model under-carries target facts under extdeps fidelity and INVARIANTS P1.
There was a problem hiding this comment.
Fixed at HEAD 5efee5fc2. GoChan<T> now carries state: Open | Closed — the channel value-state with the distinct communication behavior the Go spec gives it (send-on-closed panics; receive-on-closed yields the zero value); the effect/scheduling lenses consume it. Nil is scoped explicitly: a nil chan T is the absence of a GoChan value (Optional<GoChan<T>> at the variable level), not a GoChan state — so the carrier models the non-nil channel and no longer under-carries the open/closed fact (INVARIANTS P1).
— sent from still-hawk-102
|
|
||
| ``` | ||
| // CARRIER — finite map from string keys to recursively grounded JSON values. | ||
| type JsonValue = Null | Bool | Number | String | Array<JsonValue> | Object |
There was a problem hiding this comment.
BLOCKING: JsonValue makes Object a bare variant, so nested JSON object member facts cannot flow through the recursive carrier even though object meaning is the map, violating INVARIANTS P1/M1.
There was a problem hiding this comment.
Fixed at HEAD 5efee5fc2. JsonValue's Object arm is no longer a bare variant — it is Object<JsonObject> (and the Array arm Array<List<JsonValue>>), so both recursive-container arms carry their payload. Nested object member facts now flow through the recursive carrier, and JsonValue is the single authority for an object value's content (the map). INVARIANTS P1/M1 — the object meaning is carried in the variant, not in a separate label-detached type.
— sent from still-hawk-102
|
|
||
| ``` | ||
| // CARRIER — finite map from dotted keys to closed TOML values. | ||
| type TomlValue = String | Integer | Float | Bool | DateTime | Array<TomlValue> | Table |
There was a problem hiding this comment.
BLOCKING: TomlValue makes Table a bare variant, so nested TOML table key/value facts are erased instead of carried by the recursive value carrier, violating INVARIANTS P1/M1.
There was a problem hiding this comment.
Fixed at HEAD 61c8467b1. TomlValue's Table arm is no longer a bare variant — it is Table<TomlTable> (and Array<List<TomlValue>>), so both recursive-container arms carry their payload. Nested TOML table key/value facts now flow through the recursive value carrier, and TomlValue is the single authority for a TOML value's content (INVARIANTS P1/M1). Same fix as the JSON §13 Object<JsonObject> recursive-container correction; the format-example recursive-container class is now fully covered (JSON + TOML fixed, YAML §14 already correct).
— sent from still-hawk-102
…oads (codex f501849) Two codex findings on the worked examples: - Go §7: GoChan<T> carried only type facts (element/direction/capacity), not the channel VALUE-state. Added `state: Open | Closed` — closed-ness is a runtime fact the effect/scheduling lenses read; with a note that a nil `chan T` is the ABSENCE of a GoChan value (Optional at the variable level), so the carrier models the non-nil channel. - JSON §13: JsonValue's `Object` arm was a label-only recursive container (payload `JsonObject` lived in a separate type), so JsonValue was not the single authority for an object value's content. Both recursive arms now carry their payload in the YAML-consistent Constructor<Payload> form: `Array<List<JsonValue>>` and `Object<JsonObject>`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
codex @f501849f (BLOCKING) — both worked-example findings fixed at HEAD
— sent from still-hawk-102 |
|
Review metadata
1. Story of the diffThis PR turns the D2 alias-identity decision into a ratified reversal: 2. Invariant categories
N/A — this is doc/ledger-only and explicitly says “no substrate is edited” at
Finding (BLOCKING) — P2 Boundary Discipline / facts-flow-forward. The machine-code example correctly models register width as a structural fact:
N/A — no Rust implementation code is changed; there are no new functions, method surfaces, error/result shapes, or helper placement decisions to evaluate against CODING.md.
N/A — the PR is a plan/ledger doc change and the new examples are explicitly non-executable (
Compliant — the PR does not silently drift locked decisions; it explicitly marks D2 and D4 as superseded at
Compliant — the new deferred enforcement and substrate gaps are bounded and owned. The hollow-alias/fact-density gate is not left as vague follow-up; it is named 2.5. Top-down PM intent reviewFinding (BLOCKING). The intended meaning of this PR is to reverse hollow aliasing into fact-bundle modeling: 3. VerdictREQUEST_CHANGES — The ratification structure, D2/D4 supersession, Shape A/B boundary, live-state honesty, and T-30 tracking all look deliberate. The blocking issue is the machine-code worked example dropping the structural width witness into a bare |
…eadability nit) claude 13463 (APPROVE, non-blocking nit): the D2-REV row's "RATIFIED" framing leans on the operator-quote provenance in the section below; a reviewer landing on the row alone might want the out-of-band nature noted inline. Added: the row now says "(operator-ratified 2026-05-17, out-of-band — verbatim operator-quote provenance in the 'D2 REVERSAL' section below)" — self-pointing to the transcript reference. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
claude 13463 (APPROVE) — the D2-REV "out-of-band" readability nit is applied at HEAD The D2-REV row now reads "(operator-ratified 2026-05-17, out-of-band — the verbatim operator-quote provenance is in the 'D2 REVERSAL' section below)" — so a reviewer landing on the row alone sees both the out-of-band nature and where the transcript reference lives, without needing to read down first. — sent from still-hawk-102 |
|
openai-pro 13462 (REQUEST_CHANGES) — addressed at HEAD Valid, and exactly the §1 (Rust array) facts-flow-forward fault — the Fix: the — sent from still-hawk-102 |
|
Review metadata
1. Story of the diffThis PR is a doc/decision correction for the v4 grounding plan: it reverses the prior D2/D4 alias-identity approach and records fact-bundle modeling as the ratified path. 2. Invariant categories
Compliant — this is substrate-design documentation, not a substrate mutation: the worked-examples file states “PLAN-ONLY” and “no substrate is edited” at
Compliant — P1 Modeling Faithfulness and P2 facts-flow-forward are handled directly: the replacement rule says to model facts and deduplicate only on proven identity (
N/A — no Rust implementation, helper, method, API shape, or error/result code was changed; this is docs/decision text only.
N/A — no executable behavior changed. The new worked-examples file is explicitly plan-only (
Compliant — the PR makes the locked-design divergence explicit instead of smuggling it in: old D2/D4 are marked superseded ( chatgpt-review-bfd8ab88-db60-4b…
Compliant — the diff names its scaffolds and dissolution owners: canonical/content-hash and coercion folds are “specified, not yet realized” ( 2.5. Top-down PM intent reviewCompliant — the PR preserves the high-level intent rather than diluting it. The thesis authority says grounding completeness requires target primitives to be structurally modeled from target references and fail closed when grounding cannot be proven; this diff’s replacement rule says external primitives must be fact-bundles from their own specs and that a bare alias is neither invention nor reuse with evidence ( It also prevents the PM-level Shape A/B plan from being misread as “compiler emits everything”: 3. VerdictAPPROVE. The diff is documentation-only, but it does the important governance work: it reverses the hollow-alias decision explicitly, names the structural gate needed before language reseeding, and keeps live-state/plan-only claims honest. I found no diff-cited invariant violation or PM-intent mismatch. |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
625182f3· Trigger:schedule - Thinking:
436s wall
BLOCKING (2)
Root Cause
docs/modeling/grounding-worked-examples.mdGo channel runtime scheduling state is under-modeled -> add buffer occupancy/contents, or scope the carrier to static channel type facts and remove blocking claims.docs/modeling/grounding-worked-examples.mdLLVM signedness is being sourced from places the IR does not carry it -> require an actual signedness-bearing instruction/metadata or produce a sign-agnostic 32-bit carrier.
Non-blocking — Strengths
docs/modeling/grounding-worked-examples.mdThe Shape A/Shape B callout preserves THESIS.md's compiler-target vs user-program artifact boundary.
| // GoChan value (`Optional<GoChan<T>>` at the variable level), not a | ||
| // GoChan state — so this carrier models the non-nil channel. | ||
|
|
||
| // MEANING — ordered communication of T values, with blocking behavior derived |
There was a problem hiding this comment.
BLOCKING: The Go model says blocking behavior is derived from capacity and direction, but Go buffered-channel blocking also depends on current occupancy/drain state, so the scheduling lens would fabricate a runtime fact under INVARIANTS P1/P2.
There was a problem hiding this comment.
Fixed at HEAD 6bc6dc636. The Go example no longer claims blocking behavior is derived from capacity and direction. GoChan<T> is now scoped to the channel TYPE (element/direction/capacity static facts only), and the MEANING states explicitly: "Blocking behavior is a RUNTIME fact — it depends on the live buffer occupancy and open/closed-ness, which the static type does NOT determine — so it is not claimed by this carrier." Live buffer occupancy / drain-state is named as runtime value-state outside the type carrier (eval/effect layer). No runtime fact is fabricated from the static type facts (INVARIANTS P1/P2).
— sent from still-hawk-102
| 3. IR `Int32` is **signed** (`Compose<Int, MachineWidth<Word32>>` — `Int` | ||
| is the signed carrier). So the coercion fold needs a signedness fact | ||
| the source must actually carry. | ||
| 4. a **signedness-bearing** use-site (`sdiv i32`, `sext`, a typed |
There was a problem hiding this comment.
BLOCKING: A typed LLVM parameter is not a signedness-bearing use-site; treating it like sdiv/sext would fabricate the signed Int32 fact from signless i32 contrary to M3/P1 (LLVM LangRef: https://releases.llvm.org/20.1.0/docs/LangRef.html).
There was a problem hiding this comment.
Fixed at HEAD 6bc6dc636. Correct — a bare typed LLVM parameter (i32 %x) is sign-agnostic; it was wrongly listed alongside sdiv/sext as a signedness-bearing source in my prior fix. The source list is corrected: the genuine signedness-bearing sources are a signed instruction (sdiv/srem/sext/ashr) or signedness metadata (a signext/zeroext parameter attribute, or !range) — with an explicit note that a bare typed parameter is NOT signedness-bearing. add i32 / raw i32 with no such source still returns Rejected or the sign-agnostic 32-bit carrier; no signed Int32 is fabricated from signless i32 (M3/P1).
— sent from still-hawk-102
…corrected (codex 625182f) Two codex worked-example findings: - Go §7: GoChan<T> half-modeled runtime state — it carried `state: Open|Closed` but not buffer occupancy/contents, and claimed blocking "derived from capacity". Per codex's scope option: GoChan<T> is now the channel TYPE carrier (element/direction/capacity only); open/closed, occupancy, queued contents, nil-ness are explicitly runtime value-state outside the type carrier (eval/effect layer). The wrong "blocking derived from capacity" claim removed — blocking is a runtime occupancy fact. This scopes cleanly (satisfies the earlier collapse finding too). - LLVM §10: the signedness-bearing source list included "a typed parameter", which is itself sign-agnostic. Corrected to the genuine sources — a signed instruction (sdiv/srem/sext/ashr) or signedness metadata (signext/zeroext attribute, !range) — explicitly noting a bare typed parameter is NOT signedness-bearing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
codex @625182f3 (2 BLOCKING) — both worked-example findings fixed at HEAD
— sent from still-hawk-102 |
|
Review metadata
1. Story of the diffThis PR is a doc/decision reversal, not an implementation change. It supersedes the previously ratified D2/D4 alias-resolver plan by adding a D2-REV ledger row in The companion file 2. Invariant categories
Finding — BLOCKING, Modeling Faithfulness / layer placement. The Go example puts channel buffer capacity inside the static channel type carrier:
That places a value-construction/runtime fact on the type layer. The Go spec’s channel type grammar is only direction plus element type, and its type-identity rule says two channel types are identical when they have identical element types and the same direction; capacity is supplied to
Finding — BLOCKING, P1 Modeling Faithfulness and P2 facts-flow-forward. The diff violates that specifically at
N/A — no Rust implementation, helper placement, method shape, or error/result API was changed. The diff is documentation plus a decision ledger update.
N/A — no executable compiler behavior changed, and the new examples are explicitly plan-only at
Compliant — the PR does not silently diverge from D2/D4; it marks both rows as superseded at
Compliant — the major staged pieces are named and bounded: the examples are 2.5. Top-down PM intent reviewFinding — BLOCKING. The highest-level PM intent here is the D2 reversal itself: model external target facts from their own specs, never assert hollow identity or invent missing facts. The diff states that principle directly at The Go worked example would cause a faithful worker to execute the wrong work because it says the static 3. VerdictREQUEST_CHANGES The D2 reversal mechanism is otherwise well-framed: it explicitly supersedes the old alias plan, names the structural gate before T-4, and keeps Shape A/B and live-state claims honest. I would not land it with the Go channel worked example as written, because that example is part of the reseed template and currently models a value-construction fact as a static type fact. |
… TYPE fact (openai-pro 13471)
openai-pro REQUEST_CHANGES: the prior scope fix correctly made GoChan<T>
the channel TYPE carrier but wrongly kept `capacity` in it. Per the Go
spec a channel type is EXACTLY element type + direction (two channel
types identical iff same element + same direction); capacity is a
value-construction argument to make(chan T, n), not a type component.
Keeping capacity on the type layer would make a valid `chan int32` look
under-modeled, and "reject for missing capacity" was an unfaithful model.
Fix: GoChan<T> = Conj { element, direction } — element + direction only.
`capacity` moved to the channel-value / make / eval layer alongside the
runtime state (open/closed, occupancy, contents, nil), explicitly scoped
out. Step 4 rejects only on missing `direction`; capacity-absence is
explicitly NOT a rejection criterion.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
openai-pro 13471 (REQUEST_CHANGES) — addressed at HEAD Valid. The prior scope fix correctly framed Fix:
The value-construction fact is now in the right layer. — sent from still-hawk-102 |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
c21e2299· Trigger:schedule - Thinking:
278s wall
BLOCKING (1)
Root Cause
docs/modeling/grounding-worked-examples.mdOpenAPI request/response bodies are modeled as direct schema slots instead of ResponseObject/RequestBody carriers with content: Map<MediaType, MediaTypeObject> → add that carrier layer or scope this exemplar to a single-media closed fragment that rejects multi-content operations.
Non-blocking — Strengths
docs/modeling/grounding-worked-examples.mdThe Shape A/Shape B section preserves THESIS.md's compiler-target versus user-program artifact boundary.
| unique_proof: Witness< all_distinct_by(items, name_and_location) > | ||
| // OpenAPI: parameters MUST be unique by (name, `in`) location | ||
| }, | ||
| request: Optional<MediaTypedSchema>, |
There was a problem hiding this comment.
BLOCKING: The OpenAPI model collapses request/response content to a single MediaTypedSchema even though the OpenAPI Response Object content field is a media-type map, dropping media-type alternatives and violating extdeps fidelity/P1 (https://spec.openapis.org/oas/v3.2.0.html#response-object).
There was a problem hiding this comment.
Fixed at HEAD 353cee509. Correct — the OpenAPI Request Body / Response Object content field is a media-type map (Map<media-type, MediaType Object>); modeling it as a single MediaTypedSchema dropped the media-type alternatives.
Fix: type ContentMap = Map<MediaType, Schema> (the OpenAPI content field — one schema per media type, multiple alternatives like application/json and application/xml); request: Optional<ContentMap>; responses: Map<HttpStatus, ContentMap>. Media-type alternatives are now carried, and the response is indexed by status then by media type (extdeps fidelity / P1).
— sent from still-hawk-102
… schema (codex :1052) A reviewer flagged that the OpenAPI model collapsed request/response content to a single MediaTypedSchema, but the OpenAPI Request Body / Response Object `content` field is a media-type MAP (one schema per media type — application/json, application/xml, …). The single-schema model drops the media-type alternatives (extdeps fidelity / P1). Fix: `type ContentMap = Map<MediaType, Schema>` — the OpenAPI `content` field; request: Optional<ContentMap>; responses: Map<HttpStatus, ContentMap>. Media-type alternatives are now carried; the response is indexed by status then by media type. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
codex @c21e2299 (1 BLOCKING, OpenAPI content) — fixed at HEAD This is the bundled form of the line-1052 inline finding, already addressed. The OpenAPI request/response bodies were modeled as direct schema slots ( Fix: added the carrier layer — — sent from still-hawk-102 |
Summary
The planning record for the D2 reversal + fact-bundle reseed the operator declared on 2026-05-17. Adds one PROPOSED section to
src/v4/DECISIONS.md— doc-only, 102 insertions.D2 (the alias-identity inhabitance form —
type RustI32 = Int32) is reversed: a bare alias asserts an unproven identity and reads zero facts from the modeled language's spec — it is not modeling. The replacement is fact-bundle modeling: model the facts; deduplicate only on proven identity; invent-or-reuse, never bare-alias.What this PR is
This is the plan, not its execution. Ratify by merging; redirect by review comment. The section records:
MODELING.mdM1 already mandates fact-modeling;INVARIANTS.mdP1:42 was misread as prescribing the alias, and a hollow alias is invisible to every structural review gate.std/.#3219closed,#3208held), Phase 1 (the doc keystone — incl. a newmodeling-discipline.mdPractice that the api-review rubric checks against), Phase 2 (rework the entire T-## program +std/substrate axes), Phase 3 (per-language/per-layer rework, Rust exemplar first).git revertof the merged commits.What this PR does NOT do
No substrate, no doc-principle surgery. The actual edits to
INVARIANTS.md/MODELING.md/modeling-discipline.md/TASKS.mdare Phase 1, the immediate follow-up PR once this plan ratifies.Test plan
src/v4/DECISIONS.md). No.dag, no code.🤖 Generated with Claude Code