@zalom/plastic 2.0.0-alpha.27 → 2.0.0-alpha.29

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.
Files changed (207) hide show
  1. package/PLASTIC.md +13 -139
  2. package/README.md +345 -133
  3. package/agents/plastic-enforcer.md +9 -10
  4. package/agents/plastic-executor.md +1 -1
  5. package/bin/crap +4 -0
  6. package/bin/lib/context_budget.rb +35 -1
  7. package/bin/lib/skill_census.rb +839 -0
  8. package/bin/plastic +6 -0
  9. package/bin/plastic-skill-census +114 -0
  10. package/bin/verify-change +345 -0
  11. package/deprecations.yml +1 -1
  12. package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +4 -7
  13. package/{skills/auto/references → docs/help}/agent-architecture.md +7 -7
  14. package/{skills/conventions/references → docs/help}/completion-and-done.md +1 -1
  15. package/{skills/auto/references → docs/help}/human-report-contract.md +17 -19
  16. package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
  17. package/{skills/tutorial/references → docs/help}/track-1-guided.md +8 -8
  18. package/{skills/tutorial/references → docs/help}/track-2-auto.md +5 -5
  19. package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
  20. package/package.json +3 -2
  21. package/scripts/append-ledger +2 -1
  22. package/scripts/dashboard.rb +10 -9
  23. package/scripts/day-summary +2 -1
  24. package/scripts/doctor.rb +48 -42
  25. package/scripts/end-intent +2 -8
  26. package/scripts/file-session-intent +2 -1
  27. package/scripts/hook-capture +4 -3
  28. package/scripts/hook-close +2 -1
  29. package/scripts/hook-record +3 -2
  30. package/scripts/hook-savepoint +3 -2
  31. package/scripts/hook-session-start +5 -4
  32. package/scripts/hook-stop +2 -1
  33. package/scripts/insight-append +1 -2
  34. package/scripts/install.rb +3 -1
  35. package/scripts/lib/active_delivery.rb +1 -1
  36. package/scripts/lib/arm.rb +2 -1
  37. package/scripts/lib/backup.rb +65 -0
  38. package/scripts/lib/cli/command.rb +85 -0
  39. package/scripts/lib/cli/commands/auto.rb +18 -0
  40. package/scripts/lib/cli/commands/auto_brief.rb +44 -0
  41. package/scripts/lib/cli/commands/auto_lock.rb +60 -0
  42. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  43. package/scripts/lib/cli/commands/auto_take.rb +25 -0
  44. package/scripts/lib/cli/commands/backup.rb +43 -0
  45. package/scripts/lib/cli/commands/checkout.rb +25 -0
  46. package/scripts/lib/cli/commands/continue.rb +66 -0
  47. package/scripts/lib/cli/commands/doctor.rb +20 -0
  48. package/scripts/lib/cli/commands/feedback.rb +40 -0
  49. package/scripts/lib/cli/commands/help.rb +69 -0
  50. package/scripts/lib/cli/commands/hook.rb +32 -0
  51. package/scripts/lib/cli/commands/index.rb +23 -0
  52. package/scripts/lib/cli/commands/install.rb +21 -0
  53. package/scripts/lib/cli/commands/installer_verb.rb +37 -0
  54. package/scripts/lib/cli/commands/intent.rb +19 -0
  55. package/scripts/lib/cli/commands/intent_answer.rb +37 -0
  56. package/scripts/lib/cli/commands/intent_command.rb +53 -0
  57. package/scripts/lib/cli/commands/intent_end.rb +61 -0
  58. package/scripts/lib/cli/commands/intent_new.rb +62 -0
  59. package/scripts/lib/cli/commands/intent_note.rb +43 -0
  60. package/scripts/lib/cli/commands/intent_rule.rb +36 -0
  61. package/scripts/lib/cli/commands/intent_show.rb +25 -0
  62. package/scripts/lib/cli/commands/intent_spec.rb +44 -0
  63. package/scripts/lib/cli/commands/intent_step.rb +43 -0
  64. package/scripts/lib/cli/commands/intent_verify.rb +26 -0
  65. package/scripts/lib/cli/commands/migrate.rb +16 -0
  66. package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
  67. package/scripts/lib/cli/commands/next.rb +49 -0
  68. package/scripts/lib/cli/commands/project.rb +19 -0
  69. package/scripts/lib/cli/commands/project_links.rb +42 -0
  70. package/scripts/lib/cli/commands/project_list.rb +20 -0
  71. package/scripts/lib/cli/commands/project_new.rb +72 -0
  72. package/scripts/lib/cli/commands/query.rb +31 -0
  73. package/scripts/lib/cli/commands/render.rb +25 -0
  74. package/scripts/lib/cli/commands/roadmap.rb +19 -0
  75. package/scripts/lib/cli/commands/roadmap_check.rb +44 -0
  76. package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
  77. package/scripts/lib/cli/commands/roadmap_next.rb +34 -0
  78. package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
  79. package/scripts/lib/cli/commands/rollback.rb +20 -0
  80. package/scripts/lib/cli/commands/search.rb +60 -0
  81. package/scripts/lib/cli/commands/session.rb +18 -0
  82. package/scripts/lib/cli/commands/session_commit.rb +42 -0
  83. package/scripts/lib/cli/commands/session_handoff.rb +34 -0
  84. package/scripts/lib/cli/commands/session_summary.rb +35 -0
  85. package/scripts/lib/cli/commands/status.rb +68 -0
  86. package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
  87. package/scripts/lib/cli/commands/sync.rb +46 -0
  88. package/scripts/lib/cli/commands/uninstall.rb +20 -0
  89. package/scripts/lib/cli/commands/update.rb +20 -0
  90. package/scripts/lib/cli/commands/version.rb +53 -0
  91. package/scripts/lib/cli/frontier.rb +84 -0
  92. package/scripts/lib/cli/legacy.rb +50 -0
  93. package/scripts/lib/cli/output.rb +102 -0
  94. package/scripts/lib/cli/scope.rb +127 -0
  95. package/scripts/lib/cli/table.rb +64 -0
  96. package/scripts/lib/cli.rb +94 -0
  97. package/scripts/lib/compact_instructions.rb +8 -0
  98. package/scripts/lib/day_summary.rb +4 -3
  99. package/scripts/lib/doctor_core.rb +7 -32
  100. package/scripts/lib/doctor_session_ledger.rb +2 -1
  101. package/scripts/lib/feedback_report.rb +1 -1
  102. package/scripts/lib/graph_measure_models.rb +3 -1
  103. package/scripts/lib/index_entry.rb +9 -0
  104. package/scripts/lib/installer_core.rb +73 -19
  105. package/scripts/lib/intent_screen.rb +3 -3
  106. package/scripts/lib/lock.rb +2 -2
  107. package/scripts/lib/node_input.rb +3 -2
  108. package/scripts/lib/preflight.rb +4 -6
  109. package/scripts/lib/project_config.rb +2 -1
  110. package/scripts/lib/project_validator.rb +3 -2
  111. package/scripts/lib/qmd_sync.rb +8 -7
  112. package/scripts/lib/reference_archive.rb +45 -0
  113. package/scripts/lib/release_guard.rb +2 -0
  114. package/scripts/lib/report_screen.rb +4 -3
  115. package/scripts/lib/rlm/corpus.rb +13 -0
  116. package/scripts/lib/rlm/probe.rb +29 -0
  117. package/scripts/lib/rlm/query.rb +22 -0
  118. package/scripts/lib/roadmap_queue.rb +2 -2
  119. package/scripts/lib/roadmap_savepoint.rb +1 -1
  120. package/scripts/lib/runner_absorb.rb +3 -2
  121. package/scripts/lib/search_index.rb +55 -0
  122. package/scripts/lib/session_git.rb +4 -3
  123. package/scripts/lib/sqlite.rb +22 -0
  124. package/scripts/lib/store_discovery.rb +7 -6
  125. package/scripts/lib/store_layout.rb +54 -0
  126. package/scripts/lib/store_provisioning.rb +2 -1
  127. package/scripts/lib/store_sync.rb +85 -0
  128. package/scripts/lib/stores_move.rb +93 -0
  129. package/scripts/lib/verify_intent.rb +2 -7
  130. package/scripts/lib/version_number.rb +48 -0
  131. package/scripts/lib/work_graph.rb +59 -0
  132. package/scripts/lib/worktree.rb +3 -8
  133. package/scripts/lib/worktree_sweep.rb +3 -2
  134. package/scripts/link-suggest +2 -1
  135. package/scripts/migrate-to-global +1 -1
  136. package/scripts/new-intent +3 -12
  137. package/scripts/plastic-lock +3 -2
  138. package/scripts/promote-session-item +3 -2
  139. package/scripts/release-check +10 -5
  140. package/scripts/report-screen +1 -1
  141. package/scripts/session-commit +2 -1
  142. package/scripts/spawn-preamble +2 -2
  143. package/scripts/update.rb +25 -4
  144. package/scripts/write-handoff +2 -1
  145. package/templates/agents.md +6 -6
  146. package/templates/render.css +10 -0
  147. package/bin/plastic.js +0 -70
  148. package/skills/agent-advisor/SKILL.md +0 -84
  149. package/skills/auto/SKILL.md +0 -297
  150. package/skills/auto/evals/evals.json +0 -255
  151. package/skills/auto/references/end-tail.md +0 -64
  152. package/skills/conventions/SKILL.md +0 -29
  153. package/skills/dashboard/SKILL.md +0 -180
  154. package/skills/dashboard/evals/evals.json +0 -38
  155. package/skills/dashboard/references/classification.md +0 -22
  156. package/skills/dashboard/templates/dashboard-global.md +0 -20
  157. package/skills/dashboard/templates/dashboard-project.md +0 -19
  158. package/skills/direct/SKILL.md +0 -66
  159. package/skills/direct/references/request-signals.md +0 -59
  160. package/skills/doctor/SKILL.md +0 -305
  161. package/skills/doctor/report.md +0 -102
  162. package/skills/feedback/SKILL.md +0 -98
  163. package/skills/feedback/references/transport-and-privacy.md +0 -65
  164. package/skills/feedback/report.md +0 -36
  165. package/skills/install/SKILL.md +0 -215
  166. package/skills/intent-continuing/SKILL.md +0 -156
  167. package/skills/intent-continuing/references/board-fill.md +0 -52
  168. package/skills/intent-continuing/references/boarding-matrix.md +0 -35
  169. package/skills/intent-continuing/references/context-management.md +0 -28
  170. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  171. package/skills/intent-creating/SKILL.md +0 -89
  172. package/skills/intent-creating/evals/evals.json +0 -72
  173. package/skills/intent-creating/references/lifecycle.md +0 -81
  174. package/skills/intent-creating/references/wikilinks.md +0 -8
  175. package/skills/intent-ending/SKILL.md +0 -182
  176. package/skills/intent-ending/evals/evals.json +0 -74
  177. package/skills/intent-executing/SKILL.md +0 -87
  178. package/skills/intent-executing/evals/evals.json +0 -66
  179. package/skills/intent-executing/implementer-prompt.md +0 -47
  180. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  181. package/skills/intent-speccing/SKILL.md +0 -136
  182. package/skills/intent-speccing/evals/evals.json +0 -126
  183. package/skills/intent-speccing/references/design-principles.md +0 -44
  184. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  185. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  186. package/skills/project-creating/SKILL.md +0 -162
  187. package/skills/project-creating/references/hubs-projects.md +0 -55
  188. package/skills/project-creating/references/project-scaffolding.md +0 -97
  189. package/skills/releasing/SKILL.md +0 -376
  190. package/skills/releasing/references/deprecations.md +0 -60
  191. package/skills/releasing/references/promotion-and-tagging.md +0 -70
  192. package/skills/releasing/references/release-lines.md +0 -105
  193. package/skills/roadmap/SKILL.md +0 -90
  194. package/skills/roadmap/references/file-format.md +0 -134
  195. package/skills/roadmap/references/operations.md +0 -112
  196. package/skills/rollback/SKILL.md +0 -91
  197. package/skills/tutorial/SKILL.md +0 -66
  198. package/skills/tutorial/evals/evals.json +0 -186
  199. package/skills/uninstall/SKILL.md +0 -75
  200. package/skills/update/SKILL.md +0 -126
  201. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  202. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  203. /package/{skills/conventions/references → docs/help}/knowledge-graph.md +0 -0
  204. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  205. /package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +0 -0
  206. /package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +0 -0
  207. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -1,215 +0,0 @@
