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.
@@ -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.11",
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.11",
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 and
62
- step-3a edits (`specs:`, `variant: test`), not the re-run's raw draft.
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.11",
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
  <!-- Гранулярный чеклист конкретных задач. Каждый пункт — достаточно мал, чтобы закрыть за одну сессию. -->
@@ -34,6 +34,8 @@ plan_updated_at: null
34
34
 
35
35
  <!-- 这个 story 解决什么问题?用户是谁? -->
36
36
 
37
+ **独立测试:** <!-- 可选。一句话说明如何单独验证这个 story:运行什么命令、看到什么结果。没有就删掉这一行。 -->
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.11",
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.11"
40
+ "projectstore": "=0.30.12"
41
41
  },
42
42
  "bundleDependencies": [
43
43
  "projectstore"