ai4kanban 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,79 @@
1
+ # Add a task
2
+
3
+ Turn an idea into a card on the board.
4
+
5
+ 1. **Resolve the modules.** If the modules are not explicitly given, infer them
6
+ yourself: read `docs/kanban/modules.md` and decide which modules the idea
7
+ touches. Never ask the user which modules to use.
8
+ If no module fits, repair `modules.md` according to `references/module-map.md`.
9
+ 2. **Scaffold, then write the body.** Run `create --title "..." --track <track>
10
+ --modules <the step-1 modules>` plus any other meta flags (see "The script" in
11
+ `SKILL.md`) writes the file, its frontmatter, and the README entry.
12
+
13
+ ## Tightly coupled tasks go in one group
14
+
15
+ If the request needs several tasks that only make sense together, make them a **group
16
+ task** instead of loose cards.
17
+
18
+ Example: "build a plugin system with a Slack and a Notion
19
+ demo plugin" → 4 ids: a group root for the plugin system + a subtask for the
20
+ system + a subtask for the Slack plugin + a subtask for the Notion plugin.
21
+
22
+ See "## Group task" in `SKILL.md` for the folder layout and how to allocate the ids.
23
+ Cards that stand on their own stay loose.
24
+
25
+ ## Don't split off near-duplicates
26
+
27
+ If the new card is mostly a tweak, reframe, or extra detail on an upstream card that
28
+ **isn't built yet**, update the upstream card instead. A card earns its own id only
29
+ for genuinely separate work — a different file, system, or deliverable.
30
+
31
+ ## Scaffold the card
32
+
33
+ Every meta field comes from a `create` flag. The frontmatter is not hand-editable — pass
34
+ the fields to `${KB} create`:
35
+
36
+ `--blocked-by` and `--related` are optional, based on the task dependencies.
37
+
38
+ ```
39
+ ${KB} create --title "Continue a run's conversation instead of copying its id" \
40
+ --track features --priority med --roi med --modules local-ui
41
+
42
+ ${KB} create --title "Stop saving a card's implementing stage" --track features \
43
+ --priority med --roi high --modules local-ui,skill --related 58
44
+
45
+ ${KB} create --title "Add a GitHub Projects storage backend for the board" \
46
+ --track features --priority low --roi med --modules skill,local-ui \
47
+ --blocked-by 55,61 --related 57
48
+ ```
49
+
50
+ A new card carries no open questions — that's refine's job (`references/refine.md`).
51
+
52
+ Got a field wrong, or learned something after the fact? `${KB} update <id> --priority low`
53
+ — never an editor.
54
+
55
+ ## Write the card's body
56
+
57
+ Replace the template — the summary line, `## Scope`, and `## Todo` only.
58
+
59
+ The body is what you write. The shape is rough, not a strict form. Keep lines short and
60
+ plain — a non-native reader skimming should get each line in one pass. Add any section
61
+ that helps; drop any that doesn't.
62
+
63
+ ```
64
+ <one short line: what to do and why it matters.>
65
+
66
+ ## Scope
67
+ - <the concrete steps>
68
+
69
+ ## Todo
70
+ - [ ] <one step you can check off>
71
+ - [ ] <…>
72
+ ```
73
+
74
+ - **title** lives in the frontmatter — one source of truth, so no `#` H1 in the body.
75
+ - **Todo** (REQUIRED): the scope split into single-line steps you can check off, in order.
76
+ - **Pushback** — add a `## Pushback` section only if something feels off: too much
77
+ work for the value, not worth doing now, or a risk to users.
78
+
79
+ This isn't a full plan, just enough to start.
@@ -0,0 +1,32 @@
1
+ # Auto-refine
2
+
3
+ Loop refining a card (`references/refine.md`) **and resolving its open questions** (`references/resolve.md`),
4
+ until any of the conditions is met:
5
+ 1. status !== "todo"
6
+ 2. all todos checked
7
+ 3. questions.length > 0 && every question tag === "user"
8
+
9
+ ## Question tags
10
+
11
+ Each open question in the card's `questions` frontmatter carries a tag saying who owns it:
12
+
13
+ - **`[user]`** — a judgment call the agent must not guess: taste, priorities, money,
14
+ product direction.
15
+ - **untagged** — freshly raised, not yet triaged. These are what a pass works through.
16
+
17
+ Set tags with the script — never hand-edit frontmatter:
18
+
19
+ ```
20
+ ${KB} tag <id> 1,2,3 user # tag several questions at once (comma-separated)
21
+ ```
22
+
23
+ ## The loop
24
+
25
+ Never pause to ask the user.
26
+
27
+ 1. Run `references/refine.md`.
28
+ 2. If questions is not empty, spawn a subagent and hand it the card and the whole batch
29
+ of untagged questions at once. Questions should be answered with a fresh context.
30
+ It researches and decides according to `references/resolve.md`:
31
+ If answering surfaces new questions, add them untagged and run one more subagent for
32
+ the new batch.
@@ -0,0 +1,31 @@
1
+ # Document a change
2
+
3
+ A shipped change nobody can find is a change that doesn't exist. So every card that ships
4
+ something a user can **see or do** carries todos to update the docs it touches, and it
5
+ isn't done until they're written. Pick the surfaces the change actually touches — most
6
+ touch one, some touch none. If it touches none, say why on the card.
7
+
8
+ Write each doc update as its own todo, so it's checked off before the card is archived.
9
+
10
+ ## Surfaces
11
+
12
+ Map the change to the reference docs your project keeps (see the skill's Configuration).
13
+ Common surfaces — use the ones you have:
14
+
15
+ - **User-facing docs / guides** — how a user does the thing. Add or update a guide when
16
+ the change gives the user a **new action, setting, or step**. Without this the user
17
+ never learns the capability is there. This is the default surface: most user-visible
18
+ changes need it.
19
+ - **Landing / marketing copy** — what a **prospect is shown or promised**. Update it when
20
+ the change adds a capability worth advertising, a new surface, or a headline claim.
21
+ Write the change **into the doc only** — don't touch the landing page code unless the
22
+ card says to. The user reviews the doc first, then decides whether to ship it.
23
+ - **Pricing / plans / limits** — update when the change **moves what a tier offers** — a
24
+ new limit, a feature moved between tiers, a new plan, or any price change. Keep the doc
25
+ in sync with what the code actually enforces.
26
+ - **Roadmap / direction** — update only for a **direction-level shift** (positioning, the
27
+ core layers, monetization). A normal change does not belong here; reach for it only when
28
+ the direction itself moves.
29
+
30
+ If your project keeps none of these docs, this step is a no-op — note that on the card and
31
+ move on.
@@ -0,0 +1,34 @@
1
+ # Run the board locally (ai4kanban-ui)
2
+
3
+ An optional Next.js app that shows the board and drives the work from buttons instead of the
4
+ terminal. The board works fully without it; set it up only when you want the buttons. The
5
+ markdown files in `docs/kanban/` stay the single source of truth.
6
+
7
+ **This page is setup only — how to get it running.** Using it (what each button does, group
8
+ tasks, the Configuration dialog) is documented with the app itself:
9
+ <https://www.npmjs.com/package/ai4kanban-ui>, or `kanban-ui/README.md` in its repo.
10
+
11
+ ## Run it
12
+
13
+ From your repo root (the folder that holds `docs/kanban/`):
14
+
15
+ ```
16
+ npx ai4kanban-ui # http://localhost:7420
17
+ ```
18
+
19
+ Localhost only. It ships a prebuilt server (nothing to compile) and finds the board by
20
+ walking up to the first `docs/kanban/todo/`. Options:
21
+
22
+ ```
23
+ npx ai4kanban-ui --board ../my-repo # a board elsewhere (or set KANBAN_BOARD_DIR)
24
+ npx ai4kanban-ui --port 4000 # a different port
25
+ ```
26
+
27
+ There's nothing to install — `npx` fetches the package and caches it. To pick up a newer
28
+ release, run it once as `npx ai4kanban-ui@latest`; later plain `npx ai4kanban-ui` runs
29
+ reuse that. (Prefer a permanent command? `npm install -g ai4kanban-ui`, then run
30
+ `ai4kanban-ui`, and `npm update -g ai4kanban-ui` to upgrade.)
31
+
32
+ Nothing else to set up: the app keeps its own settings next to the board, and creates them
33
+ when it first needs them. What those settings are, and what the buttons do, is in the app's
34
+ guide (linked above).
@@ -0,0 +1,29 @@
1
+ # The module map
2
+
3
+ Write and repair `docs/kanban/modules.md` — a plain list of the project's modules.
4
+
5
+ A module is anything maintained in the codebase that grows independently. Judged by
6
+ meaning, not by folder; a handful of lines, not one per folder. (Not a track: a track
7
+ is a kind of effort, a module is a part of the product — a task has both.)
8
+
9
+ ## Example
10
+
11
+ A repo with `server/`, `packages/core/`, `web/`, `cli/`, and `docs/` might map to:
12
+
13
+ ```
14
+ If a line here disagrees with the repo you just read, fix the line.
15
+
16
+ - **api** — the backend server and its shared core. `server/`, `packages/core/`.
17
+ - **web-app** — the browser app users sign into. `web/`.
18
+ - **cli** — the command-line client. `cli/`.
19
+ - **docs** — the public documentation site. `docs/`.
20
+ ```
21
+
22
+ Five folders, four modules — the server and its core always change together, so they
23
+ are one line.
24
+
25
+ ## Repair
26
+
27
+ Whoever reads the map and sees it disagree with the repo fixes it in the same run: add
28
+ the missing line, delete or rename the dead one, fix a stale path. If the user says the
29
+ map is wrong, rebuild from scratch.
@@ -0,0 +1,24 @@
1
+ # Preset: indie-hacker
2
+
3
+ For a solo or small-team product you're trying to launch and grow. Replaces the default
4
+ tracks with a growth-weighted three-track model, and adds two review gates (moat, trust)
5
+ plus a market-validation method.
6
+
7
+ To use this preset, set `PRESET: indie-hacker` in `docs/kanban/config.md` and copy the
8
+ three track values below into the `TRACKS` field.
9
+
10
+ ## The three tracks
11
+
12
+ - **growth (50%)** — get in front of users: SEO posts, outreach DMs, posts on
13
+ X / Reddit / LinkedIn / 小红书, YouTube, Product Hunt, G2. Suggest growth methods worth
14
+ trying. If you keep a content pipeline, draft a writer-ready plan first.
15
+ - **validation (30%)** — check the market wants a feature before building deep. Use it for
16
+ roadmap features not built yet, and for built features uncommon in the market. Method:
17
+ post an honest, unbiased question on Reddit / X, or share a free trial on a
18
+ build-in-public community. To run a Reddit validation, follow
19
+ `references/presets/validate-on-reddit.md`. Save results to `docs/validations/<name>.md`
20
+ (or wherever you keep them). Skip subjective tests ("ask your mom").
21
+ - **building (20%)** — stay at MVP; don't over-build. Build when it: scales internal work
22
+ an agent can own, strengthens product positioning, or is strongly demanded by users.
23
+ Building is the trust load-bearer — without it you can't convert, so building blockers
24
+ gate the launch.
@@ -0,0 +1,82 @@
1
+ # Validate a move on Reddit
2
+
3
+ Use for a **validation** task that says to test a product decision, feature, or
4
+ move by posting to Reddit before building.
5
+
6
+ You draft the Reddit posts and scaffold the results doc. The user posts manually
7
+ and pastes replies back; then you write the verdict.
8
+
9
+ ## Steps
10
+
11
+ 1. **State the goal** — what decision the replies should inform. Soft criteria
12
+ are fine; judge the verdict yourself when replies come in.
13
+ 2. **Follow the post style** (below).
14
+ 3. **Draft the probes** that fit. Common ones:
15
+ - **Discovery** — unbiased question, no product mention, no links. Reveals
16
+ what they actually do.
17
+ - **Reaction** — share the product, force a choice between the option under
18
+ test and its nearest alternative.
19
+ One probe or several, whatever fits the goal.
20
+ 4. **Scaffold** `docs/validations/<slug>.md` (or wherever you keep validation
21
+ write-ups): Goal, each probe, a Results table each, empty Verdict. Raw posts go in
22
+ ``` blocks.
23
+ 5. **Write the Verdict** from the pasted replies.
24
+
25
+ ## Rules
26
+
27
+ - Ask which subreddits the account can post in. Suggest, but don't assume.
28
+ - Don't pad the verdict — if signal is thin or negative, say so.
29
+ - Don't invent replies.
30
+
31
+ ## Post writing style
32
+
33
+ <!-- Expand with examples of posts that landed and flopped, per subreddit. -->
34
+
35
+ ### Voice
36
+
37
+ - Write like a quick comment typed in the moment, not edited copy. Casual, no marketing tone,
38
+ no hype words.
39
+ - Short: a title under ~10 words and 2–4 plain sentences. Long posts read as ads.
40
+ - Title is one plain question. No em-dashes,
41
+ no slashes, no "X — do you A or B?" headline construction. Just the question.
42
+ - Imperfect on purpose: the odd sentence fragment, drop the wind-up. This is
43
+ genuine casual voice — NOT faked typos or misspellings. Don't manufacture
44
+ errors; just stop polishing.
45
+ - First person. State the situation plainly, list the options you're considering
46
+ if that helps, then ask what they usually do and what they last tried. Avoid
47
+ invented backstory and dramatic self-talk like "part of me..." or "I'm torn..."
48
+ because it reads staged. Don't narrate what "some people" do — that reads like
49
+ a survey.
50
+ - Open straight with the situation or the question. Cut "I've been thinking
51
+ about…", "curious what people think", and every other warm-up line.
52
+
53
+ ### Background
54
+
55
+ - Ground it in one concrete situation, not a generic framing. "same complaint
56
+ keeps coming up from users" beats "when problems arise in your business."
57
+ - Give only enough for someone to answer from experience. Skip the rest — no
58
+ paragraph of setup, no explaining why you're asking.
59
+
60
+ ### The question
61
+
62
+ - One specific question answerable from experience ("what's the last one you
63
+ actually made?") beats a vague "what do you think?".
64
+ - Ask what they *did*, not what they *think*.
65
+
66
+ ### Probe A — unbiased
67
+
68
+ - No product mention, no links.
69
+ - List the options flat and neutral so you don't lead the answer.
70
+
71
+ ### Probe B — reaction
72
+
73
+ - One line on what the product does, then the link. Say it's yours — don't hide
74
+ that you built it.
75
+ - Force a choice between the thing under test and its nearest alternative.
76
+
77
+ ### Gets a post removed
78
+
79
+ - Self-promo in a no-promo sub, or "I'm doing research" survey framing.
80
+ - Low-karma / new accounts can't post in many subs (AutoModerator checks age and
81
+ karma before a human sees it) — ask first.
82
+ - Read each sub's rules; they differ. Same post pasted across subs reads as spam.
@@ -0,0 +1,67 @@
1
+ # Propose new tasks
2
+
3
+ Pick a module, then propose **3 new tasks inside it**. New work, not picks from the
4
+ board — tasks in one focus close a gap; scattered ideas just skim the product.
5
+
6
+ ## 1. Pick the module
7
+
8
+ **Ask the user to pick one or more modules from the map.** If they leave it open, pick
9
+ one yourself — the one where memory says users stumble most.
10
+
11
+ Once you have a focus module, its memory set lives at `docs/kanban/memory/<module>/` (keyed
12
+ by its bolded name in `modules.md`) — the four files described in "The memory set" in
13
+ `SKILL.md`. Read that path, not the whole board, so the notes you work from are that
14
+ module's: `readme.md` for what already shipped (links to the published docs),
15
+ `decisions.md` for settled answers you needn't re-open, and
16
+ `redesign.md` / `rejected.md` to avoid wrong designs and re-proposals. For the long-term
17
+ goal, the horizon, and the roadmap, read `docs/kanban/memory/goal.md` — the board root's
18
+ copy is the only one, and it covers the whole project, not this module. While it's
19
+ open, re-judge its `reviewed:` field and fix a stale value by editing that one line
20
+ (the test is under "The memory set" in `SKILL.md`). For a shipped
21
+ behavior's detail, follow `readme.md`'s links into the module's **published docs** — the
22
+ docs are the record, memory only indexes them. A module with no folder yet has no notes.
23
+ With no focus module or no module map, read the project-wide set at `docs/kanban/memory/`
24
+ instead.
25
+
26
+ **List the cards already tagged with the focus module.** Grep the board for cards whose
27
+ `modules:` field names it — `grep -rl 'modules:.*<module>' docs/kanban/todo/` — and read
28
+ them, so you don't re-propose planned work and you see where the module already has effort.
29
+
30
+ ## 2. Walk it as a user
31
+
32
+ Ideas come from a walkthrough, not a feature list. Play one real user story in the
33
+ focus, step by step. At each step ask: what can't they see or find? what do they wait
34
+ on, guess at, or redo by hand? Every stumble is a task idea.
35
+
36
+ Then check the focus's written sources — the code, roadmap doc, user-facing docs
37
+ (Configuration, where shipped behavior is recorded), `todo/`, `rejected.md`, and the focus
38
+ module's memory (from step 1, `readme.md` included) — to catch promised work and stop
39
+ re-proposals.
40
+
41
+ ## 3. Propose 3 tasks
42
+
43
+ All inside the focus; none already on the board, already shipped (in the published docs or
44
+ `readme.md`), or in `rejected.md` (unsure one is already done? run the Value check in
45
+ `references/refine.md`). Write each
46
+ with the "Add a task" flow in `SKILL.md`.
47
+
48
+ ### Boldness
49
+
50
+ How big a move each of the 3 is. Whoever asks for the run picks one; **normal** unless
51
+ they say otherwise. It changes the size of the idea, never the count — 3 either way.
52
+
53
+ - **safe** — polish a rough edge, or fill a gap in something that already works. No new
54
+ surface: the user's story is the one they play today, just without the stumble.
55
+ - **normal** — a feature each: one card a session can finish. The default size.
56
+ - **bold** — a big leap each: a whole new capability for the module, something the user
57
+ can't do today at all. Judge it against the long-term goal in
58
+ `docs/kanban/memory/goal.md`, not against the current rough edges — a bold task is a
59
+ step toward the horizon. A task this big is normally broad enough to split into
60
+ subtasks that need splitting again, so write it as a **group task** (see "Group task"
61
+ in `SKILL.md`); write it as one card only if the split truly doesn't earn its folder.
62
+
63
+ Boldness is a size, not a licence: a bold task still has to be new (not on the board, not
64
+ shipped, not in `rejected.md`) and still gets written with the "Add a task" flow.
65
+
66
+ A propose run writes no memory. `readme.md` is the finish flow's record — a scan reads
67
+ it and leaves it alone.
@@ -0,0 +1,29 @@
1
+ # Prune the memory set
2
+
3
+ Prune every file in the memory set (see "The memory set" in `SKILL.md`). Prune whichever
4
+ copy you're compressing: the project-wide one at `docs/kanban/memory/` or a module's at
5
+ `docs/kanban/memory/<module>/`. `goal.md` is not in the set — it's user-owned, leave it alone.
6
+
7
+ One principle for all files: they exist to stop us re-proposing work, re-making a
8
+ design mistake, or re-asking a settled question. Rewrite each as **topics** — areas of
9
+ the product — with plain-language takeaways under each. Keep only what helps future
10
+ planning; drop code detail, dates, task ids, step-by-step stories, and the reasoning
11
+ behind settled decisions. Merge lines that say the same thing. Rewrite, don't just cut.
12
+
13
+ On top of that, per file:
14
+
15
+ - `rejected.md` — one line per idea: what not to propose and why. "Already done" is a
16
+ shipped fact, not a rejection — it belongs in the published doc (with a `readme.md`
17
+ line pointing at it), not here; drop it from `rejected.md`.
18
+ - `redesign.md` — one line per entry: the mistake, then the design to use. Drop an
19
+ entry once that design is the obvious default.
20
+ - `readme.md` — one line per shipped user-facing behavior. Where a published doc covers
21
+ it, the line is just a link to that doc's path. **Replace a prose entry with a link
22
+ only after you have confirmed the doc covers that behavior** — search the docs first;
23
+ no doc yet means the prose line stays: `readme.md` is the only record until we
24
+ document it. Anything else — watermarks, a last focus, open gaps, internal detail —
25
+ doesn't belong here; drop it.
26
+ - `decisions.md` — one line per live decision, in plain user-facing words. Drop anything
27
+ that fails its bar in SKILL.md ("The memory set"): a call about code detail, or one the
28
+ published docs now cover. Drop a decision once the question no longer arises or
29
+ `redesign.md` states it as a rule.
@@ -0,0 +1,93 @@
1
+ # Run a recurring task
2
+
3
+ A recurring task is a job we repeat on a cadence. Unlike a one-shot task, it never
4
+ archives — each pass is a **run**, and the card gets sharper each run until a run needs
5
+ no human. This guide covers running one and improving it.
6
+
7
+ ## The card shape
8
+
9
+ A recurring card lives in `todo/recurring/`, its own folder parallel to `blockers/` and
10
+ the track folders (see your tracks in Configuration). Its frontmatter marks the track:
11
+
12
+ ```
13
+ ---
14
+ title: …
15
+ track: recurring
16
+ priority: …
17
+ roi: …
18
+ blocked_by: []
19
+ related: []
20
+ questions: []
21
+ ---
22
+ ```
23
+
24
+ It adds two sections beyond a normal card:
25
+
26
+ - `## Process` — the in-order steps of one run, each tagged by how it runs today.
27
+ - `## Runs` — a pointer to the per-run open-questions files.
28
+
29
+ ### The `## Process` ladder
30
+
31
+ Every step carries one tag:
32
+
33
+ - `[script]` — a command anyone can run as-is. The most automatic; include the exact
34
+ command.
35
+ - `[agent]` — a plain-language instruction the agent follows without asking the user.
36
+ - `[ask]` — a step that still needs the user (a judgement call, an approval, missing
37
+ data).
38
+
39
+ The whole point of the recurring type is to **move steps up the ladder** over runs:
40
+ `[ask]` → `[agent]` → `[script]`. A run where every step is `[script]` or `[agent]` needs
41
+ no human. Keep the tags honest — only mark a step `[script]` once the command actually
42
+ exists and works.
43
+
44
+ ## One run, start to finish
45
+
46
+ 1. **Read the card**, especially `## Process` and the newest run file under `runs/`.
47
+ 2. **Do the steps in order**, following each tag. A `[script]` step: run its command. An
48
+ `[agent]` step: do it yourself. An `[ask]` step: ask the user, and hold the answer for
49
+ step 5.
50
+ 3. **Record the run:**
51
+
52
+ ```
53
+ ${KB} run <id>
54
+ ```
55
+
56
+ This adds +1 to `completed` in `metrics.csv` and **keeps the card** — no archive, no
57
+ README edit. It refuses if the card isn't under `todo/recurring/`.
58
+ 4. **Self-improve `## Process`.** Rewrite it so the next run needs less human effort:
59
+ - An `[ask]` you answered the same way it could be derived → rewrite as an `[agent]`
60
+ instruction.
61
+ - An `[agent]` step you did the same mechanical way every run → write a small script
62
+ and change it to `[script]` with the command.
63
+ - A step that broke or was ambiguous → tighten the wording.
64
+ Do the smallest real improvement each run; don't invent automation you didn't just do.
65
+ 5. **Log what still needed a human.** For each `[ask]` this run, write the question and
66
+ the user's answer to:
67
+
68
+ ```
69
+ docs/kanban/todo/recurring/<id>-<slug>/runs/<YYYY-MM-DD>-open-questions.md
70
+ ```
71
+
72
+ (Create the `<id>-<slug>/runs/` folder next to the card if it doesn't exist.) Before
73
+ the next run, fold answered questions back into `## Process` and delete them from the
74
+ run file. A run file that empties out is the signal that step is now automatic.
75
+
76
+ ## Open-questions file shape
77
+
78
+ Keep it plain — the question, the answer, and whether it can be automated next time:
79
+
80
+ ```markdown
81
+ # 49 — run 2026-07-10 open questions
82
+
83
+ - **Which topic this run?** → "cold email reply rates" (user picked).
84
+ Next: could a script rank sources by pain count and propose the top one? → move to [agent].
85
+ - **Byline author?** → Jane. Stable across runs → fold into Process as a default.
86
+ ```
87
+
88
+ ## What not to do
89
+
90
+ - Don't archive a recurring task or record it as shipped behavior. It has no end state.
91
+ - Don't mark a step `[script]` before the script exists.
92
+ - Don't let run files pile up unread — their whole value is being folded back into
93
+ `## Process` and then emptied.
@@ -0,0 +1,69 @@
1
+ # Refine
2
+
3
+ Take one task one step forward — from vague to concrete. First **check** the card, then
4
+ **rewrite it or raise a question**. **Gate:** a card whose `questions` frontmatter isn't
5
+ empty can't be refined — resolve them first (`references/resolve.md`).
6
+
7
+ ## 1. Check
8
+
9
+ Each line below is one plain question. Answer yes or no; a no needs one line saying
10
+ what's wrong. Flag real problems, not hypotheticals.
11
+
12
+ - **Format — is it written like a card?**
13
+ - **On topic**: does the body do what the title says? Anything else is another task.
14
+ - **Plain language**: is every line plain and short ("Writing style" in `SKILL.md`)?
15
+ - **No meta**: free of planning notes and meta-todos ("Card format" in `SKILL.md`)?
16
+ - **A build plan**: is it split into `## Todo` boxes, one step of real work each?
17
+ - **Value — should this task exist at all?**
18
+ - **Direction**: does it move the project toward the long-term goal and roadmap in
19
+ `docs/kanban/memory/goal.md`? Suggest rejection in `questions` on a task that's off-goal.
20
+ - **Already shipped**: is it built already? Code → search the codebase; content → search
21
+ where that content lives (your reference docs); research → check past write-ups.
22
+ - **Duplicate**: does another card already own the idea? Then update it, not this one.
23
+ - **Scope — is the plan the right size for the goal?**
24
+ - **Goal fit**: would the goal still be met with this piece cut? Then it's scope creep.
25
+ The goal is the title and its "so the user can ..." line, not what the summary grew
26
+ into; on topic doesn't mean needed. Common drift: the goal is "find a run's log", the
27
+ plan builds "a history of all runs".
28
+ - **Missing updates/verification**: does the plan skip work it implies — tests, a review pass, landing
29
+ copy? If a user can see the change, it carries doc-update todos so it isn't hidden
30
+ after it ships (`references/document-feature.md`); none needs a why.
31
+ - **Over-complication**: is the design more machinery than the value justifies?
32
+ - **Grouping**: does this card only make sense with another one? Then they're one group.
33
+ - **Design — will the plan work?**
34
+ - **Actionable**: could someone start on it tomorrow, or is it still a rough idea? If
35
+ the how isn't obvious, are the options laid out with one recommended?
36
+ - **Unambiguous**: can it be built without guessing? Code detail isn't needed; an open
37
+ requirement is.
38
+ - **Full user flow**: does the design cover the full user flow, not just the piece the title
39
+ names? For example, auth isn't just login — sign-up and log-out too.
40
+ - **Edge cases**: does the design hold up on them? Re-check the decisions the card
41
+ states — written doesn't mean right. E.g. tasks kept in memory are lost on restart.
42
+ - **Status — does the card match what's already built?**
43
+ - **Stale todos**: is each unchecked todo really still undone? Work lands without the
44
+ box getting ticked.
45
+ - **Finished**: are all the todos done **and** the goal met? Then it's not refinable.
46
+
47
+ ## 2. Rewrite, or raise a question
48
+
49
+ Every NO turns into exactly one move below; a card with no problems skips them.
50
+ **Never write the review notes into the card** The card holds the plan and nothing else.
51
+ Read the "Card format" and "Writing style" of `SKILL.md`.
52
+
53
+ - **Rewrite.** Fix the issues while maintaining a minimal task spec.
54
+ - **Reject.** A failed Value check. "Reject an idea" in `SKILL.md`: a line in
55
+ `rejected.md`, then `${KB} reject <id>`. Unsure the value is real? Raise a question.
56
+ - **Add a card.** A side idea, an unplanned, separate concern that doesn't
57
+ belong to this card. "Add a task" in `SKILL.md`, minding `references/add-task.md`'s rule
58
+ against near-duplicate splits.
59
+ - **Group.** Cards that only make sense together: "Group task" in `SKILL.md` and "Tightly
60
+ coupled tasks go in one group" in `references/add-task.md`.
61
+ - **Archive.** Everything done and the goal met: "Finish a task" in `SKILL.md`.
62
+ - **Raise a question** instead of rewriting when the call is the user's (taste, priorities,
63
+ money, product direction), or a **spec-level** problem is significant and you can't
64
+ settle it — is this what the user wants, which of two shapes should the feature take,
65
+ what's the rule in a case the card never names. Record it with `${KB} update <id>
66
+ --question ".."` (repeat the flag), leave that part alone; small calls, make them.
67
+ - **Mark it ready.** A concrete plan and no open questions finishes the card: `${KB} update
68
+ <id> --status ready` — only if this refine stopped at the code level, not one stage
69
+ short. The user scans for the `ready` pill to pick what to build next.
@@ -0,0 +1,56 @@
1
+ # Resolve open questions
2
+
3
+ ## Try to answer each question yourself
4
+
5
+ Research first — the module's code, the board, the memory set of any module the card
6
+ names (`docs/kanban/memory/<module>/`), and your reference docs. Many questions are
7
+ already settled, shipped, or rejected once you look.
8
+
9
+ Judgment calls — taste, priorities, money, product direction — get the same pass:
10
+ the trail of past `decisions.md`, `rejected.md`, `redesign.md`, and the board root's
11
+ `goal.md` often shows the user already made this call, or one close enough to decide from.
12
+
13
+ Decide yourself when the evidence gives you confidence. Note the decision and reason
14
+ under `## Decided by the agent` (read "Card format" in `SKILL.md`).
15
+
16
+ ## Ask the user the rest
17
+
18
+ Ask when the evidence isn't enough. Write the options
19
+ and your recommendation into the question text itself. Keep it plain and short: one
20
+ line the user can answer at a glance.
21
+
22
+ > Where should the board live? (a) local files — simple; (b) GitHub Projects — syncs
23
+ > with issues. Recommend (a).
24
+
25
+ Run `${KB} tag <id> 1,2,3 user` for these questions.
26
+
27
+ ## Update the frontmatter
28
+
29
+ - All answered → `${KB} update <id> --clear-questions`
30
+ - Some answered → `${KB} update <id> --drop-question 1,3` — the 1-based numbers of
31
+ the answered ones. The rest stay untouched, tags included.
32
+
33
+ ## Fold the answers into the card
34
+
35
+ Rewrite, don't append. Follow SKILL.md's "Card format" and "Writing style": keep the
36
+ card a minimal task spec. Merge answers on the same topic into one entry — not necessarily one
37
+ entry per question. Cut what the spec no longer needs.
38
+
39
+ An answer sometimes creates work the `## Todo` list doesn't cover — append it as new
40
+ unchecked todos, even when every box is ticked: an open question meant the card wasn't
41
+ finished, so the answers are the remaining work.
42
+
43
+ ## Record lasting decisions
44
+
45
+ Append the user's calls to `memory/<module>/decisions.md`, under the topic that fits —
46
+ add a topic, or a subtopic under an existing one, when none does.
47
+
48
+ - **Only what the user decided.** Agent's own calls stay on the card (read "Card format" in
49
+ `SKILL.md`). This file is what the human settled.
50
+ - **Skip** implementation-level and non-user-facing calls.
51
+ - **One plain line each**, written as `**<key>**: <call>` — the key is the question the
52
+ call settles, or a short title for it. Give the call, not the reasoning, but keep it
53
+ clear to someone planning another card:
54
+ `**Where does a finished card go?**: to .archive/, kept in git. A rejected card is deleted.`
55
+ - **A new call replaces the old.** Rewrite the line it contradicts, never leave both. If
56
+ you can't tell which one the user holds, change nothing and ask with a `[user]` question.