1
- ---
2
- name: plastic-install
3
- description: 'Use when initializing Plastic globally (~/.plastic/) or locally in a project, or to re-install/repair a broken installation. The package pin selects the channel (@latest, @beta, @alpha; the channel flags were removed in 2.0). First install defaults to @latest (stable); reinstalls match the already-installed channel. Global install is recommended: it creates the global intent store as a git-backed repository. Local install creates .plastic/ in the current project for testing.'
4
- user-invocable: true
5
- ---
6
-
7
- # Install Plastic
8
-
9
- > **Recommended path:** for a first install, run `npx -y @zalom/plastic@latest install --claude`
10
- > in your shell (or `bunx -y @zalom/plastic@latest install --claude` if you use Bun). This skill
11
- > exists to **re-install or repair** an existing setup from inside the agent, and to
12
- > drive interactive global configuration. Whenever this skill performs an install or
13
- > re-install, it **runs `/plastic-doctor` afterward** and reports the result.
14
-
15
- ## Channel rule
16
-
17
- If Plastic is installed, derive `<channel>` from `~/.plastic/VERSION`: a version containing
18
- `-alpha` means `@alpha`, `-beta` means `@beta`, otherwise `@latest`. If not installed
19
- (first install), default to `@latest`. To change channel, pin the package instead of
20
- passing a flag: `npx -y @zalom/plastic@alpha install --claude` (or a version such as
21
- `@2.0.0-alpha.1`); the `--alpha`, `--beta`, and `--latest` flags were removed in 2.0
22
- (intent 310) because they never selected a package.
23
-
24
- ## Re-install / repair
25
-
26
- If Plastic is already installed but something is broken (skills missing, hooks not
27
- firing, leftover legacy plugin), re-run the installer, it is idempotent, prunes
28
- files that no longer ship, and removes any legacy plugin/marketplace layout:
29
-
30
- ```bash
31
- npx -y @zalom/plastic@<channel> install --reinstall --claude
32
- ```
33
-
34
- Then **run `/plastic-doctor`** and report what it found.
35
-
36
- ## Channels
37
-
38
- | Package | Channel |
39
- |---------|---------|
40
- | `@zalom/plastic@latest` | stable (default on a first install) |
41
- | `@zalom/plastic@beta` | beta |
42
- | `@zalom/plastic@alpha` | alpha; `npx -y @zalom/plastic@alpha install --claude` is the 2.0 alpha path |
43
-
44
- When invoked from within Claude Code (re-install or channel switch), the skill
45
- runs the appropriate npx command:
46
-
47
- ```bash
48
- # Stable (default on a first install)
49
- npx -y @zalom/plastic@latest install --claude
50
-
51
- # Beta
52
- npx -y @zalom/plastic@beta install --claude
53
-
54
- # Alpha
55
- npx -y @zalom/plastic@alpha install --claude
56
- ```
57
-
58
- The installed version and channel are recorded in `~/.plastic/VERSION`.
59
-
60
- ## Modes
61
-
62
- ### Global Install (default, recommended)
63
-
64
- Run `/plastic-install` with no arguments.
65
-
66
- #### Procedure
67
-
68
- **Step 1: Run the installer**
69
-
70
- Check if `~/.plastic/VERSION` exists.
71
- - If yes: announce "Plastic is already installed at ~/.plastic/. Run `/plastic-update` to
72
- sync core files, or use the re-install command above to repair in place."
73
- - If no: first ask the advisor question below (Claude Code only), then run the fresh
74
- install command (default `@latest`, or the channel the user named) with whichever
75
- flags that answer produced:
76
-
77
- ```bash
78
- npx -y @zalom/plastic@latest install --claude [--no-advisor] [--advisor VALUE]
79
- ```
80
-
81
- This single command, via `install.rb` (`bootstrap` + `distribute`), creates `store/`,
82
- `projects/`, `config.yml`, `projects.yml`, `INDEX.md`, and `AGENTS.md` under `~/.plastic/`,
83
- and copies the utility scripts (`folgezettel-id`, `read-config`, and the rest of
84
- `scripts/`). This skill does none of that itself; it wraps the command with the
85
- interactive steps the CLI does not yet own, plus reporting and a doctor pass.
86
-
87
- **The advisor (Claude Code only)**
88
-
89
- Ask the user one feature question, interactive sessions only:
90
- > "Would you like an advisor agent for expensive reasoning: plan review, architecture
91
- > calls, second opinions, breaking deadlocks?"
92
- > - Yes (recommended) -> ask which advisor is the default, below
93
- > - No -> append `--no-advisor`
94
-
95
- If yes, ask which advisor is the default, exactly two choices:
96
- > "Which advisor should be the default?"
97
- > - **Primary Advisor** (recommended): Fable at medium effort for normal
98
- > consultation. -> append `--advisor primary`
99
- > - **Secondary Advisor**: Fable at high effort for explicit escalation. ->
100
- > append `--advisor secondary`
101
-
102
- Non-interactive sessions (no tty) skip the question entirely: the install ships with the
103
- shipped default, advisor enabled with no `--advisor` flag (the `plastic-agent-advisor`
104
- skill's own routing falls back to `plastic-primary-advisor` at consult time).
105
-
106
- Update flow: pending config questions, including this one, are now announced
107
- generically by `plastic-update`'s Step 2, sourced from `config_asks.yml` - not
108
- duplicated here. A value already set by either path is never re-asked by the
109
- other.
110
-
111
- **Statusline**
112
-
113
- On install, if an existing statusline is already configured, Plastic asks whether to
114
- keep it or switch to Plastic's (interactive sessions only). The choice is honored via
115
- `--statusline keep` or `--statusline plastic`, which skips the prompt. Non-interactive
116
- sessions (no tty) default to keeping the user's line: nothing is silently overwritten.
117
- A fresh system with no statusline configured gets Plastic's line with no prompt.
118
-
119
- **Step 2: Initialize git (retained)**
120
-
121
- Only if `~/.plastic/.git` is absent (a fresh bootstrap does not init git):
122
-
123
- ```bash
124
- cd ~/.plastic && git init && git add . && git commit -m "chore: initialize Plastic global intent store"
125
- ```
126
-
127
- Retained here because the CLI does not git-init the store yet (follow-up).
128
-
129
- **Step 3: Personalize config (retained)**
130
-
131
- Detect which agent is running:
132
- - If `CLAUDE_CODE` env var is set or we're running inside Claude Code -> `agent.type: claude-code`
133
- - If `HERMES_HOME` env var is set -> `agent.type: hermes`
134
- - Otherwise -> ask the user: "Which AI agent are you using? (claude-code / hermes / other)"
135
-
136
- Ask the user:
137
- > "Enable Agent Teams? (experimental: parallel project work with teammates)"
138
- > - Yes -> set `parallel_mode: agent-teams`
139
- > - No -> set `parallel_mode: linear` (subagents only)
140
-
141
- Inform the user:
142
- > "Plastic agents can create GitHub repositories for new projects. By default, all
143
- > agent-created repos are **private**. Your global intent store (~/.plastic/) is never
144
- > pushed, it stays local-only."
145
-
146
- Ask the user:
147
- > "Default visibility for agent-created repos?"
148
- > - Private (recommended) -> set `github.default_visibility: private`
149
- > - Public -> set `github.default_visibility: public`
150
- >
151
- > "Allow agents to push to GitHub without asking?"
152
- > - No (recommended) -> set `github.auto_push: false`
153
- > - Yes -> set `github.auto_push: true`
154
- >
155
- > "Where do you keep your projects? Default: ~/.plastic/projects/"
156
- > "Add additional roots? (e.g., ~/apps/personal/, ~/apps/companies/)"
157
-
158
- Write each answer via `read-config --migrate` first (ensures the v3 schema), then the
159
- chosen values; auto-commit each change. Retained here because the CLI writes only
160
- hardcoded defaults, so these interactive choices stay in the skill.
161
-
162
- **Step 4: Verify with doctor**
163
-
164
- Run `/plastic-doctor` and report the result. Resolve any fixable findings before
165
- announcing success.
166
-
167
- **Step 5: Register stores with QMD (retained)**
168
-
169
- QMD is an optional search layer. If it is installed, register the Plastic stores so
170
- they are searchable:
171
-
172
- ```bash
173
- ruby ~/.plastic/scripts/qmd-sync detect && ruby ~/.plastic/scripts/qmd-sync register --all
174
- ```
175
-
176
- `qmd-sync` no-ops cleanly when QMD is absent, so this is safe to run unconditionally.
177
- It registers `plastic-global` and every project store from `projects.yml`, then indexes
178
- them. Report what was registered, or that QMD was not detected and the step was skipped.
179
- Retained here because the CLI does not register at install time (follow-up).
180
-
181
- **Step 6: Report + announce**
182
-
183
- ```
184
- Plastic install (<channel>)
185
- Command: npx -y @zalom/plastic@<channel> install --claude <flags>
186
- Version: none -> <installed>
187
- Doctor: <summary or "all clear">
188
- ```
189
-
190
- Then: "Read [`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for your first intent, start to finish."
191
-
192
- ### Local Install (testing/legacy)
193
-
194
- Run `/plastic-install --local`. `install.rb` has no `--local` verb, so this mode is
195
- genuinely skill-owned.
196
-
197
- #### Procedure
198
-
199
- **Step 1:** Check if `.plastic/` exists in CWD, if so, warn and exit.
200
-
201
- **Step 2:** Create `.plastic/` in CWD:
202
- - `config.yml` from templates
203
- - `INDEX.md` from templates
204
- - `store/` with `.gitkeep`
205
-
206
- **Step 3:** If global install exists (`~/.plastic/projects.yml`), register this project:
207
- - Determine project slug from directory name
208
- - Detect git remote URL if available
209
- - Add entry to `~/.plastic/projects.yml` with `parent: null`
210
- - Auto-commit in `~/.plastic/`
211
-
212
- **Step 4:** Commit in project: `git add .plastic/ && git commit -m "chore: initialize Plastic local store"`
213
-
214
- **Step 5:** Announce: "Plastic initialized locally. This is a testing/legacy mode. Consider
215
- `/plastic-install` for global mode."
@@ -1,156 +0,0 @@
1
- ---
2
- name: plastic-intent-continuing
3
- description: >-
4
- The front door for resuming work. Use when the user says "continue", "resume", "pick up
5
- where we left off", "where was I", "what should I work on", names a specific intent to
6
- resume (by id or description, or `--intent {id}`), or names a roadmap or delivery batch to
7
- resume (`--roadmap {slug}`, "where is the roadmap", "where did that batch land"). Presents
8
- state and resumes at the last delivered stage; it never asks auto or guided, never boots
9
- (the SessionStart hook owns boot), and never drives work autonomously (plastic-auto does).
10
- Absorbs the former continuing, project-continuing, and roadmap-continuing skills and the
11
- read half of the former intent-starting skill (intent 304).
12
- user-invocable: true
13
- ---
14
-
15
- # Continuing: the front door for resuming work
16
-
17
- One skill with three routes. It reads state and presents it; the work itself continues in
18
- whatever mode the session is in (direct by default, `plastic-auto` when the owner says auto).
19
- There is no lock to take and no mode to ask here: locks exist only for auto teams, and the
20
- mode is the owner's word, not a question this skill puts.
21
-
22
- **Boot is not this skill's job.** `hook-session-start` runs on every session start: the core
23
- health check (`doctor --core`), `PLASTIC.md` and store or project state, the
24
- `Plastic Core loaded - v{version}` banner. By the time this skill runs, core is loaded and
25
- healthy or the banner already warned.
26
-
27
- ## Route
28
-
29
- | Args or context | Route |
30
- |---|---|
31
- | `--intent {id}`, or the user names one specific intent to resume (by id or description) | Intent route (below) |
32
- | `--roadmap {slug}`, or the user asks to continue or resume a roadmap or delivery batch | Roadmap route (below) |
33
- | bare "continue", "resume", "what should I work on", or no target (the default) | Project route (below) |
34
-
35
- State the chosen route in one line before doing anything ("Landing on the project board: no
36
- specific intent or roadmap named.").
37
-
38
- ## Determine store
39
-
40
- 1. A project store under `~/.plastic/projects/{slug}/` whose registered path in
41
- `~/.plastic/projects.yml` matches the working directory means project mode; the
42
- SessionStart hook already detected this, the slug scopes the reads below.
43
- 2. Otherwise the global store, `~/.plastic/store/`.
44
- 3. Neither exists: announce "No Plastic store found. Run /plastic-install." and stop.
45
-
46
- ## Project route: land on the board
47
-
48
- Print `ruby ~/.plastic/scripts/dashboard.rb project <slug> --screen` (or `continue --screen`
49
- for the global fallback) as the first characters of the reply: nothing before it, no fence, or
50
- the hook cannot paint it (intent 331d/331f). It carries a title, six fields (Active, In
51
- delivery, Delivered, Roadmap, Sessions, Changed), then the Where-we-are and Where-we-go-next
52
- tables. The board load runs the scoped store check (`doctor --store <scope>`); its result
53
- rides in the payload as `store_health` and prints as one line of data, never a blocker.
54
-
55
- Priority order on the underlying data: active intents first, then project context (governing
56
- plus tactical intents in a registered project), then stale future intents for triage, then
57
- fresh future intents as next work. A future intent older than `stale_threshold_days` (default
58
- 3) is surfaced for triage without action: activate, abandon, or leave. Activating moves it to
59
- `## Active` in `INDEX.md` and auto-commits. The board's ranked next-work order is computed by
60
- `dashboard.rb`; cite the rule names only (Effort, Value, Flags, Override, Caps) and read
61
- `plastic-dashboard`'s `references/classification.md` for their definitions.
62
-
63
- When the tier root (the directory holding `INDEX.md`) has a mid-flight roadmap
64
- (`ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps` reports a `state`
65
- other than `none`), say so in one line and offer the roadmap route; the screen still presents
66
- project state and stops.
67
-
68
- Then stop: "here is the state, what next?". Do not start executing work. When the user names
69
- an intent, take the intent route. Read `references/board-fill.md` only when the reader asks
70
- for the deeper prose board (`plastic-dashboard`'s Markdown surface still exists for that ask).
71
-
72
- ## Intent route: resume one intent from its ledger
73
-
74
- QMD-first when the intent is named by description: run
75
- `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to find the candidate, then open the
76
- authoritative intent file. The command is a no-op when QMD is absent; fall back to
77
- `INDEX.md`.
78
-
79
- If the intent is terminal (`## Completed` or `## Abandoned` in `INDEX.md`): print the
80
- intent screen (Status shows the terminal section, Next is empty), summarize its
81
- `outcome.md`, and ask what is next; never reopen it.
82
-
83
- For a live intent's directory:
84
-
85
- 1. **Read `savepoint.md` first.** It is a deterministic, append-only ledger, one line per
86
- event, newest at the bottom: `{utc-iso8601} {Stage} {milestone}`. Classify the stage
87
- from the last line alone (the table in `references/boarding-matrix.md`, read when
88
- classifying), then verify only that line's artifact is real (sentinel-aware:
89
- `Savepoint.stage_file_present?`). Do not re-probe every lifecycle file.
90
- 2. **Stale ledger.** When the last line disagrees with the files on disk, rebuild the ledger from
91
- disk and note the correction. A rebuilt ledger is the file-landing skeleton, which still
92
- pins the stage:
93
- ```bash
94
- ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'
95
- ```
96
- 3. **Read the hand-off.** The newest `~/.plastic/store/.sessions/<day>/handoff--*.md` (today,
97
- else the newest prior day) is the prior session's own account of where things stand; read
98
- it after the ledger, never instead of it.
99
- 4. **Derive the next step:** the first unchecked item in `checklist.md` when it exists, else
100
- the next thing the stage needs (see the matrix). The newest `## Insights` entry supplies
101
- the human-readable context; an entry marked `(autonomous)` means an auto team was
102
- delivering it, so say so and offer to hand back to `plastic-auto`.
103
- 5. **Print the report screen as the first thing in the reply, then continue at that stage.**
104
- The screen must open the message with nothing before it. On Claude Code, a fail-open
105
- `MessageDisplay` hook recognizes a reply that opens this way and substitutes a styled ANSI
106
- rendering for it there; the transcript and every other harness keep exactly this plain
107
- form. For "where are we" on one named intent, run
108
- `ruby ~/.plastic/scripts/report-screen state <intent_dir>` and print its output as it is:
109
- the title, the field table, the `Changed` row, and the Steps table come from the record,
110
- never by eye. For "where are we" with no intent named, run
111
- `ruby ~/.plastic/scripts/report-screen session <tier_root> --session <this session's id>`
112
- (intent 330; pass the id your harness gives you, or the screen widens to the whole day and
113
- says so): it prints one
114
- `delivered` screen per intent this session actually completed, oldest first, then the same
115
- roster `report-screen state --all <store_root>` prints on its own - `state --all` stays the
116
- right call when only the in-flight roster is wanted, with nothing delivered above it. Route
117
- "why did X take so long" to `ruby ~/.plastic/scripts/report-screen delay <intent_dir>`
118
- instead - every verb prints the same plain screen on any harness, painted only where the
119
- harness supports it, with no branching on harness name. Under the `state` screen
120
- write **What this means** as two to four bullets in plain words (what the intent is for,
121
- what has landed, what is left, any defect named by step), then close with **needs input:**
122
- naming the first open step. Then continue the work in the
123
- session's current mode. In auto mode the running team already holds the delivery lock; if a
124
- lock is held by a session that is gone, the `plastic-doctor` skill's lock section repairs or
125
- reclaims it.
126
-
127
- ## Roadmap route: resume the mid-flight roadmap
128
-
129
- 1. Resolve the tier root (project or global) and run the shared reader in which mode:
130
- ```bash
131
- ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps --which
132
- ```
133
- Read `state` and the winning `roadmap`. A `tie` lists `tie_candidates` to present side by
134
- side and let the user pick; never pick silently. The reader ranks liveness the way
135
- `references/liveness-ranking.md` describes (read it when a ranking needs explaining): a
136
- `delivering` or `blocked` entry wins, else the newest ledger or `## Log` timestamp.
137
- `roadmaps/<slug>.savepoint.md` is a derived signal read here, never a status field;
138
- `INDEX.md` stays the sole status writer.
139
- 2. **Print state.** Print `ruby ~/.plastic/scripts/report-screen roadmap <roadmap.md> state` as
140
- the first characters of the reply: nothing before it, no fence, or the hook cannot paint it.
141
- It carries Goal, Progress, Frontier, Delivering, Next, and Changed, then the entries table -
142
- never hand-typed. Read `../plastic-conventions/references/roadmaps.md` for the file format
143
- and the status-mirror rule when a roadmap file needs interpreting.
144
- 3. Then continue with the next dispatchable entry in the session's mode: direct work on it,
145
- or `plastic-auto` when the owner says auto. The coordinator that drives a batch appends
146
- to `roadmaps/<slug>.savepoint.md` at its dispatch, merge, park, and handoff points with
147
- `ruby ~/.plastic/scripts/roadmap-savepoint append`; this skill only reads it.
148
-
149
- ## References
150
-
151
- | Trigger | Read |
152
- |---|---|
153
- | Filling the board on the project route | `references/board-fill.md` |
154
- | Classifying the stage from the ledger's last line | `references/boarding-matrix.md` |
155
- | Explaining why one roadmap ranked above another | `references/liveness-ranking.md` |
156
- | Saving or restoring context across a long session, or debugging a resume | `references/context-management.md` |
@@ -1,52 +0,0 @@
1
- # Board Fill Mechanics
2
-
3
- Depth reference for the "Continue (present the board)" section of `SKILL.md`. The fill itself
4
- is mechanical; `plastic-dashboard` owns the rules, this page is a pointer plus the detail that
5
- would otherwise bloat the SKILL.md body.
6
-
7
- ## Fill rules (owned by plastic-dashboard, summarized here for convenience)
8
-
9
- - `{{a.b.count}}` -> the integer (e.g. `counts.active` is that count).
10
- - `{{<list>.rows}}` -> the two intent lists (`active`, `next_work`) render as Markdown table
11
- rows. The template hard-codes each table's header and separator; the placeholder becomes one
12
- data row per entry, in that table's fixed column order, cells dropped verbatim from the
13
- payload (cells arrive pipe-escaped and whitespace-normalized; do not re-escape or
14
- re-truncate). Column order per table:
15
- - `next_work` -> `| id | what | value | disposition | flags_label |`
16
- - `active` -> `| id | what | stage |`
17
- Empty list -> one full-width row with `_(none)_` in the Id column, other cells blank, matching
18
- that table's column count. Neither list carries an overflow "+N more" row (intent 202): the
19
- true pool size rides on the payload (`active_total`/`next_total`, shown as
20
- `active_shown`/`next_shown`), stated in prose by `{{footer}}` instead. Never emit `<br>`.
21
- - `{{projects.lines}}` (global board) -> the project rollup stays prose, one line per project.
22
- - Scalars (`{{date}}`, `{{slug}}`, `{{summary}}`, `{{footer}}`) -> substitute verbatim.
23
- `summary` (the 2-3 sentence "what was delivered most recently") and `footer` (the
24
- honest-totals + how-to-see-everything line) are finished prose built in `dashboard.rb`,
25
- replacing the old recently-worked table and the raw future table respectively.
26
-
27
- No re-sorting, no re-summarizing, no hand-written prose replacing a line the payload already
28
- supplies. Same store state produces a byte-identical payload regardless of model.
29
-
30
- ## Store-health surfacing
31
-
32
- Every board load runs the scoped `doctor --store <scope>` check server-side (inside
33
- `dashboard.rb`, not this skill). The payload carries the result as `store_health` (`{scope,
34
- status, summary, failing_checks}`). Render it as a single line, for example `store health:
35
- pass (3/3)` or `store health: warn (orphaned_intents)`. A warn or fail is informational only;
36
- it never blocks presenting the board.
37
-
38
- ## Project vs. global fallback
39
-
40
- The project route's default target is the project board. When no project is loaded (the rare
41
- case where this route is reached without a registered project in scope), fall back to the
42
- global board payload (`dashboard.rb continue --data`) rather than failing. This mirrors the
43
- router's D6 default: a bare "continue" always lands somewhere useful.
44
-
45
- ## The screen surface (intent 331d)
46
-
47
- `dashboard.rb project <slug> --screen` (or `continue --screen`) prints the identical state -
48
- Active, In delivery, Delivered, Roadmap, Sessions, Changed, then the Where-we-are and
49
- Where-we-go-next tables - as a screen with its own grammar instead of a filled Markdown
50
- template. It replaces this fill mechanism once intent 331f wires the project route to print
51
- it first, the way the intent route already prints the intent screen first today; until then,
52
- this page's fill rules stay the route's own surface.
@@ -1,35 +0,0 @@
1
- # Boarding matrix: which stage a resume lands at
2
-
3
- The stage is derived from `savepoint.md`'s last line plus the real artifacts on disk.
4
- Classify from the last line alone, then verify only that line's artifact is real
5
- (sentinel-aware). When the ledger is stale, rebuild it from disk and note it.
6
-
7
- | savepoint last line | latest delivered | lands at | continue with |
8
- |---|---|---|---|
9
- | `What {id}--{slug}.md` (born) | What | **Why** | the thinking conversation (`plastic-intent-speccing`) or direct work |
10
- | `Why started` (spec still sentinel) | What | **Why** | continue the conversation; rulings land as insights |
11
- | `Why spec.md created` | Why | **How** | the action files, `plan.md`, `checklist.md` |
12
- | `How started` / `How plan.md created` | (How in progress) | **How** | finish `plan.md` and `checklist.md` |
13
- | `How checklist.md created` / `Exec started` | How | **Exec** | do the work, check off the checklist |
14
- | `Exec outcome.md created` | Exec | **ready to complete** | the ending procedure (`plastic-intent-ending`) |
15
- | A terminal savepoint line (`delivered` or `abandoned`) | terminal | **report only** | immutable; ask what is next |
16
- | A node or `Intent` transition line (`n1 running ...`, `Intent needs_decision ...`) | Exec | **Exec** | a graph delivery is in progress; read node status through `NodeLedger.status`, never re-derive it by eye |
17
-
18
- ## Per-stage behaviour (what "continue" means)
19
-
20
- - **Why**: continue the conversation, or run the work directly when the request is already
21
- clear; every ruling is recorded as it lands.
22
- - **How**: write or finish the action files, `plan.md`, and `checklist.md`.
23
- - **Exec**: verify what is delivered, then continue (or restart) the delivery or research.
24
- The first unchecked `checklist.md` item is the next step; the newest `## Insights` entry
25
- supplies the context.
26
- - **ready to complete**: `outcome.md` is real; run the ending procedure.
27
- - **End**: terminal. Report the outcome, ask what is next. Never reopen; `INDEX.md` is
28
- authoritative.
29
-
30
- ## Notes
31
-
32
- - A Plastic 1.x ledger may carry a `Tier <letter>` line under the `Why spec.md created` line
33
- (the intent tier was removed in 2.0, intent 304). It is inert: skip it when classifying.
34
- - An `## Insights` entry marked `(autonomous)` means an auto team was delivering the intent;
35
- say so and offer to hand back to `plastic-auto`.
@@ -1,28 +0,0 @@
1
- # Context Management (Save, then resume-flow debugging)
2
-
3
- ## Save Point
4
- Triggered by PreCompact hook or manually:
5
- 1. Find active intent(s) from `~/.plastic/INDEX.md`
6
- 2. Update active intent's `checklist.md` (check off completed items)
7
- 3. Update active intent's `savepoint.md` (in-progress, next steps, blockers, discoveries)
8
- 4. Add observations to `## Insights`
9
- 5. Update INDEX.md
10
- 6. Commit: `cd ~/.plastic && git add . && git commit -m "chore: savepoint - [intent name]"`
11
- 7. Notify user to `/clear`
12
-
13
- ## Debugging the resume flow
14
-
15
- When a resume looks wrong (the announced stage does not match what is on disk, or the next
16
- step looks stale):
17
-
18
- 1. Read `savepoint.md`'s last line directly; that line alone is the source of truth for stage
19
- (see `SKILL.md`'s `## Conditional Ledger-Resume` for the full state table).
20
- 2. Confirm the artifact that line implies (`plan.md`, `checklist.md`, `outcome.md`, ...) is
21
- present and non-empty on disk.
22
- 3. If the two disagree, the ledger is stale: rebuild it rather than hand-editing:
23
- `ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'`
24
- 4. Re-read the rebuilt last line and re-derive the next step from `checklist.md`'s first
25
- unchecked item.
26
-
27
- The general "land on the board / priority order / stale future intents" flow now lives in
28
- `plastic-intent-continuing`; this file no longer duplicates it.
@@ -1,57 +0,0 @@
1
- # Liveness Ranking (read time, no new field)
2
-
3
- Depth reference for "Find the mid-flight roadmap" in `SKILL.md`. This is the full algorithm the
4
- body summarizes. Since intent 148, this algorithm is IMPLEMENTED in
5
- `scripts/lib/roadmap_queue.rb` behind the `scripts/roadmap-next` CLI; it is no longer a by-eye
6
- procedure. This page documents what that reader does, and is the specification the reader
7
- satisfies.
8
-
9
- ## Why read-time, not a stored field
10
-
11
- INDEX.md stays the sole writer of intent status; the roadmap file mirrors it (see
12
- `plastic-roadmap`'s `references/file-format.md`). Adding a "mid-flight" flag to the roadmap
13
- file or to INDEX.md would create a second thing to keep in sync for a question that is cheap to
14
- answer by reading what is already there. So liveness is computed fresh, every call, from the
15
- tier's live `roadmaps/*.md` files (excluding `roadmaps/archived/`), by `RoadmapQueue` (intent
16
- 148) rather than by eye.
17
-
18
- ## The algorithm
19
-
20
- 1. **Enumerate.** List every `roadmaps/*.md` at the tier (project or global), skipping
21
- `roadmaps/archived/`.
22
- 2. **Delivering/blocked wins outright.** If any candidate roadmap has at least one grouping-section
23
- entry (`## Batches`, or legacy `## Waves`) whose mirrored status token is `delivering` or
24
- `blocked`, it is in flight right now.
25
- That candidate wins the ranking immediately; skip the rest of the ranking for it.
26
- 3. **Otherwise, newest `## Log` entry wins.** Among the remaining candidates (none have a
27
- `delivering`/`blocked` entry), read each file's last `## Log` line (append-only, newest at
28
- the bottom) and rank by that line's `YYYY-MM-DD HH:MM UTC` timestamp. The most recent wins.
29
- When a candidate's paired `roadmaps/<slug>.savepoint.md` (intent 134) is present, its last
30
- line is a cheaper, machine-timestamped read of the same fact (the ledger is derived from `##
31
- Log`, so the two should already agree); reading it first is an optimization, not a second
32
- source of truth, so a missing or stale ledger never blocks falling back to `## Log` itself.
33
- 4. **Genuine tie -> present, do not silently pick.** If two or more candidates are equally live
34
- (for example two roadmaps both idle with `## Log` entries on the same timestamp, or two both
35
- showing `delivering` entries with no other signal to separate them), do not choose for the
36
- user. Present both/all tied candidates' state side by side, then let the single "auto or
37
- guided?" ask (asked once regardless of how many candidates were presented) double as the
38
- resolution: the user's answer implicitly picks by naming which roadmap to continue, or the
39
- agent asks a short one-line disambiguation immediately before that same single ask, never a
40
- second separate prompt.
41
-
42
- ## What this closes
43
-
44
- Before this skill existed, nothing resumed a mid-flight roadmap automatically. The `171`
45
- (consistency-dividend) roadmap handoff had to be resumed by hand: a free-prose "SESSION
46
- HANDOFF" note written into `171`'s own `## Insights`, because nothing read the grouping section
47
- (`## Batches`/legacy `## Waves`) + `## Log` and reconstructed where the batch stood. This ranking, now a deterministic reader
48
- rather than a by-eye judgment, is the mechanism that replaces that hand-carried note.
49
-
50
- ## Grammar pointer (do not duplicate)
51
-
52
- The roadmap file's four sections, entry line shape, and status vocabulary
53
- (`queued|delivering|delivered|abandoned|blocked`) are owned by `plastic-roadmap`:
54
- `skills/roadmap/references/file-format.md` for the shape, and
55
- `skills/roadmap/references/operations.md#read--consume` for how a reader (human or
56
- coordinator) is meant to walk `## Batches` (or legacy `## Waves`) and `## Log`. This page assumes that grammar and adds
57
- only the liveness-ranking judgment on top of it.
@@ -1,89 +0,0 @@
1
- ---
2
- name: plastic-intent-creating
3
- description: Use when new work begins, the user expresses a new goal, says "new intent", or no active intent exists for the current task. Creates intents in the global store (~/.plastic/store/) or in a project's store (~/.plastic/projects/{slug}/store/) depending on context.
4
- user-invocable: true
5
- ---
6
-
7
- # Creating an Intent
8
-
9
- Creating writes the thought to disk: an id, a directory, a born-complete intent file.
10
- Nothing else runs here; specifying, planning, and execution are separate, later skills.
11
-
12
- ## When to use
13
- - User starts new work ("build X", "fix Y", "research Z")
14
- - No active intent matches the current task
15
- - User explicitly says "new intent" or "create intent"
16
- - An agent discovers work needed during implementation
17
-
18
- ## Decide the store and the shape, before scaffolding
19
-
20
- - **CWD inside a registered project** (`~/.plastic/projects.yml`), or the user names a
21
- project by slug -> **project intent (tactical)**, `~/.plastic/projects/{slug}/store/`,
22
- linked back to the project's governing intent (`projects.yml` `parent` field) via
23
- `sources`, with `[[global:<parent_ID>]]` in `## Links` and a Folgezettel id scoped to
24
- that store.
25
- - **No match** -> **global intent (strategic)**, `~/.plastic/store/`.
26
- - **Duplicate or predecessor check (QMD-first):** before allocating an id, run
27
- `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` (a no-op when QMD is absent, fall
28
- back to INDEX.md) so a near-duplicate is reused and a true predecessor lands in
29
- `--sources`.
30
- - **Branch vs root**, decided by meaning, not by "a parent in mind": branch
31
- (`--parent <parent_id>`) when the intent only makes sense as part of the parent's work;
32
- root with `--sources <ascendant_id>` when it was created from another intent's
33
- lifecycle; root with no `--sources` when it is merely related (record that relation on
34
- the PREDECESSOR's `chain` instead - topic similarity alone is never a `sources` edge).
35
-
36
- When a branch intent exists because a late ruling arrived AFTER its parent was already
37
- completed, the parent is restored to v1 via `scripts/restore-intent-v1`, never a hand-run
38
- `git checkout`/revert (see `plastic-conventions > references/maintenance-and-revisions.md`,
39
- WORK vs MAINTENANCE).
40
-
41
- `## Links` is a DERIVED view of `sources`/`chain`: never hand-write a `## Links` line, add
42
- the frontmatter edge and reproject. Links follow context influence (a `chain` edge needs
43
- the candidate's context to materially help deliver this intent), never shared files or a
44
- similarity score; `scripts/link-suggest` and `scripts/project-links` gather candidates.
45
- Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine:
46
- the tiers of influence, sources versus chain, and how `## Links` is derived.
47
-
48
- ## Scaffold
49
-
50
- One call does the rest: id allocation, the directory, `actions/` and `resources/`, the
51
- born-complete intent file, sentinel placeholder lifecycle files (each marked
52
- `<!-- plastic:placeholder -->` so no stage detector reads them as reached), reciprocal
53
- `[[id]]` links, and self-validation. Do NOT hand-author any of these files.
54
-
55
- ```bash
56
- ruby ~/.plastic/scripts/new-intent \
57
- --store "<STORE>" --intent "<one-line>" --slug "<slug>" \
58
- [--parent "<parent_id>"] [--author "<author>"] \
59
- [--sources "id,id"] [--tags "project-<slug>,tag"]
60
- ```
61
-
62
- It does NOT touch INDEX.md, git, or project creation (Finish, below). If it exits
63
- non-zero, read the stderr report, fix the inputs (slug, intent, sources), and retry;
64
- never work around a failed scaffold by hand-writing the files.
65
-
66
- `chain` carries what this intent spawns AND related-but-not-spawned successors it leads
67
- to; it starts empty and is populated later. See
68
- [`how-plastic-sources-and-chains-intents.md`](https://github.com/zalom/plastic/blob/main/docs/concepts/how-plastic-sources-and-chains-intents.md)
69
- for the full model.
70
-
71
- ## Finish
72
-
73
- 1. **Global intent:** add a line to `~/.plastic/INDEX.md` under `## Active` (or
74
- `## Future`) and the right cluster. **Project intent:** no global INDEX.md change.
75
- 2. When the user says "start building" or the plan calls for a new project, invoke
76
- `plastic-project-creating`; it owns project directory creation, AGENTS.md population,
77
- `projects.yml` registration, store provisioning, and the auto-commit of both stores.
78
- Add `project-<slug>` to this intent's `tags` either before invoking it or as part of
79
- that skill's handoff.
80
- 3. Commit: `cd <store-root> && git add . && git commit -m "feat: create intent ID - [name]"`.
81
- 4. Announce: "Created intent ID - [name]. Placed in: [Active|Future]. Store:
82
- [global|project:<slug>]."
83
-
84
- ## References
85
-
86
- - Read `references/lifecycle.md` for the full What->Why->How->Exec stage detail and the
87
- filesystem-as-schema conventions.
88
- - Read `references/wikilinks.md` for the wikilink syntax table when hand-checking a
89
- `## Links` projection.