Skip to content

docs: add W1 output producer contract blocker - #1485

Merged
briansrls merged 5 commits into
mainfrom
docs/w1-output-producer-contract-blocker
May 2, 2026
Merged

briansrls merged 5 commits into
mainfrom
docs/w1-output-producer-contract-blocker

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

  • Adds a docs-only W1 blocker/proposal for DifferentialEquals(rust_emit_output, dag_eval_output, ProgramOutputBind).
  • Records that dag_eval_output is plausibly available through no-memo eager evaluate_body, while rust_emit_output remains blocked on explicit producer identity plus typed observation normalization.
  • Names the acceptable contract options: explicit transitional DeclarationRef-name identity or substrate role/marker, and typed observation-channel carrier or scoped Int-only stdout parse carve-out with dissolution targets.
  • Cross-links PR docs(r3): Lane 1 dispatch-readiness re-audit post PR-E E5 (research) #1482 and the E8 runner continuation audit.

Scope

Docs-only. No test_runner.rs changes, fixture rewrites, substrate shapes, TestPredicate changes, runner implementation, L5 corpus execution, or E6/E7 witness work.

Verification

  • git diff --check
  • pre-push cargo fmt --all --check

@briansrls

Copy link
Copy Markdown
Contributor Author

Manager pass: this matches the W1 STOP+PING disposition. It documents the exact missing authorities separately: producer identity for rust_emit_output/dag_eval_output and typed observation normalization for Rust output into ProgramObservation. It also keeps the implementation fences intact: no test_runner.rs change, no fixture rewrites, no substrate shape, no new TestPredicate, and no stdout/name-key bridge smuggled in.

Please mark ready for review/CI if this is the intended blocker deliverable. No code should be added to this PR.

— sent from snappy-moth-795

@briansrls
briansrls marked this pull request as ready for review May 2, 2026 04:09
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: 351c81a7 · Trigger: schedule
  • Comparison: origin/main @ d4eeec26 ... review/pr-1485-351c81a7 @ 351c81a7
  • Thinking: 14s wall

Findings

None. The diff only adds/links a brief that records a W1 producer-contract gate, names transitional vs durable paths, requires fail-closed behavior and dissolution targets, and explicitly avoids runner/fixture/substrate changes — consistent with INVARIANTS (fail-closed, progress as dissolution, no fabricated authority) and docs/modeling-discipline (tracked scaffold with named dissolution). CODING.md and TESTING.md do not apply here (no Rust or tests).

Verdict

APPROVE — Narrowly scoped documentation; the new note supports the modeling rubric rather than bending it, and there is nothing in the diff that contradicts the pinned rubric.

@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: 351c81a7 · Trigger: schedule
  • Thinking: 160s wall

Non-blocking — Strengths

  • docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md The blocker stays docs-only, preserves existing verification surfaces, and keeps W1 runner authority bounded with fail-closed gates and named dissolution paths.

✅ No blocking issues found.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: cursor / composer-2
  • Commit: ded81f35 · Trigger: schedule
  • Comparison: origin/main @ d77d9985 ... review/pr-1485-ded81f35 @ ded81f35
  • Thinking: 18s wall

Findings

None. The change is documentation only: a new brief plus cross-links. It reinforces fail-closed behavior, explicit producer identity, observation normalization, and named dissolution targets, which matches the spirit of P3 (fail-closed) and P2 (single authority / boundary discipline) in INVARIANTS.md and practice 1 / 5 / 6 in docs/modeling-discipline.md rather than contradicting them. CODING.md and TESTING.md do not apply to this diff (no Rust or tests).

Verdict

APPROVE — Narrow, coherent docs-only gate for W1; no rubric violations observed in the diff.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 157fe7e7 · Trigger: schedule
  • Comparison: origin/main @ df14a24b ... review/pr-1485-157fe7e7 @ 157fe7e7
  • Thinking: 31s wall

Verdict: APPROVE

Docs-only diff is narrowly scoped and adds a blocker/proposal that preserves the existing STOP+PING: no runner code, no new predicate/substrate shape, and any transitional name/stdout carve-out is documented, bounded, and tied to a dissolution target. I don’t see a concrete violation of the pinned invariants, coding, or testing guidance in the changed lines.

