-
Notifications
You must be signed in to change notification settings - Fork 0
Scenarios
VAC34 edited this page Jul 28, 2026
·
14 revisions
67 behavioral conformance scenarios (CONFORMANCE.md row 1-67). Each tests a specific SAIPEN invariant.
| # | Scenario | Invariant |
|---|---|---|
| 1 | Cold continuation | Agent with zero history resumes from STATE |
| 2 | Corrupt STATE recovery | Missing field triggers RECOVER |
| 3 | Dependency cycle | Circular needs: detected and blocked |
| 4 | Dangling needs: reference | Non-existent T-id in needs: = FAIL |
| 5 | Stale claim forfeiture | Unrefreshed claim after 15min expires |
| 6 | Goal counter crash recovery | goal_waves rebuilt from LOG lines |
| 7 | Manual-verify gate | no-shell host asks human before SHIP |
| 8 | No-publish restriction | git-less host skips tag/push, still ships |
| 9 | Read-only restriction | read-only banned from INIT/PLAN/ADD/BUILD/SHIP/CLEAN/TRANSLATE |
| 10 | Board-empty maintenance | DONE + empty TODO = auto HUNT |
| 11 | Goal objective exit | goal_mode: false after mature ADD |
| 12 | Extension absence | No extensions dir -> no SUBs, still works |
| 13 | Unresolved LOG parent | WARN but not FAIL |
| 14 | Invalid phase transition | REVIEW->SHIP PASS, INIT->SHIP FAIL |
| 15 | Mode-phase restrictions | read-only + ADD = FAIL |
| 16 | Ticket-level BLOCKED | Non-cycle failure, work continues on other tickets |
| 17 | Fresh INIT bootstrap | From templates/ on first saipen set |
| 18 | Evolutionary ADD symmetry | ADD follows priority order, never invents |
| 19 | Unclaimed DOING adoption | Crash orphan -> next agent claims it |
| 20 | Clean tree after BLOCKED | Stale work doesn't poison next ticket |
| 21 | Dirty tree on continuation | Agent adopts uncommitted changes |
| 22 | Parallel TRANSLATE isolation | Two translate runs don't stomp each other |
| 23 | Dual-location extension conflict | root vs .saipen/ ext, never merged |
| 24 | Dual-location TRANSLATE conflict | Same, isolated |
| 25 | Sub spawn on protected project | Refuses if project has uncommitted claims |
| 26 | HUNT skip hash rule | Exact HEAD match required, mtime doesn't count |
| 27 | MARKHUNT record-only | Never fixes, never caps findings |
| 28 | VERIFY hysteresis | Second block on same ticket -> escalates |
| 29 | SubSaipen STATE shape | schema-valid, mode: read-only, no TRANSLATE |
| 30 | read-only reachable phases | MARKHUNT/PREPARE/VALIDATE only |
| # | Scenario | Invariant |
|---|---|---|
| 31 | stop preserves goal counters | stop doesn't reset waves/tickets |
| 32 | goal_waves not double-counted | ADD->PLAN doesn't increment twice |
| 33 | Fixer subSaipen patch format | Patch carries base_head + verified |
| 34 | BOOT.md cold-start | Compact kernel, no rule definition |
| 35 | human_note optional | One-line nudge, never required |
| 36 | Human digest | ship/stop (over)write kitchen/digest.md |
| 37 | MARKHUNT closure self-test | Verified against its own findings |
| 38 | LOG segmentation | E-### unique across sealed+active segments |
| 39 | Shipped-library integrity | validate.py checks shipped STATEs |
| 40 | Board soft cap | BOARD.md kept readable |
| 41 | saipen status | Answers real question, never re-runs validator |
| 42 | LOG timestamp sanity | >3h future = FAIL, >5min inversion = WARN |
| 43 | Reserved | Superseded by row 54 |
| 44 | Checkpoint self-confirmation | Read back STATE after writing |
| 45 | Returning agent stale memory | Distrusts own recall, re-reads STATE |
| 46 | Safety valve is a pause | goal_mode preserved, not exit |
| 47 | Determinism invariants | Fixed action priority order |
| 48 | SubSaipen blocked not guessed | status: blocked + exact question |
| 49 | next_action vocabulary | Value must match prefix/category |
| 50 | One ticket at a time | BOARD FAILs on 2+ DOING |
| 51 | Goal counters countable trace | goal_waves LOG line required |
| 52 | MARKHUNT evidence | Finding without cite = FAIL |
| 53 | OUTBOX well-formed | status/summary/critical required |
| 54 | Deadlocked board FAIL | DONE + empty TODO + WAIT: non-valve = FAIL |
| 55 | Tripped valve shape | goal_mode: true, phase NOT BLOCKED |
| 56 | Duplicate section headings FAIL | Two ## DONE blocks = FAIL |
| 57 | WAIT category token | Closed 7-word vocabulary |
| 58 | Cross-document drift | RFC vs schema vs validator agreement |
| 59 | Checkbox-section agreement | [x] only under DONE, [ ] only under TODO/BLOCKED |
| 60 | Write confirmed by readback | All 3 checkpoint files read back |
| 61 | Command =/= transition | saipen ship recognized, direct SHIP blocked |
| 62 | Rule reaches emitting docs | Every WAIT: in phase docs carries category |
| 63 | Guides teach current shape | validate.py WARNs on stale guides |
| 64 | Portable floor not permissive | validate.sh/ps1 probe all 9 fields |
| 65 | Both halves agree | validate.sh and validate.ps1 same checks |
| 66 | CI workflow honest trigger | Header states real trigger, names pre-commit hook |
| 67 | Drift hunt validation expansion | subs README, sub next_action prefixes, self-transition enum, adapter path existence all validated |
"67 сценариев. Каждый проверяет одно правило. Никаких 'ну, это редко бывает'. Тест упал — значит что-то сломалось. Тест прошёл — значит работает. Агент не гадает. Агент проверяет."
SAIPEN v7.158.0 — One command. Zero dependencies. Zero amnesia. — MIT