Add pure post_restart_reconcile.reconcile_after_restart classifier with a machine-readable completion proof covering service health, sessions, leases, capabilities, worktrees, interrupted mutations (never auto-resumed), duplicates, and queue state. Soft-depends on #660 checkpoints (skipped with reason when the schema module is absent). Wire read-only MCP tool gitea_reconcile_after_restart, boot-once hook via gitea_assess_master_parity, log_only/enforce modes (mutation_hold), and docs. Closes #662 Related: #655 #652 #653 #660 #661 Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2.5 KiB
2.5 KiB
Post-restart MCP reconciliation (#662)
After an MCP process restart, sessions, leases, capabilities, worktrees, and interrupted mutations must be reconciled before operators claim a clean runtime. This document describes the #662 completion-proof path.
Components
| Piece | Where | Responsibility |
|---|---|---|
post_restart_reconcile.reconcile_after_restart |
post_restart_reconcile.py |
Pure classification: inventory → completion proof DTO. No I/O. |
RestartCompletionProof |
post_restart_reconcile.py |
Machine-readable proof (.as_dict() is JSON-serializable). |
gitea_reconcile_after_restart |
gitea_mcp_server.py |
MCP tool: gathers inventory from the #613 control-plane DB + master-parity, classifies, returns the proof. Read-only. |
| Boot hook | gitea_assess_master_parity |
First post-restart parity probe also runs reconcile once (log-only by default). |
Dimensions
The assessor classifies:
- service_health — process healthy / parity mutation-safe
- clients — connected client descriptors (optional inventory)
- sessions — active session rows with dead owner pids are unresolved
- checkpoints — soft-depends on #660; skipped with reason when schema absent
- leases — live control-plane leases after restart
- capabilities — master-parity / stale-runtime (#610)
- worktrees — lease-bound paths missing on disk
- interrupted_mutations — mutating lease phases or explicit pending inventory; never auto-resumed
- duplicates — multiple live claims on the same work item
- queue — allocator resume safety
Modes
| Mode | Env / arg | Behavior |
|---|---|---|
log_only (default) |
unset or GITEA_POST_RESTART_RECONCILE_MODE=log_only |
Proof only; mutation_hold=false |
enforce |
GITEA_POST_RESTART_RECONCILE_MODE=enforce or mode=enforce |
Sets mutation_hold=true when overall status is degraded/failed or interrupted mutations remain |
Follow-up issues
Unresolved dimensions produce proposed_follow_ups entries suitable for durable
Gitea issues. The MCP tool does not create those issues in v1 (rollout is
log-only first). Controllers may file them from the proof payload.
Links
- Umbrella: #655
- Vision: #652 · Roadmap: #653
- Checkpoint schema: #660 (soft dependency)
- Drain proof: #661 (soft)
- This issue: #662
Non-goals
- HA multi-instance failover
- Automatic silent mutation replay
- Implementing the #660 checkpoint schema itself