# Default Compaction — Implementation TODO

## Status Legend
- [ ] pending
- [~] in progress
- [x] done

---

## Implementation Steps

- [x] Deep review: read all affected files in full before writing code
- [x] `migrations/006-default-compaction.sql` — add 3 columns to sessions
- [x] `infrastructure/database.js` — ensureColumn x3 + createSession update
- [x] `settings/fields.js` — add DEFAULT_COMPACT_COUNT: 50
- [x] `schemas/agent.json` — add defaultCompaction property
- [x] `core/default-compaction.js` — new module (runDefaultCompaction + buildMessagesWithSummary)
- [x] `core/router.js` — inject summary on message load (runChat, runTask, resumeTask); pass compactCount on session create (all paths)
- [x] `api/routes/sessions.js` — POST /:id/compact endpoint + compactCount on manual session create
- [x] `docs/guide/08-memory.md` — full new section on defaultCompaction
- [x] `docs/guide/03-configuration.md` — updated compact model role description
- [x] REPORT.md — implementation presentation document

---

## Discovered During Review
- `resumeTask` used `const messages` → changed to `let` to allow injection reassignment
- `getModelConfig` falls back to `main` automatically → no need for custom fallback logic in compaction
- `camelToSnake` in `updateSession` correctly maps compactSummary/compactSize/compactCount to snake_case
- `runSubagent` and `runDaemonTick` create fresh sessions only → injection is no-op, still added compactCount to both for consistency
- `POST /sessions/:id/reset` does NOT clear compact state → noted as known gap in REPORT.md

## Known Gaps (Future Work)
- POST /sessions/:id/reset should also reset compact_summary and compact_size
- Auto-trigger based on message count (agent param) — planned per user
- POST /sessions can optionally accept compactCount override from request body
