Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Enumerate every end-to-end feature as strict JSON entries with passes:false, editable-passes-only discipline, and priority order. The ledger fresh-context sessions read to know what's done, what's next, and what they're forbidden to touch.
.claude/skills/archive228-feature-list-json/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 157% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 87% | 0% |
The ledger of every feature the product will eventually have. Fresh-context sessions read it to pick work; they flip exactly one boolean when done. JSON, not Markdown — the syntactic strictness is load-bearing. Prose gets edited freely; data gets edited carefully.
Format per entry:
json{ "category": "functional", "description": "New chat button creates a fresh conversation", "steps": [ "Navigate to main interface", "Click the 'New Chat' button", "Verify a new conversation is created", "Check that chat area shows welcome state", "Verify conversation appears in sidebar" ], "passes": false }
Categories: functional, ux, data, infra. Order the array in implementation order — the top is the next thing to build.
passes: false. Aim for breadth — 200 well-scoped entries beats 30 vague ones.passes from false to true.jq '[.[] | select(.passes==false)] | length' to see remaining work; pick the topmost unblocked entry.description is one sentence, steps is a user's actual action sequence (not implementation notes).passes starts false. No exceptions, not even for the smoke test.jq '. | length' returns your count; jq '[.[] | select(.passes==true)] | length' returns 0.passes: false and satisfied prerequisites. If the top is blocked, drop to the deepest unblocked entry.passes to true.false → true. Nothing else.description, steps, or category — it is unacceptable to remove or edit these fields because it lets missing functionality slip past future sessions. The ledger is append-only in every field except passes.passes: true on unit-test evidence — unit tests pass while routes are misrouted, CORS is broken, or the button is unwired. Only end-to-end evidence flips the bit. See verification-before-completion]].passes: true with a note, or negotiate removal explicitly. Silent deletion breaks priority counting.At session end, before committing:
bashgit diff feature_list.json | grep -E '^[-+]' | grep -v 'passes'
If this prints anything other than the file header, you edited a forbidden field. Revert those hunks. Only "passes": false ↔ "passes": true lines are allowed to change.
Other measured skills in the registry, with their headline benchmark lift.