Skip to content

PREFIX lens Acceptance batch (a): driver/registry + whole-corpus gate (Lane A) - #3321

Merged
briansrls merged 25 commits into
mainfrom
session/crisp-carp-224
May 19, 2026
Merged

briansrls merged 25 commits into
mainfrom
session/crisp-carp-224

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session crisp-carp-224.
Pushing to session/crisp-carp-224 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

briansrls added a commit that referenced this pull request May 18, 2026
…ng-PR landings

Codex review @ 2026-05-18T19:03:54Z flagged two issues:

1. Sibling-authority references (r4-lane-a-lens-prefix-acceptance.md +
   r4-lane-a-lens-prefix-t23-t12-ci.md) absent from origin/main and from this
   PR's tree — confirmed (`git ls-tree origin/main --` + `git ls-files --`
   return empty). Those briefs are introduced by PR #3315 (fierce-cat-31
   manager); the T-23 keystone by #3316; batch (a) driver by #3321; umbrella
   index by #3319. Header now pins the coordinated PRs explicitly and notes
   that this artifact's authority resolves on their squash-merge — not a
   dead-path reference. Authority pins that are already on main (lens-framework
   §2, lens-application-surface §4/§5.1, lens/{cost,complexity}.dag, TASKS T-12)
   listed separately as in-tree-now.

2. "Operator-signed gate" framing contradicted by `_TODO_OPERATOR_` witness
   slots + `<TBD>` runnable cell. The slots themselves are operator-mandated
   per `PREFIX-LENS-CI-1` §Witness parallelism + §Interface-Freeze, but the
   reviewer is correct that header text claiming live signed-gate status while
   the slots are unfilled trips INVARIANTS.md "documentation describes live
   state". Header now explicitly states DRAFT pending operator signature;
   document BECOMES the gate on operator-amendment commit (witness fill +
   runnable pin); merging this draft PR alone does NOT lift DISPATCH_HOLD.

No witness or AC-row content changed — only framing/header and the
DISPATCH_HOLD-lift-conditions section heading.

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

Copy link
Copy Markdown
Contributor Author

Review follow-up (Runnable-AC / freeze pin) — addressed in 6e4c6136e.

  • §3 title + Runnable-AC paragraph now match reality: gunbc-prefix-lens-driver v0 is a live compile-only / registry + whole-corpus receipt (CI + tools/gunbc_prefix_lens_driver).
  • TBD is narrowed to rows that mean lens evaluation (--mode enforce|introspect, Witness / Dimension* on applied v4 Lens<Output>), not the v0 compile gate.
  • Frozen argv template includes --whole-corpus alongside --path.

Exploratory notes: WIP: on branch heads is cosmetic for this repo’s squash-merge policy. lens_id vs compile_to_dag remains intentional for batch (a); dispatch tests belong with the evaluation-path follow-on.

@briansrls

Copy link
Copy Markdown
Contributor Author

Dashboard / relay note: the quoted thread is the author’s own follow-up comment on the prior review; it is not a new finding. The substantive change is already on HEAD as 6e4c6136e (docs/briefs/r4-lane-a-lens-interface-freeze-pin.md §3 — compare title + Runnable-AC + --whole-corpus line in the frozen argv block).

No additional commit is warranted for that item.

Merge readiness (snapshot): GitHub mergeable = MERGEABLE; no REQUEST_CHANGES in dashboard summary; CI still had v4 pending when checked (wait for full green on current SHA). dashboard-ops reviews still shows 0/2 distinct dashboard APPROVE artifacts and an openai-pro review in flight on 6e4c6136e — so the ≥2 api-review APPROVE gate is not satisfied yet. Per standing policy: do not gh pr merge from this session; operator merges manually once those gates are green.

— sent from crisp-carp-224

@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: 6e4c6136 · Trigger: schedule
  • Thinking: 328s wall

BLOCKING (1)

Root Cause

  • src/v4/lens/registry.dag The closed LENS_ID set is authored separately in the freeze pin, .dag registry, and Rust VALID_LENS_IDS → make one source authoritative or add a same-PR structural consistency gate so every v0 registry consumer accepts the same rows.

⚠️ The registry/driver receipt needs reconciliation before this is a trustworthy acceptance gate.

use v3_compiler::compile_to_dag;

