gittensory_build_plan/gittensory_plan_status/gittensory_record_step_result are deliberately STATELESS (the caller holds the plan and passes it back each call — see the #783 comment at src/mcp/server.ts:321). A miner running unattended across process restarts needs somewhere to persist the plan object between calls; that's local-only bookkeeping, not new plan logic, so this issue is pure client-side infra with zero write-risk.
Deliverables
References
src/mcp/server.ts:321 (module comment: plan tools are "stateless: pass the plan back each call" — this issue is exactly the local persistence that makes that workable across restarts)
src/mcp/server.ts:345 (planDagSchema — the exact shape to validate on save/load)
- Depends on (soft, for shared DB conventions only): the local claim-ledger schema issue
gittensory_build_plan/gittensory_plan_status/gittensory_record_step_resultare deliberately STATELESS (the caller holds the plan and passes it back each call — see the#783comment atsrc/mcp/server.ts:321). A miner running unattended across process restarts needs somewhere to persist the plan object between calls; that's local-only bookkeeping, not new plan logic, so this issue is pure client-side infra with zero write-risk.Deliverables
packages/gittensory-miner/src/plan-store/store.tsexportingsavePlan(planId, plan),loadPlan(planId),listPlans(filter?)backed by local SQLite (reuse the same DB file / connection helper as the claim ledger where practical, to avoid two competing local-storage patterns in the same package)planblob round-trips EXACTLY through the realplanDagSchemazod shape (src/mcp/server.ts:345) — validate on both save and load so a corrupted local row fails loudly instead of silently feeding a malformed plan back intogittensory_plan_statusReferences
src/mcp/server.ts:321(module comment: plan tools are "stateless: pass the plan back each call" — this issue is exactly the local persistence that makes that workable across restarts)src/mcp/server.ts:345(planDagSchema— the exact shape to validate on save/load)