Skip to content

spec(crux-ship-001): require classifier + CLI wiring + e2e in same PR#985

Merged
noahgift merged 2 commits into
mainfrom
spec/crux-ship-001-v2
Apr 21, 2026
Merged

spec(crux-ship-001): require classifier + CLI wiring + e2e in same PR#985
noahgift merged 2 commits into
mainfrom
spec/crux-ship-001-v2

Conversation

@noahgift

Copy link
Copy Markdown
Contributor

Summary

Adds shipping_discipline: section to contracts/crux-competitive-research-ux-v1.yaml codifying CRUX-SHIP-001: every CRUX PR must ship the pure-Rust classifier AND working apr CLI wiring AND at least one end-to-end test in the same commit.

Rationale (Toyota Way): classifier-only (PARTIAL_ALGORITHM_LEVEL-only) PRs produce well-documented empty promises — specs rot, follow-ups never land, users can't reach the feature. A classifier that proves an invariant in pure Rust but isn't reachable via apr is operationally useless.

What changed

  • 4 merge gates: g1_classifier_green, g2_cli_reachable, g3_e2e_runs, g4_contract_discharged.
  • 3 declared exceptions (BLOCKER-UPSTREAM-MISSING, BLOCKER-FIXTURE-ABSENT, BLOCKER-SPEC-OPEN) for when wiring genuinely can't land yet — blocker id must appear in BOTH the PR body and the contract's full_discharge_blocked_on.
  • Forbidden blockers listed explicitly ("I'll do it in a follow-up PR" is banned).
  • Backfill obligation: pre-2026-04-21 classifier-only PRs (C-15/16/17/22/23) grandfathered via crux-wireup-<id> follow-up tickets.

pv validate

0 error(s), 0 warning(s)
Contract is valid.

Test plan

  • pv validate contracts/crux-competitive-research-ux-v1.yaml — 0/0
  • One file, +89 lines, no collateral changes
  • CI green (gate + workspace-test)

🤖 Generated with Claude Code

Adds `shipping_discipline:` section to contracts/crux-competitive-research-ux-v1.yaml
codifying CRUX-SHIP-001: every CRUX PR must ship the pure-Rust classifier
AND working `apr` CLI wiring AND at least one end-to-end test (assert_cmd
or subprocess) in the same commit.

Rationale: classifier-only (PARTIAL_ALGORITHM_LEVEL-only) PRs produce
well-documented empty promises — specs rot, follow-ups never land, users
can't reach the feature. Toyota Way: a PR that doesn't pass value
downstream to a real user hasn't completed.

- 4 merge gates (g1 classifier green; g2 CLI reachable; g3 e2e runs;
  g4 contract discharged).
- 3 declared exceptions (BLOCKER-UPSTREAM-MISSING, BLOCKER-FIXTURE-ABSENT,
  BLOCKER-SPEC-OPEN) for when wiring genuinely can't land yet — blocker
  id must appear in BOTH the PR body and the contract's
  `full_discharge_blocked_on`.
- Forbidden blockers explicitly listed ("I'll do it in a follow-up PR"
  is banned).
- Pre-2026-04-21 classifier-only PRs (C-15/16/17/22/23) grandfathered
  via `crux-wireup-<id>` follow-up tickets.

pv validate: 0 errors, 0 warnings.

Ref: contracts/crux-competitive-research-ux-v1.yaml § shipping_discipline

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@noahgift noahgift merged commit 75fd24d into main Apr 21, 2026
10 checks passed
@noahgift noahgift deleted the spec/crux-ship-001-v2 branch April 21, 2026 09:34
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