skills/cmd-plan-store/SKILL.md
Capture the current conversation's plan, decisions, and action items into a structured markdown file in the project's plans/ directory. Triggers on "store this plan", "save this plan for later", "document this for later", "write up what we discussed", "create a plan file", or "/cmd-plan-store".
npx skillsauth add olshansk/agent-skills cmd-plan-storeInstall 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.
Capture the current conversation into a structured, reviewable plan file.
Scan the full conversation for:
If the user passed a description as an argument (e.g., /cmd-plan-store auth refactor), use it as DESCRIPTION. Otherwise, infer a 2-4 word slug from the conversation topic.
Build the document using the Document Structure below. Not every section is required — omit sections that have no content rather than leaving them empty. The goal is a document that someone (including future-you) can pick up cold and understand what was decided, what's next, and why.
Present the draft to the user before writing.
Step 3a — Write the file:
mkdir -p plans/
Write to the path defined in Output Path.
Step 3b — Confirm with the user:
Present the file path and a brief summary to the user. Ask if they want to adjust anything before finalizing.
plans/{YYYY}_{MM}_{DD}_{description}.md
Examples:
plans/2026_04_02_auth_refactor.mdplans/2026_04_02_frontend_split.mdplans/2026_04_02_migration_engine_redesign.md# {Title} <!-- omit in toc -->
Date: YYYY-MM-DD
Source: conversation with Claude
- [Table of Contents entries...]
Always include a Table of Contents. Omit the top-level heading from the ToC using <!-- omit in toc -->.
Single italicized sentence (max 120 chars) summarizing the most important outcome or decision.
Place immediately after the ToC, before any sections.
Brief background on what prompted this plan. 2-4 bullets max. Include:
A table summarizing key decisions from the conversation:
| S | Decision | Rationale | |---|----------|-----------| | 🟢 | What was decided | Why this choice was made | | ... | ... | ... |
🟢 Approved · 🟡 Tentative · 🔴 Rejected · ⚪ Deferred
High-level summary table of phases or work items:
| S | Phase / Item | Component | Description | Priority |
|---|-------------|-----------|-------------|----------|
| 🟢 | Phase 1 | module.py | What this phase does | P0 |
| 🟡 | Phase 2 | client/js/ | What this phase does | P1 |
| ⚪ | Future | TBD | Deferred work | P2 |
🟢 Ready to start · 🟡 Needs more detail · 🔴 Blocked · ⚪ Deferred
Priority labels: P0 (do first), P1 (do next), P2 (backlog)
Checkboxed list grouped by priority. Each item should be concrete and actionable:
P0 — Do first:
file_path reference if applicableP1 — Do next:
P2 — Backlog:
For multi-phase plans, expand each phase with:
## Phase N: {Name}
_One-line italicized summary of what this phase achieves._
**Goal:** What success looks like
**Steps:**
- [ ] Step 1 — description
- [ ] Step 2 — description
**Verify:** How to confirm this phase is done (e.g., `cd server && uv run pytest`)
**Key files:**
| File | Change |
|------|--------|
| `path/to/file.py` | What changes |
Only include phases that were actually discussed. Don't invent phases.
| S | Item | Impact | Notes | |---|------|--------|-------| | 🔴 | Risk or blocker | What breaks if unaddressed | Mitigation or next step | | 🟡 | Open question | What it affects | Who needs to answer | | ⚪ | Nice-to-know | Low impact | Context for later |
🔴 High risk · 🟡 Medium / open question · ⚪ Low / informational
Bullet list of links, prior plans, or external resources mentioned:
plans/prior_plan.md — what it coversUse colored circles consistently as the first column in all tables:
| Circle | Meaning (adapt label to section context) | |--------|------------------------------------------| | 🟢 | Positive: approved, ready, new, complete | | 🟡 | Caution: tentative, needs detail, in progress | | 🔴 | Negative: rejected, blocked, high risk, critical | | ⚪ | Neutral: deferred, informational, no action |
Always include a one-line legend as a blockquote below each table explaining what the circles mean in that context.
- [ ]): Use for all actionable items so the user can track progress## for major sections, ### for subsections. Don't go deeper than ####<!-- omit in toc -->: Use on the top-level # heading only# QC Cache Redesign <!-- omit in toc -->
Date: 2026-04-02
Source: conversation with Claude
- [tl;dr](#tldr)
- [Context](#context)
- [Decisions Made](#decisions-made)
- [Plan Overview](#plan-overview)
- [Action Items](#action-items)
- [Phase 1: Fingerprint-based invalidation](#phase-1-fingerprint-based-invalidation)
- [Phase 2: Background refresh](#phase-2-background-refresh)
- [Risks & Open Questions](#risks--open-questions)
_tl;dr Replace time-based QC cache with fingerprint-based invalidation to eliminate stale results after migrations._
## Context
- QC results were cached with a 5-minute TTL, causing stale data after migration edits
- Users reported QC tab showing pre-migration outliers after applying fixes
- Prior plan: `plans/2026_03_28_staleness_system.md`
## Decisions Made
| S | Decision | Rationale |
|---|----------|-----------|
| 🟢 | Use content fingerprint, not timestamps | Timestamps miss in-place edits to migration JSON |
| 🟢 | Hash migration file + source data | Captures both data changes and rule changes |
| 🟡 | Consider background pre-warming | Deferred — evaluate after P0 lands |
| 🔴 | Rejected: per-field granular caching | Too complex for current data volume |
> 🟢 Approved · 🟡 Tentative · 🔴 Rejected · ⚪ Deferred
## Plan Overview
| S | Phase | Component | Description | Priority |
|---|-------|-----------|-------------|----------|
| 🟢 | Phase 1 | `server/core/qc_engine.py` | Fingerprint-based cache invalidation | P0 |
| 🟡 | Phase 2 | `server/core/qc_engine.py` | Background refresh on migration save | P1 |
> 🟢 Ready to start · 🟡 Needs more detail · 🔴 Blocked · ⚪ Deferred
## Action Items
**P0 — Do first:**
- [ ] Add `_compute_fingerprint()` to `server/core/qc_engine.py`
- [ ] Replace TTL check with fingerprint comparison in `run_qc_analysis()`
- [ ] Update tests in `server/tests/test_qc_cache.py`
**P1 — Do next:**
- [ ] Add background pre-warm after migration save in `server/core/migration_crud.py`
## Phase 1: Fingerprint-based invalidation
_Replace TTL caching with content-hash invalidation so QC results always reflect current data._
**Goal:** QC results invalidate immediately when migrations or source data change
**Steps:**
- [ ] Compute SHA-256 of migration JSON + source data file mtimes
- [ ] Store fingerprint alongside cached QC results
- [ ] Compare fingerprint on cache read; miss if different
**Verify:** `cd server && uv run pytest tests/test_qc_cache.py -v`
**Key files:**
| File | Change |
|------|--------|
| `server/core/qc_engine.py` | Add fingerprint logic, replace TTL check |
| `server/tests/test_qc_cache.py` | Add fingerprint invalidation tests |
## Phase 2: Background refresh
_Pre-warm QC cache after migration saves so the QC tab loads instantly._
**Goal:** QC tab shows fresh results without a loading spinner after migration edits
**Steps:**
- [ ] Fire async QC job after successful migration save
- [ ] Reuse existing `qc-start` job infrastructure
**Verify:** Save a migration, switch to QC tab — results should appear without "Running QC..."
## Risks & Open Questions
| S | Item | Impact | Notes |
|---|------|--------|-------|
| 🟡 | Large datasets may slow fingerprint computation | QC tab load time | Benchmark with biggest dataset first |
| 🟡 | Should fingerprint include excluded_files.json? | Correctness | Probably yes — decide during implementation |
> 🔴 High risk · 🟡 Medium / open question · ⚪ Low / informational
testing
Ask the agent whether it finished everything or has more to do — a lightweight completeness gate for the end of any task
development
Audit personal skills for redundancy, verbosity, weak triggers, and overlap. Runs a Claude→Codex review loop, presents per-item approval checkboxes, then applies approved edits and updates README and agent metadata. Use when asked to "review my skills", "audit my skills", "revisit my skills", or "clean up my skills". Accepts an optional skill name to scope the review to a single skill.
development
Set up or extend golden/snapshot tests for a project. Covers fixture design, Makefile targets, snapshot storage, diff workflow, and update protocol.
development
Proofread posts before publishing for spelling, grammar, repetition, logic, weak arguments, broken links, and optionally reformat for skimmability or shape the writing vibe toward a known author's style