skills/use-trueup/SKILL.md
Detects drift between implementation and spec before committing. Use when about to commit, after implementation, or asking "is the spec accurate?" Compares staged diffs against specs to surface and reconcile decisions.
npx skillsauth add philoserf/claude-code-setup skills/use-trueupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Detect decisions made during implementation that aren't in the spec. Review them. Reconcile. Then commit.
brainstorming → writing-plans → [implementation] → true-up → commit
true-up fills the gap between "start building" and "commit." It catches choices made in code that the spec doesn't reflect — architecture decisions, behavior changes, data model choices — and ensures the spec stays true before the commit lands.
/use-trueup coveragevc-ship)Find the spec files to reconcile against. Check in this order:
.true-up file exists in the project root, read it as JSON and use spec_paths:
{
"spec_paths": ["docs/spec.md", "docs/design/"]
}
Store the resolved spec paths for the rest of this invocation. Do not cache across sessions.
Run git diff --cached --stat. If empty, tell the user "No staged changes to review" and stop.
Run git diff --cached to get the complete diff.
Read each spec file found during discovery. Hold the full content in context.
If the sidecar file exists (.true-up/decisions.jsonl relative to the spec root — see Sidecar File section), read it. Any entries with "status": "pending" are carried forward into this review session.
Compare the staged diff against the spec content. Look for prescriptive choices in the diff that are NOT already captured in the spec. A "decision" is a choice that affects:
Ignore changes that are only:
For each decision found, determine:
If there are pending or rejected decisions from the sidecar (Step 4), compare each new decision against them:
If no decisions are found (no new decisions and no pending decisions from sidecar), tell the user "No spec drift detected. Ready to commit." and proceed to the Commit section.
Otherwise, present each decision one at a time using this format:
true-up found [N] decision(s) to review.
Decision [X of N]
Question: [question]
Decision made: [decision]
Spec: [spec_file] § [spec_section]
Diff: [file:lines]
How would you like to handle this?
- Approve — update the spec to reflect this decision
- Reject — modify the staged code to undo this decision
- Edit — rewrite the decision before approving
- Skip — leave pending for next invocation
Wait for the user's response before proceeding to the next decision.
diff_context. If the revert is non-trivial (spans multiple files or requires redesign), describe the required changes to the user and ask them to confirm before touching code.git add, tell the user what changed."status": "rejected" and the rejection reason."status": "pending".All decisions must be explicitly reviewed. Never auto-approve. Never skip without the user saying to skip.
The sidecar stores pending and rejected decisions between invocations.
Location: .true-up/decisions.jsonl relative to the resolved spec root — the first spec_paths entry's parent directory from .true-up config, or the path the user provided during discovery.
Format: One JSON object per line:
{
"id": "dec-<8 random hex chars>",
"status": "pending",
"spec_file": "docs/specs/2026-04-01-auth-design.md",
"spec_section": "## Token Management",
"question": "Should tokens expire on inactivity or only on logout?",
"decision": "Tokens expire after 30 minutes of inactivity.",
"diff_context": "src/auth.py:42-58",
"rejection_reason": null,
"created_at": "2026-04-06T14:32:00Z"
}
.true-up/ directory under the spec root if it doesn't exist.id as dec- followed by 8 random hex characters.created_at to current ISO 8601 timestamp."status": "pending" as active."status": "rejected" are kept for reference but not re-presented.On first invocation, check that the sidecar directory is in .gitignore. If not, append the path (e.g., docs/specs/.true-up/) to .gitignore with a # true-up working state comment.
After all decisions have been reviewed (none remaining):
git add [spec files]If any decisions were skipped, warn: "[N] decision(s) were skipped and will resurface next time." The user decides whether to commit with skipped decisions or go back and resolve them.
When the user asks about spec-to-test coverage, read and follow the instructions in references/coverage.md.
> /use-trueup
Checking staged changes... 3 files changed.
Reading specs from docs/specs/...
Comparing diff against 2026-04-01-api-design.md...
true-up found 2 decision(s) to review.
Decision 1 of 2
Question: How should API responses be cached?
Decision made: Added in-memory LRU cache with 5-minute TTL.
Spec: 2026-04-01-api-design.md § Performance
Diff: src/api/handler.py:42-58
> approve
Updated 2026-04-01-api-design.md § Performance to reflect:
Added in-memory LRU cache with 5-minute TTL.
Decision 2 of 2
Question: Should input validation run on internal endpoints?
Decision made: Skipped validation for internal-only routes.
Spec: 2026-04-01-api-design.md § Validation
Diff: src/api/middleware.py:15-22
> reject
What's the reason? > Internal endpoints still receive untrusted data from other services.
Reverting src/api/middleware.py:15-22...
Running tests... 14/14 passed.
Staged modified files.
All decisions reviewed. Spec is up to date. Ready to commit.
.claude/memory/ — design decisions belong in the spec, not in memory.~/.claude/ global directories.code-auditdiff-reviewvc-shiptesting
Audits ~/.claude/skills/ for unused entries, duplicate names, missing descriptions, and the longest descriptions. Use when trimming the user-level skill set, asking which skills are unused, finding duplicates, or auditing skill hygiene.
tools
Publishes and manages Flowershow sites with the `fl` CLI (the Go-based successor to the deprecated `@flowershow/publish` npm package). Use when publishing a note or folder to Flowershow, syncing updates to an existing site, managing auth, listing or deleting sites, or installing/upgrading the CLI.
tools
Copy edits prose while preserving voice and register. Use when asked to edit, copy edit, line edit, proofread, revise, polish, tighten, rewrite, or clean up essays, articles, drafts, or fiction. Flags wordiness, passive voice, clichés, hedging, and nominalizations with bracket markup or clean rewrites.
tools
Improves CLAUDE.md by analyzing conversation patterns. Use when Claude keeps repeating a mistake, when teaching a new preference, or when consolidating guidance from repeated instructions. Captures recurring corrections and style preferences into project instructions.