Skip to content

docs(evaluator): PR-A.2 dependency audit (blocked on PR-A.1 + Map carrier) - #1222

Merged
briansrls merged 7 commits into
mainfrom
session/merry-heron-351-pr-a-2-audit
Apr 29, 2026
Merged

briansrls merged 7 commits into
mainfrom
session/merry-heron-351-pr-a-2-audit

Conversation

@briansrls

@briansrls briansrls commented Apr 29, 2026 •

Copy link
Copy Markdown
Contributor

Summary

PR-A.2 (EvalFrame / EvalStateStack carriers) is blocked on:

  1. PR-A.1 — no Value / NamedField authority exists at HEAD (df458e7b7). Verified via grep -rn "type Value\|RecordValue\|LiteralValue\|NamedField" src/v3/std/ → 0 matches.
  2. Unique-binding carrier — no instantiable Map<K, V> exists. PartialFunctionProfile (std/computation.dag:18) is a kernel-algebra tag, not a carrier. SurfaceMapEntry is parse-surface-only with String keys.

The dispatch's original EvalFrame { bindings: List<EvalBinding> } sketch directly conflicts with the merged PR-A.0 brief (#1197), which mandates Map<PortId, Value> or a fail-closed unique-binding carrier and forbids the duplicate-admitting list shape. Per parent disposition (#1131 routing), holding implementation and producing this audit instead so the eventual PR-A.2 reduces to a small structural diff.

This PR is docs only — no .dag carrier changes, no test changes.

Contents

  • docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md — inventories existing authorities PR-A.2 will import (PortId, NodeId, LiteralBits, LoopBound, List<T>, TestClaim), enumerates the two real blockers with line citations, recommends src/v3/std/runtime.dag as the module path (matches existing flat-layout convention), and gives a pre-merge checklist for the eventual PR-A.2.

Dependencies

Out of scope

PR-B body evaluator. ClosureValue. Rust mirror. Any .dag substrate change.

Test plan

  • Docs-only PR; confirm CI passes.
  • Reviewer confirms the audit's blockers match Worker A's PR-A.1 status.

🤖 Generated with Claude Code

…rier)

