Skip to content

docs: settle stage 10's semantics before its code - #84

Merged
Sequela02 merged 1 commit into
mainfrom
docs/stage-10-decisions
Nov 13, 2026
Merged

Sequela02 merged 1 commit into
mainfrom
docs/stage-10-decisions

Conversation

@Sequela02

Copy link
Copy Markdown
Contributor

Records stage 10's decisions before any code, as #69 did for stage 9, with the evidence behind them.

What changes

  • ROADMAP.md: a decision for stage 10's semantics, and stage 10 marked next.
    • Machines have fields of integers, enums and Bools; events are pure functions with their choices as parameters; and time is an ordinary field.
    • An invariant is proved only inductively. It's refuted only by a replayed trace from an initial state, and otherwise it's not_inductive. Exploration is an annotation on the obligation, not an outcome.
    • accord build writes a machine only when its invariants are proved.
    • opossum is ported faithfully.
  • docs/design/native-code-constraints.md: rows 2, 5, 8 and 10 record what machines decide for effects, value semantics, normalization and the boundary, and a bullet under "approved but not implemented" records how an invariant's outcomes are reached.
  • docs/design/measurements/2026-11-12-stage-10-machines/: the two probes, with scripts to rerun them.
    • opossum: a hand-written stand-in replaces the breaker's state flags and decisions, and its 550 tests fail the same 4 as at baseline. Two of three planted faults survive opossum's suite. Three invariants a reader would expect don't hold in opossum.
    • ProviderRetry: Z3 and cvc5 prove it inductive with four helper invariants, and both name the missing helper when one is left out. A search finds each planted fault's trace in 3 or 4 steps.

The owner's decisions behind the opossum port are recorded in #82.

Verification

  • opossum/run.sh and provider-retry/run.sh, both run from a fresh folder, reproduce every result in the measurement's README.
  • cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings and cargo test --workspace --locked (with the pinned solvers) pass. This change touches no code.

Not established: both probes are hand-written, so they don't show what Accord will generate. ProviderRetry's 148 reachable states haven't been compared with TLC.

Risk note

Two-way door, no behavior change: documentation and scripts only. Blast radius: the design record that stage 10's code will follow. The decisions are costly to reverse once code depends on them, which is why they're recorded first. Evidence: the two reproducible runs above.

Refs #82

Stage 10 adds machines, and the native code constraints list effects,
value semantics, normalization and the boundary as costly to reverse.
Record each decision before any code, with two probes behind them: a
hand-written stand-in replacing opossum's breaker state with opossum's
tests unchanged, and ProviderRetry's inductive obligations under both
solvers with and without helper invariants. Both probes are kept with
their scripts so they can be rerun.

Refs #82
@Sequela02 Sequela02 added the full-ci Run Windows and macOS CI once before merging label Nov 13, 2026
@Sequela02
Sequela02 merged commit 812eae8 into main Nov 13, 2026
5 checks passed
@Sequela02
Sequela02 deleted the docs/stage-10-decisions branch November 13, 2026 01:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-ci Run Windows and macOS CI once before merging

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant