Skip to content

test: ratchet W1 unsupported producer receipt - #1495

Merged
briansrls merged 1 commit into
mainfrom
feat/e8-runner-continuation-failclosed
May 2, 2026
Merged

briansrls merged 1 commit into
mainfrom
feat/e8-runner-continuation-failclosed

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Summary

  • Tightens the DifferentialEquals unsupported-pair NotYetImplemented receipt so W1 output producers stay explicitly gated on producer identity and typed observation normalization.
  • Names the dissolution targets in the runner receipt: PB-Runtime generated target-language tests for rust_emit_output, and PR-B eager evaluator plus witness construction for dag_eval_output.
  • Ratchets the existing R3 L4 skeleton integration test to assert the W1 gates and dissolution targets are present.

Scope

Small E8 continuation after #1451/#1485. This does not implement W1 producer dispatch and does not overlap a W1 implementation branch: no new TestPredicate variants, no substrate shape changes, no fixture rewrites, no broad L5 corpus execution, and no E6/E7 witness work.

Verification

  • cargo fmt --all --check
  • git diff --check
  • RUST_MIN_STACK=8388608 cargo test -p v3-compiler --test integration r3_verification_l4_emit_eval_match_skeleton_is_nyi

Note: the same focused test without RUST_MIN_STACK built but aborted with a stack overflow in the integration harness before the assertion; the stack-sized run passed.

@briansrls

Copy link
Copy Markdown
Contributor Author

Manager pass: this is a good non-overlapping E8 continuation. It does not implement W1, but it ratchets the unsupported producer receipt to name the exact #1485 gates and dissolution targets, which protects Worker B’s implementation lane from silent name/stdout bridges.

Please mark ready for review/CI if this is the intended deliverable. No additional runner behavior should be added here.

— sent from snappy-moth-795

@briansrls
briansrls marked this pull request as ready for review May 2, 2026 07:30
@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: codex / codex-default
  • Commit: 01e36c4f · Trigger: schedule
  • Comparison: origin/main @ 331b9ebe ... review/pr-1495-01e36c4f @ 01e36c4f
  • Thinking: 36s wall

Verdict: APPROVE

Diff is narrow and ratchets the existing unsupported DifferentialEquals producer path to remain explicitly deferred. The new NYI reason names the W1 gates and dissolution targets, and the test asserts those receipts without adding new substrate shape, duplicate authority, or silent fallback. I did not run builds or tests per instruction.

@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: 01e36c4f · Trigger: schedule
  • Thinking: 102s wall

Non-blocking — Strengths

  • src/v3/compiler/src/test_runner.rs The unsupported producer path remains fail-closed and now names the W1 gates plus concrete dissolution targets, matching the tracked-scaffold requirement.
  • src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs The test ratchets the receipt text so future changes cannot silently weaken the unsupported emit/eval producer gate.

✅ No blocking concerns; this is a focused fail-closed receipt ratchet with matching test coverage.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: 01e36c4f · Trigger: manual
  • Comparison: main @ 331b9ebe ... feat/e8-runner-continuation-failclosed @ 01e36c4f
  • Conversation: View conversation

1. Story of the diff

This PR tightens an existing unsupported DifferentialEquals path rather than enabling a new producer pairing. In test_runner.rs, the unsupported lineage branch still returns ClaimResult::NotYetImplemented, but the reason now explicitly says the rust_emit_output / dag_eval_output pairing remains fail-closed until producer identity and typed observation normalization are declared, with separate dissolution targets for each producer path at src/v3/compiler/src/test_runner.rs:2341-2347. The integration test in r3_verification_l4_l7_l5_skeleton_test.rs is ratcheted from “any NYI is fine” to “the NYI must name the unsupported emit/eval pairing, the W1 gates, and the dissolution targets,” at src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs:68-76.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

N/A — this is implementation/test-runner and integration-test code only; it does not introduce substrate types, Dag fields, Dag mutation, or new substrate variants.

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

Compliant — fail-closed / E-8 is preserved: the unsupported producer pairing still returns ClaimResult::NotYetImplemented, and the added comment states “unsupported output producers must stay fail-closed” until producer identity and typed observation normalization are declared at src/v3/compiler/src/test_runner.rs:2341-2347. The diff does not fabricate a semantic comparison for rust_emit_output vs dag_eval_output.

  1. CODING.md.