No builds or tests run, per review instructions.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 8511ae31 · Trigger: schedule
  • Comparison: origin/main @ 013a66b8 ... review/pr-1485-8511ae31 @ 8511ae31
  • Thinking: 38s wall

Verdict: APPROVE — docs-only diff is narrowly scoped and reinforces the rubric: it keeps W1 blocked until producer identity, typed observation normalization, fail-closed errors, and dissolution targets are explicit. No concrete invariant, coding, or testing-discipline violations observed in the changed lines. Tests were not run per review instructions.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 8511ae31 · Trigger: manual
  • Comparison: main @ 013a66b8 ... docs/w1-output-producer-contract-blocker @ 8511ae31
  • Conversation: View conversation

1. Story of the diff

This PR turns the W1 DifferentialEquals(rust_emit_output, dag_eval_output, ProgramOutputBind) follow-on from an implicit runner-readiness gap into an explicit blocker/proposal. The existing evaluator-dispatch brief now points to the new W1 blocker and states the core split: dag_eval_output is plausibly reachable through no-memo eager evaluate_body, while rust_emit_output still lacks producer identity and typed observation normalization before runner code can land (docs/briefs/r3-evaluator-dispatch.md:175-180). The continuation-readiness brief also links the new blocker as the W1-specific authority (docs/briefs/r3-pr-e8-runner-extensions-continuation-readiness.md:62-63).

The new blocker document records the live state, then narrows the future implementation choices: either use a deliberately transitional declaration-name contract or add a durable substrate producer role/marker, and either use a typed observation-channel carrier or a tightly scoped Int-only stdout carve-out (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:47-58, docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:72-81). The load-bearing move is that it refuses to let test_runner.rs become a hidden second producer language: until producer identity, observation normalization, evaluator semantics, dissolution targets, and typed fail-closed errors are all named, eval_differential_equals should stay NotYetImplemented for the W1 pair (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:91-110).

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation) — Compliant. The diff is docs-only and explicitly does not add substrate shapes or runner code: “It does not change test_runner.rs, rewrite fixtures, add substrate shapes, add TestPredicate variants” (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:5-7), and the non-goals repeat “No new TestPredicate, Value, observation carrier, or substrate role” for this slice (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:116-117). Correctly, the durable substrate option is named as future work rather than smuggled into implementation.
  2. INVARIANTS.md + modeling-discipline.md — Compliant. Boundary Discipline / single-authority is handled directly: the doc identifies that replacing miss_int_lookup() stubs by matching declaration names would make test_runner.rs “a second producer language” unless an identity contract is declared first (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:34-38). Fail-closed is also explicit: unknown producer pairs, unsupported shapes, Rust execution failures, parse failures, and evaluator errors must stay typed runner errors (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:104-106), and the runner remains NotYetImplemented until the criteria are met (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:108-110).
  3. CODING.md — N/A. No Rust code, helper placement, method shape, result type, or naming surface is changed; the diff is documentation-only.
  4. TESTING.md — N/A. No executable behavior is added, and the PR explicitly says it does not execute the L4 corpus or change the runner (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:5-7, docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:114-115). There is no new behavior requiring a test in this slice.
  5. LOCKED DESIGN DECISIONS — N/A. The diff does not alter or reference a marked locked design decision; it records a blocker/proposal and preserves existing DifferentialEquals / ProgramOutputBind surfaces rather than changing them (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:60-63).
  6. TRACKED vs UNTRACKED DEBT — Compliant. The two temporary shapes are tracked rather than open-ended. The declaration-name contract is documented, bounded to rust_emit_output / dag_eval_output, requires fail-closed rejection of any other name, and requires a dissolution target (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:47-53). The Int-only stdout carve-out is documented, bounded to a single trimmed integer token and the L4 Int fixture, and requires fail-closed rejection plus a dissolution target (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:76-81). The dissolution target is named as PB-Runtime-generated target-language tests plus substrate-owned observation-channel/value-kind authority replacing runner-local stdout parsing (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:83-87), with runner-arm dissolution targets repeated in the fire criteria (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:100-103).

