Every document filename now mirrors its lifecycle state with a status suffix (e.g., .draft.md, .wip.md, .accepted.md). No more bare .md for tracked document types. Also renamed all from_str methods to parse to avoid FromStr trait confusion, introduced StagingDeploymentParams struct, and fixed all 19 clippy warnings across the codebase. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Spike: Rfc Status Update Not Persisting
| Status | Complete |
| Date | 2026-01-24 |
| Time Box | 1 hour |
Question
Why isn't blue_rfc_update_status (and possibly spike/ADR status updates) persisting to the database?
Root Cause
The issue is bidirectional sync failure between database and markdown files:
Problem 1: RFC/ADR status updates don't update markdown files
When blue_rfc_update_status or blue_rfc_complete are called:
- ✅ Database is updated via
update_document_status() - ❌ Markdown file is NOT updated
Compare to blue_spike_complete which correctly updates BOTH:
// spike.rs lines 118-139
state.store.update_document_status(DocType::Spike, title, "complete")?;
// ALSO updates the markdown file:
if spike_path.exists() {
let content = fs::read_to_string(&spike_path)?;
let updated = content
.replace("| **Status** | Complete |", "| **Status** | Complete |");
fs::write(&spike_path, updated)?;
}
Problem 2: Manual file edits don't update database
When users edit markdown files directly (or Claude edits them):
- ✅ Markdown file is updated
- ❌ Database is NOT updated
Evidence
| Document | DB Status | File Status |
|---|---|---|
docs-path-resolution-bug |
in-progress |
Completed |
dialogue-to-blue-directory |
in-progress |
Complete |
consistent-branch-naming |
implemented |
Implemented |
The first two were edited manually. The third was updated correctly because we used blue_rfc_complete.
Recommended Fix
Option A: Update all status change handlers to also update markdown files
- Add markdown file update logic to
blue_rfc_update_status - Add markdown file update logic to
blue_rfc_complete - Add markdown file update logic to
blue_adr_*handlers
Option B: Single source of truth
- Treat database as authoritative
- Generate markdown on-the-fly from database when needed
- More fundamental change but eliminates sync issues
Recommendation: Option A for now - it's simpler and matches the existing pattern in blue_spike_complete.
"Two sources of truth means zero sources of truth."
— Blue