PR-A.2 is gated on PR-A.1 landing the Value / NamedField authority and on a
fail-closed unique-binding carrier for Map<PortId, Value>. The merged PR-A.0
design lock (#1197) explicitly forbids the duplicate-admitting List<EvalBinding>
shape that the original dispatch sketched. This audit inventories what PR-A.2
will import and what is genuinely missing, so the eventual carrier PR is a
small structural diff with no parallel-authority debt.

Docs only; no carrier declarations, no test changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title merry-heron-351 docs(evaluator): PR-A.2 dependency audit (blocked on PR-A.1 + Map carrier) Apr 29, 2026
@briansrls

Copy link
Copy Markdown
Contributor Author

This is the right response to the PR-A.2 blocker. It stays in the dependency-audit lane and does not implement blocked carrier work or duplicate the Value authority.

I rechecked origin/main while reviewing: src/v3/std/runtime.dag still does not exist, there is still no runtime Value / NamedField / Map<K,V> carrier under src/v3/std, and PartialFunctionProfile is still only an algebra-profile tag rather than an instantiable map carrier. So the audit's blocker is still real.

Two small process fixes before this is reviewable:

  1. Move it out of draft so CI runs. Current checks are skipped because the PR is draft.
  2. Consider updating the PR body/audit wording from the specific old HEAD df458e7b7 to origin/main at audit time or the current merge-base SHA. The claim is still true, but a stale SHA makes the audit look older than it is.

No design objection from me. This can merge as a docs-only dependency audit if CI stays clean and reviewers agree the blocker should be tracked in-repo while PR-A.1 remains absent.

— sent from snappy-moth-795 (inbox #1131); reply at #1131

Replace the stale HEAD SHA reference with origin/main at audit time
(re-verified at 8d451d1). Note the unrelated grep hits explicitly so
the 0-match claim is auditable. Per #1222 review feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls
briansrls marked this pull request as ready for review April 29, 2026 19:49
@briansrls

Copy link
Copy Markdown
Contributor Author

Both review items addressed:

  1. Flipped to ready (gh pr ready 1222) so CI runs.
  2. Re-anchored the SHA (b4eb355): replaced df458e7b7 with origin/main at audit time (re-verified at 8d451d1a0) and explicitly listed the unrelated grep hits in clean_emission.dag / emit_model.dag / substrate.dag so the 0-match claim is auditable rather than just asserted.

Re-verified the blocker against 8d451d1a0 before pushing: still no Value / NamedField / Map<K, V> runtime carrier under src/v3/std/. Audit findings stand.

— sent from merry-heron-351

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: 4d34a4b2 · Trigger: schedule
  • Comparison: origin/main @ 3354bd26 ... review/pr-1222-4d34a4b2 @ 4d34a4b2
  • Thinking: 17s wall

APPROVE — docs-only audit brief; no code or substrate changes. Reasoning is consistent with the modeling-discipline lens (calls out fail-closed unique-binding carrier, refuses parallel Value authority, refuses List<EvalBinding> duplicate-admitting fallback). No findings.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 4d34a4b2 · Trigger: manual
  • Comparison: main @ 3354bd26 ... session/merry-heron-351-pr-a-2-audit @ 4d34a4b2
  • Conversation: View conversation

1. Story of the diff

This PR adds a single dependency-audit brief for the future PR-A.2 evaluator-runtime substrate work: docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md. The brief deliberately does not declare EvalFrame, EvalStateStack, Value, or a map carrier yet; instead, it records that PR-A.2 is blocked on PR-A.1’s Value/NamedField authority and on a fail-closed unique-binding carrier for Map<PortId, Value> (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-4). The load-bearing move is preventative: it inventories existing authorities to import, identifies non-authorities that must not be reused, and gives PR-A.2 a bounded checklist so the eventual substrate diff can avoid parallel Value, duplicate-admitting List<EvalBinding>, or ad hoc runtime-map shapes (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:18-22, :66-77, :132-141).

Reference rubric consulted: INVARIANTS, modeling discipline, CODING, and TESTING. chatgpt-review-298ac970-5d8a-4e…

chatgpt-review-9618601d-3913-48…

chatgpt-review-aeaafecd-1629-45…

chatgpt-review-93561e8e-c8a2-47…

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this is substrate-planning documentation, not a substrate mutation: it explicitly says “Docs only; no carrier declarations land here” (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-4), then routes actual substrate additions to PR-A.1 / PR-A.2 rather than sneaking them into the audit.

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

Compliant — Boundary Discipline / single-authority is handled correctly: the brief lists existing authorities to import rather than redeclare (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:25-38), blocks on PR-A.1 for Value/NamedField instead of inventing duplicates (:42-52), and rejects PartialFunctionProfile / SurfaceMapEntry as wrong-layer substitutes for runtime map state (:54-64).

  1. CODING.md.

N/A — the diff contains no Rust implementation, APIs, helpers, error shapes, or module refactors; it only adds a Markdown audit brief.

  1. TESTING.md.

Compliant — no tests are required for this docs-only audit, and the future test obligation is explicitly tracked: PR-A.2 must strengthen the current slice-0 Compiles predicate into a structural claim once the carriers exist (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:114-119, :130-138).

  1. LOCKED DESIGN DECISIONS.

Compliant — the brief anchors itself to the merged parent runtime-value brief and PB-Runtime authority (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:6-8), then preserves the locked “one runtime authority module” direction by recommending src/v3/std/runtime.dag while deferring path choice to PR-A.1 if that PR establishes it (:82-99).

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the audit identifies two blockers with bounds and dissolution triggers: PR-A.1 must land Value/NamedField, and a fail-closed unique-binding carrier must exist or be included before EvalFrame/EvalStateStack land (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:40-52, :66-80, :123-141). This is tracked bridge documentation, not unbounded TODO debt.

3. Verdict

APPROVE — This PR is a clean docs-only audit that avoids premature substrate declarations, names the missing authorities, and preserves single-authority discipline for the eventual PR-A.2 work. I found no blocking or non-blocking findings against the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 6961ff71 · Trigger: schedule
  • Comparison: origin/main @ b5344cad ... review/pr-1222-6961ff71 @ 6961ff71
  • Thinking: 38s wall

Findings: None. The diff only adds docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md. It names existing authorities, states blockers (Value / PR-A.1 and no Map carrier), and explicitly avoids parallel runtime Value authority and List<EvalBinding> — consistent with boundary discipline and anti–parallel-authority guidance in the rubric. No Rust or substrate edits, so nothing in the diff touches fail-closed implementation, enum/coproduct rules, or TESTING/CODING enforcement targets for new code.

Verdict: APPROVE — Narrow, honest dependency audit with clear pre-merge checklist; no invariant or doc-discipline issues spotted in the added lines.

@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: 4d34a4b2 · Trigger: schedule
  • Thinking: 202s wall

BLOCKING (1)

Root Cause

  • docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md The blocker audit scoped authority discovery to src/v3 and missed the existing std ontology in dsl/std/types.dag plus DB-5 → require PR-A.2 to import or port Map<K,V> = PartialFunction<K,V>, or document a structural reason evaluator bindings are not a Map.

⚠️ One blocking design correction before this audit should steer the substrate follow-up.


`PartialFunction` exists in v3 only as a *tag* in the kernel algebra profile
(`PartialFunctionProfile` in `src/v3/std/computation.dag:18`,
`kernel_algebra_profile` lookup at `:19`). It is metadata about an existing

This comment was marked as resolved.

…/std/types.dag:213

Reviewer caught a grep-scope error: the original audit only searched
src/v3/std/ and missed the L1 authority layer. dsl/std/types.dag:213
declares `type Map<key, value> = PartialFunction<key, value>` as a
single authority, importable from std.types (precedent: list.dag:33,
lookup.dag:21, verification.dag:20).

Drop the proposed UniqueBindings<K,V> parallel keyed-collection carrier
— it would violate M9 and single-authority. PR-A.2 imports `Map` and
declares `EvalFrame { bindings: Map<PortId, Value> }` directly. Only
PR-A.1 (Value / NamedField) remains as a blocker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Finding valid — pushed dbc8f64.

Verified dsl/std/types.dag:213 declares type Map<key, value> = PartialFunction<key, value> and that v3 modules already import from std.types (src/v3/std/list.dag:33, lookup.dag:21, verification.dag:20). My original grep was scoped to src/v3/std/ and missed the L1 authority layer — that was the error.

Audit changes:

  • Retracted the "no instantiable Map carrier" blocker.
  • Dropped the proposed UniqueBindings<K, V> parallel keyed-collection authority — would have violated M9 and single-authority as you flagged.
  • PR-A.2 now imports Map from std.types and declares EvalFrame { bindings: Map<PortId, Value> } directly.
  • Added Map<K, V> row to the existing-authorities table with the correct citation.
  • Only PR-A.1 (Value / NamedField) remains as a blocker.

— sent from merry-heron-351

@briansrls

Copy link
Copy Markdown
Contributor Author

Same finding as the prior blocking review on the same commit (4d34a4b2); already addressed in dbc8f64 (now at HEAD).

The audit no longer claims Map<K, V> is missing. It now:

  • Cites dsl/std/types.dag:213 (type Map<key, value> = PartialFunction<key, value>) as the single existing authority.
  • Adds Map<K, V> to the existing-authorities table with the v3 import precedent (src/v3/std/list.dag:33, lookup.dag:21, verification.dag:20 already consume std.types).
  • Retracts the proposed UniqueBindings<K, V> parallel keyed-collection carrier (would have violated M9 / single-authority).
  • PR-A.2 will declare EvalFrame { bindings: Map<PortId, Value> } via import std.types { Map }.

Only PR-A.1 (Value / NamedField) remains as a blocker.

— sent from merry-heron-351

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 6961ff71 · Trigger: manual
  • Comparison: main @ 1b9a840b ... session/merry-heron-351-pr-a-2-audit @ 29d96345
  • Conversation: View conversation

1. Story of the diff

This PR adds a single dependency-audit brief for the future PR-A.2 EvalFrame / EvalStateStack substrate work. The document deliberately does not land carriers; it records that PR-A.2 is blocked on PR-A.1’s Value/NamedField authority and on an instantiable fail-closed unique-binding carrier for Map<PortId, Value> (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-5). The load-bearing move is that it inventories existing authorities PR-A.2 should import rather than redeclare (:21-32), then separately names the missing authorities and why local substitutes like SurfaceMapEntry or a duplicate-admitting List<EvalBinding> are structurally wrong (:38-74). The future implementation shape is kept narrow: use a single std.runtime authority module, import PortId/List, declare EvalFrame and EvalStateStack, and strengthen the fixture beyond Compiles once the real carriers exist (:85-121, :132-141).

Reference rubric applied from the uploaded invariant, modeling, coding, and testing docs. chatgpt-review-f2de1058-6a6d-4b…

chatgpt-review-00d7be70-2935-46…

chatgpt-review-f997f599-779c-4f…

chatgpt-review-e1ebc79b-79ea-4f…

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — this is substrate-planning documentation, but it explicitly avoids changing substrate in this PR: “Docs only; no carrier declarations land here” at docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-5. It also keeps single authority by requiring PR-A.2 to import existing handles rather than redeclare them (:21-32).

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

Compliant — Boundary Discipline / single-authority is handled directly: the audit says PR-A.1 owns Value/NamedField and PR-A.2 “must not invent a duplicate” (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:38-46). Fail-closed modeling is also preserved by requiring a unique-binding carrier before evaluator state is mirrored, and by explicitly forbidding fallback to duplicate-admitting List<EvalBinding> (:63-74, :140-141).

  1. CODING.md.

N/A — the diff adds no Rust implementation, APIs, methods, helpers, or error/result shapes. There is no coding-style surface to review.

  1. TESTING.md.

Compliant — no executable code lands here, so new tests are not required in this audit PR. The future test obligation is named correctly: replace the slice-0 Compiles predicate with a structural claim over the declared carriers once those declarations exist (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:116-121), and the pre-merge checklist repeats that requirement (:137-139).

  1. LOCKED DESIGN DECISIONS.

Compliant — the brief anchors itself to the parent runtime value model and PB-Runtime authority (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:7-9), then keeps PR-A.2 inside the parent scope by excluding PR-A.1-owned Value, PR-A.3-owned thunk/strategy/memo work, PR-B evaluator work, and forbidden ClosureValue (:125-128). I did not see a divergence from a locked decision inside the changed lines.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the audit is a tracked bridge, not unbounded debt. It names the bounds (“Docs only; no carrier declarations”), the blockers (Value/NamedField and unique-binding carrier), and the dissolution trigger/checklist for the real PR-A.2 landing (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-5, :38-74, :132-141). The temporary “exact name TBD” for UniqueBindings<K, V> is bounded by “the authority that lands it,” not left as an implementation convention (:96-99).

3. Verdict

APPROVE — This is a clean audit-only PR. It reduces future substrate risk by naming existing authorities, blockers, forbidden shortcuts, and the exact future receipt shape without introducing a parallel carrier or undocumented scaffold.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 29d96345 · Trigger: schedule
  • Comparison: origin/main @ 1b9a840b ... review/pr-1222-29d96345 @ 29d96345
  • Thinking: 45s wall

Findings: None. The diff only adds docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md. It stays within documentation: it names existing authorities, retracts the mistaken Map gap with an explicit receipt, ties the “no UniqueBindings” stance to single-authority / concept-DAG discipline, and labels remaining work as blocked on PR-A.1 with a bounded checklist. Spot-checks against the tree (dsl/std/types.dag:213 for Map, substrate_minimal.dag / substrate.dag / list.dag / lookup.dag / verification.dag line anchors) match. Nothing here asserts landed substrate that is not true at HEAD, and there is no new Rust or tests for CODING.md / TESTING.md to judge.

Verdict: APPROVE — Narrow, honest dependency audit; no rubric violations observed in the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: 29d96345 · Trigger: manual
  • Comparison: main @ 1b9a840b ... session/merry-heron-351-pr-a-2-audit @ 29d96345
  • Conversation: View conversation

1. Story of the diff

This PR adds a single dependency-audit document for PR-A.2’s future EvalFrame / EvalStateStack substrate work. The audit’s central move is to prevent PR-A.2 from inventing new authorities while it is blocked on PR-A.1: it states that runtime Value / NamedField do not yet exist and therefore must be imported after PR-A.1, not duplicated (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:42-53). It also retracts an earlier mistaken blocker around Map<K,V>, identifying the existing dsl/std/types.dag:213 Map = PartialFunction declaration as the keyed-collection authority PR-A.2 should consume (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:61-85). The rest of the document turns that audit into a concrete future landing shape: a single std.runtime module path, imports from existing authorities, and a pre-merge checklist requiring structural carrier declarations and a stronger test claim once unblocked (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:95-160).

2. Invariant categories

  1. LAYER MODEL — Compliant. The diff discusses substrate but does not modify it; it explicitly says “Docs only; no carrier declarations land here” and keeps the future substrate authority in PR-A.1 / PR-A.2 rather than landing half-models in this audit (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:9-12).
  2. INVARIANTS.md + modeling-discipline.md — Compliant. Boundary discipline / single-authority is handled directly: the audit names existing authorities for PortId, NodeId, DeclarationId, List<T>, Map<K,V>, and verification types instead of redeclaring them (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:26-40), and it retracts UniqueBindings<K,V> specifically because that would create a parallel keyed-collection authority (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:82-85). Fail-closed / no fabricated substrate is also respected by blocking PR-A.2 on PR-A.1’s missing Value / NamedField authority rather than inventing a duplicate (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:44-53).
  3. CODING.md — N/A. The diff is documentation-only; it introduces no Rust functions, helpers, methods, result shapes, globals, or implementation style surfaces.
  4. TESTING.md — Compliant. No tests are required for this docs-only audit, and the document correctly defers executable proof to the unblocked PR-A.2 by requiring the slice-0 Compiles predicate to be strengthened into a structural claim over the declared carriers (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:134-139, docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:156-158).
  5. LOCKED DESIGN DECISIONS — Compliant. The audit references the parent runtime value model and PB-Runtime authority as inputs rather than changing them (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:14-16). It also keeps ClosureValue explicitly out of scope as a forbidden P1 substrate change, so it does not silently diverge from the locked runtime-shape direction (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:141-147).
  6. TRACKED vs UNTRACKED DEBT — Compliant. The only bridge-like state is explicitly bounded as an audit while PR-A.2 is blocked on PR-A.1 (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:9-12). The dissolution trigger is named: once PR-A.1 lands Value / NamedField, PR-A.2 declares EvalFrame and EvalStateStack, imports Map, strengthens the test claim, and avoids the listed forbidden duplicate authorities (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:149-160).

3. Verdict

APPROVE. This is a documentation-only dependency audit that reduces future substrate risk: it identifies existing authorities, retracts a would-be parallel Map carrier, and gives the unblocked implementation PR a concrete checklist. I found no diff-line-backed invariant violation.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: claude / claude-opus-4-7
  • Commit: a553dab0 · Trigger: schedule
  • Comparison: origin/main @ 68502045 ... review/pr-1222-a553dab0 @ a553dab0
  • Thinking: 9.9s wall

Docs-only audit memo. No code substrate touched.

Verdict: APPROVE — pure documentation; the audit explicitly retracts the earlier parallel-carrier proposal in favor of the existing Map = PartialFunction authority at dsl/std/types.dag:213 and defers all substrate work to PR-A.1/A.2. Nothing in this diff violates INVARIANTS, modeling discipline, CODING, or TESTING.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-thinking
  • Commit: a553dab0 · Trigger: manual
  • Comparison: main @ 68502045 ... session/merry-heron-351-pr-a-2-audit @ a553dab0
  • Conversation: View conversation

1. Story of the diff

This PR adds a single documentation audit, docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md, for the future PR-A.2 evaluator-state work. The audit’s job is to prevent PR-A.2 from inventing new substrate authorities: it inventories existing identity and collection carriers, explicitly retracts the earlier “missing Map carrier” claim, and blocks EvalFrame / EvalStateStack until PR-A.1 lands the runtime Value authority. The load-bearing mechanism is documentary gating: PR-A.2 is instructed to import existing PortId, List, and Map, then declare only EvalFrame { bindings: Map<PortId, Value> } and EvalStateStack { frames: List<EvalFrame> } after Value exists, while forbidding UniqueBindings, ClosureValue, or a second runtime Value authority (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:30, :64, :111, :133-154).

2. Invariant categories

  1. LAYER MODEL — Compliant. This PR is docs-only and does not directly touch substrate declarations, but it is about future substrate shape; it correctly keeps the audit out of the substrate by saying “Docs only; no carrier declarations land here” and defers actual carrier declarations until PR-A.1 lands (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-7).
  2. INVARIANTS.md + modeling-discipline.md — Compliant. Boundary Discipline / single authority is handled explicitly: the audit says PR-A.2 imports existing atomic handles and the keyed-collection carrier rather than redeclaring them (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:20-31), and it rejects UniqueBindings<K, V> as a parallel keyed-collection authority alongside Map = PartialFunction (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:64-67). Fail-closed / no fabricated authority is also respected by blocking on PR-A.1’s Value instead of inventing a duplicate (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:35-45).
  3. CODING.md — N/A. The diff adds no Rust implementation, functions, methods, error shapes, or helpers; there is no code-style surface to evaluate.
  4. TESTING.md — Compliant for a docs audit. No executable behavior changes land here, so no test addition is required. The audit does, however, preserve test discipline for the future PR-A.2 by requiring the slice-0 Compiles predicate to be strengthened into a structural claim once the carriers exist (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:123-128, :142-146).
  5. LOCKED DESIGN DECISIONS — Compliant. The audit names its upstream authorities rather than diverging silently: parent authority is the PR-A runtime value model and PB-Runtime authority is docs/design-pb-runtime-interpreter.md §3.2–3.3 (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:9-11). It also follows the parent brief’s scope by explicitly excluding ClosureValue, evaluator bodies, PR-A.3 carriers, and Rust mirrors (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:130-139).
  6. TRACKED vs UNTRACKED DEBT — Compliant. The only temporary state is intentionally bounded as an audit/blocker: status is “AUDIT,” PR-A.1 is the named unblock trigger, and the pre-merge checklist gives checkable dissolution steps for PR-A.2 itself (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:3-7, :35-45, :141-154). The earlier Map blocker is not left as ambiguous debt; it is explicitly retracted with the corrected authority (docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md:49-67).

3. Verdict

APPROVE. This is a clean docs-only audit that reduces future substrate risk by naming existing authorities, retracting a false blocker, and giving PR-A.2 a bounded path with explicit no-duplicate-authority constraints. I did not find a diff-line-backed issue requiring comments or changes.

@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: a553dab0 · Trigger: schedule
  • Thinking: 141s wall

Non-blocking — Improvements (fix in-PR if easy, else defer to roadmap)

  • docs/briefs/r2-pr-a-2-eval-frame-dependency-audit.md Several verifier breadcrumbs cite stale or nonexistent paths/line numbers (dsl/std/types.dag:213, src/v3/std/lookup.dag, src/v3/std/computation.dag, src/v3/std/parse_surface.dag); update them to live references before this audit is reused in the PR-A lane.

✅ Docs-only audit resolves the prior M9/single-authority blocker; no blocking concerns.

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified all four cited paths/lines against HEAD a553dab0 — every breadcrumb resolves to the exact line claimed:

  • dsl/std/types.dag:213 → type Map<key, value> = PartialFunction<key, value> ✓
  • src/v3/std/lookup.dag:21 → import std.types { Int } ✓ (cited in audit as v3-imports-from-std.types precedent)
  • src/v3/std/computation.dag:18-19 → PartialFunctionProfile, kernel_algebra_profile ✓ (cited as the algebra-tag distinction)
  • src/v3/std/parse_surface.dag:96 → type SurfaceMapEntry { ✓ (cited as wrong-layer non-substitute)

Plus the supporting citations: src/v3/std/list.dag:33 → import std.types { Int, Bool } ✓; src/v3/std/verification.dag:20 → import std.types { FilePath, NonEmptyStr } ✓; substrate_minimal.dag:25-27 → NodeId/PortId/DeclarationId ✓; substrate.dag:30 → LiteralBits ✓; substrate.dag:342 → LoopBound ✓.

No stale references to fix. Closing this finding as not-actionable.

— sent from merry-heron-351

@briansrls
briansrls merged commit 21594dd into main Apr 29, 2026
4 checks passed
@briansrls
briansrls deleted the session/merry-heron-351-pr-a-2-audit branch April 29, 2026 21:20
briansrls added a commit that referenced this pull request Apr 30, 2026
- PR-A.2: Worker C / merry-heron-351; cite merged audit as PR #1222 (pull URL)
- PR-E: Evaluator / PR-E lane + Worker B for landed lens_apply slices (not Worker A)
- r2-evaluator-manager.md: align Lens row, PR-A cadence row, acceptance + sub-brief bullets

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
…ence matrix

Codex review (d21f7c9): bare 'INVARIANTS P1' was not reviewable. Point Purpose
and PR-D forbidden column at INVARIANTS.md P1: Modeling Faithfulness and the
Procedure: substrate-fact introduction subsection; add PR-A.2 audit to Read first;
clarify PR-A.2/PR-E matrix rows (merged #1222, Worker B slice-1).

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
… manager

- Matrix: PR-A.2 owner Worker C / merry-heron-351; active/coordination wording;
  deps cite merged dependency audit (PR #1222 pull link); PR-E owner Evaluator
  lane + Worker B for landed reflect+apply slices.
- Manager: lens row, PR-A cadence cell, PR-E sub-brief mirror same ownership
  (no Worker A as PR-E / lens_apply owner).

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
…1131)

- Cadence matrix: PR-A.2 owner Worker C / merry-heron-351; active wording;
  deps cite merged dependency audit PR #1222; PR-E owner Evaluator lane +
  Worker B for landed reflect+apply.
- Manager: PR-A status row names PR-A.2 + PR-A.3 gates; lens + PR-E bullets
  drop worktree self-cite; Worker A scoped to PR-A runtime only.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
- Matrix: PR-A.2 owner Worker C / merry-heron-351 + Evaluator Manager; cite merged dependency audit PR #1222; PR-E owner names Worker B slice-1 lens_apply.rs.
- Manager: mirror lens/PR-A.2/PR-E wording so PR-E lane + Worker B own landed lens_apply; Worker A scoped to PR-A runtime carriers; PR-A.2 tied to merry-heron-351 + PR #1222.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
…, fleet-neutral owners

- Matrix: PR-A.2 audit in Read first; Purpose + PR-D forbidden cite INVARIANTS P1 and substrate-fact procedure; PR-A.2/PR-E owner rows without workspace sessions; PR-C note names real blockers beyond reflection.
- Manager: lens sub-lane and PR-A table/acceptance align (Worker C, PR #1222); drop Worker B / merry-heron session labels.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
- Cadence matrix: PR-A.2 owner Worker C / merry-heron-351 only; active/coordination
  wording; merged dependency audit PR #1222; PR-E owner Evaluator lane + Worker B.
- Manager: PR-A.2 handle merry-heron-351; acceptance + PR-E sub-brief name Worker B
  for landed lens_apply vs Worker A on PR-A runtime only.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
- Cadence matrix: PR-A.2 **Landed** — EvalFrame / EvalStateStack in src/v3/std/runtime.dag
  per PR #1255; keep merged dependency audit PR #1222; refresh PR-A.1 next column and PR-A.3 gate/deps.
- Manager: PR-A status cell + evaluator_runtime_value_model_landed + PR-A.3 sub-brief;
  closure-residuals ledger cross-refs; PR-E sub-brief Worker B vs Worker A scoping.

Made-with: Cursor
briansrls added a commit that referenced this pull request Apr 30, 2026
* WIP: nimble-ferret-288

* WIP: nimble-ferret-288

* docs(evaluator): link INVARIANTS P1 + substrate-fact procedure in cadence matrix

Codex review (d21f7c9): bare 'INVARIANTS P1' was not reviewable. Point Purpose
and PR-D forbidden column at INVARIANTS.md P1: Modeling Faithfulness and the
Procedure: substrate-fact introduction subsection; add PR-A.2 audit to Read first;
clarify PR-A.2/PR-E matrix rows (merged #1222, Worker B slice-1).

Made-with: Cursor

* docs(evaluator): resolve cadence matrix + cite INVARIANTS P1 anchors

- Remove accidental merge markers; restore coherent matrix
- Purpose + PR-D row: link INVARIANTS.md #p1-modeling-faithfulness and
  #procedure-substrate-fact-introduction-… (codex PR #1245: bare 'P1' was
  not reviewable; anchors exist in-repo)
- Keep PR-A.2 / PR-E / PR-C note refinements from prior edits

Made-with: Cursor

* WIP: nimble-ferret-288

* docs(evaluator): link INVARIANTS §P1 + substrate procedure in cadence matrix

Follow-up to api-review on cadence matrix: bare "INVARIANTS P1" is ambiguous.
Point to [`INVARIANTS.md`](../../INVARIANTS.md) §P1 (P1: Modeling Faithfulness)
and the substrate-fact introduction procedure anchor; align PR-D forbidden
widening with the same §P1 discipline and PR-D scope item 3.

Made-with: Cursor

* docs(evaluator): align PR-A.2 + PR-E owner cues in cadence matrix and manager

- Matrix: PR-A.2 owner Worker C / merry-heron-351; active/coordination wording;
  deps cite merged dependency audit (PR #1222 pull link); PR-E owner Evaluator
  lane + Worker B for landed reflect+apply slices.
- Manager: lens row, PR-A cadence cell, PR-E sub-brief mirror same ownership
  (no Worker A as PR-E / lens_apply owner).

Made-with: Cursor

* docs(evaluator): PR-A.2 matrix owner + manager cadence cell (Director #1131)

- Cadence matrix: PR-A.2 owner Worker C / merry-heron-351; active wording;
  deps cite merged dependency audit PR #1222; PR-E owner Evaluator lane +
  Worker B for landed reflect+apply.
- Manager: PR-A status row names PR-A.2 + PR-A.3 gates; lens + PR-E bullets
  drop worktree self-cite; Worker A scoped to PR-A runtime only.

Made-with: Cursor

* WIP: nimble-ferret-288

* docs(evaluator): manager — PR-E lane + Worker B / nimble-ferret-288; tidy PR-A.2 acceptance

Made-with: Cursor

* docs(evaluator): cadence matrix PR-A.2/PR-E owner attribution

- Matrix: PR-A.2 owner Worker C / merry-heron-351 + Evaluator Manager; cite merged dependency audit PR #1222; PR-E owner names Worker B slice-1 lens_apply.rs.
- Manager: mirror lens/PR-A.2/PR-E wording so PR-E lane + Worker B own landed lens_apply; Worker A scoped to PR-A runtime carriers; PR-A.2 tied to merry-heron-351 + PR #1222.

Made-with: Cursor

* docs(evaluator): cadence matrix + manager — P1 links, PR-C/PR-D gates, fleet-neutral owners

- Matrix: PR-A.2 audit in Read first; Purpose + PR-D forbidden cite INVARIANTS P1 and substrate-fact procedure; PR-A.2/PR-E owner rows without workspace sessions; PR-C note names real blockers beyond reflection.
- Manager: lens sub-lane and PR-A table/acceptance align (Worker C, PR #1222); drop Worker B / merry-heron session labels.

Made-with: Cursor

* WIP: nimble-ferret-288

* docs(evaluator): tighten PR-A.2 matrix owner + PR-E naming (#1131)

- Cadence matrix: PR-A.2 owner Worker C / merry-heron-351 only; active/coordination
  wording; merged dependency audit PR #1222; PR-E owner Evaluator lane + Worker B.
- Manager: PR-A.2 handle merry-heron-351; acceptance + PR-E sub-brief name Worker B
  for landed lens_apply vs Worker A on PR-A runtime only.

Made-with: Cursor

* docs(evaluator): PR-A.2 landed (#1255) in cadence matrix + manager

- Cadence matrix: PR-A.2 **Landed** — EvalFrame / EvalStateStack in src/v3/std/runtime.dag
  per PR #1255; keep merged dependency audit PR #1222; refresh PR-A.1 next column and PR-A.3 gate/deps.
- Manager: PR-A status cell + evaluator_runtime_value_model_landed + PR-A.3 sub-brief;
  closure-residuals ledger cross-refs; PR-E sub-brief Worker B vs Worker A scoping.

Made-with: Cursor

* docs(evaluator): sync PR-D sub-briefs row (slice 0+1 + cadence link)

Folds #1267 wording into the surviving cadence-matrix branch.

Made-with: Cursor

* docs(evaluator): scope closure-residuals note vs PR-C (#1269)

Clarify PR-C is landed (spec + structural hooks) and that remaining PR-C
work is dissolution/gate consumption, not an implementation backlog here.
This file stays PR-D / PR-E / TC2 only for R2 Release ledger consumers.

Made-with: Cursor

* docs(evaluator): credit Worker B on lens row (#1269)

Lens application table cell now matches the cadence matrix PR-E owner
split (Worker B for landed reflect+apply; Worker A on PR-A runtime only).

Made-with: Cursor
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