Fix phases index¶
Ordered execution plan for framework correctness after the security / reliability / agent-loop hunts. The stability track (fail-closed guards, toolkit factory, loop decomposition, adversarial CI gate) is largely complete -- these phases close residual security bypasses, agent-loop lies, budget gaps, and operator confusion.
See also: System overview, Hardening guide, Security audit snapshot.
Recommended execution sequence¶
| Order | Plan | Effort | Risk | Depends on | Ships after merge |
|---|---|---|---|---|---|
| A | fix-phase-a-shell-containment.md | M | Med | -- | Done -- restricted shell blocks ~/$HOME/flag-value path bypasses; adversarial regressions in CI |
| B | fix-phase-b-goal-lifecycle.md | M | Med | -- | Done -- Profile max_steps / temperature honored; MAX_STEPS and zombie goals handled with explicit policy + telemetry |
| D | fix-phase-d-budget-hard-ceiling.md | M | Med | B (spend recorded on all exit paths) | Done -- reservation hard ceiling, timeout spend accounting, optional persist, unlimited-budget clarity |
| F | fix-phase-f-collaboration-safety.md | M | Med | A (shared sanitization patterns) | Done -- Schedule IDOR closed; operator nudges sanitized; optional secure-profile template |
| C | fix-phase-c-pursuit-continuity.md | L | Med–High | B | Done -- Multi-heartbeat goals retain ReAct transcript; resume instead of amnesia each cycle |
| E | fix-phase-e-memory-unification.md | M | Med | C (pursuit session id stable) | Done -- One memory story: recall on pursuit + goal-gen context; memory_set visible to daemon semantic store |
| G | fix-phase-g-operator-dx-config-truth.md | M | Low–Med | D, F | Done -- Config reload contract + REST docs; toolkit cache; unified goal-gen save/budget ordering |
All fix phases A–G complete. Next track: framework stabilization index (merge-gate recovery, restart continuity, security closure, operator truth, CI soak). Older deferrals remain under Out of scope (later backlog) below.
Start here: Phase A -- highest severity, smallest blast radius, no dependency on agent-loop redesign.
Parallelizable after A: B and F (independent). D should follow B so pursuit/generation spend paths are consistent before reservation logic.
Dependencies (diagram)¶
flowchart LR
A[Phase A shell]
B[Phase B goals]
C[Phase C pursuit]
D[Phase D budget]
E[Phase E memory]
F[Phase F collab]
G[Phase G DX]
A --> F
B --> D
B --> C
C --> E
D --> G
F --> G
Effort legend¶
| Size | Meaning |
|---|---|
| S | ≤ 1 day, mostly tests/docs |
| M | 2–3 days, focused module changes |
| L | 4+ days or design + multi-PR |
Risk legend¶
| Level | Meaning |
|---|---|
| Low | Docs / perf-only; behavior unchanged or strictly tighter |
| Med | Behavior change with tests + rollback via config |
| Med–High | Persistence format or pursuit semantics change |
Out of scope (later backlog)¶
| Item | Reason |
|---|---|
Default guardrails.enabled: true / approval.enabled: true |
Product / deployment template; optional secure profile in Phase F only |
| Full regex guardrail rewrite | Phase F documents bypass limits; replacement engine is a separate track |
| PostgreSQL / second store backend | YAGNI |
| Full swarm routing product feature | Not framework correctness |
Consolidating hardening-guide.md / hardening-spec.md / audit doc |
Docs hygiene |
run_once vs daemon run API parity |
Phase G notes gaps; unification is API product work |
| Persona / life-event edge-case sweep | Phase B/G add telemetry hooks; deep persona audit deferred |
| HTTPS IP pinning (optional in F) | Ship only if team accepts TLS/SNI tradeoffs; HTTP pinning already exists |
Relationship to stability track¶
| Stability plan | Fix phase overlap |
|---|---|
| stability-03 orchestrator workspace ctor | Phase F verifies unset-workspace residual; do not duplicate if 03 merged |
| stability-01 budget kill-switch | Phase D adds reservation + timeout spend; builds on 01 |
| stability-05 adversarial CI | Every phase extends tests/adversarial/ |
Merge gate command¶
uv run pytest tests/adversarial/ -v --tb=short
uv run pytest tests/ -v
uv run ruff check src/ tests/
uv run mypy src/