@theglitchking/persistent-planning 3.0.1 → 3.4.0
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.documentation/INDEX.md +224 -0
- package/.documentation/README.md +90 -0
- package/.documentation/REGISTRY.md +80 -0
- package/.documentation/agents/INDEX.md +43 -0
- package/.documentation/agents/REGISTRY.md +38 -0
- package/.documentation/api/INDEX.md +43 -0
- package/.documentation/api/REGISTRY.md +38 -0
- package/.documentation/architecture/INDEX.md +50 -0
- package/.documentation/architecture/REGISTRY.md +57 -0
- package/{docs/reference.md → .documentation/architecture/context-engineering-principles.md} +20 -1
- package/{docs → .documentation/architecture}/lg-mode.md +33 -8
- package/.documentation/architecture/lg-plan-artifact-lifecycle.md +104 -0
- package/.documentation/architecture/skill-linking-and-reclaim.md +84 -0
- package/.documentation/archive/README.md +46 -0
- package/.documentation/backups/INDEX.md +43 -0
- package/.documentation/backups/REGISTRY.md +38 -0
- package/.documentation/database/INDEX.md +43 -0
- package/.documentation/database/REGISTRY.md +38 -0
- package/.documentation/devops/INDEX.md +43 -0
- package/.documentation/devops/REGISTRY.md +38 -0
- package/.documentation/drafts/.gitkeep +1 -0
- package/.documentation/features/INDEX.md +43 -0
- package/.documentation/features/REGISTRY.md +38 -0
- package/.documentation/plans/INDEX.md +43 -0
- package/.documentation/plans/REGISTRY.md +38 -0
- package/.documentation/procedures/INDEX.md +43 -0
- package/.documentation/procedures/REGISTRY.md +53 -0
- package/.documentation/procedures/plan-completion-and-archive.md +185 -0
- package/.documentation/procedures/plugin-update-delivery.md +99 -0
- package/.documentation/quickstart/INDEX.md +42 -0
- package/.documentation/quickstart/REGISTRY.md +51 -0
- package/{docs → .documentation/quickstart}/examples.md +20 -0
- package/.documentation/reference/INDEX.md +49 -0
- package/.documentation/reference/REGISTRY.md +55 -0
- package/.documentation/reference/mandatory-frontmatter.md +71 -0
- package/.documentation/reference/skill-version-marker.md +70 -0
- package/{docs → .documentation/reference}/workspace-json.md +11 -5
- package/.documentation/security/INDEX.md +43 -0
- package/.documentation/security/REGISTRY.md +38 -0
- package/.documentation/standards/INDEX.md +43 -0
- package/.documentation/standards/REGISTRY.md +53 -0
- package/{docs → .documentation/standards}/atom-granularity.md +12 -5
- package/.documentation/standards/mandatory-closing-phases.md +145 -0
- package/.documentation/testing/INDEX.md +42 -0
- package/.documentation/testing/REGISTRY.md +51 -0
- package/.documentation/testing/test-suite.md +126 -0
- package/.documentation/troubleshooting/INDEX.md +43 -0
- package/.documentation/troubleshooting/REGISTRY.md +53 -0
- package/.documentation/troubleshooting/plan-never-reads-complete.md +109 -0
- package/.documentation/troubleshooting/stale-skill-dir-drift.md +115 -0
- package/.documentation/workflows/INDEX.md +43 -0
- package/.documentation/workflows/REGISTRY.md +38 -0
- package/CHANGELOG.md +198 -0
- package/README.md +67 -7
- package/bin/persistent-planning.js +56 -6
- package/commands/archive-plan.md +66 -0
- package/commands/plan-status.md +62 -0
- package/commands/start-atom.md +3 -3
- package/commands/start-planning.md +2 -2
- package/commands/start-task.md +2 -2
- package/hooks/session-start.js +191 -8
- package/package.json +6 -3
- package/scripts/archive-plan.sh +143 -0
- package/scripts/init-atom.sh +7 -0
- package/scripts/init-phase.sh +58 -6
- package/scripts/init-planning.sh +39 -4
- package/scripts/init-task.sh +7 -0
- package/scripts/lib/planning.sh +122 -0
- package/scripts/lib/skill-link.js +177 -0
- package/scripts/link-skills.js +38 -0
- package/scripts/plan-status.sh +196 -0
- package/skills/persistent-planning/SKILL.md +37 -9
- package/templates/lg/phase.md +22 -3
- package/templates/lg/task.md +4 -3
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Test Suite
|
|
3
|
+
tier: guide
|
|
4
|
+
domains:
|
|
5
|
+
- testing
|
|
6
|
+
audience:
|
|
7
|
+
- developers
|
|
8
|
+
tags: []
|
|
9
|
+
status: active
|
|
10
|
+
last_updated: '2026-08-31'
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
purpose: What tests/run.sh covers, how to run it, how to add an assertion, and
|
|
13
|
+
why the suite is plain bash rather than a framework.
|
|
14
|
+
estimated_read_time: 3 minutes
|
|
15
|
+
word_count: 450
|
|
16
|
+
last_validated: '2026-08-31'
|
|
17
|
+
backlinks: []
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Test Suite
|
|
21
|
+
|
|
22
|
+
`tests/run.sh` is the whole test suite. It is plain bash with assert helpers —
|
|
23
|
+
no framework, no fixtures, no dependencies beyond what the scripts under test
|
|
24
|
+
already need.
|
|
25
|
+
|
|
26
|
+
## Why bash and not a framework
|
|
27
|
+
|
|
28
|
+
Everything under test *is* bash. `init-planning.sh`, `init-phase.sh`,
|
|
29
|
+
`init-task.sh`, `init-atom.sh`, and `detect-mode.sh` are shell scripts whose
|
|
30
|
+
observable behavior is "what landed on disk." A JS test runner would add a
|
|
31
|
+
dependency, a config file, and a translation layer between the runner and the
|
|
32
|
+
thing being run, to assert the same `grep`s. The suite stays in the language of
|
|
33
|
+
its subject.
|
|
34
|
+
|
|
35
|
+
The suite is also the thing that makes the
|
|
36
|
+
[mandatory closing phases](../standards/mandatory-closing-phases.md) enforceable rather than
|
|
37
|
+
aspirational: a template edit that pushes a checkbox below the closing pair turns
|
|
38
|
+
the suite red.
|
|
39
|
+
|
|
40
|
+
## How to run it
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm test # preferred
|
|
44
|
+
bash tests/run.sh # identical, no npm needed
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Output is one line per assertion and a `N passed, M failed` summary. Exit status
|
|
48
|
+
is non-zero if anything failed, so it drops into CI unchanged.
|
|
49
|
+
|
|
50
|
+
## What it covers
|
|
51
|
+
|
|
52
|
+
| Group | Asserts |
|
|
53
|
+
|---|---|
|
|
54
|
+
| sm mode | `task_plan.md` + `notes.md` land at the slugified path; the plan seeds 6 phases; validation is second-to-last and documentation is last; the ordering rule text is present; the task name is substituted; re-running does not clobber an edited plan |
|
|
55
|
+
| lg mode | `detect-mode.sh` honors the `workspace.json` override; `phase.md` + `notes.md` are created; the two closing tasks are last and in order; HEWTD `tier: plan` frontmatter is present; no `PLACEHOLDER` tokens survive rendering; `task.md` is created with the right `parent:`; atom `sequence:` auto-increments 1 → 2 |
|
|
56
|
+
| mode guards | `init-phase.sh` exits non-zero in sm mode |
|
|
57
|
+
|
|
58
|
+
Every test runs the real script against a throwaway `CLAUDE_PROJECT_DIR` created
|
|
59
|
+
with `mktemp -d`, then removes it. Nothing touches the repository's own
|
|
60
|
+
`.planning/` tree.
|
|
61
|
+
|
|
62
|
+
## How to add an assertion
|
|
63
|
+
|
|
64
|
+
Use the helpers already in the file — `assert_eq`, `assert_contains`,
|
|
65
|
+
`assert_file`, and `checkbox_lines` (which extracts the checkbox lines of a named
|
|
66
|
+
markdown section). A new case looks like:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
WS=$(new_workspace)
|
|
70
|
+
CLAUDE_PROJECT_DIR="$WS" bash "$REPO_DIR/scripts/init-planning.sh" "Some Task" >/dev/null
|
|
71
|
+
assert_contains "$WS/.planning/some-task/task_plan.md" "## Goal" "plan has a Goal section"
|
|
72
|
+
rm -rf "$WS"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Then prove the assertion can fail.** Break the template on purpose, run
|
|
76
|
+
`npm test`, confirm the new line goes red, and restore it. An assertion that has
|
|
77
|
+
never failed is not known to test anything.
|
|
78
|
+
|
|
79
|
+
## Failure modes
|
|
80
|
+
|
|
81
|
+
| Symptom | Cause | Fix |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `no unsubstituted placeholders remain` fails | A template gained a `*_PLACEHOLDER` token with no matching substitution arg | Add the `KEY=value` pair to the matching `planning_render_and_log` call |
|
|
84
|
+
| `init-phase.sh refuses to run in sm mode` fails | The lg-mode guard was dropped from an init script | Restore the `planning_mode` check |
|
|
85
|
+
| Every lg assertion fails at once | `templates/lg/` not resolvable from the script directory | Check the `TEMPLATE_DIR` fallback chain in the init scripts |
|
|
86
|
+
| Tests pass locally, lg mode broken for installed users | `templates/` or `scripts/` missing from the `files` array in `package.json` | Add them, verify with `npm pack` before publishing |
|
|
87
|
+
|
|
88
|
+
That last row is not hypothetical — it is exactly how v3.0.0 shipped broken.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## The marketplace-shaped fixture
|
|
92
|
+
|
|
93
|
+
The skill-reclaim tests (issue #10) build a consumer workspace with **no
|
|
94
|
+
`node_modules`**, mirroring a Claude Code marketplace install — the shape that never
|
|
95
|
+
runs npm postinstall, and the shape that was actually broken. Driving the SessionStart
|
|
96
|
+
hook against it proves a repair lands with no `npm install` anywhere in the path.
|
|
97
|
+
|
|
98
|
+
A test that only passes under `npm install` proves nothing about that population. See
|
|
99
|
+
[Plugin update delivery](../procedures/plugin-update-delivery.md).
|
|
100
|
+
|
|
101
|
+
## Assert by diff, not by feature-grep
|
|
102
|
+
|
|
103
|
+
When checking that generated output matches a template, `diff` it. During triage of
|
|
104
|
+
issue #10 a keyword count (`phases: 6 | closers: 2`) reported two known-stale copies as
|
|
105
|
+
healthy; only `diff` exposed the 23-line gap, including an entirely missing
|
|
106
|
+
`## On Completion` block.
|
|
107
|
+
|
|
108
|
+
Likewise, assertions against the SessionStart payload parse it as JSON rather than
|
|
109
|
+
string-matching. The failure being guarded is an invalid second response line — a
|
|
110
|
+
substring check would pass on malformed output.
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
## Assert after mutation, not at render
|
|
114
|
+
|
|
115
|
+
The ordering rule for the mandatory closers went unenforced for a long time while a
|
|
116
|
+
test claimed to cover it. That test asserted the order of two checkbox lines in a
|
|
117
|
+
*freshly rendered template* — which can never be wrong, because nothing had happened to
|
|
118
|
+
it yet.
|
|
119
|
+
|
|
120
|
+
Assertions about an invariant must mutate the plan first: create a phase, add several
|
|
121
|
+
tasks, then check the closers are still last. The issue #12 block does this throughout,
|
|
122
|
+
including against a hand-reordered, partially-checked, annotated list.
|
|
123
|
+
|
|
124
|
+
The same instinct applies elsewhere in this suite: verify generated output by `diff`
|
|
125
|
+
rather than keyword count, and parse the SessionStart payload as JSON rather than
|
|
126
|
+
string-matching it.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting Documentation Index
|
|
3
|
+
tier: reference
|
|
4
|
+
domains: [troubleshooting]
|
|
5
|
+
status: active
|
|
6
|
+
last_updated: '2026-09-04'
|
|
7
|
+
version: '1.0.0'
|
|
8
|
+
purpose: Complete listing of troubleshooting documentation
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Troubleshooting Documentation
|
|
12
|
+
|
|
13
|
+
> Debug guides, common issues, solutions
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
- **Total Documents:** 2
|
|
18
|
+
- **Domain:** `troubleshooting/`
|
|
19
|
+
- **Category:** advanced
|
|
20
|
+
- **Load Priority:** 6/10
|
|
21
|
+
|
|
22
|
+
## Documents
|
|
23
|
+
|
|
24
|
+
### Guides
|
|
25
|
+
|
|
26
|
+
| Document | Status | Updated | Words |
|
|
27
|
+
|----------|--------|---------|-------|
|
|
28
|
+
| [A plan won't read COMPLETE](plan-never-reads-complete.md) | active | 2026-09-04 | 264 |
|
|
29
|
+
| [Stale skill directory — commands run frozen code](stale-skill-dir-drift.md) | active | 2026-09-04 | 403 |
|
|
30
|
+
|
|
31
|
+
## Keywords
|
|
32
|
+
|
|
33
|
+
This domain covers: troubleshooting, troubleshoot, debug, debugging, issue, issues, problem, problems, error, errors
|
|
34
|
+
|
|
35
|
+
## Related Domains
|
|
36
|
+
|
|
37
|
+
- [Agents](../agents/) - Expert agent documentation, specialty matrix
|
|
38
|
+
- [Backups](../backups/) - Backup/restore guides, disaster recovery
|
|
39
|
+
- [Plans](../plans/) - Planning documents, roadmaps, proposals
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
*Last updated: 2026-09-04*
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting Registry
|
|
3
|
+
tier: reference
|
|
4
|
+
domains: [troubleshooting]
|
|
5
|
+
status: active
|
|
6
|
+
last_updated: '2026-09-04'
|
|
7
|
+
version: '1.0.0'
|
|
8
|
+
purpose: Quick reference for troubleshooting documentation
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Troubleshooting Registry
|
|
12
|
+
|
|
13
|
+
> Quick reference for debug guides, common issues, solutions.
|
|
14
|
+
|
|
15
|
+
## At a Glance
|
|
16
|
+
|
|
17
|
+
| Metric | Value |
|
|
18
|
+
|--------|-------|
|
|
19
|
+
| Documents | 2 |
|
|
20
|
+
| Category | advanced |
|
|
21
|
+
| Load Priority | 6/10 |
|
|
22
|
+
|
|
23
|
+
## Active Documents
|
|
24
|
+
|
|
25
|
+
- [A plan won't read COMPLETE](plan-never-reads-complete.md)
|
|
26
|
+
- [Stale skill directory — commands run frozen code](stale-skill-dir-drift.md)
|
|
27
|
+
|
|
28
|
+
## Recently Updated
|
|
29
|
+
|
|
30
|
+
- [A plan won't read COMPLETE](plan-never-reads-complete.md) - 2026-09-04
|
|
31
|
+
- [Stale skill directory — commands run frozen code](stale-skill-dir-drift.md) - 2026-09-04
|
|
32
|
+
|
|
33
|
+
## By Status
|
|
34
|
+
|
|
35
|
+
| Status | Count |
|
|
36
|
+
|--------|-------|
|
|
37
|
+
| active | 2 |
|
|
38
|
+
| draft | 0 |
|
|
39
|
+
| deprecated | 0 |
|
|
40
|
+
| archived | 0 |
|
|
41
|
+
|
|
42
|
+
## Keywords
|
|
43
|
+
|
|
44
|
+
`troubleshooting` `troubleshoot` `debug` `debugging` `issue` `issues` `problem` `problems` `error` `errors` `fix` `solution` `solutions` `resolve` `diagnose` `diagnosis` `log` `logs` `faq`
|
|
45
|
+
|
|
46
|
+
## See Also
|
|
47
|
+
|
|
48
|
+
- [Full Index](INDEX.md) - Complete document listing
|
|
49
|
+
- [Root Index](../INDEX.md) - All domains
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
*Last updated: 2026-09-04*
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: A plan won't read COMPLETE
|
|
3
|
+
tier: guide
|
|
4
|
+
domains:
|
|
5
|
+
- troubleshooting
|
|
6
|
+
audience:
|
|
7
|
+
- developers
|
|
8
|
+
tags: []
|
|
9
|
+
status: active
|
|
10
|
+
last_updated: '2026-09-04'
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
purpose: >-
|
|
13
|
+
Three reasons a plan will not read COMPLETE — an unfinished mandatory closer, a
|
|
14
|
+
placeholder counted as work, or a blocked artifact — and the fix for each.
|
|
15
|
+
estimated_read_time: 2 minutes
|
|
16
|
+
word_count: 264
|
|
17
|
+
last_validated: '2026-09-04'
|
|
18
|
+
backlinks: []
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# A plan won't read COMPLETE
|
|
22
|
+
|
|
23
|
+
`/plan-status` shows a plan stuck below 100%, or at `100%` but still `in progress`,
|
|
24
|
+
and it is not obvious what is outstanding. There are three causes with three
|
|
25
|
+
different fixes.
|
|
26
|
+
|
|
27
|
+
## 1. Every box is ticked but it still says `in progress`
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
my-phase in progress 13/13 boxes
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
A **mandatory closing task is not done.** Ticking its checkbox in `phase.md` is not
|
|
34
|
+
enough — the closer's own `task.md` must carry `status: done`.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
grep -l '^mandatory: true' .planning/my-phase/*/task.md | xargs grep -H '^status:'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Anything not `done` or `archived` is what is holding the plan open. Finish the work,
|
|
41
|
+
then set `status: done` in that task's frontmatter.
|
|
42
|
+
|
|
43
|
+
This is deliberate. A closer that was ticked but never performed is precisely the
|
|
44
|
+
failure the gate exists to catch — see
|
|
45
|
+
[`mandatory:` frontmatter](../reference/mandatory-frontmatter.md).
|
|
46
|
+
|
|
47
|
+
## 2. The count includes a box that isn't work
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
my-phase in progress 0/5 boxes # but only 2 real tasks exist
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Older plans carry the placeholder lines as **checkboxes**:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
- [ ] (no tasks yet — run `/start-task …`)
|
|
57
|
+
- [ ] (no atoms yet — add inline checkboxes here for simple atoms,
|
|
58
|
+
or run `/start-atom …` for complex ones)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`plan-status.sh` counts every `- [ ]` under a plan, so those inflate the total and the
|
|
62
|
+
plan cannot finish until someone ticks a line that says nothing exists.
|
|
63
|
+
|
|
64
|
+
**Fix:** delete the placeholder line, or add a real task/atom — from 3.3.0 the init
|
|
65
|
+
scripts remove it automatically on first insert. New plans ship the placeholders as
|
|
66
|
+
italic text, which is not counted.
|
|
67
|
+
|
|
68
|
+
## 2b. Quoted markdown used to count (fixed in 3.3.1)
|
|
69
|
+
|
|
70
|
+
Before 3.3.1, three readers scanned whole files: the checkbox counter, the mandatory
|
|
71
|
+
gate, and blocked detection. A `notes.md` that merely *documented* the contract tripped
|
|
72
|
+
all three — a fenced `- [ ]` example inflated the denominator, a fenced `mandatory: true`
|
|
73
|
+
held the plan open with the box count reading a perfect `n/n`, and a fenced
|
|
74
|
+
`status: blocked` produced a false `blocked` verdict.
|
|
75
|
+
|
|
76
|
+
Frontmatter fields are now read from frontmatter only, and checkbox counting skips fenced
|
|
77
|
+
code blocks. If you are on an older version, move the example out of the plan or upgrade.
|
|
78
|
+
|
|
79
|
+
## 3. Something under the plan is `status: blocked`
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
my-phase blocked 7/20 boxes
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`plan-status.sh` reports `blocked` when any artifact under the plan has
|
|
86
|
+
`status: blocked`. Find it:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
grep -rl '^status: blocked' .planning/my-phase/
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
That is a report, not a defect — the plan is telling you what it is waiting on.
|
|
93
|
+
|
|
94
|
+
## Checking the whole picture
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
bash scripts/plan-status.sh # table: in progress / blocked / COMPLETE / empty
|
|
98
|
+
bash scripts/plan-status.sh --complete # one complete slug per line, for scripts
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`archive-plan.sh` refuses an incomplete plan using the same check, so anything above
|
|
102
|
+
that blocks COMPLETE also blocks archiving. `--force` overrides it; nothing is ever
|
|
103
|
+
deleted either way.
|
|
104
|
+
|
|
105
|
+
## Related
|
|
106
|
+
|
|
107
|
+
- [Plan completion and archive](../procedures/plan-completion-and-archive.md)
|
|
108
|
+
- [lg plan artifact lifecycle](../architecture/lg-plan-artifact-lifecycle.md)
|
|
109
|
+
- [Mandatory closing phases](../standards/mandatory-closing-phases.md)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Stale skill directory — commands run frozen code
|
|
3
|
+
tier: guide
|
|
4
|
+
domains:
|
|
5
|
+
- troubleshooting
|
|
6
|
+
audience:
|
|
7
|
+
- developers
|
|
8
|
+
tags: []
|
|
9
|
+
status: active
|
|
10
|
+
last_updated: '2026-09-04'
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
purpose: Symptom, cause, detection and repair for a stale .claude/skills/persistent-planning
|
|
13
|
+
directory that makes commands run frozen pre-3.1.0 code (issue #10).
|
|
14
|
+
estimated_read_time: 3 minutes
|
|
15
|
+
word_count: 403
|
|
16
|
+
last_validated: '2026-09-04'
|
|
17
|
+
backlinks: []
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Stale skill directory — commands run frozen code
|
|
21
|
+
|
|
22
|
+
`/start-planning` produces a plan that is missing the mandatory validate and
|
|
23
|
+
documentation phases, and has no `## On Completion` archive block. No warning is
|
|
24
|
+
shown. `npx persistent-planning status` reports the current version. Everything
|
|
25
|
+
exits 0.
|
|
26
|
+
|
|
27
|
+
This is the failure mode from [issue #10](https://github.com/the-glitch-kingdom/persistent-planning/issues/10),
|
|
28
|
+
fixed in 3.2.0.
|
|
29
|
+
|
|
30
|
+
## Symptom
|
|
31
|
+
|
|
32
|
+
A generated `task_plan.md` ends at Phase 4. A correct one ends:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
- [ ] Phase 5: Validate success through comprehensive testing (MANDATORY)
|
|
36
|
+
- [ ] Phase 6: Documentation pass -- create/update/deprecate as many docs as needed to capture what was done, where it lives, how to troubleshoot it, etc. etc.. etc.. (MANDATORY)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
and carries an `## On Completion` section naming `/plan-status` and `/archive-plan`.
|
|
40
|
+
|
|
41
|
+
## Cause
|
|
42
|
+
|
|
43
|
+
`.claude/skills/persistent-planning/` is a **real directory** instead of a symlink
|
|
44
|
+
into the installed package. v1's `persistent-planning install` (removed in 2.0.0)
|
|
45
|
+
copied the skill dir. The v2+ linker only symlinks, and when it found a real
|
|
46
|
+
directory at the destination it warned once during `npm install` and skipped —
|
|
47
|
+
permanently.
|
|
48
|
+
|
|
49
|
+
The result: the update check read the *plugin's* version while `/start-planning`
|
|
50
|
+
executed the *skill dir's* frozen copy. Same version number, different artifact,
|
|
51
|
+
nothing reconciling them. `commands/start-planning.md` lists
|
|
52
|
+
`~/.claude/skills/persistent-planning/scripts/init-planning.sh` among its fallback
|
|
53
|
+
paths, and in a v1-era skill dir that file exists — so the stale copy wins.
|
|
54
|
+
|
|
55
|
+
## Detect
|
|
56
|
+
|
|
57
|
+
**Check the shape, not the contents:**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
ls -ld .claude/skills/persistent-planning
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
A symlink is healthy. A real directory is drift — nothing in the current system
|
|
64
|
+
creates one.
|
|
65
|
+
|
|
66
|
+
**Confirm how far behind, by diff:**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
diff <path-to-package>/scripts/init-planning.sh \
|
|
70
|
+
.claude/skills/persistent-planning/scripts/init-planning.sh
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> **Do not verify by keyword grep.** Counting `Phase` or `MANDATORY` occurrences
|
|
74
|
+
> reported the known-stale copies as healthy during triage; only `diff` exposed the
|
|
75
|
+
> 23-line gap. See [Skill version marker](../reference/skill-version-marker.md) for
|
|
76
|
+
> the version signal.
|
|
77
|
+
|
|
78
|
+
From 3.2.0 the SessionStart hook detects this for you and prints the path, the
|
|
79
|
+
running version vs the installed one, and the fix.
|
|
80
|
+
|
|
81
|
+
## Fix
|
|
82
|
+
|
|
83
|
+
On 3.2.0 or later, with `updatePolicy: auto`, the next session repairs it by itself
|
|
84
|
+
— once per plugin version. Otherwise:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npx persistent-planning relink
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Either way the original is renamed to `.claude/skills/persistent-planning.bak-<timestamp>`.
|
|
91
|
+
**Nothing is deleted.** Delete the backup yourself once you are satisfied.
|
|
92
|
+
|
|
93
|
+
If the directory is tracked in git — v1's installer sometimes committed it — the
|
|
94
|
+
repair shows up as deleted files plus a new symlink. That is a real commit for that
|
|
95
|
+
repo to take, and a prompt to decide whether a skill dir belongs in version control
|
|
96
|
+
at all.
|
|
97
|
+
|
|
98
|
+
## When repair cannot run
|
|
99
|
+
|
|
100
|
+
`relink` reports a rename failure and leaves the directory alone rather than
|
|
101
|
+
deleting anything. Move it aside by hand and re-run. To manage the directory
|
|
102
|
+
yourself and silence the machinery:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
PERSISTENT_PLANNING_NO_RECLAIM=1 # never reclaim
|
|
106
|
+
PERSISTENT_PLANNING_SKIP_LINK=1 # never link at all
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`updatePolicy: off` also suppresses both the warning and the repair.
|
|
110
|
+
|
|
111
|
+
## Related
|
|
112
|
+
|
|
113
|
+
- [Skill linking and reclaim](../architecture/skill-linking-and-reclaim.md) — how it works
|
|
114
|
+
- [Plugin update delivery](../procedures/plugin-update-delivery.md) — why the hook, not postinstall
|
|
115
|
+
- [Skill version marker](../reference/skill-version-marker.md) — the `.version` contract
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Workflows Documentation Index
|
|
3
|
+
tier: reference
|
|
4
|
+
domains: [workflows]
|
|
5
|
+
status: active
|
|
6
|
+
last_updated: '2026-09-04'
|
|
7
|
+
version: '1.0.0'
|
|
8
|
+
purpose: Complete listing of workflows documentation
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Workflows Documentation
|
|
12
|
+
|
|
13
|
+
> Process documentation, multi-step operations
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
- **Total Documents:** 0
|
|
18
|
+
- **Domain:** `workflows/`
|
|
19
|
+
- **Category:** features
|
|
20
|
+
- **Load Priority:** 5/10
|
|
21
|
+
|
|
22
|
+
## Documents
|
|
23
|
+
|
|
24
|
+
*No documents in this domain yet.*
|
|
25
|
+
|
|
26
|
+
To add a document:
|
|
27
|
+
|
|
28
|
+
1. Create a markdown file in this directory
|
|
29
|
+
2. Add YAML frontmatter with required metadata
|
|
30
|
+
3. Run `npx hit-em-with-the-docs integrate <file>`
|
|
31
|
+
## Keywords
|
|
32
|
+
|
|
33
|
+
This domain covers: workflow, workflows, process, processes, flow, flowchart, sequence, pipeline, automation, automated
|
|
34
|
+
|
|
35
|
+
## Related Domains
|
|
36
|
+
|
|
37
|
+
- [Procedures](../procedures/) - Step-by-step operational procedures (SOP)
|
|
38
|
+
- [Quickstart](../quickstart/) - Setup guides, dev workflow, onboarding
|
|
39
|
+
- [Features](../features/) - Feature implementation guides, admin docs
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
*Last updated: 2026-09-04*
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Workflows Registry
|
|
3
|
+
tier: reference
|
|
4
|
+
domains: [workflows]
|
|
5
|
+
status: active
|
|
6
|
+
last_updated: '2026-09-04'
|
|
7
|
+
version: '1.0.0'
|
|
8
|
+
purpose: Quick reference for workflows documentation
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Workflows Registry
|
|
12
|
+
|
|
13
|
+
> Quick reference for process documentation, multi-step operations.
|
|
14
|
+
|
|
15
|
+
## At a Glance
|
|
16
|
+
|
|
17
|
+
| Metric | Value |
|
|
18
|
+
|--------|-------|
|
|
19
|
+
| Documents | 0 |
|
|
20
|
+
| Category | features |
|
|
21
|
+
| Load Priority | 5/10 |
|
|
22
|
+
|
|
23
|
+
## Documents
|
|
24
|
+
|
|
25
|
+
*No documents in this domain yet.*
|
|
26
|
+
|
|
27
|
+
## Keywords
|
|
28
|
+
|
|
29
|
+
`workflow` `workflows` `process` `processes` `flow` `flowchart` `sequence` `pipeline` `automation` `automated` `multi-step` `orchestration` `state-machine`
|
|
30
|
+
|
|
31
|
+
## See Also
|
|
32
|
+
|
|
33
|
+
- [Full Index](INDEX.md) - Complete document listing
|
|
34
|
+
- [Root Index](../INDEX.md) - All domains
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
*Last updated: 2026-09-04*
|