3. Verdict

APPROVE. The PR does not implement the risky runner path; it strengthens the review boundary by making producer identity, observation normalization, fail-closed behavior, and dissolution requirements explicit before code can land. The only transitional debt it authorizes is documented, bounded, and tied to named dissolution triggers.

@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: 8511ae31 · Trigger: schedule
  • Thinking: 113s wall

✅ No blocking concerns; the docs-only blocker keeps W1 runner authority fail-closed until producer identity, observation normalization, and dissolution triggers are explicit.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 27bdbd29 · Trigger: schedule
  • Comparison: origin/main @ b43c7b12 ... review/pr-1485-27bdbd29 @ 27bdbd29
  • Thinking: 39s wall

Verdict: APPROVE

Docs-only diff, narrowly scoped. It records W1 as blocked, keeps the proposed name/stdout shortcuts explicitly transitional, bounded, fail-closed, and tied to dissolution targets. I don’t see a concrete violation of the pinned invariants, coding, or testing guidance in the changed lines.

No builds or tests run, per review instructions.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 27bdbd29 · Trigger: manual
  • Comparison: main @ b43c7b12 ... docs/w1-output-producer-contract-blocker @ 27bdbd29
  • Conversation: View conversation

1. Story of the diff

This PR is a docs-only guardrail for the W1 DifferentialEquals(rust_emit_output, dag_eval_output, ProgramOutputBind) lane. It wires a new blocker/proposal brief into the existing R3 evaluator dispatch docs at docs/briefs/r3-evaluator-dispatch.md:179-184 and the runner-extension continuation note at docs/briefs/r3-pr-e8-runner-extensions-continuation-readiness.md:62-63. The new brief explicitly separates the two producer sides: dag_eval_output is plausible through the existing eager body evaluator path, while rust_emit_output is still blocked on producer identity and typed observation normalization (docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:20-32). The load-bearing move is not to implement runner behavior yet, but to define what would make a future implementation acceptable: either transitional bounded contracts or durable substrate-owned contracts, with fail-closed behavior and named dissolution paths before test_runner.rs gains authority.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Compliant — the diff does not add substrate types, Dag fields, TestPredicate variants, or runner implementation; it explicitly states that scope boundary at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:3-7 and treats the durable producer identity path as a substrate role/marker proposal rather than runner-local authority at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:54-58.

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

Compliant — fail-closed and single-authority are handled directly: unknown producer pairs, unsupported value shapes, failed Rust execution, parse failures, and evaluator errors must remain typed runner errors at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:104-106, and until the criteria are met the runner must keep returning NotYetImplemented rather than inventing name dispatch or stdout conventions at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:108-110.

  1. CODING.md.

N/A — this patch changes no Rust implementation, helper placement, method/free-function shape, error carrier code, or module organization; it is limited to brief documentation and explicitly avoids test_runner.rs changes at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:114.

  1. TESTING.md.

N/A — no executable behavior changes, fixture rewrites, or corpus execution are introduced; the brief says this slice does not execute the L4 corpus at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:6-7 and repeats the no-fixture/no-L5-corpus scope at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:115-119.

  1. LOCKED DESIGN DECISIONS.

N/A — the diff does not edit or override a locked design decision; it links parent authority docs at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:9-11 and keeps the actual implementation blocked until producer and observation contracts are live.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the temporary paths are documented and bounded. The DeclarationRef-name contract is limited to rust_emit_output and dag_eval_output, requires rejecting other declaration names fail-closed, and must be marked transitional debt at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:47-53. The stdout parse carve-out is restricted to a single trimmed integer token and the L4 Int output fixture at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:76-81, with an explicit dissolution target into PB-Runtime-generated target-language tests plus substrate-owned observation-channel/value-kind facts at docs/briefs/r3-pr-e8-w1-output-producer-contract-blocker.md:83-87.

3. Verdict

APPROVE

The PR strengthens the W1 boundary instead of landing runner authority prematurely. The only transitional shapes it permits are bounded, fail-closed, and tied to dissolution rather than being normalized as permanent producer semantics.

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