Skip to content
PT

Static copy

Copied from docs/en/evidence/P00-G12-conformance-and-mvp-gate.md in https://github.com/poppy-team/aipo-lang (MIT). Pinned to revision ce47c4e070404fc41722ccd8e2b7b808b99062a8, blob e057ddc0397ff34514b6c19ff2f5a9bd1b6f54b1. The source repository remains canonical; this copy is refreshed through a sync pull request, not live.

Evidence — P00-G12 / Slice S11 (Conformance Hardening & MVP Gate) ​

Goal: P00-G12 — Conformance hardening: fixtures, snapshots, gauntlet and MVP gate Phase: P00 (Foundation) · Slice: S11 · Recorded: 2026-09-15 Environment: rustc 1.98.1 (48a229cea 2026-09-01), cargo 1.98.1 (797e8a9bc 2026-08-05), Linux

Proof attachments for the required gates. Commands are reproducible from the repository root. The corpus layout and snapshot matrix live in docs/conformance/README.md; this record is the score, not the specification.

Deliverable ​

The slice turns "the MVP works" into a claim a command can falsify. Everything the MVP subset claims is either executed with a committed output, or rejected with a committed diagnostic code:

KindCountLocation
Runnable programs + stdout snapshots11 + 11docs/conformance/programs/
Diagnostic fixtures + expected codes10 + 10docs/conformance/diagnostics/
Formatter golden pairs8 + 8docs/conformance/formatting/
Module cases3docs/conformance/modules/

Snapshots are observations and are regenerated only on request (AIPO_UPDATE_SNAPSHOTS=1); diagnostic codes, formatter expectations and module fixtures are hand-authored because they are specifications.

Gauntlet rubric ​

GateWeightCommandResult
Executable MVP30%cargo test -p aipo-cli --test conformancepass — 13/13, all program and module fixtures match committed stdout
Diagnostic discipline20%same suite, failure testspass — every fixture fails with its committed code, including the guard that a parse fixture reports an AIPO_PARSE_* code
Determinism20%cargo test -p aipo-formatterpass — 11/11; formatter idempotent, canonical sources report no drift, fmt --check never rewrites
Robustness15%cargo test -p aipo-cli --test fuzz_smokepass — 3/3; random bytes, mutated programs and truncated programs never panic the pipeline
Repository gates15%cargo fmt --check, clippy -D warnings, test --workspace, docpass — all four green

Command output:

$ cargo test -p aipo-cli --test conformance
test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

$ cargo test -p aipo-cli --test fuzz_smoke
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

$ cargo test -p aipo-formatter
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Gate: fmt / check / clippy / test / doc ​

$ cargo fmt --all -- --check
FMT_EXIT=0

$ cargo check --workspace --all-targets
    Finished `dev` profile [unoptimized + debuginfo] target(s)

$ cargo clippy --workspace --all-targets -- -D warnings
(no output, exit 0)

$ cargo test --workspace
passed: 136  failed: 0

$ cargo doc --workspace --no-deps
   Generated /home/raillen/Documentos/Projetos/aipo-lang/target/doc/aipo_ast/index.html and 14 other files

MVP exit gate ​

docs/waves/wave-1-mvp.md lists five exit conditions. Status against each:

Exit conditionStatusEvidence
aipo run executes real small programsmetprograms/* snapshots, modules/* cases
aipo check reports diagnostics; aipo fmt idempotentmetdiagnostics/* fixtures; formatter golden + idempotency tests
pass/fail fixtures green; snapshots committed; integration tests greenmetconformance suite 13/13
No Rust panic escapes as user error (fuzz smoke)metfuzz_smoke 3/3
CI: fmt/clippy/test/doc green; prumo validate and prumo doctor green; docs delta resolvedmetgates above; prumo outputs below
$ prumo validate
Prumo validation passed.

$ prumo doctor
Prumo Doctor: all checks passed cleanly.

Verified gaps (gate is partial, and says why) ​

The corpus found four places where canon and the implementation still differ. Exercising them is the point of the corpus — the S11 gate does not hide them. Each is recorded in docs/adp/ADP-002-construction-hooks-and-runtime-contracts.md with a minimal demonstrating program, and each is carried as an acceptance criterion of P00-G13:

GapTodayCanon requires
G1 init not invoked by Type{...}construction only fills named fieldsconstruction runs init when declared
G2 invariant() not evaluatedinstance published uncheckedinvariants hold on publication
G3 signature contracts not checked at runtimevalue crosses the boundary uncheckedruntime check at boundaries
G4 Bytes has no construction formBytes([1,2,3]) raises AIPO_RT_NOT_CALLABLEconstruction and indexing are in scope

These are not regressions and not failures of this goal's acceptance criteria: S11's deliverable is the corpus and the honest gate, and it delivers both. They are the reason the gate is recorded as partial rather than closed.

Documentation delta ​

ArtifactChange
docs/conformance/README.mdnew — corpus layout, fixture invariants, snapshot matrix, regeneration, gauntlet rubric
docs/adp/ADP-002-construction-hooks-and-runtime-contracts.mdnew — the four verified gaps above, with demonstrating programs
docs/evidence/P00-G11-cli-and-formatter.mdrecords the S10 deliverables this slice scores
docs/evidence/P00-G10-backend-completion.mdrecords the backend gaps this slice exercises
.ai/goals/P00-G13.goal.jsonsuccessor goal for the four gaps
CHANGELOG.md, PROJECT_STATE.mdslice S11 recorded, next action set to S12