Skip to content

feat: add reuseKb option to preserve knowledge base across fresh starts#226

Merged
jafreck merged 1 commit intomainfrom
feat/reuse-kb
Mar 27, 2026
Merged

feat: add reuseKb option to preserve knowledge base across fresh starts#226
jafreck merged 1 commit intomainfrom
feat/reuse-kb

Conversation

@jafreck
Copy link
Copy Markdown
Owner

@jafreck jafreck commented Mar 27, 2026

Problem

Starting a fresh migration (not --resume) always re-runs the knowledge-builder agent (Phase 2), which takes 12+ minutes for large codebases like zstd. When iterating on guidance, config, or migration strategy, the source code hasn't changed — the KB index and knowledge base are still valid and shouldn't need rebuilding.

Solution

New config option options.reuseKb (default: false). When true and starting fresh:

  • Phase 0 (KB index): Already skipped via fingerprint guard — no change needed
  • Phase 1 (task graph): Completion marker preserved from prior run
  • Phase 2 (knowledge-builder): Completion marker preserved — skips the expensive agent call
  • Flow checkpoint: KB step completions carried forward so the flow runner skips them
  • Scaffold state: Preserved to avoid re-scaffolding

Everything else resets clean: planning (Phase 3), migration tasks (Phase 4), parity state, retries, token usage, and adjudication history.

Usage

{
  "options": {
    "reuseKb": true
  }
}

Then run without --resume:

npx aamf migrate -c migration.config.json

Logs: Fresh start with reuseKb — preserved phases [0, 1, 2], resuming from Phase 3

Changes

  • src/config/schema.ts — Added reuseKb option with JSDoc
  • src/core/checkpoint.ts — Extended load() to accept reuseKb, added loadPriorState() helper, logic to carry forward KB phases 0-2 while resetting everything else including flow checkpoint filtering
  • src/core/runtime.ts — Pass reuseKb through to checkpoint loader
  • tests/core/checkpoint.test.ts — 3 new tests: reuseKb with prior state, reuseKb without prior checkpoint, fresh without reuseKb
  • tests/fixtures/zstd-c-project/migration.config.json — Enabled reuseKb: true

Test Coverage

  • fresh start with reuseKb should preserve KB phases and reset everything else
  • fresh start with reuseKb but no prior checkpoint should start from scratch
  • fresh start without reuseKb should ignore prior state entirely

All 1505 tests pass.

When reuseKb is true and the migration starts fresh (not --resume), the
checkpoint preserves KB-related state from the prior run:

- Phase 0 (KB index): skipped via existing fingerprint guard
- Phase 1 (task graph): completion marker carried forward
- Phase 2 (knowledge-builder): completion marker carried forward
- Flow checkpoint: KB step completions carried forward
- Scaffold state: preserved to avoid re-scaffolding

Everything else resets: planning, migration tasks, parity state, retries,
token usage, and adjudication history. This lets users re-run migrations
with changed guidance, config, or code without re-running the expensive
knowledge-builder agent (~12+ min for large codebases).

Also enables reuseKb in the zstd migration config fixture.
@jafreck jafreck merged commit 2e4b8be into main Mar 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant