Llc-ops_public Reconcile
Living document reconciliation — maintain the VISION/SPEC/BUILDING triangle
git clone https://github.com/eddiebelaval/llc-ops_public
T=$(mktemp -d) && git clone --depth=1 https://github.com/eddiebelaval/llc-ops_public "$T" && mkdir -p ~/.claude/skills && cp -r "$T/squire/skills/reconcile" ~/.claude/skills/eddiebelaval-llc-ops-public-reconcile && rm -rf "$T"
squire/skills/reconcile/SKILL.mdReconcile — Living Document Reconciliation
Maintain the three-document triangle: VISION.md (north star), SPEC.md (contract), BUILDING.md (journal). This skill is conversational — it asks questions, listens, and writes the docs. the user talks, Claude writes.
Core Workflows
Workflow 1: Reconciliation Interview
- Detect environment and locate triangle documents
- Read all existing docs into context
- Interview the user conversationally about changes
- Update affected documents
- Report delta between VISION and SPEC (= roadmap)
Workflow 2: Initialize Triangle
- Create VISION.md, SPEC.md, BUILDING.md from conversation
- Interview for each document in sequence
- Write all three with consistent voice
Core Philosophy
The triangle self-corrects through conversation. VISION evolves when the user learns something. SPEC evolves when reality changes. BUILDING records what happened. The gap between VISION and SPEC IS the roadmap.
CRITICAL: This is an interview, not a form. Use
AskUserQuestion for structured choices. Use natural conversation for open-ended questions. NEVER hand the user a template with brackets to fill in. Ask, listen, write.
Step 0: Detect Environment
- Identify the project from
flag or current directory.--project - Resolve the project root using the same logic as workspace generators (walk up to
or use known project paths)..git - Check which triangle documents exist:
at project rootVISION.md
at project rootSPEC.md
at project rootBUILDING.md
- Read all existing triangle documents into context.
- State: "Reconciling [PROJECT] on branch [BRANCH]"
- If mode is
and documents already exist, warn and confirm before overwriting.init
Mode: init
— Initialize the Triangle
initWhen VISION.md and/or SPEC.md don't exist yet. BUILDING.md is assumed to exist (or will be created separately per existing conventions).
Phase 1: Soul Interview (for VISION.md)
Start with the most important question. Use
AskUserQuestion:
Q1: "In one breath — why does [PRODUCT] exist? Not what it does. Why it exists. What world does it create?"
Listen. Write the Soul section from their answer. Read it back for confirmation.
Q2: "Who is this for? Not demographics — tell me about the person. What are they feeling before they find [PRODUCT]? What do they feel after?"
Listen. Write the User Truth section.
Q3: "What are the 3-7 commitments this product makes? The things it MUST be or do to fulfill that soul. Don't think about features — think about promises."
For each pillar they name, ask: "Is this realized today, partially built, or still unrealized?"
Write the Pillars section with status markers.
Q4: "What must [PRODUCT] NEVER become? What are the traps, the tempting-but-wrong directions?"
Write the Anti-Vision section.
Q5: "Where does [PRODUCT] end? What adjacent problems does it deliberately refuse to solve?"
Write the Edges section.
Create
VISION.md at the project root using the template structure from ~/.claude/doc-templates/vision.md. Populate the Evolution Log with a single entry: today's date, "Initial vision captured", "Triangle initialization".
Phase 2: Reality Scan (for SPEC.md)
This phase is automated — scan the codebase, don't ask the user about what already exists.
- Read existing docs: BUILDING.md, CLAUDE.md, README.md, package.json
- Scan architecture: Glob for key patterns:
(API routes)**/app/api/**/route.ts
(pages)**/app/**/page.tsx
(components)**/components/**/*.tsx
(core logic)**/lib/**/*
or**/*.test.*
(tests)**/*.spec.*
(database)**/migrations/**
patterns (integrations).env*
- Extract capabilities: From routes, pages, and components, derive what the product CAN DO today.
- Extract architecture: From imports and config, derive the tech stack.
- Extract boundaries: From what's NOT in the codebase (reference VISION pillars marked UNREALIZED).
- Build verification surface: For each capability, write a testable assertion.
Draft SPEC.md and present a summary to the user:
- "Here's what I found. [N] capabilities, [M] integrations, [K] things that don't exist yet."
- "Does this match your understanding of what [PRODUCT] is today?"
If the user corrects anything, update and re-present.
Create
SPEC.md at the project root using the template structure from ~/.claude/doc-templates/spec.md.
Phase 3: Triangle Summary
Show the completed triangle:
VISION: [Soul — one sentence] [N] pillars ([R] realized, [P] partial, [U] unrealized) SPEC: [Identity — one sentence] [C] capabilities, [I] integrations Verification: [V] assertions BUILDING: [exists/created] Distance: [X]% (VISION pillars realized in SPEC)
Mode: scan
— Drift Detection
scanRead VISION.md and SPEC.md. Scan for drift without making changes.
Scan 1: SPEC vs. Codebase
Check whether SPEC.md matches reality:
- Capabilities check: For each capability listed in SPEC, verify the referenced routes/components/pages still exist and function as described.
- Architecture check: Verify the tech stack table matches actual dependencies in package.json and imports.
- Integrations check: Verify listed integrations are still active (env vars present, imports exist).
- New capabilities: Scan for routes/pages/features NOT listed in SPEC (things that shipped but weren't recorded).
- Dead capabilities: Check for SPEC entries whose backing code was removed.
Scan 2: VISION vs. SPEC
Check alignment between north star and current state:
- Pillar status audit: For each VISION pillar, check whether SPEC capabilities support its current status marker. Flag if a pillar says UNREALIZED but SPEC shows related capabilities, or vice versa.
- Distance calculation: Recalculate the "X% of pillars realized" metric.
- Boundary alignment: Check SPEC boundaries against VISION edges — are they consistent?
Scan 3: BUILDING vs. Both
Quick check for major events in BUILDING.md that should have triggered updates:
- Look at BUILDING.md entries after the last SPEC reconciliation date.
- Flag any entries that describe new capabilities, architecture changes, or pivots that aren't reflected in SPEC or VISION.
Output
Present a drift report:
DRIFT REPORT — [PROJECT] — [DATE] SPEC Drift: [N] capabilities match codebase [M] capabilities not in codebase (stale) [K] codebase features not in SPEC (undocumented) [J] architecture mismatches VISION Drift: [P] pillar status changes detected Distance: SPEC says [X]%, actual appears to be [Y]% BUILDING Gap: [B] entries since last reconciliation not reflected in SPEC/VISION Overall: [CURRENT / DRIFTED / STALE]
If drift is found, ask: "Want me to reconcile now, or just flag this for later?"
Mode: vision
— North Star Evolution
visionSomething changed in the user's understanding of the product. This is the most conversational mode.
The Interview
Do NOT ask "what changed?" — that's too open. Ask specific questions:
Q1 (AskUserQuestion): "Which part of the vision shifted?" Options:
- Soul (why this exists)
- A pillar changed status
- New pillar needed
- A pillar should be removed
- User truth evolved (who this is for)
- Edges/Anti-Vision changed
- Something else
Based on their answer, dive deeper:
If Soul: "That's a pivot signal. What happened that changed why [PRODUCT] exists? What did you learn?"
If Pillar status: "Which pillar?" (list them with current status). Then: "What's the new status? What evidence or signal drove this change?"
If New pillar: "What's the commitment? Why is it essential — what breaks without it? Is it realized, partial, or unrealized right now?"
If Remove pillar: "Which one? Why isn't it a commitment anymore? Was it wrong from the start, or did the product outgrow it?"
If User truth: "What did you learn about the user? Was this from a real conversation, usage data, or a realization?"
If Edges/Anti-Vision: "What new boundary or failure mode did you identify? What prompted this?"
Write the Update
- Read current VISION.md.
- REWRITE the affected section (don't append — overwrite with the new truth).
- Add an entry to the Evolution Log with: date, what shifted, the signal that caused it, which section was rewritten.
- Update the distance/confidence metrics in the header if applicable.
- Present the diff to the user: "Here's what changed in VISION.md — [summary]."
- If the VISION change implies SPEC should change too (e.g., a pillar went from UNREALIZED to PARTIAL), flag it: "This also means SPEC.md needs updating. Want me to reconcile SPEC too?"
Mode: spec
— Contract Reconciliation
specSomething shipped or changed in the codebase. SPEC needs to match reality.
Phase 1: Auto-Scan
Run the same codebase scan as
scan mode, Scan 1 (SPEC vs. Codebase). Identify:
- New capabilities to add
- Stale capabilities to remove or update
- Architecture changes
- New/removed integrations
Phase 2: Conversational Confirmation
Present findings to the user:
"I scanned the codebase and found [N] things that changed since SPEC was last reconciled:"
List each finding as a short bullet. Then ask:
For new capabilities: "Should I add [CAPABILITY] to the spec? Here's what I'd write: [one-line description]."
For stale entries: "This capability is listed but the backing code is gone: [CAPABILITY]. Remove from SPEC?"
For architecture changes: "The stack changed — [OLD] is now [NEW]. Update the architecture contract?"
Phase 3: Write Updates
- Read current SPEC.md.
- REWRITE affected sections (capabilities, architecture, integrations, boundaries).
- Update the Drift Log with entries for each change.
- Recalculate VISION alignment percentage.
- Update the header (last reconciled date, drift status → CURRENT, stage if applicable).
- Update Verification Surface: For each new capability, add a testable assertion. For removed capabilities, remove the assertion.
- Present summary: "SPEC.md reconciled. [N] capabilities added, [M] removed, [K] updated. Verification surface now has [V] assertions."
Phase 4: VISION Check
After SPEC update, check if any VISION pillars changed status as a result:
- "Pillar [X] was marked PARTIAL — based on what just shipped, should this be REALIZED now?"
- If yes, offer to update VISION.md too (switch to
mode for that section).vision
Mode: Full Reconcile (default, no arguments)
Run all modes in sequence:
- Scan — detect all drift
- SPEC reconcile — update contract to match codebase
- VISION interview — ask what shifted in understanding
- Present final triangle summary
This is the "quarterly checkup" mode. Use it before major releases, after pivots, or when things feel off.
Rules
- NEVER hand the user a doc full of brackets. Interview him. He talks, you write.
- Rewrite, don't append. VISION and SPEC are present-tense documents. When something changes, the section is rewritten to be true NOW. The logs (Evolution Log, Drift Log) capture what changed and why.
- Present tense only in SPEC. "The system DOES X" — never "will do" or "should do."
- Directional language in VISION. "This product exists to..." — aspirational but grounded.
- Always update logs. Every change to VISION gets an Evolution Log entry. Every change to SPEC gets a Drift Log entry. No exceptions.
- Flag cross-document impact. If a VISION change implies SPEC changes (or vice versa), say so explicitly and offer to update both.
- Don't touch BUILDING.md. That document is updated as part of the release SOP, not during reconciliation. It's the journal — it captures what happened when it happened.
- Distance metric must stay accurate. After any update, recalculate the pillar realization percentage in both document headers.
- Use the project's existing voice. Read BUILDING.md and VISION.md before writing to match tone. Parallax sounds different than Homer.
- Respect the Anti-Vision. If a proposed SPEC capability contradicts the VISION Anti-Vision section, flag it immediately: "This conflicts with your Anti-Vision: [quote]. Proceed anyway?"
Integration with Pipeline
- Gate passes (any stage): Run
— something shipped, SPEC should reflect it./reconcile spec - Pivots or learning moments: Run
— the north star shifted./reconcile vision - Before release PR to main: Run
— ensure the triangle is tight./reconcile scan - New project initialization: Run
— start the triangle./reconcile init --project [name] - Quarterly or when things feel off: Run
(full) — the complete checkup./reconcile
Derived Outputs (Triad Derivation Engine)
The triangle doesn't just maintain itself — it produces computed outputs. These are views over the three source documents, never stored, always fresh:
| Command | Function | Inputs |
|---|---|---|
| Prioritized build order | |
| Trajectory analysis — converging or wandering? | |
| What shipped recently | |
| Investor/user-facing narrative | |
| Technical + product debt report | |
| New contributor orientation | |
Full specifications:
.claude/skills/triad-derive/SKILL.md
After any
/reconcile operation that changes VISION or SPEC, mention that derived outputs (/roadmap, /drift, etc.) will reflect the changes automatically.
Quick Reference
| Situation | Command | What Happens |
|---|---|---|
| New project needs the triangle | | Soul interview + codebase scan |
| Something shipped | | Scan code, update contract |
| I learned something about the product | | Conversational interview, update north star |
| Things feel off / pre-release | | Drift report, no edits |
| Full checkup | | Scan + SPEC update + VISION interview |
| What should I build next? | | Prioritized gap analysis |
| Are we building the right things? | | Trajectory + scope creep detection |
| What shipped? | | Recent changes by type |
| Explain this product to someone | | Vision + proof narrative |
| What's rotting? | | Tech + product debt scan |
| New team member joining | | Context + gotchas guide |