Skip to content

Study planning preflight acceptance specification

Status: normative for the read-only plan_study / vamos study plan slice

Contract: Durable study and StudyManifest v1

These cases are separate from the persisted-state SA-* inventory. Planning may resolve supported built-ins and inspect a proposed destination, but it creates no directory, evaluates no objective, and publishes no canonical state. The IDs are contiguous and must not be renumbered.

ID Operation Input Expected result Invariant
PL-001 Python plan Minimal supported StudySpec Immutable ready report with plan/task identities Planning uses the canonical resolver
PL-002 Python plan Explicit empty matrix Ready zero-task, zero-budget report Empty plans remain representable
PL-003 Python plan Same spec twice Equal plan ID and task IDs Resolution is deterministic
PL-004 Python plan Equivalent reordered matrix Equal plan ID and task set Scientific identity is order-independent
PL-005 Budget summary Several resolved tasks Exact sum of per-task evaluation budgets No runtime estimate is fabricated
PL-006 Seed summary Explicit seed matrix Every concrete resolved seed reported Seeds are never regenerated
PL-007 Backend summary Explicit or resolved backend Exact kernel/evaluation component IDs No backend is substituted
PL-008 Algorithm validation NSGA-III reference directions and population Compatible cardinality resolves; mismatch is actionable Invalid execution shape fails before publication
PL-009 Duplicate validation Duplicate canonical matrix task DUPLICATE_CANONICAL_TASK Duplicate work is rejected
PL-010 Component validation Unsupported problem or algorithm Typed field/matrix resolution error No arbitrary provider import
PL-011 Budget validation Budget below initial population INVALID_EVALUATION_BUDGET Impossible initial execution is rejected
PL-012 Backend validation Unavailable backend Typed resolution error No silent fallback
PL-013 Output inspection Absent path available, with race advisory The path is not created or reserved
PL-014 Output inspection File, empty directory, canonical study, unrelated or invalid directory Distinct occupied classifications Every existing path matches create collision semantics
PL-015 Side-effect audit Missing parent/output Tree remains byte-identical Planning performs zero filesystem writes
PL-016 Execution audit Objective raises if evaluated Valid report and zero evaluations Planning never optimizes
PL-017 Python/CLI equivalence Same JSON fields and StudySpec Equal plan/task identities and summaries CLI delegates to the public planner
PL-018 JSON automation Success, collision, and invalid input with --json One vamos.study-command-result v1 document on stdout No mixed human stdout or traceback
PL-019 Installed wheel Python and console command in a clean environment Both preflight paths succeed without repository imports Packaging includes the complete feature
PL-020 Plan/create equivalence Same StudySpec Exact plan ID, task IDs, ordering, specs, seeds, operators, backend, population and budget No second resolver exists
PL-021 Architecture quality Public API, typing, architecture and remnant checks All development ratchets pass No legacy path, dependency, or typing debt is added

Stable JSON envelope

Both successful and invalid command outcomes use:

document_type = "vamos.study-command-result"
schema_version = "1.0.0"
operation = "plan"

The common envelope always includes operation, status, exit code, study/plan identities, changed, payload, warnings, structured errors, and next actions. The plan payload retains validity, execution/write flags, task identities, component summaries, and advisory output status. Invalid input leaves identity fields empty rather than inventing partial state.