projectstore-claude 0.30.11 → 0.30.12
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/reviewer.md +14 -1
- package/node_modules/projectstore/commands/story.md +13 -2
- 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.12",
|
|
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.12",
|
|
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",
|
|
@@ -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
|
|
|
@@ -101,6 +109,9 @@ the two cannot collide).
|
|
|
101
109
|
risks & follow-ups), and update the Acceptance Criteria checkboxes with
|
|
102
110
|
evidence suffixes: `- [x] <criterion> — evidence: <test | command | file:line>`.
|
|
103
111
|
Check a box ONLY with real evidence (reviewer output, test run, command).
|
|
112
|
+
When the story's Independent test line is filled, in the Final Summary's
|
|
113
|
+
tests executed, say whether the Independent test ran and how (the command
|
|
114
|
+
and what was seen), or why not; the story closes either way.
|
|
104
115
|
|
|
105
116
|
4. **Preview** path + notes + the changed sections. **Approval** via
|
|
106
117
|
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.12",
|
|
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.12",
|
|
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.12"
|
|
41
41
|
},
|
|
42
42
|
"bundleDependencies": [
|
|
43
43
|
"projectstore"
|