@zalom/plastic 2.0.0-alpha.9 → 2.0.2

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 (326) hide show
  1. package/PLASTIC.md +13 -136
  2. package/README.md +357 -133
  3. package/agents/plastic-enforcer.md +21 -16
  4. package/agents/plastic-executor.md +15 -4
  5. package/agents/plastic-node-research.md +30 -0
  6. package/agents/plastic-node-verify.md +28 -0
  7. package/agents/plastic-node-work.md +33 -0
  8. package/agents/{plastic-advisor.md → plastic-primary-advisor.md} +7 -9
  9. package/agents/{plastic-faux-advisor.md → plastic-secondary-advisor.md} +9 -12
  10. package/assets/plastic-logo.svg +1 -0
  11. package/bin/crap +4 -0
  12. package/bin/lib/context_budget.rb +43 -6
  13. package/bin/lib/skill_census.rb +839 -0
  14. package/bin/plastic +8 -0
  15. package/bin/plastic-skill-census +114 -0
  16. package/bin/test +24 -4
  17. package/bin/verify-change +345 -0
  18. package/config_asks.yml +4 -4
  19. package/deprecations.yml +1 -1
  20. package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +19 -24
  21. package/{skills/auto/references → docs/help}/agent-architecture.md +16 -14
  22. package/docs/help/completion-and-done.md +53 -0
  23. package/docs/help/human-report-contract.md +152 -0
  24. package/{skills/conventions/references → docs/help}/knowledge-graph.md +9 -0
  25. package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +11 -13
  26. package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +1 -1
  27. package/{skills/conventions/references → docs/help}/roadmaps.md +5 -4
  28. package/{skills/tutorial/references → docs/help}/track-1-guided.md +28 -47
  29. package/{skills/tutorial/references → docs/help}/track-2-auto.md +8 -8
  30. package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
  31. package/hooks/call-budget +4 -0
  32. package/hooks/hooks.json +24 -0
  33. package/hooks/message-display +55 -2
  34. package/hooks/session-start +5 -1
  35. package/hooks/statusline +32 -27
  36. package/hooks/stop +5 -0
  37. package/package.json +5 -3
  38. package/scripts/append-ledger +2 -1
  39. package/scripts/dashboard.rb +267 -16
  40. package/scripts/day-summary +2 -1
  41. package/scripts/doctor.rb +680 -39
  42. package/scripts/end-intent +378 -56
  43. package/scripts/exec-worktree +5 -5
  44. package/scripts/file-session-intent +2 -1
  45. package/scripts/graph-measure +249 -0
  46. package/scripts/hook-call-budget +222 -0
  47. package/scripts/hook-capture +24 -123
  48. package/scripts/hook-close +2 -1
  49. package/scripts/hook-message-display +7 -0
  50. package/scripts/hook-record +24 -16
  51. package/scripts/hook-savepoint +27 -3
  52. package/scripts/hook-session-start +359 -321
  53. package/scripts/hook-stop +58 -0
  54. package/scripts/index-projection +74 -0
  55. package/scripts/insight-append +17 -4
  56. package/scripts/install.rb +9 -7
  57. package/scripts/lib/action_graph_shim.rb +279 -0
  58. package/scripts/lib/active_delivery.rb +105 -0
  59. package/scripts/lib/agent_models.rb +63 -25
  60. package/scripts/lib/arm.rb +74 -91
  61. package/scripts/lib/atomic_write.rb +31 -0
  62. package/scripts/lib/backup.rb +65 -0
  63. package/scripts/lib/cli/command.rb +92 -0
  64. package/scripts/lib/cli/commands/auto.rb +18 -0
  65. package/scripts/lib/cli/commands/auto_brief.rb +44 -0
  66. package/scripts/lib/cli/commands/auto_lock.rb +111 -0
  67. package/scripts/lib/cli/commands/auto_report.rb +50 -0
  68. package/scripts/lib/cli/commands/auto_take.rb +68 -0
  69. package/scripts/lib/cli/commands/backup.rb +43 -0
  70. package/scripts/lib/cli/commands/checkout.rb +25 -0
  71. package/scripts/lib/cli/commands/continue.rb +66 -0
  72. package/scripts/lib/cli/commands/doctor.rb +81 -0
  73. package/scripts/lib/cli/commands/feedback.rb +40 -0
  74. package/scripts/lib/cli/commands/help.rb +69 -0
  75. package/scripts/lib/cli/commands/hook.rb +32 -0
  76. package/scripts/lib/cli/commands/index.rb +23 -0
  77. package/scripts/lib/cli/commands/install.rb +21 -0
  78. package/scripts/lib/cli/commands/installer_verb.rb +37 -0
  79. package/scripts/lib/cli/commands/intent.rb +19 -0
  80. package/scripts/lib/cli/commands/intent_answer.rb +37 -0
  81. package/scripts/lib/cli/commands/intent_command.rb +58 -0
  82. package/scripts/lib/cli/commands/intent_end.rb +75 -0
  83. package/scripts/lib/cli/commands/intent_new.rb +62 -0
  84. package/scripts/lib/cli/commands/intent_note.rb +43 -0
  85. package/scripts/lib/cli/commands/intent_rule.rb +36 -0
  86. package/scripts/lib/cli/commands/intent_show.rb +32 -0
  87. package/scripts/lib/cli/commands/intent_spec.rb +44 -0
  88. package/scripts/lib/cli/commands/intent_step.rb +79 -0
  89. package/scripts/lib/cli/commands/intent_verify.rb +26 -0
  90. package/scripts/lib/cli/commands/migrate.rb +16 -0
  91. package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
  92. package/scripts/lib/cli/commands/next.rb +54 -0
  93. package/scripts/lib/cli/commands/project.rb +19 -0
  94. package/scripts/lib/cli/commands/project_links.rb +46 -0
  95. package/scripts/lib/cli/commands/project_list.rb +20 -0
  96. package/scripts/lib/cli/commands/project_new.rb +95 -0
  97. package/scripts/lib/cli/commands/query.rb +31 -0
  98. package/scripts/lib/cli/commands/render.rb +35 -0
  99. package/scripts/lib/cli/commands/roadmap.rb +19 -0
  100. package/scripts/lib/cli/commands/roadmap_check.rb +54 -0
  101. package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
  102. package/scripts/lib/cli/commands/roadmap_migrate.rb +53 -0
  103. package/scripts/lib/cli/commands/roadmap_next.rb +77 -0
  104. package/scripts/lib/cli/commands/roadmap_show.rb +65 -0
  105. package/scripts/lib/cli/commands/rollback.rb +20 -0
  106. package/scripts/lib/cli/commands/search.rb +60 -0
  107. package/scripts/lib/cli/commands/session.rb +18 -0
  108. package/scripts/lib/cli/commands/session_commit.rb +42 -0
  109. package/scripts/lib/cli/commands/session_handoff.rb +34 -0
  110. package/scripts/lib/cli/commands/session_summary.rb +35 -0
  111. package/scripts/lib/cli/commands/status.rb +68 -0
  112. package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
  113. package/scripts/lib/cli/commands/sync.rb +55 -0
  114. package/scripts/lib/cli/commands/uninstall.rb +20 -0
  115. package/scripts/lib/cli/commands/update.rb +20 -0
  116. package/scripts/lib/cli/commands/version.rb +53 -0
  117. package/scripts/lib/cli/frontier.rb +86 -0
  118. package/scripts/lib/cli/intent_progress.rb +36 -0
  119. package/scripts/lib/cli/legacy.rb +80 -0
  120. package/scripts/lib/cli/output.rb +137 -0
  121. package/scripts/lib/cli/scope.rb +134 -0
  122. package/scripts/lib/cli/table.rb +65 -0
  123. package/scripts/lib/cli.rb +94 -0
  124. package/scripts/lib/codex_adapter.rb +198 -0
  125. package/scripts/lib/compact_instructions.rb +13 -5
  126. package/scripts/lib/core_integrity.rb +71 -0
  127. package/scripts/lib/dashboard_screen.rb +40 -0
  128. package/scripts/lib/data_boundary.rb +132 -0
  129. package/scripts/lib/day_summary.rb +23 -14
  130. package/scripts/lib/doctor_core.rb +114 -38
  131. package/scripts/lib/doctor_session_ledger.rb +5 -53
  132. package/scripts/lib/engine_permissions.rb +88 -0
  133. package/scripts/lib/exec_worktree.rb +24 -21
  134. package/scripts/lib/feedback_report.rb +1 -1
  135. package/scripts/lib/graph_edges.rb +137 -0
  136. package/scripts/lib/graph_file.rb +246 -0
  137. package/scripts/lib/graph_measure.rb +645 -0
  138. package/scripts/lib/graph_measure_budget.rb +409 -0
  139. package/scripts/lib/graph_measure_cohorts.rb +487 -0
  140. package/scripts/lib/graph_measure_models.rb +413 -0
  141. package/scripts/lib/graph_measure_report.rb +532 -0
  142. package/scripts/lib/graph_tree.rb +98 -0
  143. package/scripts/lib/guarded_append.rb +155 -0
  144. package/scripts/lib/handoff.rb +40 -13
  145. package/scripts/lib/harness_adapter.rb +184 -0
  146. package/scripts/lib/hook_registry.rb +27 -3
  147. package/scripts/lib/hook_replay.rb +235 -0
  148. package/scripts/lib/index_entry.rb +62 -0
  149. package/scripts/lib/index_projection.rb +201 -0
  150. package/scripts/lib/insights.rb +1 -1
  151. package/scripts/lib/installer_core.rb +543 -71
  152. package/scripts/lib/intent_screen.rb +4 -4
  153. package/scripts/lib/intent_screen_ansi.rb +73 -12
  154. package/scripts/lib/intent_validator.rb +2 -2
  155. package/scripts/lib/lock.rb +10 -11
  156. package/scripts/lib/message_display.rb +350 -54
  157. package/scripts/lib/meter_watch.rb +185 -0
  158. package/scripts/lib/node_file.rb +234 -0
  159. package/scripts/lib/node_ids.rb +99 -0
  160. package/scripts/lib/node_input.rb +921 -0
  161. package/scripts/lib/node_input_compatibility.rb +62 -0
  162. package/scripts/lib/node_ledger.rb +386 -0
  163. package/scripts/lib/node_progress.rb +153 -0
  164. package/scripts/lib/node_return.rb +204 -0
  165. package/scripts/lib/node_worktree.rb +337 -0
  166. package/scripts/lib/outcome_report.rb +440 -0
  167. package/scripts/lib/preflight.rb +4 -6
  168. package/scripts/lib/project_config.rb +46 -0
  169. package/scripts/lib/project_validator.rb +3 -2
  170. package/scripts/lib/qmd_sync.rb +8 -7
  171. package/scripts/lib/ready_set.rb +462 -0
  172. package/scripts/lib/reference_archive.rb +45 -0
  173. package/scripts/lib/release_guard.rb +18 -0
  174. package/scripts/lib/report_screen.rb +1371 -47
  175. package/scripts/lib/rlm/corpus.rb +13 -0
  176. package/scripts/lib/rlm/probe.rb +29 -0
  177. package/scripts/lib/rlm/query.rb +22 -0
  178. package/scripts/lib/roadmap_graph.rb +210 -0
  179. package/scripts/lib/roadmap_migration.rb +95 -0
  180. package/scripts/lib/roadmap_queue.rb +170 -12
  181. package/scripts/lib/roadmap_render.rb +150 -0
  182. package/scripts/lib/roadmap_savepoint.rb +64 -14
  183. package/scripts/lib/runner_absorb.rb +703 -0
  184. package/scripts/lib/runner_answer.rb +206 -0
  185. package/scripts/lib/runner_core.rb +194 -0
  186. package/scripts/lib/runner_dispatch.rb +526 -0
  187. package/scripts/lib/runner_policy.rb +191 -0
  188. package/scripts/lib/runner_proposals.rb +275 -0
  189. package/scripts/lib/runner_rewind.rb +201 -0
  190. package/scripts/lib/runner_sweep.rb +231 -0
  191. package/scripts/lib/runner_until_empty.rb +252 -0
  192. package/scripts/lib/runner_watch.rb +389 -0
  193. package/scripts/lib/savepoint.rb +141 -19
  194. package/scripts/lib/scaffold_intent.rb +6 -3
  195. package/scripts/lib/screen_paint.rb +365 -28
  196. package/scripts/lib/screens/dashboard.rb +20 -0
  197. package/scripts/lib/screens/plan.rb +18 -0
  198. package/scripts/lib/screens/roadmap.rb +15 -0
  199. package/scripts/lib/search_index.rb +55 -0
  200. package/scripts/lib/session_close.rb +30 -28
  201. package/scripts/lib/session_git.rb +67 -19
  202. package/scripts/lib/session_ledger.rb +48 -4
  203. package/scripts/lib/session_usage.rb +190 -0
  204. package/scripts/lib/sqlite.rb +22 -0
  205. package/scripts/lib/stop_gate.rb +95 -0
  206. package/scripts/lib/store_discovery.rb +7 -6
  207. package/scripts/lib/store_layout.rb +54 -0
  208. package/scripts/lib/store_provisioning.rb +2 -1
  209. package/scripts/lib/store_sync.rb +85 -0
  210. package/scripts/lib/stores_move.rb +93 -0
  211. package/scripts/lib/untouched_scaffold.rb +51 -0
  212. package/scripts/lib/verify_intent.rb +36 -8
  213. package/scripts/lib/version_number.rb +48 -0
  214. package/scripts/lib/work_graph.rb +59 -0
  215. package/scripts/lib/work_graph_validator.rb +201 -0
  216. package/scripts/lib/worktree.rb +27 -32
  217. package/scripts/lib/worktree_sweep.rb +6 -5
  218. package/scripts/link-suggest +2 -1
  219. package/scripts/meter-watch +57 -0
  220. package/scripts/migrate-to-global +1 -1
  221. package/scripts/new-intent +4 -13
  222. package/scripts/node-input +92 -0
  223. package/scripts/node-run +225 -0
  224. package/scripts/node-transition +291 -0
  225. package/scripts/outcome-report +74 -0
  226. package/scripts/plastic-lock +65 -60
  227. package/scripts/project-links +6 -21
  228. package/scripts/promote-session-item +3 -2
  229. package/scripts/read-config +53 -9
  230. package/scripts/ready-set +126 -0
  231. package/scripts/release-check +123 -0
  232. package/scripts/report-screen +177 -16
  233. package/scripts/roadmap-graph +125 -0
  234. package/scripts/roadmap-savepoint +7 -0
  235. package/scripts/rollback.rb +5 -1
  236. package/scripts/runner +581 -0
  237. package/scripts/savepoint-note +11 -9
  238. package/scripts/session-commit +2 -1
  239. package/scripts/session-usage +56 -0
  240. package/scripts/skill-lint +115 -6
  241. package/scripts/spawn-preamble +2 -2
  242. package/scripts/update.rb +31 -4
  243. package/scripts/validate-work-graph +39 -0
  244. package/scripts/verify-intent +3 -2
  245. package/scripts/write-handoff +2 -1
  246. package/templates/agents.md +7 -7
  247. package/templates/config.yml +16 -9
  248. package/templates/dashboard-screen.md +22 -0
  249. package/templates/display-fixture.md +21 -0
  250. package/templates/graph.md +16 -0
  251. package/templates/index.md +1 -1
  252. package/templates/intent-screen.md +1 -1
  253. package/templates/node-decision.md +11 -0
  254. package/templates/node-research.md +13 -0
  255. package/templates/node-verify.md +13 -0
  256. package/templates/node-work.md +22 -0
  257. package/templates/outcome.md +8 -3
  258. package/templates/project.yml +1 -1
  259. package/templates/render.css +10 -0
  260. package/templates/report-plan.md +15 -0
  261. package/templates/report-roadmap-delivered.md +10 -0
  262. package/templates/report-roadmap-plan.md +9 -0
  263. package/templates/report-roadmap-state.md +9 -0
  264. package/templates/report-state.md +1 -1
  265. package/templates/roadmap.md +13 -0
  266. package/bin/plastic.js +0 -70
  267. package/scripts/lib/bridge.rb +0 -116
  268. package/skills/agent-advisor/SKILL.md +0 -92
  269. package/skills/auto/SKILL.md +0 -296
  270. package/skills/auto/evals/evals.json +0 -255
  271. package/skills/auto/references/end-tail.md +0 -66
  272. package/skills/auto/references/human-report-contract.md +0 -78
  273. package/skills/conventions/SKILL.md +0 -29
  274. package/skills/conventions/references/completion-and-done.md +0 -43
  275. package/skills/dashboard/SKILL.md +0 -169
  276. package/skills/dashboard/evals/evals.json +0 -38
  277. package/skills/dashboard/references/classification.md +0 -22
  278. package/skills/dashboard/templates/dashboard-global.md +0 -20
  279. package/skills/dashboard/templates/dashboard-project.md +0 -19
  280. package/skills/direct/SKILL.md +0 -66
  281. package/skills/direct/references/request-signals.md +0 -59
  282. package/skills/doctor/SKILL.md +0 -299
  283. package/skills/doctor/report.md +0 -102
  284. package/skills/feedback/SKILL.md +0 -98
  285. package/skills/feedback/references/transport-and-privacy.md +0 -65
  286. package/skills/feedback/report.md +0 -36
  287. package/skills/install/SKILL.md +0 -217
  288. package/skills/intent-continuing/SKILL.md +0 -154
  289. package/skills/intent-continuing/references/board-fill.md +0 -43
  290. package/skills/intent-continuing/references/boarding-matrix.md +0 -34
  291. package/skills/intent-continuing/references/context-management.md +0 -28
  292. package/skills/intent-continuing/references/liveness-ranking.md +0 -57
  293. package/skills/intent-creating/SKILL.md +0 -164
  294. package/skills/intent-creating/evals/evals.json +0 -72
  295. package/skills/intent-creating/references/lifecycle.md +0 -81
  296. package/skills/intent-creating/references/wikilinks.md +0 -8
  297. package/skills/intent-ending/SKILL.md +0 -176
  298. package/skills/intent-ending/evals/evals.json +0 -74
  299. package/skills/intent-executing/SKILL.md +0 -170
  300. package/skills/intent-executing/evals/evals.json +0 -66
  301. package/skills/intent-executing/implementer-prompt.md +0 -42
  302. package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
  303. package/skills/intent-speccing/SKILL.md +0 -130
  304. package/skills/intent-speccing/evals/evals.json +0 -126
  305. package/skills/intent-speccing/references/design-principles.md +0 -44
  306. package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
  307. package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
  308. package/skills/project-creating/SKILL.md +0 -162
  309. package/skills/project-creating/references/hubs-projects.md +0 -55
  310. package/skills/project-creating/references/project-scaffolding.md +0 -97
  311. package/skills/releasing/SKILL.md +0 -337
  312. package/skills/releasing/references/deprecations.md +0 -60
  313. package/skills/releasing/references/promotion-and-tagging.md +0 -66
  314. package/skills/releasing/references/release-lines.md +0 -105
  315. package/skills/roadmap/SKILL.md +0 -64
  316. package/skills/roadmap/references/file-format.md +0 -124
  317. package/skills/roadmap/references/operations.md +0 -112
  318. package/skills/rollback/SKILL.md +0 -91
  319. package/skills/tutorial/SKILL.md +0 -65
  320. package/skills/tutorial/evals/evals.json +0 -186
  321. package/skills/uninstall/SKILL.md +0 -75
  322. package/skills/update/SKILL.md +0 -126
  323. /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
  324. /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
  325. /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
  326. /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
