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
* fix(stop+validator): phase-aware stop docs + required_iter_root v2
ClosesAI-native-Systems-Research#198ClosesAI-native-Systems-Research#199
## AI-native-Systems-Research#198 — phase-aware nous stop
The behavioral half of AI-native-Systems-Research#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.
## AI-native-Systems-Research#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).
* test: cover validate_design required-merge + known-root overlap (AI-native-Systems-Research#199 v2)
Two test additions per pr-review-toolkit feedback on AI-native-Systems-Research#244:
1. test_required_file_at_design_time_is_allowed_not_required — pins
the validate_design behaviour added in this PR: required ⊆ allowed
merge lets a required file written during DESIGN pass the
unexpected-file check, AND validate_design does NOT enforce
required-presence (that's validate_execution's job because most
required artifacts are EXECUTE-phase outputs). Without this test,
a future refactor that inlines only the EXECUTE branch would
silently regress DESIGN.
2. test_required_overlapping_known_root_file_still_enforced —
a campaign declaring a globally-known file (e.g. findings.json)
as required must still see "required iter-root file missing"
when the file is absent, independent of the global whitelist
semantics.
Suite: 1247 passed, 1 skipped (+11 vs upstream/reflective baseline).
0 commit comments