Compliant — the change keeps the existing typed result carrier shape rather than adding a side channel, panic, boolean, or hidden global: the unsupported path remains a direct return ClaimResult::NotYetImplemented(format!(...)) at src/v3/compiler/src/test_runner.rs:2346-2347. No new helper, mutable state, method surface, or implicit dependency is introduced.

  1. TESTING.md.

Compliant — the test remains one behavior claim: the L4 emit/eval skeleton must be deferred as NYI and must carry the W1 receipt. The new assertion checks the carrier and required receipt terms via ClaimResult::NotYetImplemented(reason) at src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs:68-76. I did consider the usual “don’t pin diagnostic text” concern, but here the ratcheted behavior is specifically that this deferred claim names its gates and dissolution targets; the substring checks are narrower than full-message equality.

  1. LOCKED DESIGN DECISIONS.

N/A — the PR references PB-Runtime and PR-B only as dissolution targets in the NYI receipt at src/v3/compiler/src/test_runner.rs:2343-2345; it does not alter a locked substrate/design surface or claim a divergent design.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — the deferred unsupported-producer bridge is tracked rather than left as a vague NYI. The diff documents the bound (rust_emit_output, dag_eval_output), the gating condition (“producer identity and typed observation normalization”), and the dissolution targets (“PB-Runtime generated target-language tests” and “PR-B eager evaluator plus witness construction”) at src/v3/compiler/src/test_runner.rs:2341-2347; the test ratchets those fields at src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs:71-76.

3. Verdict

APPROVE. The PR keeps the unsupported producer pairing fail-closed, makes the temporary state more explicit, and adds a focused regression ratchet for the W1 receipt. I do not see a diff-anchored invariant, coding, testing, or debt-tracking issue to request changes on.

@briansrls
briansrls merged commit c8287a4 into main May 2, 2026
8 checks passed
briansrls added a commit that referenced this pull request May 2, 2026
- Replace piped-stderr + status() rustc wait with piped stdout/stderr + output()
  so diagnostics are drained and bounded stderr/stdout appear in Fail strings
  (addresses PR inline review: FAIL-CLOSED / no pipe deadlock).
- RAII remove_dir_all for W1 emit scratch dir; emit_rust on scoped 8MiB stack.
- L4 claim program avoids Callable fold lambdas so dag_eval uses evaluate_body;
  mixed-lineage NYI receipt cites #1495; integration asserts receipt substrings.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 2, 2026
Resolve `test_runner` / L4 harness conflicts: keep W1 wired `(rust_emit_output,
dag_eval_output)` path + extended unsupported-pair NYI receipt (#1495 coordination),
and the L4 integration `Pass` expectation over main’s deferred-receipt test.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 2, 2026
…utput (Int slice) (#1499)

* WIP: nimble-ferret-288

* chore: apply cargo fmt

* WIP: nimble-ferret-288

* fix(runner): W1 rustc use output(), drain stdio, scratch cleanup

- Replace piped-stderr + status() rustc wait with piped stdout/stderr + output()
  so diagnostics are drained and bounded stderr/stdout appear in Fail strings
  (addresses PR inline review: FAIL-CLOSED / no pipe deadlock).
- RAII remove_dir_all for W1 emit scratch dir; emit_rust on scoped 8MiB stack.
- L4 claim program avoids Callable fold lambdas so dag_eval uses evaluate_body;
  mixed-lineage NYI receipt cites #1495; integration asserts receipt substrings.

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

* WIP: nimble-ferret-288

* WIP: nimble-ferret-288

* fix(runner): wall-bound W1 rustc and emitted binary host waits

Replace unbounded Command::output() for the W1 emit-eval harness with
spawn + pipe drain threads + child_wait_for_execute_command using
EXECUTE_COMMAND_WALL_TIMEOUT and process-group kill on Unix, so a
wedged target-language child returns a fail-closed Err instead of
hanging the verifier (api-review #1499).

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

* fix(runner): bounded W1 host stdout/stderr capture with drain-to-EOF

Cap retained bytes per stream (named constants), continue draining after
the cap so children cannot stall on full pipes, and fail-closed with a
clear diagnostic when either cap is exceeded. Preserves wall timeout and
process-group kill from the prior W1 host harness (#1499 manager follow-up).

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

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
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