@@ -1,98 +0,0 @@
1
- ---
2
- name: plastic-feedback
3
- description: Use when the user hits a Plastic quirk, bug, or feature idea in a project and wants to report it back to the Plastic project. Builds a sanitized report file and a prefilled GitHub issue URL the user reviews and submits. Only the user sends.
4
- disable-model-invocation: true
5
- user-invocable: true
6
- ---
7
-
8
- # Plastic Feedback
9
-
10
- Turn a described Plastic problem into a local report file and a prefilled GitHub
11
- issue URL. The script does the mechanics (redaction, naming, URL building); the
12
- user alone opens the URL and submits it. This skill has no send step, by design.
13
-
14
- Because `disable-model-invocation` hides this skill's description from your own
15
- context, you cannot discover it by browsing available skills mid-task. If the
16
- user hits a Plastic quirk, bug, or missing feature, offer to run
17
- `/plastic-feedback` yourself; do not wait for the user to ask for it by name.
18
-
19
- ## Procedure
20
-
21
- ### 1. Gather the narrative
22
-
23
- Ask the user for:
24
- - What happened (the observed behavior).
25
- - The root cause, if they already know it.
26
- - The expected behavior.
27
-
28
- Keep it to about one page. Do not pad it with speculation; a short, accurate
29
- report beats a long, padded one.
30
-
31
- ### 2. Obfuscate before it leaves this session
32
-
33
- Before filling the template, strip anything that identifies the user's project
34
- or its content:
35
- - Remove project names, directory paths, and file names specific to the user's
36
- codebase.
37
- - Turn any Plastic intent names into their bare numeric or slug ids (drop the
38
- descriptive title if it leaks project context).
39
- - Keep only Plastic's own operational content: what Plastic did, what it should
40
- have done, which command or hook was involved.
41
-
42
- Read `references/transport-and-privacy.md` before filling the template, for the
43
- full obfuscation checklist and the reasoning behind it.
44
-
45
- ### 3. Fill the report template
46
-
47
- Read `report.md` from this skill's directory (`~/.plastic/skills/feedback/report.md`
48
- at runtime, or the plugin source `skills/feedback/report.md` during development).
49
- Fill every placeholder except `{{plastic_version}}`, which the script fills.
50
- Assemble the final markdown body from the filled template.
51
-
52
- ### 4. Run the script
53
-
54
- ```bash
55
- ruby ~/.plastic/scripts/feedback-report --title "<short title>"
56
- ```
57
-
58
- Pipe the filled body on STDIN. Parse the JSON on stdout:
59
-
60
- | Key | Meaning |
61
- |---|---|
62
- | `report_path` | Local file the full, uncapped report was written to |
63
- | `url` | Prefilled GitHub new-issue URL |
64
- | `encoded_url_bytes` | Byte length of the encoded URL |
65
- | `truncated` | Whether the URL body is a capped page-one, not the full report |
66
- | `page_break_note` | The end-marker text appended when `truncated` is true, else null |
67
-
68
- The script only ever writes a local file and prints a URL. It has no network
69
- call, no token, and no way to open a browser or submit anything on its own.
70
-
71
- ### 5. Present the result
72
-
73
- Show the user:
74
- - The local file path (`report_path`).
75
- - A short preview of the report.
76
- - The URL.
77
-
78
- If `truncated` is true, tell the user plainly: the URL carries page one of the
79
- report, and the full report is in the local file at `report_path`. They can
80
- paste more from the local file into the opened issue if they want.
81
-
82
- Then tell them, in these words or close to them: open the URL, review it, drag
83
- a screenshot onto the form if they have one, and submit it under their own
84
- GitHub account. Or, if they would rather edit first, copy the local file
85
- contents into a new issue themselves.
86
-
87
- ### 6. Never submit
88
-
89
- State plainly that this skill has no send step: it never posts to GitHub, never
90
- runs `gh issue create`, and never opens a browser on the user's behalf. The user
91
- is the only one who can submit the report.
92
-
93
- ## Gotchas
94
-
95
- - If the described report is long, the script may hand back `truncated: true`.
96
- This is expected, not an error: the local file always holds the full text.
97
- - Do not try to route around the missing send step (no `gh` call, no API POST).
98
- The absence of a send path is the point of this skill, not a gap to fill.
@@ -1,65 +0,0 @@
1
- # Transport and Privacy
2
-
3
- Read this before filling `report.md` and before presenting the URL to the user.
4
-
5
- ## Obfuscation checklist (do this before filling the template)
6
-
7
- Run through this list on the narrative gathered from the user, before it goes
8
- into `report.md`:
9
-
10
- - Strip project names. Refer to "the project" or "a consumer project", never
11
- the user's actual project name.
12
- - Strip file paths and directory names specific to the user's codebase.
13
- - Turn Plastic intent names into their bare ids. Drop the descriptive title if
14
- it names project content (an intent title like "Fix the checkout flow" leaks
15
- what the user is building; "intent 42" does not).
16
- - Keep only Plastic's own operational content: which command, hook, or skill
17
- ran, what it did, what it should have done instead.
18
- - Before presenting the URL, re-read the filled report once and confirm none
19
- of the above slipped back in.
20
-
21
- ## Mechanical redaction (what the script also strips)
22
-
23
- `scripts/lib/feedback_report.rb` redacts these patterns to `[REDACTED]` before
24
- the report ever touches disk, as a second, mechanical layer under the
25
- obfuscation above:
26
-
27
- | Secret kind | Pattern shape |
28
- |---|---|
29
- | GitHub tokens | `ghp_`, `gho_`, `ghs_`, `ghr_`, `ghu_`, `github_pat_` prefixes |
30
- | Anthropic/OpenAI keys | `sk-ant-...`, `sk-...` |
31
- | AWS access key id | `AKIA...` |
32
- | Bearer tokens | `Bearer <token>` |
33
- | Slack tokens | `xoxb-`, `xoxa-`, `xoxp-`, `xoxr-`, `xoxs-` prefixes |
34
- | Google API keys | `AIza...` |
35
- | PEM private key blocks | `-----BEGIN ... PRIVATE KEY----- ... -----END ... PRIVATE KEY-----` |
36
- | Key/value assignments | `api_key = ...`, `secret: ...`, `token = ...`, `password: ...` (value only) |
37
-
38
- Treat this list as a safety net, not the primary defense. The mechanical
39
- patterns catch a specific, known shape; the obfuscation pass above is what
40
- catches project-identifying context a regex cannot recognize.
41
-
42
- ## Why a prefilled URL, and not something else
43
-
44
- The report is sent by opening a prefilled `https://github.com/zalom/plastic/issues/new`
45
- URL in the user's own browser. Submission happens in an authenticated session
46
- that belongs to the user, not to the agent or the script. Nothing in this
47
- skill or in `feedback-report` can complete that submission on its own: there
48
- is no send method, no token, and no network call anywhere in the code path.
49
-
50
- Other transports were considered and rejected:
51
-
52
- - **`gh issue create`**: the CLI can send on its own; only `--web` is
53
- browser-submitted, and the plain form cannot be guaranteed not to send
54
- directly. It also assumes `gh` auth, which a consumer-project user may not
55
- have.
56
- - **An API POST with a token**: the agent could send it, and the token itself
57
- becomes a credential worth stealing.
58
- - **An anonymous POST endpoint**: still agent-reachable, with no built-in spam
59
- resistance, and it needs server infrastructure this project does not run.
60
- - **Email or `git send-email`**: the CLI sends the message, review is opt-in
61
- rather than forced, and it needs a working mail transport most machines do
62
- not have configured.
63
-
64
- Only the prefilled-URL approach makes "the agent cannot send" a structural
65
- fact instead of a rule the agent could break by taking a shortcut.
@@ -1,36 +0,0 @@
1
- # Plastic feedback: {{title}}
2
-
3
- <!-- =======================================================================
4
- AGENT INSTRUCTIONS -- How to fill this template
5
- =========================================================================
6
- 1. Replace every {{placeholder}} below with real content gathered from the
7
- user, except {{plastic_version}}: leave that token exactly as written,
8
- the feedback-report script fills it from the installed VERSION file.
9
- 2. Obfuscate first (see references/transport-and-privacy.md): strip project
10
- names, file paths, and anything else that identifies the user's
11
- codebase. Keep only Plastic's own operational content.
12
- 3. Keep the report to about one page. Use tables or short lists where they
13
- make the report clearer than prose.
14
- 4. Delete this entire HTML comment block before piping the body into
15
- feedback-report. It is fill instructions only, not report content.
16
- ======================================================================= -->
17
-
18
- ## Environment
19
-
20
- | Field | Value |
21
- |---|---|
22
- | Plastic version | {{plastic_version}} |
23
- | Agent | {{agent_name}} |
24
- | OS | {{os}} |
25
-
26
- ## What happened
27
-
28
- {{what_happened}}
29
-
30
- ## Root cause (if known)
31
-
32
- {{root_cause_or_not_known}}
33
-
34
- ## Expected behavior
35
-
36
- {{expected_behavior}}
@@ -1,217 +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
- > - **Faux Fable** (recommended): Opus 4.8 carrying the frontier reasoning
98
- > instructions. Much cheaper, available on any plan, reasons in the same
99
- > disciplined way. -> append `--advisor faux`
100
- > - **Fable 5**: the frontier model itself. The strongest reasoning available,
101
- > billed through usage credits, so summon it for a few rounds and close it. ->
102
- > append `--advisor real`
103
-
104
- Non-interactive sessions (no tty) skip the question entirely: the install ships with the
105
- shipped default, advisor enabled with no `--advisor` flag (the `plastic-agent-advisor`
106
- skill's own routing falls back to `plastic-faux-advisor` at consult time).
107
-
108
- Update flow: pending config questions, including this one, are now announced
109
- generically by `plastic-update`'s Step 2, sourced from `config_asks.yml` - not
110
- duplicated here. A value already set by either path is never re-asked by the
111
- other.
112
-
113
- **Statusline**
114
-
115
- On install, if an existing statusline is already configured, Plastic asks whether to
116
- keep it or switch to Plastic's (interactive sessions only). The choice is honored via
117
- `--statusline keep` or `--statusline plastic`, which skips the prompt. Non-interactive
118
- sessions (no tty) default to keeping the user's line: nothing is silently overwritten.
119
- A fresh system with no statusline configured gets Plastic's line with no prompt.
120
-
121
- **Step 2: Initialize git (retained)**
122
-
123
- Only if `~/.plastic/.git` is absent (a fresh bootstrap does not init git):
124
-
125
- ```bash
126
- cd ~/.plastic && git init && git add . && git commit -m "chore: initialize Plastic global intent store"
127
- ```
128
-
129
- Retained here because the CLI does not git-init the store yet (follow-up).
130
-
131
- **Step 3: Personalize config (retained)**
132
-
133
- Detect which agent is running:
134
- - If `CLAUDE_CODE` env var is set or we're running inside Claude Code -> `agent.type: claude-code`
135
- - If `HERMES_HOME` env var is set -> `agent.type: hermes`
136
- - Otherwise -> ask the user: "Which AI agent are you using? (claude-code / hermes / other)"
137
-
138
- Ask the user:
139
- > "Enable Agent Teams? (experimental: parallel project work with teammates)"
140
- > - Yes -> set `parallel_mode: agent-teams`
141
- > - No -> set `parallel_mode: linear` (subagents only)
142
-
143
- Inform the user:
144
- > "Plastic agents can create GitHub repositories for new projects. By default, all
145
- > agent-created repos are **private**. Your global intent store (~/.plastic/) is never
146
- > pushed, it stays local-only."
147
-
148
- Ask the user:
149
- > "Default visibility for agent-created repos?"
150
- > - Private (recommended) -> set `github.default_visibility: private`
151
- > - Public -> set `github.default_visibility: public`
152
- >
153
- > "Allow agents to push to GitHub without asking?"
154
- > - No (recommended) -> set `github.auto_push: false`
155
- > - Yes -> set `github.auto_push: true`
156
- >
157
- > "Where do you keep your projects? Default: ~/.plastic/projects/"
158
- > "Add additional roots? (e.g., ~/apps/personal/, ~/apps/companies/)"
159
-
160
- Write each answer via `read-config --migrate` first (ensures the v3 schema), then the
161
- chosen values; auto-commit each change. Retained here because the CLI writes only
162
- hardcoded defaults, so these interactive choices stay in the skill.
163
-
164
- **Step 4: Verify with doctor**
165
-
166
- Run `/plastic-doctor` and report the result. Resolve any fixable findings before
167
- announcing success.
168
-
169
- **Step 5: Register stores with QMD (retained)**
170
-
171
- QMD is an optional search layer. If it is installed, register the Plastic stores so
172
- they are searchable:
173
-
174
- ```bash
175
- ruby ~/.plastic/scripts/qmd-sync detect && ruby ~/.plastic/scripts/qmd-sync register --all
176
- ```
177
-
178
- `qmd-sync` no-ops cleanly when QMD is absent, so this is safe to run unconditionally.
179
- It registers `plastic-global` and every project store from `projects.yml`, then indexes
180
- them. Report what was registered, or that QMD was not detected and the step was skipped.
181
- Retained here because the CLI does not register at install time (follow-up).
182
-
183
- **Step 6: Report + announce**
184
-
185
- ```
186
- Plastic install (<channel>)
187
- Command: npx -y @zalom/plastic@<channel> install --claude <flags>
188
- Version: none -> <installed>
189
- Doctor: <summary or "all clear">
190
- ```
191
-
192
- 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."
193
-
194
- ### Local Install (testing/legacy)
195
-
196
- Run `/plastic-install --local`. `install.rb` has no `--local` verb, so this mode is
197
- genuinely skill-owned.
198
-
199
- #### Procedure
200
-
201
- **Step 1:** Check if `.plastic/` exists in CWD, if so, warn and exit.
202
-
203
- **Step 2:** Create `.plastic/` in CWD:
204
- - `config.yml` from templates
205
- - `INDEX.md` from templates
206
- - `store/` with `.gitkeep`
207
-
208
- **Step 3:** If global install exists (`~/.plastic/projects.yml`), register this project:
209
- - Determine project slug from directory name
210
- - Detect git remote URL if available
211
- - Add entry to `~/.plastic/projects.yml` with `parent: null`
212
- - Auto-commit in `~/.plastic/`
213
-
214
- **Step 4:** Commit in project: `git add .plastic/ && git commit -m "chore: initialize Plastic local store"`
215
-
216
- **Step 5:** Announce: "Plastic initialized locally. This is a testing/legacy mode. Consider
217
- `/plastic-install` for global mode."
@@ -1,154 +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
- Land on the Markdown board through the `plastic-dashboard` skill; rendering belongs there.
49
- Run the data payload and fill the matching template:
50
- - project loaded: `ruby ~/.plastic/scripts/dashboard.rb project <slug> --data`
51
- - otherwise (the global fallback): `ruby ~/.plastic/scripts/dashboard.rb continue --data`
52
-
53
- Fill the template from `plastic-dashboard`'s `templates/` and present the filled Markdown in
54
- your reply, every time: tool-call stdout and hook context are invisible to the user. Read
55
- `references/board-fill.md` for the fill mechanics and the store-health line when filling the
56
- board. The board load runs the scoped store check (`doctor --store <scope>`); its result
57
- arrives in the payload as `store_health` and is shown as one line of data, never a blocker.
58
-
59
- Priority order on the board: active intents first, then project context (governing plus
60
- tactical intents in a registered project), then stale future intents for triage, then fresh
61
- future intents as next work. A future intent older than `stale_threshold_days` (default 3) is
62
- surfaced for triage without action: activate, abandon, or leave. Activating moves it to
63
- `## Active` in `INDEX.md` and auto-commits. The board's ranked next-work order is computed by
64
- `dashboard.rb`; cite the rule names only (Effort, Value, Flags, Override, Caps) and read
65
- `plastic-dashboard`'s `references/classification.md` for their definitions.
66
-
67
- When the tier root (the directory holding `INDEX.md`) has a mid-flight roadmap
68
- (`ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps` reports a `state`
69
- other than `none`), say so in one line and offer the roadmap route; the board still presents
70
- project state and stops.
71
-
72
- Then stop: "here is the state, what next?". Do not start executing work. When the user names
73
- an intent, take the intent route.
74
-
75
- ## Intent route: resume one intent from its ledger
76
-
77
- QMD-first when the intent is named by description: run
78
- `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to find the candidate, then open the
79
- authoritative intent file. The command is a no-op when QMD is absent; fall back to
80
- `INDEX.md`.
81
-
82
- If the intent is terminal (`## Completed` or `## Abandoned` in `INDEX.md`): print the
83
- intent screen (Status shows the terminal section, Next is empty), summarize its
84
- `outcome.md`, and ask what is next; never reopen it.
85
-
86
- For a live intent's directory:
87
-
88
- 1. **Read `savepoint.md` first.** It is a deterministic, append-only ledger, one line per
89
- event, newest at the bottom: `{utc-iso8601} {Stage} {milestone}`. Classify the stage
90
- from the last line alone (the table in `references/boarding-matrix.md`, read when
91
- classifying), then verify only that line's artifact is real (sentinel-aware:
92
- `Savepoint.stage_file_present?`). Do not re-probe every lifecycle file.
93
- 2. **Stale ledger.** When the last line disagrees with the files on disk, rebuild the ledger from
94
- disk and note the correction. A rebuilt ledger is the file-landing skeleton, which still
95
- pins the stage:
96
- ```bash
97
- ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'
98
- ```
99
- 3. **Read the hand-off.** The newest `~/.plastic/store/.sessions/<day>/handoff--*.md` (today,
100
- else the newest prior day) is the prior session's own account of where things stand; read
101
- it after the ledger, never instead of it.
102
- 4. **Derive the next step:** the first unchecked item in `checklist.md` when it exists, else
103
- the next thing the stage needs (see the matrix). The newest `## Insights` entry supplies
104
- the human-readable context; an entry marked `(autonomous)` means an auto team was
105
- delivering it, so say so and offer to hand back to `plastic-auto`.
106
- 5. **Print the report screen as the first thing in the reply, then continue at that stage.**
107
- The screen must open the message with nothing before it. On Claude Code, a fail-open
108
- `MessageDisplay` hook recognizes a reply that opens this way and substitutes a styled ANSI
109
- rendering for it there; the transcript and every other harness keep exactly this plain
110
- form. For "where are we" on one named intent, run
111
- `ruby ~/.plastic/scripts/report-screen state <intent_dir>` and print its output as it is:
112
- the title, the field table, the `Changed` row, and the Steps table come from the record,
113
- never by eye. For "where are we" with no intent named, run
114
- `ruby ~/.plastic/scripts/report-screen state --all <store_root>` for the roster across every
115
- in-delivery intent. Route "why did X take so long" to
116
- `ruby ~/.plastic/scripts/report-screen delay <intent_dir>` instead - every verb prints the
117
- same plain screen on any harness, painted only where the harness supports it, with no
118
- branching on harness name. Under the `state` screen
119
- write **What this means** as two to four bullets in plain words (what the intent is for,
120
- what has landed, what is left, any defect named by step), then close with **needs input:**
121
- naming the first open step. Then continue the work in the
122
- session's current mode. In auto mode the running team already holds the delivery lock; if a
123
- lock is held by a session that is gone, the `plastic-doctor` skill's lock section repairs or
124
- reclaims it.
125
-
126
- ## Roadmap route: resume the mid-flight roadmap
127
-
128
- 1. Resolve the tier root (project or global) and run the shared reader in which mode:
129
- ```bash
130
- ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps --which
131
- ```
132
- Read `state` and the winning `roadmap`. A `tie` lists `tie_candidates` to present side by
133
- side and let the user pick; never pick silently. The reader ranks liveness the way
134
- `references/liveness-ranking.md` describes (read it when a ranking needs explaining): a
135
- `delivering` or `blocked` entry wins, else the newest ledger or `## Log` timestamp.
136
- `roadmaps/<slug>.savepoint.md` is a derived signal read here, never a status field;
137
- `INDEX.md` stays the sole status writer.
138
- 2. **Present state:** the roadmap's `## Goal`, the current batch with each entry's mirrored
139
- status, the ledger's newest line beside the newest `## Log` line. Read
140
- `../plastic-conventions/references/roadmaps.md` for the file format and the status-mirror
141
- rule when a roadmap file needs interpreting.
142
- 3. Then continue with the next dispatchable entry in the session's mode: direct work on it,
143
- or `plastic-auto` when the owner says auto. The coordinator that drives a batch appends
144
- to `roadmaps/<slug>.savepoint.md` at its dispatch, merge, park, and handoff points with
145
- `ruby ~/.plastic/scripts/roadmap-savepoint append`; this skill only reads it.
146
-
147
- ## References
148
-
149
- | Trigger | Read |
150
- |---|---|
151
- | Filling the board on the project route | `references/board-fill.md` |
152
- | Classifying the stage from the ledger's last line | `references/boarding-matrix.md` |
153
- | Explaining why one roadmap ranked above another | `references/liveness-ranking.md` |
154
- | Saving or restoring context across a long session, or debugging a resume | `references/context-management.md` |
@@ -1,43 +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.
@@ -1,34 +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
- | `Done delivered` / `Done abandoned` | terminal | **report only** | immutable; ask what is next |
16
-
17
- ## Per-stage behaviour (what "continue" means)
18
-
19
- - **Why**: continue the conversation, or run the work directly when the request is already
20
- clear; every ruling is recorded as it lands.
21
- - **How**: write or finish the action files, `plan.md`, and `checklist.md`.
22
- - **Exec**: verify what is delivered, then continue (or restart) the delivery or research.
23
- The first unchecked `checklist.md` item is the next step; the newest `## Insights` entry
24
- supplies the context.
25
- - **ready to complete**: `outcome.md` is real; run the ending procedure.
26
- - **Done**: terminal. Report the outcome, ask what is next. Never reopen; `INDEX.md` is
27
- authoritative.
28
-
29
- ## Notes
30
-
31
- - A Plastic 1.x ledger may carry a `Tier <letter>` line under the `Why spec.md created` line
32
- (the intent tier was removed in 2.0, intent 304). It is inert: skip it when classifying.
33
- - An `## Insights` entry marked `(autonomous)` means an auto team was delivering the intent;
34
- say so and offer to hand back to `plastic-auto`.