You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Closes#198Closes#199
## #198 — phase-aware nous stop
The behavioral half of #198 was already shipped (orchestrator/iteration.py
_enter_phase honours STOP sentinel before each phase transition; comprehensive
test coverage in TestEnterPhaseHonorsSentinel + TestRunIterationHaltsAtPhaseBoundary).
What lagged was user-facing documentation. Two surfaces still said
"iteration boundary":
* orchestrator/cli.py:416 — schema-doc render's See-also section.
* orchestrator/cli.py:879 — argparse help= for `nous stop`.
Both now describe phase-boundary semantics, with the argparse subparser
also gaining a `description=` so `nous stop --help` shows the full
explanation including which phase boundaries are honoured.
Tests in TestStopDocumentationReflectsPhaseAwareness pin both surfaces
against the legacy phrasing.
## #199 v2 — required_iter_root
The v1 (iter_root_extensions) was already shipped. This PR adds the
stretch goal from the issue body: campaigns can declare files that
MUST exist at the iter root after EXECUTE_ANALYZE, with structured
"required iter-root file missing: X" errors when they're absent.
Wiring:
* campaign.schema.yaml gains a validation.required_iter_root field
(array of filenames).
* orchestrator/validate.py grows _campaign_required_iter_root() and
_check_required_iter_root() helpers.
* validate_execution enforces presence; required ⊆ allowed (a required
file is also implicitly allowed at iter-root, so campaigns don't
have to list it in both blocks).
* validate_design merges required into the allowed-set for the
unexpected-file check (so campaigns that write the file during
DESIGN don't get rejected), but does NOT enforce presence at design
time — most required artifacts are EXECUTE-phase outputs.
Tests in TestRequiredIterRoot cover happy path, missing-required-fails,
implicit allowed-at-iter-root, schema acceptance, and backward-compat
(no-required-block keeps default behaviour).
Full suite: 1245 passed, 1 skipped (+9 vs upstream/reflective).
0 commit comments