/// Known `LENS_ID` values — mirror `docs/briefs/r4-lane-a-lens-interface-freeze-pin.md` §3.
const VALID_LENS_IDS: &[&str] = &[

This comment was marked as resolved.

briansrls added a commit that referenced this pull request May 18, 2026
Reorder to Scope/Owns/Consumes/Status, then a single Anchor URL; drop
in-file Driver/build.rs rationale (D5 + modeling-discipline §9 — receipt
in commit message). Addresses cursor/composer-2 APPROVE_WITH_COMMENTS
on PR #3321.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

cursor/composer-2 (APPROVE) — verified

  • Findings: None in the diff you reviewed; no further code change required for that verdict.
  • Exploratory (build.rs line-scan vs structural parse): Accepted as intentional v0; the registry rows keep lens_id: "…" on a single line (Practice-9 header + data style). If we ever split fields across lines, we would switch to a structural extractor or share the v4 compiler’s parse — not worth doing preemptively.

CI / whole-corpus (separate from your approve): compile_to_dag is not a valid isolated receipt for src/v3/spec/**, src/v3/compiler/tests/**, operators.dag, pipeline.dag, or regen.dag (Semantic failures rooted in dsl/std/*). The driver’s classify_path on this branch now limits the v3 bucket to src/v3/lenses/** + tokenize.dag / parse_tables.dag; rustdoc in 92772ee64 matches that. Full gunbc-prefix-lens-driver v0 … --whole-corpus passes locally including the aggregated v4 v2-compiler gate.

Merge readiness (snapshot): gh pr checks had not attached a new run yet right after push; mergeable was still UNKNOWN. Still need ≥2 distinct api-review APPROVE artifacts (per dashboard), no open REQUEST_CHANGES, mergeable=CLEAN, and CI green before operator merge.

— sent from crisp-carp-224

@briansrls
briansrls force-pushed the session/crisp-carp-224 branch from 92772ee to 7b59924 Compare May 18, 2026 20:24
briansrls added a commit that referenced this pull request May 18, 2026
Operator ruled 2026-05-18: substrate-native (B2). registry.dag splits
to its own .dag PR (lands now); the ~467-LOC tools/ Rust crate dropped
entirely, B1 also rejected — no interim out-of-substrate enforcement
shell (Python OR Rust), same thesis ruling as the de-prose-py kill.
Whole-corpus gate re-scoped to the v2 filesystem-walk substrate
primitive = the T-21/T-24 corpus-drive capability (PREFIX = first
consumer). Operator-accepted: CI lens gate lands when that lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request May 18, 2026
Freeze pin Runnable-AC + CI step names + workspace comment now match
`classify_path`: frozen argv, not “every tracked .dag under compile_to_dag”.
Addresses codex REQUEST_CHANGES on #3321 without expanding the held driver.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 18, 2026
`Cargo.toml` member note: `--whole-corpus` argv drives a bucketed compile
receipt (freeze pin + CI step names in acec9d9; codex #3321).

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls force-pushed the session/crisp-carp-224 branch from f06d133 to 0f76db6 Compare May 18, 2026 20:31
briansrls added a commit that referenced this pull request May 18, 2026
`Cargo.toml` member note: `--whole-corpus` argv drives a bucketed compile
receipt (freeze pin + CI step names in acec9d9; codex #3321).

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls force-pushed the session/crisp-carp-224 branch from 0f76db6 to b81a63f Compare May 18, 2026 20:31
@briansrls

Copy link
Copy Markdown
Contributor Author

codex REQUEST_CHANGES — addressed (narrow receipt, not expanded gate)

Verified: classify_path intentionally skips src/v3/spec/**, compiler fixtures, operators.dag / pipeline.dag / regen.dag, etc., because isolated compile_to_dag is not the substrate receipt for those trees (Semantic failures on dsl/std/*). Expanding the gate to “compile everything” would restate v3-compiler/bootstrap authority and conflicts with the operator HOLD on growing the interim driver crate while B1/B2 is decided.

Fix: Align authority text with behavior (per your second option):

  • docs/briefs/r4-lane-a-lens-interface-freeze-pin.md §3 Runnable-AC now states the frozen --whole-corpus argv enumerates paths for bucketed dispatch, lists what compile_to_dag / v2 aggregate cover, and lists explicit skips + where their receipts live (already on branch acec9d9eb).
  • .github/workflows/ci.yml step names no longer present a “whole corpus” acceptance claim; they read PREFIX v0 compile bucket … (INTERIM) (acec9d9eb).
  • Cargo.toml workspace member comment updated to bucket gate wording (b81a63f39).

Merge readiness (snapshot): re-check gh pr checks / review artifacts after the latest push; operator merge policy unchanged (no gh pr merge from here).

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

openai-pro REQUEST_CHANGES (artifact truncated in relay) — addressed on 470e57c9b

Operator ruling (Lane A CP mgr relay) supersedes the interim PREFIX driver path: tools/gunbc_prefix_lens_driver/ is removed (no standalone crate, no interim Rust whole-corpus gate until B2 — shared v2 corpus-enumeration / filesystem-walk primitive + .dag consumer per #3322 §5 coordination).

Concrete deltas (tip 470e57c9b / parent 0acb3a269):

  • Deleted the tool crate; dropped workspace member + v4/v3 CI steps that built/ran gunbc-prefix-lens-driver; scripts/detect-affected-components.sh no longer keys v4 off that path.
  • docs/briefs/r4-lane-a-lens-interface-freeze-pin.md §3 now matches substrate reality: frozen argv string remains normative for Acceptance tables; machine authority = src/v4/lens/registry.dag only; Runnable-AC today = registry + existing v2→v4 bootstrap job — no live CLI receipt until B2.
  • dsl/gunbc/ci_github_actions_workflow.dag regenerated from .github/workflows/ci.yml (gen_gunbc_ci_workflow_dag); drift ratchet t_ci_workflow_as_data_demo_test::gunbc_ci_github_actions_workflow_dag_matches_yaml_generator_output passes locally.
  • src/v4/lens/registry.dag header Scope: line no longer implies a live driver binary.

If the openai-pro review cited additional lines beyond the removed interim gate, paste the full artifact body and I’ll map each item — the relay here cut off before findings.

Merge readiness: re-run gh pr checks / review UI after CI settles; operator is still merging manually (no gh pr merge from here).

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

claude-opus-4-7 (APPROVE_WITH_COMMENTS) — verification on tip cf0e0046a

  1. Cargo.lock / missing driver: Stale vs current tree. Cargo.lock has no gunbc_prefix_lens_driver stanza; workspace Cargo.toml has no member; tools/gunbc_prefix_lens_driver/ is gone (driver dropped per operator B2 line on PREFIX lens Acceptance batch (a): driver/registry + whole-corpus gate (Lane A) #3321).

  2. Freeze pin §3 vs reality: Stale. §3 now states no in-tree executable / interim Rust gate, B2-deferred consumer, machine authority = registry.dag only, Runnable-AC = registry + v2→v4 bootstrap — no build.rs / target/release/gunbc-prefix-lens-driver claims.

  3. module_path: "TBD" (Practice 2): Valid on the reviewed snapshot; fixed by replacing both placeholders with __PREFIX_V0_UNBOUND__ (not a v4.lens.* literal) plus a Machine authority sentence in the pin explaining the reserved sentinel until a real module path is operator-ratified.

— sent from crisp-carp-224

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

BLOCKING (1)

Root Cause

  • scripts/detect-affected-components.sh The affected-component contract exposes only v2/v3/v4 buckets, so workflow-policy ratchets are incorrectly treated as v3-only → add a workflow/policy bucket or run Gate #103 policy checks unconditionally where workflow files can change.

⚠️ The registry comment is fixed, but the new workflow gating can skip the policy check on the exact files it is meant to police.

@briansrls

Copy link
Copy Markdown
Contributor Author

Violations (could not place on specific lines):

@briansrls

Copy link
Copy Markdown
Contributor Author

BLOCKING (codex + inline) — Gate #103 vs needs.affected.outputs.v3 — fixed in 124b1ca74

Verified: Gating the Gate #103 steps only on v3 let PRs that change only .github/workflows/ci.yml skip check-workflow-path-regex-inventory.sh and the integration policy tests — wrong surface for what those steps police.

Fix:

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

cursor/composer-2 (APPROVE) — verified

  • Findings: None in-tree; agree with your rubric read: no src/v3/ hand-Rust (P5 N/A), registry.dag is product-shaped (no Practice-4 coproduct tag), header matches Practice 9, __PREFIX_V0_UNBOUND__ is pin-documented reserved module_path (not an undocumented fabrication).
  • Gate Add external dependency type definitions for cloud, git, GitHub, LLM, and Rust #103 / workflow_policy: already landed on this branch before this approve; no further code change required for this verdict.

Merge readiness (snapshot): ci, fmt, affected, v4 pass; v3 still pending on the sampled run. mergeable=MERGEABLE but mergeStateStatus=BLOCKED (likely required reviews / policy). GitHub API review list on the PR still shows only prior COMMENTED artifacts from this author — ≥2 distinct api-review APPROVE (per dashboard bar) not confirmed from gh alone. Operator merge policy unchanged (no gh pr merge from here).

— sent from crisp-carp-224

briansrls added a commit that referenced this pull request May 18, 2026
…(discussion) (#3322)

* docs: R4 program dispatch plan — T-1..T-32 dependency chart + lane mapping

Discussion artifact: full remaining-work dependency graph, the keystone
cluster funnelling through T-4, the Wave-0 dispatch-now set, and the
proposed lane/manager mapping to v4-done. For operator + lane-manager
review ahead of program-wide fan-out.

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

* docs: fold Lane A/B/Dissolution review corrections into R4 dispatch plan

Consolidated single-commit update from the 3/4 lane-manager reviews on
#3322: T-20 materially advanced via merged #3213; T-30 interim P5(b)
mirror already on main; T-9/CP-1b is a parallel T-9 prereq off the T-4
keystone edge; T-26 std-canonical with Lane A conduit; T-31 rider vs
mop-up split; lens-program rows confirmed. T-4-mgr rows pending explicit
ack (consistent with standing #3280 hold).

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

* WIP: May 18

* docs: fold T-4-mgr review — staleness fixes + widened keystone scope

4/4 lanes now ratified. T-4-mgr (vivid-carp-207) verified vs main:
T-29(#3267)/T-4.10(#3168)/T-4.12(#3171) already LANDED, not Wave-0 —
parallel count ≈14→≈11. New decision-relevant finding: pre-D2-reversal
landed files (spice/llvm_ir) carry a Practice-10/#3240-keystone-gated
rework obligation (same class as T-4 ×5 / #3280) — widens the keystone
blast radius. T-4 'Depends on' disambiguated (#3240 ratification, not
merged numeric #3226). T-29 residual #3277 attribution flagged open.

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

* docs: fix §5/§6 internal consistency vs folded corrections (Lane A finding)

Lane A review caught §5/§6 not updated in the prior folds: §5 still
listed T-29/T-4.10/T-4.12 as T-4-mgr Wave-0 (now LANDED), ambiguous
'std / Lane A' T-26 ownership, stale Dissolution Wave-0; §6 read as
open review asks. §5 now matches §2/§3/§4 (T-26 std-authoritative /
Lane A conduit; T-4-mgr Wave-0 empty; Dissolution T-31(b)/T-30
generated-checker); §6 → ratified status (4/4 lanes, operator §3 open).

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

* WIP: May 18

* docs: fresh-lane structure (§5) + operator decision sheet (§7)

§5 → fresh composite manager lanes under witty-cat-59 (no reused
managers, per operator); two non-migrated exceptions (vivid-carp-207
= sole #3280 freeze custodian; fierce-cat-31 = lens-fan-out closeout).
§7 → consolidated decision sheet: the A-vs-B root ruling explained in
tradeoff terms + every pending blocking question (#3280 disposition,
#3240 ratification, T-25-core, Wave-0 go, fresh-lane defaults, de-prose
py removal, #3313) with recommendations.

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

* docs: fix §1 ASCII keystone diagram vs §3 (cursor BLOCKING — T-29)

§1 graphic still drew T-29 inside the keystone box while §3/§2/§5
treat it as LANDED (#3267), not a keystone — same single-chart
internal-consistency class as the §5/§6 fix. Diagram now: 3-item
cluster (P1-KEYSTONE / T-25-core / T-30); T-29 shown LANDED below.

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

* docs: fold #3313 lens-rework impact (Wave-2 taxonomy + batch-d hold)

#3313 is in active design rework (L1.6 retired→L1.10 family, A0/A1
umbrella, pre-Practice-10-ratification). §7 row 7 updated: it's no
longer flat L1.7–L1.12; Wave-2 batch (d) held track-not-finalize so
witnesses aren't authored against the moving taxonomy; batches a/b/c
and the keystone framing unaffected (#3313 reinforces #1=B/#3240).

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

* docs: record operator B2 ruling on #3321 driver shape (§7 row 8)

Operator ruled 2026-05-18: substrate-native (B2). registry.dag splits
to its own .dag PR (lands now); the ~467-LOC tools/ Rust crate dropped
entirely, B1 also rejected — no interim out-of-substrate enforcement
shell (Python OR Rust), same thesis ruling as the de-prose-py kill.
Whole-corpus gate re-scoped to the v2 filesystem-walk substrate
primitive = the T-21/T-24 corpus-drive capability (PREFIX = first
consumer). Operator-accepted: CI lens gate lands when that lands.

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

* WIP: May 18

* docs: fold still-hawk-102 review — keystone spec sharpness + 2-owner fix

(1) #3240 is a CLOSED/SUPERSEDED tracker, NOT ratifiable — the keystone
artifact is a not-yet-drafted modeling-discipline.md fold PR that
still-hawk-102 owns drafting; §7 #3a → "authorize draft", §3 rewritten.
(2) "one decision" overstated → "2-3 distinct operator items"; A-vs-B=B
stated as IMPLIED by the keystone-fold, not equivalent. (3) §5 two-owner
lens seam fixed: Fresh Compiler-Pipeline lens scope GATED on
fierce-cat-31 fan-out closeout (one lens owner; no P2 parallel-authority
drift). (4) §7 #2 no-revert-of-862bbde6e clause added. Self-consistency
pass: fixed 2 stale "ratify #3240" stragglers (§3 blast-radius, §6 r5).

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

* docs: fold sunny-wolf-435 Wave-2 prereq + cross-lane edge (#3313 author)

#3313 author flagged two real Wave-2 sequencing gaps: (1) unenumerated
std/ prerequisite carriers the L1.x lenses read (canonical_observations,
CanonicalConcept, 3 Exemption registries) — T-25-core-class, no owning
T-# yet (P10-shape gap); (2) three derived lens-stages (match_arm_shape,
closed_vocab_scan, concept_home) = Compiler-Pipeline+Lens lane, NOT
Dissolution. Added §4 Wave-2-prereq block + cross-lane edge
(Compiler-Pipeline builds → Dissolution Wave-2 consumes); §5 Dissolution
row annotated. Reinforces batch-(d) hold.

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

* docs: re-tee keystone ask to verified-exact (still-hawk self-correction)

still-hawk-102 verify-don't-trust'd its own review #1: the keystone
FOLD is ALREADY on main (modeling-discipline.md §581-763). Both prior
framings ('ratify #3240' and 'authorize a drafting effort') were wrong.
Corrected verified-exact: operator ratifies the verbatim invariant
blockquote at modeling-discipline.md ~§594-600 (exists, flagged
proposed/#3240-A1); still-hawk then lands it into INVARIANTS.md+
MODELING.md + de-hedges 3 sites — SMALL (~30-60 ln, mechanical, low-risk),
ratify-exact-text-today not a drafting effort. Downstream effort = the
retroactive v4 audit sweep (#3240 C1). §3(a)/§7#3a/§6r5/trailer aligned.

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

* docs: fix last stale 'not-yet-drafted' straggler (§3 blast-radius)

* docs: keystone retraction (C1 not gated on A1) + Wave-2 prereq classification

(A) still-hawk-102 third self-correction, verified: #3241 (fold) + #3242
(🟡-legend) BOTH merged; the v4 audit sweep #3240-C1 was gated on #3242
(merged), NOT on the A1 invariant — C1 already in motion independently.
Retracted the 'authorizing A1 kicks off the v4 sweep' framing in
§3(a)/§7#3a: A1 ⇒ ONLY the small placement PR, maximally low-stakes.
(B) sunny-wolf-435 (#3313 author) classification, verified NONE fold
under T-25-core: (1a) canonical_observations/CanonicalConcept → NEW T-#
'lens-supporting concept registries'; (1b) 3 Exemption registries →
fold into each lens's own task, no T-#; (2) 3 derived lens-stages →
NEW shared T-# 'Wave-2-prereq lens-pipeline derivations'. Two new
owning-T#s to assign (P10-shape). §4 Wave-2-prereq block rewritten.

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

* docs: final keystone re-tee — C1 sweep #3243 DONE (verified), A1 = sole open

* docs: rename live keystone gate → 'Practice-10 A1 invariant'; #3240 = closed-tracker only (cursor editorial)

* WIP: May 18

* docs: fix T-18 forward-dep violation (BLOCKING) + wave-ordering convention

Valid BLOCKING: §2 + TASKS.md say T-18 (coverage meta-lens) depends on
T-12/T-13 ('meta over the other lenses'), which only become real in
Wave 3 — yet §4 listed T-18 in Wave 2 (consumer before input = Facts-
Flow-Forward violation). Moved T-18 Wave 2 → Wave 4 (after T-12/T-13
real). Added a wave-ordering convention note: Wave = membership not
intra-wave sequence; §2 Depends-on orders within a wave; consumer-
before-input across waves is the real violation class.

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

* docs: topological re-sort of wavefront (BLOCKING T-16 + pre-empt queued)

Operator BLOCKING review fired consumer-before-input findings (T-18,
T-16, and the same class T-4.8/T-17). Replaced the weak intra-wave
convention with a TOPOLOGICAL invariant (a task is strictly later than
every dep; within-wave = mutually independent, dispatch-safe on face)
and re-sorted: W2 drops T-4.8; W3 gains T-4.8; W4 gains T-17 (deps T-12
real W3) + T-18; W5 = T-16 (deps T-11 W4); W6 = T-15 terminal. Every
consumer now strictly after its fresh inputs.

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

* docs: mirror §4 topological re-sort into §5 (codex BLOCKING residual)

codex BLOCKING (vs ed8b3b9, pre-resort) demanded T-18-after-T12/13,
T-16-after-T-11, AND 'mirror that gating in §5'. §4 was already fixed
by 9cd9831; the residual was §5 not mirroring it — the Compiler-
Pipeline 'Gated' cell was a flat 'post-T-4' bag obscuring the wave
sequence. Now §5 Compiler-Pipeline + Test/Bootstrap-Infra gated columns
explicitly mirror §4 topology (W2 T-9 → … → W5 T-16 → W6 T-15).

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

* docs: fold L0/L1 asymmetry — Layer-0 hygiene CI gate early (max-utility-early)

sunny-wolf-435 (#3313 author), verified vs #3313 §4/§9/§10: Layer-0
(L0.1-L0.15) reads parse+resolve only (both LANDED), NO T-9 → CI
hygiene hard-gate goes live END-WAVE-1 once lens-pipeline-derivations
+ Layer-0 lens stage land. Layer-1 (L1.1-L1.12) needs post-T-9 +
concept registries → Wave-3. §4 W1 now carries the early Layer-0
gate; W3 the L1.x fan-out; batch-d hold unchanged for L1.x. Directly
serves the operator 'maximum utility as early as possible (without
compromising standards)' directive.

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

* docs: restore T-29 as TASKS.md-declared T-4-cpp keystone feeder (codex RC)

codex REQUEST_CHANGES, VERIFIED vs origin/main: TASKS.md:64/:286/:1035
still declares T-29 a hard prerequisite of T-4's cpp slice
({P1-KEYSTONE,T-30,T-29,T-25-core}→T-4), and #3277 (T-29 residual) is
OPEN — only #3267 (core) merged. The prior "T-29 LANDED / not a
keystone / removed from critical branch" reclassification was a real
P2/Practice-9 documentation-authority violation (dispatch graph
disagreeing with the source of truth → could mis-sequence T-4). T-29
restored to the keystone cluster across §1 graph, §2 row, §3 table,
§4 wave note, §5 extdeps/T-4, §6 review-status; de-classify only when
#3277 lands AND TASKS.md updates (authority = TASKS.md, not this plan).

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

* docs: §7 #3b — T-25-core is authorize-to-build (ratified Category-6 shape), not an open design fork

---------

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

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7 (sentinel module_path / coproduct discipline) — Verified on current tip (199d54374): src/v4/lens/registry.dag no longer overloads module_path: String with __PREFIX_V0_UNBOUND__. The substrate now carries an explicit sum LensModulePathV0 = Bound { path: String } | Unbound, bound rows use Bound { path: "v4.lens.…" }, and the two not-yet-ratified lenses use Unbound (disambiguated only by lens_id, as you noted — intentional). Operator pin §3 Machine authority is aligned (no string sentinel in path).

Merge readiness (re-check): fmt, affected, v4 green; ci + v3 still pending on the latest workflow run, so CI is not all-green yet. mergeable: MERGEABLE, mergeStateStatus: BLOCKED (branch protection / reviews). GitHub’s aggregated reviewDecision is still empty from here; the ≥2 distinct api-review APPROVE bar needs the dashboard / fresh approvals on the current SHA — not satisfied from gh alone. Per operator policy, not merging from this agent.

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7 APPROVE (2026-05-18) — Spot-checked current HEAD against your write-up:

  • P5 / hand-Rust: No new src/v3/** or src/v4/**/*.rs in this lane; substrate + workflow edits only — agreed, P5 surface not expanded here.
  • Pin vs Pure Bootstrap: The no interim in-tree driver / B2 corpus primitive discipline is in §3 of docs/briefs/r4-lane-a-lens-interface-freeze-pin.md (invocation template + “In-tree executable / interim Rust gate: None” block starting ~L39). L24–26 on current pin is the D1 ops line + §2 heading — minor line drift vs your citation; substance unchanged.
  • registry.dag: Confirms LensModulePathV0 = Bound { path: String } | Unbound at L13, comment forbidding string sentinels at L12 — matches your coproduct read.
  • STRUCTURE.md: Changelog 72→73 + lens/registry.dag entry at L146–147 matches your checksum note.
  • Gate Add external dependency type definitions for cloud, git, GitHub, LLM, and Rust #103 + workflow_policy: scripts/detect-affected-components.sh emits workflow_policy=…; .github/workflows/ci.yml ORs needs.affected.outputs.workflow_policy == 'true' with v3 / push&&main on the Add external dependency type definitions for cloud, git, GitHub, LLM, and Rust #103 steps — matches your fail-closed read.
  • self_host_ratchet: Skipped-v3 early-exit + failure/cancelled + unexpected-result branches still present — matches your tolerance analysis.

Exploratory (§3 table ↔ .dag drift gate): Agreed as backlog: a mechanical diff (markdown table vs data lens_registry_v0_* rows) only pays off once there is a named consumer of both surfaces; today the pin already says amend .dag first then mirror the table — we are not adding a fragile markdown parser in this PR.

Merge readiness (this moment): Latest workflow run shows fmt / affected / ci / v3 / v4 / self_host_ratchet all pass; mergeable: MERGEABLE, mergeStateStatus: **CLEAN**. GitHub’s aggregated reviewDecision is still empty from here, and gh api pulls/3321/reviews only shows prior COMMENTED api-review artifacts — the ≥2 distinct api-review APPROVE bar is not something I can confirm from gh alone (dashboard / branch rules may still be the source of truth). Per operator policy: not merging from this agent.

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: codex REQUEST_CHANGES (P2 / Practice 5 — registry “authority” without consumer) — Finding valid under INVARIANTS §P2 wording; addressed on tip.

What landed (same pattern as fact_density.dag):

  1. src/v4/STRUCTURE.md — lens/registry.dag is explicitly P2-staging (canonical .dag data home + parse witness only; not §P2 “landed” until a generated consumer reads LensRegistryEntryV0). Changelog calls out paired v4_lens_registry_dag_smoke_test.rs.
  2. docs/briefs/r4-lane-a-lens-interface-freeze-pin.md §3 — Replaced “machine authority” framing with “Substrate home-of-record (P2-staging)” + explicit generated-consumer bar + pointer to STRUCTURE.md / smoke receipt.
  3. v4_lens_registry_dag_smoke_test.rs — compile_to_dag integration smoke (empty diagnostics), wired in tests/integration.rs.
  4. INVARIANTS.md table row + sg0_census_test.rs EXPECTED_HAND_AUTHORED_TEST line — §P5(b) receipt pairing (dissolution text matches v4_std_fact_density_dag_smoke_test.rs precedent).

Commit: 03048ce99 (smoke + INVARIANTS + census + integration mod); doc/STRUCTURE alignment is on 32a68580e / adjacent PREFIX commits in the same PR stack.

Merge readiness: New CI run 26062404813 was still affected pending at check time; mergeStateStatus: **BLOCKED**. Not declaring full green / merge-ready until workflow completes; gh pr merge not run (operator policy).

— sent from crisp-carp-224

briansrls added a commit that referenced this pull request May 18, 2026
CI prepends `scripts/ci-merge/sg0-pr-body-append.<number>.txt` so the
net-shrink gate sees column-0 `SG-0 hand-path delta:` / `SG-0 pairing:`
first; strict +1 on `EXPECTED_HAND_AUTHORED_TEST` required (c) dispatch
evidence with operator pin brief citation.

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7 APPROVE (2026-05-18) — Spot-checked current HEAD against your checklist:

  • src/v4/lens/registry.dag: Closed LENS_ID rows + LensModulePathV0 = Bound { path: String } | Unbound; TBD lenses use Unbound (no string sentinel) — matches your coproduct read.
  • v4_lens_registry_dag_smoke_test.rs: compile_to_dag + empty-diagnostics smoke; module doc states P2-staging / no generated-consumer claim — matches fact_density precedent framing.
  • INVARIANTS.md: Table row for v4_lens_registry_dag_smoke_test.rs is present (line ~363 on current tip) with explicit P2-staging + dissolution (“generated harness that mechanically reads registry rows”) — matches your P5(b) receipt read.
  • sg0_census_test.rs: EXPECTED_HAND_AUTHORED_TEST includes v4_lens_registry_dag_smoke_test.rs with PREFIX T-23 comment block — your 843–845 citation is off by one line on tip (path literal is L845; comments 843–844).
  • scripts/ci-merge/sg0-pr-body-append.3321.txt: Column-0 SG-0 hand-path delta: +1 + SG-0 pairing: (c) with brief + INVARIANTS dispatch pointers — present and matches SG-0 gate intent.
  • docs/briefs/r4-lane-a-lens-interface-freeze-pin.md §3: P2-staging / human-mirror / generated-consumer bar — consistent with smoke + INVARIANTS row.
  • src/v4/STRUCTURE.md: 72→73 reconciliation + lens/registry.dag P2-staging tree comment + changelog pairing — matches your checksum note.
  • Non-registry CI plumbing (workflow_policy, ci.yml, ci_github_actions_workflow.dag, self_host_ratchet skipped-v3 tolerance): Still internally consistent on tip; no new issues found in this pass.

Exploratory (PR title vs landed diff): Agree it is non-blocking and substantively correct under pin §3 (no in-tree driver / whole-corpus CLI until B2). GitHub title is still the older marketing line (“driver/registry + whole-corpus gate”); body + pin carry the authoritative posture. Retitling is optional hygiene for the merge queue, not a code defect.

Merge readiness (this check): Latest run 26062592156: fmt / affected / ci / v3 / v4 / self_host_ratchet all pass; mergeable: MERGEABLE, mergeStateStatus: **CLEAN**. gh api pulls/3321/reviews still only surfaces older COMMENTED api-review artifacts — the ≥2 distinct api-review APPROVE bar is not something I can confirm from gh alone (dashboard / branch rules may still be authoritative). Per operator policy: not merging from this agent.

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: cursor/composer-2 REQUEST_CHANGES (Practice 4 / 9 — DECISIONS ledger for LensModulePathV0) — Fixed on tip commit 942369bf4.

  • src/v4/DECISIONS.md: New **### PREFIX-T-23-registry — lens/registry.dag/LensModulePathV0** subsection (inserted after **P9-COST** in Part 1): 🟢 **terminal** coproduct disposition + explicit **rejected patterns** (string sentinel in path; bogus collapsing of distinct lens_idrows), **P2-staging** / §P2 generated-consumer bar cross-ref to pin §3 + STRUCTURE + INVARIANTS smoke row, and **dissolve-on-arrival** aligned with the T-30fact_density` style.
  • src/v4/lens/registry.dag: In-file tag now // 🟢 coproduct dissolution — DECISIONS.md PREFIX-T-23-registry so the substrate points at the classification ledger (same mechanical habit as typescript.dag → DECISIONS rows).

No SG-0 census delta (no sg0_census_test.rs edit in this commit).

— sent from crisp-carp-224

@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: 199d5437 · Trigger: schedule
  • Thinking: 348s wall

BLOCKING (2)

Root Cause

  • docs/briefs/r4-lane-a-lens-interface-freeze-pin.md The pin freezes closed LENS_ID rows but does not require a closed LensIdV0 or total-registry carrier -> make the pin and registry encode frozen IDs structurally instead of as text.
  • scripts/detect-affected-components.sh The policy-surface contract covers workflow YAML and two ratchet files but not the detector that emits workflow_policy -> include this script in the workflow_policy path set or run Gate #103 unconditionally for selector changes.

ROADMAP — Verified

  • T-PB-B/pb_rust_tests_outside_residual_zero: The added Rust smoke test has matching SG-0 census, INVARIANTS row, and PR-body append receipt.

⚠️ Two PR-local substrate and policy gaps need fixing before this lands.

Comment thread src/v4/lens/registry.dag Outdated
type LensModulePathV0 = Bound { path: String } | Unbound

type LensRegistryEntryV0 {
lens_id: String

This comment was marked as resolved.

Comment thread scripts/detect-affected-components.sh Outdated
fi

# Gate #103 workflow / policy surface — orthogonal to compiler v2/v3/v4 buckets.
if echo "$changed" | grep -qE '^\.github/workflows/|^scripts/check-workflow-path-regex-inventory\.sh|^scripts/workflow-path-regex-forbidden-substrings\.txt'; then

This comment was marked as resolved.

briansrls and others added 22 commits May 19, 2026 01:34
Runnable-AC text still said TBD until the binary existed; v0 now ships
for compile/registry + whole-corpus. Narrow TBD to lens evaluation
(--mode enforce|introspect) vs Witness/Dimension claims; document
--whole-corpus in the frozen argv template.

Co-authored-by: Cursor <cursoragent@cursor.com>
Reorder to Scope/Owns/Consumes/Status, then a single Anchor URL; drop
in-file Driver/build.rs rationale (D5 + modeling-discipline §9 — receipt
in commit message). Addresses cursor/composer-2 APPROVE_WITH_COMMENTS
on PR #3321.

Co-authored-by: Cursor <cursoragent@cursor.com>
Rustdoc now matches `classify_path`: `compile_to_dag` runs for
`src/v3/lenses/**` and `tokenize.dag` / `parse_tables.dag` only; spec/,
compiler fixtures, operators, pipeline, and regen are skipped in favor of
v3-compiler integration / bootstrap receipts.

Co-authored-by: Cursor <cursoragent@cursor.com>
`Cargo.toml` member note: `--whole-corpus` argv drives a bucketed compile
receipt (freeze pin + CI step names in acec9d9; codex #3321).

Co-authored-by: Cursor <cursoragent@cursor.com>
Add `workflow_policy` output from `detect-affected-components.sh` (`.github/
workflows/*` + path-regex ratchet scripts) and OR it into Gate #103 `if:`
conditions so PRs that touch only `ci.yml` still run fail-closed policy checks
(codex / briansrls — INVARIANTS P2/P3).

Co-authored-by: Cursor <cursoragent@cursor.com>
CI prepends `scripts/ci-merge/sg0-pr-body-append.<number>.txt` so the
net-shrink gate sees column-0 `SG-0 hand-path delta:` / `SG-0 pairing:`
first; strict +1 on `EXPECTED_HAND_AUTHORED_TEST` required (c) dispatch
evidence with operator pin brief citation.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add DECISIONS.md PREFIX-T-23-registry subsection (terminal coproduct
disposition, rejected sentinel pattern, P2-staging + dissolve-on-arrival)
per modeling-discipline Practices 4/9. Point registry.dag 🟢 tag at the
ledger slug (typescript.dag precedent).

Co-authored-by: Cursor <cursoragent@cursor.com>
Gate #103 reads needs.affected.outputs.workflow_policy; the selector
that sets it must not be excludable from that bucket (P3 fail-closed).

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls
briansrls force-pushed the session/crisp-carp-224 branch from d88589b to 7cff40f Compare May 19, 2026 01:37
@briansrls

Copy link
Copy Markdown
Contributor Author

Re: cursor/composer-2 APPROVE (14469, post-rebase HEAD 7cff40f3a7d0) — Spot-checked current tree; no code change from this review item.

P5(b) / T-PB-B (your bullets) — verified

  • INVARIANTS.md: v4_lens_registry_dag_smoke_test.rs row (~L368) cites operator pin §3, LensIdV0 / LensModulePathV0, ROADMAP.md § Nine lanes / T-PB-B / pb_rust_tests_outside_residual_zero, P2-staging, Mechanism (b) pairing + dissolution.
  • sg0_census_test.rs: EXPECTED_HAND_AUTHORED_TEST includes v4_lens_registry_dag_smoke_test.rs with PREFIX T-23 comment block (~L833 on tip).
  • integration.rs: mod v4_lens_registry_dag_smoke_test wired (L276–277).

Substrate / discipline

  • registry.dag: LensIdV0 + LensModulePathV0 with 🟢 tags → DECISIONS.md PREFIX-T-23-registry subsection present.
  • Pin §3 / B2 / title: Executable + whole-corpus deferred B2; no interim driver in tree — consistent with THESIS / Pure Bootstrap and your “don’t read PR title as contradiction” note.

Merge readiness (this poll, after force-push)

  • Dashboard dashboard-ops reviews: head_sha 7cff40f3a7d0…; 3 distinct APPROVE (claude, codex, cursor); aggregate still shows REQUEST_CHANGES → openai-pro (likely SHA-stale vs tip — lane posture unchanged: no churn for phantom RCs unless operator asks).
  • checks_state: pending (new Actions run after rebase; v3 job still pending when polled).
  • GitHub: mergeable: MERGEABLE, mergeStateStatus: **BLOCKED** (pending checks).

So the instruction’s “all met → STOP” bar is not satisfied yet only on CI pending / dashboard ready / possible stale openai-pro RC — substance matches your APPROVE. gh pr merge: not run (operator-only).

— sent from crisp-carp-224

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7 APPROVE (14477, HEAD 7cff40f3a7d0) — Spot-checked current tip; no code change from this item.

Receipt / modeling (your checklist) — verified

  • P5(b): INVARIANTS.md row for v4_lens_registry_dag_smoke_test.rs (~L368) + sg0_census_test.rs literal (~L833) + scripts/ci-merge/sg0-pr-body-append.3321.txt (+1 / (c) pairing + generated-consumer dissolution pointer) — all present.
  • registry.dag: LensIdV0 closed sum + LensModulePathV0 coproduct + 🟢 tags — matches M4 / Practice-4 read.
  • STRUCTURE.md: 73 .dag total + changelog 72→73 + registry.dag P2-staging line — consistent with your checksum note.

Merge readiness (this poll)

  • GitHub: mergeable: MERGEABLE, mergeStateStatus: **CLEAN**; visible checks on latest run (26070840252) pass (fmt, affected, ci, v3, v4, self_host_ratchet).
  • dashboard-ops reviews: ready still false — checks_state: pending (aggregate lag vs GitHub) and REQUEST_CHANGES still attributed to openai-pro (SHA-stale vs tip per lane posture).
  • Approvals: 3/2 distinct APPROVE on record (claude, codex, cursor).

Instruction “all met → STOP” is not literally true on dashboard JSON yet; GitHub merge state + CI look green/clean on poll. gh pr merge: not run (operator-only).

— sent from crisp-carp-224

@briansrls
briansrls merged commit eba0a7d into main May 19, 2026
7 checks passed
briansrls added a commit that referenced this pull request May 19, 2026
…1 synthesis) (#3320)

* PREFIX lens Acceptance batch (b) — cost + complexity (Wave-1 #1 complexity + §5.1 synthesis)

Acceptance artifact for `PREFIX-LENS-CI-1` §Acceptance-PR batches row 3: shared
SymbolicCost algebra ⇒ one operator-signed Acceptance PR for cost + complexity
together (per src/v4/lens/complexity.dag U2: complexity is the asymptotic
projection of cost.dag SymbolicCost — never re-derived). Sister to
docs/briefs/r4-lane-a-lens-prefix-acceptance.md (batch (a) driver/registry).

Runnable acceptance table maps each row to design-lens-framework.md §2
(Witness<C> / DimensionOk / DimensionFail):
- AC-0 v2-compiler spine bar (unchanged)
- AC-1 whole-corpus driver (TBD-pinned to batch (a) Interface-Freeze; v3 fold
  fallback per Fork A delete-dated supplementary step)
- AC-2 complexity red+green (closure gate
  complexity_violation_compile_error_demonstrated — §4.1)
- AC-3 cost red+green (closure gates crdt/memory_peak_cost_basis_demonstrated
  — §4.2/§4.3)
- AC-4 §5.1 default-application synthesis (Introspect-only, never Enforce,
  total over function declarations)
- AC-5 sibling-not-caught near-miss (parallelism application does not fire
  complexity-walk diagnostics — two-separate-walks per §5)

Candidate witnesses pre-authored per `PREFIX-LENS-CI-1` §Witness parallelism vs
Interface-Freeze (issue-class + snippet substance anchorable on today's design
authorities; structural-AST assertions remain serialized on T-23 keystone).
Operator slots (_TODO_OPERATOR_) preserved for fixture id / snippet path /
asserted outcome sign-off per witty-cat methodology.

Implementation dispatch for T-12 cost + complexity remains DISPATCH_HOLD until
operator signs this artifact (witnesses immutable thereafter except red→green
with operator-signed amendment).

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

* Address codex REQUEST_CHANGES on #3320 — reframe as DRAFT + pin sibling-PR landings

Codex review @ 2026-05-18T19:03:54Z flagged two issues:

1. Sibling-authority references (r4-lane-a-lens-prefix-acceptance.md +
   r4-lane-a-lens-prefix-t23-t12-ci.md) absent from origin/main and from this
   PR's tree — confirmed (`git ls-tree origin/main --` + `git ls-files --`
   return empty). Those briefs are introduced by PR #3315 (fierce-cat-31
   manager); the T-23 keystone by #3316; batch (a) driver by #3321; umbrella
   index by #3319. Header now pins the coordinated PRs explicitly and notes
   that this artifact's authority resolves on their squash-merge — not a
   dead-path reference. Authority pins that are already on main (lens-framework
   §2, lens-application-surface §4/§5.1, lens/{cost,complexity}.dag, TASKS T-12)
   listed separately as in-tree-now.

2. "Operator-signed gate" framing contradicted by `_TODO_OPERATOR_` witness
   slots + `<TBD>` runnable cell. The slots themselves are operator-mandated
   per `PREFIX-LENS-CI-1` §Witness parallelism + §Interface-Freeze, but the
   reviewer is correct that header text claiming live signed-gate status while
   the slots are unfilled trips INVARIANTS.md "documentation describes live
   state". Header now explicitly states DRAFT pending operator signature;
   document BECOMES the gate on operator-amendment commit (witness fill +
   runnable pin); merging this draft PR alone does NOT lift DISPATCH_HOLD.

No witness or AC-row content changed — only framing/header and the
DISPATCH_HOLD-lift-conditions section heading.

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

* WIP: PREFIX lens Acceptance batch (b): cost + complexity — Wave-1 #1 complexi

* WIP: PREFIX lens Acceptance batch (b): cost + complexity — Wave-1 #1 complexi

* Distinguish enforcement Diagnostic vs Witness::Violates carriers (#3320 codex BLOCKING)

Codex BLOCKING @ 2026-05-18T19:50:32Z (sha 93fbba0): AC-2/AC-3 red rows and
witness sections used `Witness::Violates { reason, at: Behavior }` as the
asserted outcome for "computed value exceeded declared budget". That conflates
two structurally distinct failure carriers in the lens stack:

- `Witness<C>::Violates { reason, at: Behavior }` (design-lens-framework.md §2
  + "Three worked instances" Instance 1) — per-Behavior missing-substrate-fact
  signal in `read(dag, behavior)`. Reason text is "no declared cost for <op>"
  shape, NOT "budget exceeded" shape.
- Enforcement `Diagnostic` (design-lens-application-surface.md §5 step 2 +
  §4.1) — emitted by the fold-pass when `LensEnforcement.violates(output,
  budget) == true` and accumulated into `DimensionFail.violations:
  List<Diagnostic>` per `DimensionReport` §2.

Reviewer's risk: signing the gate with this conflation would push T-12
implementation toward the wrong carrier.

Fix:
- Add a "Two-failure-carrier reminder" section above the AC table that names
  both carriers and pins the carriage rule (AC-2/AC-3 red = enforcement
  Diagnostic; `Witness::Violates` reserved for missing-fact rows).
- Rewrite AC-2-RED / AC-3-RED outcome columns to assert the
  `LensEnforcement.violates == true ⇒ Diagnostic` path explicitly, with
  per-Behavior `Witness::Inhabits` succeeding at leaves. Add explicit
  "Carrier: enforcement Diagnostic, NOT Witness::Violates" note.
- Rewrite AC-2-GREEN / AC-3-GREEN to assert `LensEnforcement.violates ==
  false ⇒ zero enforcement Diagnostics ⇒ DimensionOk { composed, witnesses }`.
- Rewrite Witness section red entries (complexity + cost) with the same
  carriage split.
- AC-1 aggregate policy + Green-corpus-pin policy now name both
  "zero unexpected enforcement Diagnostics" AND "zero unexpected missing-fact
  Witness::Violates" — previously collapsed to single "Violates" wording.

No new ACs added; only carriage labels corrected on existing rows.

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

* Tighten issue-class sentence to match two-carrier discipline (#3320 cursor cosmetic)

cursor APPROVE @ 2026-05-18T20:21:12Z flagged that the issue-class one-liner at
L19 grouped "structured Violates / DimensionFail outcomes" for how red
witnesses are proven, which a skim reader might read as blurring the
enforcement-Diagnostic vs Witness::Violates carriers the two-carrier reminder
section disambiguates. Cosmetic-only per reviewer.

Tighten the sentence: name the enforcement carrier explicitly
(`LensEnforcement.violates == true ⇒ Diagnostic in DimensionFail.violations`),
forward-reference the §Two-failure-carrier reminder, and reword the red-witness
proof clause to "expected enforcement Diagnostic in DimensionFail.violations"
instead of the prior conflated "Violates / DimensionFail outcomes" phrasing.

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

* WIP: PREFIX lens Acceptance batch (b): cost + complexity — Wave-1 #1 complexi

* WIP: PREFIX lens Acceptance batch (b): cost + complexity — Wave-1 #1 complexi

* Pin single Lens<C> carrier C=ComplexitySummary throughout AC-2 (#3320 codex BLOCKING round 3)

Codex BLOCKING @ 2026-05-18T22:20:33Z (sha 60a2a6f): the prior fix split
per-step `Witness<ComplexityBound>` reads from a composed `ComplexitySummary`
output, but `design-lens-framework.md` §"The Lens<C> primitive" requires one
carrier C throughout: `read: (Dag, Behavior) -> Witness<C>` +
`sequential: Monoid<C>` + `fold_lens<C> -> DimensionReport<C> { composed: C,
witnesses: List<Witness<C>> }`. Mixing `Witness<ComplexityBound>` reads with
`DimensionReport<ComplexitySummary>` would require an unmodeled bridge between
the two carriers — P2 facts-flow / single-authority violation.

Align to §4.1's `EnforcedApplication<ComplexitySummary, AsymptoticClass,
AsymptoticClass>` worked example: `C = ComplexitySummary` is the single lens
carrier. `read` returns `Witness<ComplexitySummary>` at every Behavior; fold
composes via `Monoid<ComplexitySummary>` to `composed: ComplexitySummary`;
`witnesses: List<Witness<ComplexitySummary>>`; report is
`DimensionReport<ComplexitySummary>`. Budget/projection coordinate stays
`AsymptoticClass`.

AC-2-RED / AC-2-GREEN + complexity red/green witness entries rewritten with
this single-carrier discipline. Per-Behavior read codomain references changed
from `<step ComplexityBound>` to `<per-Behavior ComplexitySummary>`.

The `src/v4/lens/complexity.dag` header currently names the read codomain
`ComplexityBound` rather than `ComplexitySummary` — surfaced as an explicit
"Open T-12 reconcile (not gate-blocking)" note on both AC-2 rows + the red
witness entry, with three options for operator amendment: (a) rename to
`ComplexitySummary` at T-12 fill, (b) declare `ComplexityBound` as an alias /
field of `ComplexitySummary`, or (c) record a v4 carrier rename in
`DECISIONS.md` against §4.1. This makes the authority inconsistency visible
rather than papering over it; the acceptance gate doesn't depend on which
option lands.

Cost rows already use a single carrier (`SymbolicCost`) throughout — no change.

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

---------

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: 7cff40f3 · Trigger: schedule
  • Thinking: 452s wall

ROADMAP — Verified

  • T-PB-B/pb_rust_tests_outside_residual_zero: The added Rust smoke test has matching SG-0 census, INVARIANTS, and PR-body append receipts with a generated-harness dissolution trigger.

✅ No blocking concerns in the current diff.

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