projectstore-claude 0.30.11 → 0.30.13
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.
- package/node_modules/projectstore/.claude-plugin/marketplace.json +1 -1
- package/node_modules/projectstore/.claude-plugin/plugin.json +1 -1
- package/node_modules/projectstore/agents/planner.md +10 -1
- package/node_modules/projectstore/agents/reviewer.md +14 -1
- package/node_modules/projectstore/commands/story.md +35 -3
- package/node_modules/projectstore/docs/contracts-and-tests.md +17 -0
- package/node_modules/projectstore/package.json +1 -1
- package/node_modules/projectstore/templates/de/story.md.tmpl +2 -0
- package/node_modules/projectstore/templates/en/story.md.tmpl +2 -0
- package/node_modules/projectstore/templates/es/story.md.tmpl +2 -0
- package/node_modules/projectstore/templates/fr/story.md.tmpl +2 -0
- package/node_modules/projectstore/templates/ru/story.md.tmpl +2 -0
- package/node_modules/projectstore/templates/zh/story.md.tmpl +2 -0
- package/package.json +2 -2
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"name": "projectstore",
|
|
13
13
|
"displayName": "projectstore",
|
|
14
14
|
"description": "📚 Your agent runs the project through a verified loop: task → artifact (ADR · spec · epic · story) → adversarial critic → backlog → planner → reviewer → done. Plain markdown in an Obsidian-friendly vault, every write approved by you — and any model can pick the project up tomorrow.",
|
|
15
|
-
"version": "0.30.
|
|
15
|
+
"version": "0.30.13",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "Evgenii Konev",
|
|
18
18
|
"email": "ekonev@smartandpoint.com",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore",
|
|
3
3
|
"displayName": "projectstore",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.13",
|
|
5
5
|
"description": "Your agent runs the project through a verified loop: task → artifact (ADR / spec / epic / story) → adversarial critic → backlog → planner → reviewer → done. Plain markdown in git — any model can pick the project up tomorrow.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Evgenii Konev @ SmartAndPoint",
|
|
@@ -85,8 +85,17 @@ generic best practice — cite the real files and patterns you found.
|
|
|
85
85
|
8. **Proposed `code_refs`** — the paths/globs this epic (and story) will own once
|
|
86
86
|
implemented, ready for `/projectstore:codemap set`. You PROPOSE; the command
|
|
87
87
|
writes after approval.
|
|
88
|
+
9. **Open questions** — at most five decisions the user must make that the
|
|
89
|
+
code and the vault cannot answer, the one that changes the plan most
|
|
90
|
+
first. One per line:
|
|
91
|
+
`Q<n>. <the question> Options: (a) … (b) … Recommend (b): <why>`, with two to four options. The
|
|
92
|
+
recommendation is one of the options, so it can be recorded as the answer
|
|
93
|
+
when the user skips the question. "None" is the normal case. With more than
|
|
94
|
+
five, return five, say how many you left out, and say the story is
|
|
95
|
+
probably too big: suggest how to split it. You ask the user nothing; the
|
|
96
|
+
plan step puts these to the user in one round.
|
|
88
97
|
|
|
89
98
|
Rules: be concrete and cite real paths / symbols; if the task is ambiguous or has
|
|
90
|
-
two plausible homes, say so and recommend one with the tradeoff. No code
|
|
99
|
+
two plausible homes, say so in Open questions (item 9) and recommend one with the tradeoff. No code
|
|
91
100
|
generation beyond tiny illustrative snippets. You are read-only — never write
|
|
92
101
|
code or vault files.
|
|
@@ -46,6 +46,17 @@ that is a 🔴 finding: the story is covered by a spec, new or existing, and
|
|
|
46
46
|
`no_spec` is removed before it closes. There is no way to silence this.
|
|
47
47
|
Otherwise check that the reason still matches what the diff did.
|
|
48
48
|
|
|
49
|
+
**An Independent test line.** A story may carry one optional line under
|
|
50
|
+
Description, `**Independent test:**` (translated as Unabhängiger Test, Prueba
|
|
51
|
+
independiente, Test indépendant, Независимая проверка or 独立测试; in any
|
|
52
|
+
locale, the bold line right under the Description comment): one sentence on how the story is checked on its own. It is filled when
|
|
53
|
+
text follows the label outside the comment. When it is filled, the matrix gets
|
|
54
|
+
one line for it: `— evidence:` with the command run and what was seen, or
|
|
55
|
+
`not run — <why>` (it needs a host, a network, a release or a person: name
|
|
56
|
+
which). With neither, that is a 🟡 should-fix, never a 🔴: the line is a hint,
|
|
57
|
+
not a gate, and it never holds a story open. With no line, or only its
|
|
58
|
+
placeholder, say nothing about it.
|
|
59
|
+
|
|
49
60
|
## Phase 0 — Pre-commitment
|
|
50
61
|
From the story + file list, predict the 3-5 most likely gaps ("AC #3 needs an
|
|
51
62
|
error path the diff doesn't touch"; "touches a cache — invalidation risk"). Write
|
|
@@ -97,7 +108,9 @@ say so plainly.
|
|
|
97
108
|
Format each evidence value so it can be persisted verbatim into the story
|
|
98
109
|
file at close: `— evidence: <test | command | file:line>` (a test may be
|
|
99
110
|
named by its contract token, `[example#3]`, which doctor checks) — the close gate
|
|
100
|
-
(`/projectstore:story close`) copies your matrix into the checkboxes.
|
|
111
|
+
(`/projectstore:story close`) copies your matrix into the checkboxes. A
|
|
112
|
+
filled Independent test line gets its own line here, so the close can copy
|
|
113
|
+
it into the Final Summary's tests executed.
|
|
101
114
|
3. **Findings** — severity-rated: `🔴 blocker` / `🟡 should-fix` / `🟢 nit`; each
|
|
102
115
|
with file:line, confidence, why it matters, and a specific fix.
|
|
103
116
|
4. **Proposed `code_refs`** — computed, not recalled: run
|
|
@@ -50,6 +50,13 @@ the two cannot collide).
|
|
|
50
50
|
line with `variant: test` before the preview, the way `--spec` fills
|
|
51
51
|
`specs:`. The critic then reviews the story against `story.test`.
|
|
52
52
|
|
|
53
|
+
3b. **The Independent test line** (optional, under Description; its label is
|
|
54
|
+
translated in each locale). When the conversation already says how this
|
|
55
|
+
story is checked on its own (a command to run and what to see), write
|
|
56
|
+
that sentence in place of the line's comment. Otherwise leave the
|
|
57
|
+
placeholder as it is and invent nothing: it is a hint, not a gate. Quote
|
|
58
|
+
the line in the preview.
|
|
59
|
+
|
|
53
60
|
4. **Preview**: path + first ~25 lines.
|
|
54
61
|
|
|
55
62
|
5. **Approval** via AskUserQuestion: Yes / Edit / No.
|
|
@@ -58,8 +65,9 @@ the two cannot collide).
|
|
|
58
65
|
|
|
59
66
|
6. **Post-approval race re-check** (Layer 1): re-run `draft.mjs story <epic-id> "<title>"` (the same stripped arguments as step 3) and re-read its `collision` field — an exact-name `test -e` cannot see normalized cross-era collisions (`story-006-foo.md` vs `story-foo.md`). If `collision` is non-null, surface it as a topic collision (`"<identity>" already exists as <with>`), and ask: extend the existing story, pick a different slug (`-2` is a deliberate distinct identity), or cancel. Render `warnings` entries as `⚠️` lines in the preview too.
|
|
60
67
|
|
|
61
|
-
7. **On Yes** (path free): Write the file you previewed, with the step-2
|
|
62
|
-
step-3a edits (`specs:`, `variant: test
|
|
68
|
+
7. **On Yes** (path free): Write the file you previewed, with the step-2,
|
|
69
|
+
step-3a and step-3b edits (`specs:`, `variant: test`, the Independent test
|
|
70
|
+
line), not the re-run's raw draft.
|
|
63
71
|
|
|
64
72
|
8. **Suggest next**: "Now decompose the work in the `Decomposition` section, or run `/projectstore:kanban` to refresh the board. Before implementation: `/projectstore:story plan <story>`."
|
|
65
73
|
|
|
@@ -92,15 +100,39 @@ the two cannot collide).
|
|
|
92
100
|
`plan_updated_at` / `closed_at` — stamped unconditionally; the
|
|
93
101
|
`lifecycle_gates` key gates checks, never data).
|
|
94
102
|
|
|
103
|
+
2a. **(plan only) Open questions, one round.** Before writing the plan,
|
|
104
|
+
collect the open questions: the planner's "Open questions" when it ran,
|
|
105
|
+
else your own; do not start the planner here. Keep only decisions the
|
|
106
|
+
user must make; skip what the conversation, or an earlier
|
|
107
|
+
`### Clarifications` in this plan, already settled. None is the normal
|
|
108
|
+
case: then ask nothing and write nothing. Keep at most five, the one that
|
|
109
|
+
changes the plan most first; with more, keep five, say how many were
|
|
110
|
+
dropped, and suggest splitting the story; when the planner says it left questions out, say so in the same round, with its split suggestion. Each question has two to four
|
|
111
|
+
options and one recommended option. Put them to the user in one round:
|
|
112
|
+
one call of AskUserQuestion for up to four questions; with five, or where
|
|
113
|
+
the harness has no question tool, one plain-text message with the
|
|
114
|
+
questions numbered. Ask once per gate run: the Edit in step 4 and the
|
|
115
|
+
re-check in step 5 never ask again. A skipped question, or every question
|
|
116
|
+
of a dismissed call, takes its recommendation, marked `(assumed)`. Record
|
|
117
|
+
the round under `### Clarifications`, last in the plan: a line with
|
|
118
|
+
today's date, then one bullet per question with its answer; a later plan
|
|
119
|
+
run appends its own dated line to the same subsection. An answer that changes a
|
|
120
|
+
contract of the covering spec says which one, and the spec is amended
|
|
121
|
+
the way it records its other amendments before the code is written.
|
|
122
|
+
|
|
95
123
|
3. **Fill the section content** in the returned `content` before preview:
|
|
96
124
|
- `plan` — write the Implementation Plan. When the story's `specs:` names a
|
|
97
125
|
covering spec, the plan is a THIN ROUTE through that spec's behavioral
|
|
98
126
|
contracts: which contracts, in what order, which files. Consult the
|
|
99
|
-
planner agent's output if one ran. Do not restate the spec.
|
|
127
|
+
planner agent's output if one ran. Do not restate the spec. End the plan
|
|
128
|
+
with the step 2a round, when there was one.
|
|
100
129
|
- `close` — write the Final Summary (what changed / why / tests executed /
|
|
101
130
|
risks & follow-ups), and update the Acceptance Criteria checkboxes with
|
|
102
131
|
evidence suffixes: `- [x] <criterion> — evidence: <test | command | file:line>`.
|
|
103
132
|
Check a box ONLY with real evidence (reviewer output, test run, command).
|
|
133
|
+
When the story's Independent test line is filled, in the Final Summary's
|
|
134
|
+
tests executed, say whether the Independent test ran and how (the command
|
|
135
|
+
and what was seen), or why not; the story closes either way.
|
|
104
136
|
|
|
105
137
|
4. **Preview** path + notes + the changed sections. **Approval** via
|
|
106
138
|
AskUserQuestion: Yes / Edit / No.
|
|
@@ -104,6 +104,23 @@ the ones a production vault hits.
|
|
|
104
104
|
The story has `variant: test` in its frontmatter and follows every other
|
|
105
105
|
story rule: the plan and close gates, evidence, the board.
|
|
106
106
|
|
|
107
|
+
## A story with no spec: the Independent test line
|
|
108
|
+
|
|
109
|
+
Most stories have no covering spec, so no scenario tells them how they are
|
|
110
|
+
checked. The story template has one optional line under Description for
|
|
111
|
+
that: one sentence on how the story is checked on its own, a command to run
|
|
112
|
+
and what to see.
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
**Independent test:** run `npm test` with a fixture vault whose index has a
|
|
116
|
+
stale row, and see doctor report the folder.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
It is a hint, not a gate. `/projectstore:story` fills it only when the
|
|
120
|
+
conversation already says how; otherwise the placeholder stays, or you delete
|
|
121
|
+
it. When the line is filled, the reviewer reports whether that test ran, and
|
|
122
|
+
the close reports it in the Final Summary. Doctor never reads it.
|
|
123
|
+
|
|
107
124
|
## A contract no test can cover
|
|
108
125
|
|
|
109
126
|
Some contracts are checked on a real host after install, or by a person.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.13",
|
|
4
4
|
"description": "Your agent runs the project through a verified loop: task → artifact (ADR / spec / epic / story) → adversarial critic → backlog → planner → reviewer → done. Plain markdown in git — any model can pick the project up tomorrow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"project-management",
|
|
@@ -34,6 +34,8 @@ plan_updated_at: null
|
|
|
34
34
|
|
|
35
35
|
<!-- Welches Problem löst diese Story? Wer ist der Nutzer? -->
|
|
36
36
|
|
|
37
|
+
**Unabhängiger Test:** <!-- Optional. Ein Satz dazu, wie diese Story für sich geprüft wird: ein Kommando und was man sieht. Lösche die Zeile, wenn es keinen gibt. -->
|
|
38
|
+
|
|
37
39
|
## Zerlegung
|
|
38
40
|
|
|
39
41
|
<!-- Granulare Checkliste konkreter Aufgaben. Jeder Punkt klein genug für eine Sitzung. -->
|
|
@@ -34,6 +34,8 @@ plan_updated_at: null
|
|
|
34
34
|
|
|
35
35
|
<!-- What problem does this story solve? Who is the user? -->
|
|
36
36
|
|
|
37
|
+
**Independent test:** <!-- Optional. One sentence on how this story is checked on its own: a command to run and what to see. Delete the line if there is none. -->
|
|
38
|
+
|
|
37
39
|
## Decomposition
|
|
38
40
|
|
|
39
41
|
<!-- Granular checklist of concrete tasks. Each item should be small enough to complete in a session. -->
|
|
@@ -34,6 +34,8 @@ plan_updated_at: null
|
|
|
34
34
|
|
|
35
35
|
<!-- ¿Qué problema resuelve esta historia? ¿Quién es el usuario? -->
|
|
36
36
|
|
|
37
|
+
**Prueba independiente:** <!-- Opcional. Una frase sobre cómo se comprueba esta historia por sí sola: un comando y lo que se ve. Borra la línea si no hay ninguna. -->
|
|
38
|
+
|
|
37
39
|
## Descomposición
|
|
38
40
|
|
|
39
41
|
<!-- Checklist granular de tareas concretas. Cada punto, lo bastante pequeño para cerrarlo en una sesión. -->
|
|
@@ -34,6 +34,8 @@ plan_updated_at: null
|
|
|
34
34
|
|
|
35
35
|
<!-- Quel problème cette story résout-elle ? Qui est l'utilisateur ? -->
|
|
36
36
|
|
|
37
|
+
**Test indépendant :** <!-- Facultatif. Une phrase sur la façon de vérifier cette story seule : une commande à lancer et ce qu'on voit. Supprime la ligne s'il n'y en a pas. -->
|
|
38
|
+
|
|
37
39
|
## Décomposition
|
|
38
40
|
|
|
39
41
|
<!-- Checklist granulaire de tâches concrètes. Chaque point assez petit pour tenir dans une session. -->
|
|
@@ -34,6 +34,8 @@ plan_updated_at: null
|
|
|
34
34
|
|
|
35
35
|
<!-- Какую проблему решает эта история? Кто пользователь? -->
|
|
36
36
|
|
|
37
|
+
**Независимая проверка:** <!-- Необязательно. Одно предложение о том, как проверить эту стори отдельно: какую команду запустить и что увидеть. Удали строку, если такой проверки нет. -->
|
|
38
|
+
|
|
37
39
|
## Декомпозиция
|
|
38
40
|
|
|
39
41
|
<!-- Гранулярный чеклист конкретных задач. Каждый пункт — достаточно мал, чтобы закрыть за одну сессию. -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projectstore-claude",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.13",
|
|
4
4
|
"description": "projectstore for Claude Code: the core pinned and bundled, the harness fixed. A release artifact; the way in is npx projectstore setup",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"projectstore",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"README.md"
|
|
38
38
|
],
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"projectstore": "=0.30.
|
|
40
|
+
"projectstore": "=0.30.13"
|
|
41
41
|
},
|
|
42
42
|
"bundleDependencies": [
|
|
43
43
|
"projectstore"
|