@zalom/plastic 1.14.0 → 2.0.0-alpha.1

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 (190) hide show
  1. package/PLASTIC.md +101 -294
  2. package/README.md +5 -6
  3. package/agents/plastic-advisor.md +18 -17
  4. package/agents/plastic-enforcer.md +57 -69
  5. package/agents/plastic-executor.md +34 -20
  6. package/agents/plastic-faux-advisor.md +18 -18
  7. package/config_asks.yml +38 -0
  8. package/hooks/capture +4 -0
  9. package/hooks/check-update +12 -3
  10. package/hooks/close +5 -0
  11. package/hooks/hooks.json +9 -49
  12. package/hooks/record +4 -0
  13. package/package.json +3 -2
  14. package/scripts/agent-report +8 -9
  15. package/scripts/append-ledger +195 -0
  16. package/scripts/codex-hook +101 -95
  17. package/scripts/dashboard.rb +4 -4
  18. package/scripts/doctor.rb +106 -43
  19. package/scripts/end-intent +77 -76
  20. package/scripts/exec-worktree +11 -20
  21. package/scripts/file-session-intent +61 -0
  22. package/scripts/hook-capture +242 -0
  23. package/scripts/hook-close +34 -0
  24. package/scripts/hook-record +149 -0
  25. package/scripts/hook-session-start +95 -12
  26. package/scripts/install.rb +8 -6
  27. package/scripts/lib/agent_models.rb +1 -7
  28. package/scripts/lib/arm.rb +283 -0
  29. package/scripts/lib/backfill_intent.rb +316 -0
  30. package/scripts/lib/bridge.rb +24 -1597
  31. package/scripts/lib/doctor_core.rb +17 -88
  32. package/scripts/lib/doctor_session_ledger.rb +106 -0
  33. package/scripts/lib/exec_worktree.rb +14 -60
  34. package/scripts/lib/harness_text.rb +5 -4
  35. package/scripts/lib/hook_registry.rb +44 -107
  36. package/scripts/lib/insights.rb +3 -4
  37. package/scripts/lib/installer_core.rb +19 -30
  38. package/scripts/lib/lock.rb +6 -26
  39. package/scripts/lib/outcome_guard.rb +7 -5
  40. package/scripts/lib/project_validator.rb +30 -1
  41. package/scripts/lib/roadmap_queue.rb +3 -3
  42. package/scripts/lib/roadmap_savepoint.rb +1 -1
  43. package/scripts/lib/rule_catalog.rb +6 -3
  44. package/scripts/lib/savepoint.rb +320 -0
  45. package/scripts/lib/scaffold_intent.rb +13 -179
  46. package/scripts/lib/session_backfill.rb +184 -0
  47. package/scripts/lib/session_close.rb +84 -0
  48. package/scripts/lib/session_git.rb +469 -0
  49. package/scripts/lib/session_ledger.rb +497 -0
  50. package/scripts/lib/store_discovery.rb +1 -1
  51. package/scripts/lib/store_provisioning.rb +1 -1
  52. package/scripts/maintenance-run +7 -7
  53. package/scripts/new-intent +63 -4
  54. package/scripts/plastic-lock +94 -41
  55. package/scripts/promote-session-item +150 -0
  56. package/scripts/rebuild-graph +1 -1
  57. package/scripts/roadmap-next +2 -2
  58. package/scripts/rollback.rb +42 -3
  59. package/scripts/scaffold-intent +37 -63
  60. package/scripts/session-commit +116 -0
  61. package/scripts/spawn-preamble +5 -5
  62. package/scripts/update.rb +7 -3
  63. package/skills/agent-advisor/SKILL.md +3 -3
  64. package/skills/agent-advisor/references/advisor-protocol.md +20 -20
  65. package/skills/auto/SKILL.md +218 -317
  66. package/skills/auto/evals/evals.json +10 -10
  67. package/skills/auto/references/agent-architecture.md +102 -90
  68. package/skills/auto/references/agent-report-contract.md +4 -21
  69. package/skills/auto/references/end-tail.md +47 -53
  70. package/skills/auto/references/human-report-contract.md +8 -8
  71. package/skills/conventions/SKILL.md +1 -3
  72. package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
  73. package/skills/conventions/references/locks-and-worktrees.md +47 -55
  74. package/skills/conventions/references/maintenance-and-revisions.md +12 -12
  75. package/skills/dashboard/SKILL.md +1 -1
  76. package/skills/direct/SKILL.md +66 -0
  77. package/skills/direct/references/request-signals.md +59 -0
  78. package/skills/doctor/SKILL.md +58 -11
  79. package/skills/doctor/report.md +3 -1
  80. package/skills/install/SKILL.md +11 -9
  81. package/skills/intent-continuing/SKILL.md +131 -89
  82. package/skills/intent-continuing/references/boarding-matrix.md +34 -0
  83. package/skills/intent-continuing/references/context-management.md +2 -2
  84. package/skills/intent-creating/SKILL.md +2 -2
  85. package/skills/intent-creating/references/lifecycle.md +1 -1
  86. package/skills/intent-ending/SKILL.md +28 -37
  87. package/skills/intent-ending/evals/evals.json +4 -4
  88. package/skills/intent-executing/SKILL.md +12 -49
  89. package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
  90. package/skills/intent-speccing/SKILL.md +108 -51
  91. package/skills/intent-speccing/evals/evals.json +5 -5
  92. package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
  93. package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
  94. package/skills/project-creating/SKILL.md +1 -1
  95. package/skills/releasing/SKILL.md +7 -8
  96. package/skills/tutorial/SKILL.md +2 -2
  97. package/skills/tutorial/references/track-1-guided.md +16 -18
  98. package/skills/tutorial/references/track-2-auto.md +12 -13
  99. package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
  100. package/templates/agents.md +4 -7
  101. package/templates/project.yml +7 -0
  102. package/templates/roadmap.md +1 -1
  103. package/templates/savepoint.md +2 -2
  104. package/templates/session-intent.md +29 -0
  105. package/agents/plastic-brainstorming.md +0 -48
  106. package/agents/plastic-future-intent-researcher.md +0 -35
  107. package/agents/plastic-intent-curator.md +0 -47
  108. package/agents/plastic-intent-discovery.md +0 -43
  109. package/agents/plastic-planner.md +0 -56
  110. package/agents/plastic-spec-specialist.md +0 -53
  111. package/hooks/auto-arm +0 -5
  112. package/hooks/bash-gate +0 -3
  113. package/hooks/continue +0 -31
  114. package/hooks/edit-gates +0 -3
  115. package/hooks/future-intent-check +0 -25
  116. package/hooks/gate-check +0 -12
  117. package/hooks/power-tools +0 -8
  118. package/scripts/hook-auto-arm +0 -51
  119. package/scripts/hook-bash-gate +0 -78
  120. package/scripts/hook-code-gate +0 -38
  121. package/scripts/hook-continue +0 -48
  122. package/scripts/hook-create-gate +0 -51
  123. package/scripts/hook-edit-gates +0 -58
  124. package/scripts/hook-future-intent-check +0 -90
  125. package/scripts/hook-gate-check +0 -169
  126. package/scripts/hook-links-gate +0 -54
  127. package/scripts/hook-lock-gate +0 -47
  128. package/scripts/hook-power-tools +0 -38
  129. package/scripts/hook-savepoint-pre +0 -32
  130. package/scripts/lib/codex_edit_gates.rb +0 -138
  131. package/scripts/lib/edit_gates.rb +0 -398
  132. package/scripts/lib/links_gate.rb +0 -140
  133. package/scripts/lib/qmd_hook.rb +0 -41
  134. package/scripts/lib/spec_header.rb +0 -83
  135. package/scripts/lib/start_intent.rb +0 -296
  136. package/scripts/start-intent +0 -89
  137. package/skills/_active-intent-gate.md +0 -26
  138. package/skills/auto/references/tiers.md +0 -100
  139. package/skills/continuing/SKILL.md +0 -34
  140. package/skills/continuing/evals/evals.json +0 -91
  141. package/skills/conventions/references/gates-and-enforcement.md +0 -53
  142. package/skills/conventions/references/tiers-and-dispatch.md +0 -135
  143. package/skills/doctor/references/gates-stuck-detection.md +0 -43
  144. package/skills/intent-brainstorming/SKILL.md +0 -118
  145. package/skills/intent-brainstorming/evals/evals.json +0 -67
  146. package/skills/intent-continuing/evals/evals.json +0 -145
  147. package/skills/intent-discovering/SKILL.md +0 -56
  148. package/skills/intent-grilling/SKILL.md +0 -108
  149. package/skills/intent-linking/SKILL.md +0 -128
  150. package/skills/intent-linking/evals/evals.json +0 -22
  151. package/skills/intent-linking/references/zettelkasten.md +0 -45
  152. package/skills/intent-locking/SKILL.md +0 -64
  153. package/skills/intent-planning/SKILL.md +0 -145
  154. package/skills/intent-planning/evals/evals.json +0 -81
  155. package/skills/intent-planning/references/plan-format.md +0 -130
  156. package/skills/intent-researching/SKILL.md +0 -123
  157. package/skills/intent-researching/evals/evals.json +0 -22
  158. package/skills/intent-savepoint/SKILL.md +0 -83
  159. package/skills/intent-savepoint/references/context-management.md +0 -32
  160. package/skills/intent-starting/SKILL.md +0 -151
  161. package/skills/intent-starting/evals/evals.json +0 -117
  162. package/skills/intent-starting/references/boarding-matrix.md +0 -35
  163. package/skills/project-continuing/SKILL.md +0 -119
  164. package/skills/project-continuing/evals/evals.json +0 -100
  165. package/skills/roadmap-continuing/SKILL.md +0 -89
  166. package/skills/roadmap-continuing/evals/evals.json +0 -82
  167. package/skills/skill-creating/SKILL.md +0 -75
  168. package/skills/skill-creating/evals/evals.json +0 -108
  169. package/skills/skill-creating/references/agents.md +0 -168
  170. package/skills/skill-creating/references/defaults-first.md +0 -23
  171. package/skills/skill-creating/references/evals.md +0 -41
  172. package/skills/skill-creating/references/hooks.md +0 -251
  173. package/skills/skill-creating/references/progressive-disclosure.md +0 -176
  174. package/skills/skill-creating/references/scripts.md +0 -166
  175. package/skills/skill-creating/references/skills.md +0 -169
  176. package/skills/skill-creating/scripts/scaffold.rb +0 -313
  177. package/skills/skill-evaluating/SKILL.md +0 -141
  178. package/skills/skill-evaluating/assets/eval-template.json +0 -12
  179. package/skills/skill-evaluating/evals/evals.json +0 -75
  180. package/skills/skill-evaluating/references/convention-checks.md +0 -76
  181. package/skills/skill-evaluating/references/eval-methodology.md +0 -154
  182. package/skills/store-curating/SKILL.md +0 -64
  183. package/skills/store-curating/evals/evals.json +0 -38
  184. package/skills/store-indexing/SKILL.md +0 -93
  185. package/skills/store-indexing/evals/evals.json +0 -22
  186. package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
  187. package/skills/store-provisioning/SKILL.md +0 -55
  188. /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
  189. /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
  190. /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
@@ -1,103 +1,145 @@
1
1
  ---
2
2
  name: plastic-intent-continuing
3
3
  description: >-
4
- Use when a specific intent is named to resume, by id or by description, or on `continuing
5
- --intent {id}`. Reads that intent's savepoint ledger and hands off to plastic-intent-starting.
6
- The general "continue" / new-session triggers belong to the plastic-continuing router, not
7
- here, so a bare "continue" does not settle on this skill directly. Boot (health check, core
8
- context, version, statusline) is owned by the SessionStart hook, not this skill. Does not
9
- drive work autonomously (that is plastic-auto).
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 station; 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).
10
12
  user-invocable: true
11
13
  ---
12
14
 
13
- # Continuing (intent route)
14
-
15
- `plastic-intent-continuing` is the intent route of `plastic-continuing`. It resumes ONE
16
- specific intent by its savepoint ledger, then hands off to `plastic-intent-starting`. It does
17
- NOT land on a dashboard and does NOT execute work autonomously (that is `plastic-auto`); both
18
- of those are other routes' jobs.
19
-
20
- **Boot is not this skill's job.** The `hook-session-start` hook already runs by construction on
21
- every session start: it runs the core health check (`doctor --core`), primes `PLASTIC.md` +
22
- store/project state, and prints the `Plastic Core loaded - v{version}` banner. The
23
- `plastic-statusline` hook sets the statusline. So by the time this skill runs, core is loaded
24
- and healthy (or the banner already warned otherwise). This skill picks up from there and
25
- resumes the named intent. This is the seam future continue-flags build on (see [[39]]).
26
-
27
- ## When to Use
28
- - A specific intent is named to resume, by id or by description
29
- - `continuing --intent {id}`
30
-
31
- ## Determine Store
32
-
33
- 1. **Global store** - `~/.plastic/INDEX.md` exists global mode.
34
- 2. **Local store** - a project store under `~/.plastic/projects/{slug}/` whose registered
35
- path (in `~/.plastic/projects.yml`) matches the current working directory → project mode.
36
- The SessionStart hook already detects this; here you only need the slug to scope the
37
- named intent's store.
38
- 3. If neither exists announce "No Plastic store found. Run /plastic-install."
39
-
40
- ## Conditional Ledger-Resume
41
-
42
- Fires ONLY when the user explicitly asks to continue a SPECIFIC intent, or an agent is
43
- instructed to continue one. It is not part of every boot.
44
-
45
- QMD-first (when available): when the user names the intent by description rather than id, before
46
- scanning the store with grep/Read run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to
47
- surface the candidate intent, then open the authoritative intent file for the hit you resume. The
48
- command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
49
-
50
- Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
51
- report-home contract behind the resume below. This path resolves relative to this skill's own
52
- installed directory.
53
-
54
- For that intent's directory:
55
-
56
- 1. **Read `savepoint.md` FIRST (intent 81).** It is a deterministic, append-only ledger
57
- (one line per event, newest at the bottom): `{utc-iso8601} {Stage} {milestone}`. Classify
58
- the state from the **last line** alone, then verify ONLY that line's artifact. The bookends
59
- are fixed: first line `What created`, last line either a cycle position or
60
- `Done delivered|abandoned`.
61
-
62
- | Last line | State | Verify only |
63
- |---|---|---|
64
- | `What {id}--{slug}.md` | born / parked | intent file exists |
65
- | `Why started` | Why entered, no spec yet | spec.md not yet real; continue Why |
66
- | `Why spec.md created` | Why done | spec.md present; continue to How |
67
- | `How started` / `How plan.md created` | How in progress | plan.md; continue How |
68
- | `How checklist.md created` / `Exec started` | ready for / in Exec | plan.md + checklist.md present; continue Exec |
69
- | `Exec outcome.md created` | Exec done | outcome.md present; ready to complete |
70
- | `Done delivered` / `Done abandoned` | terminal | do NOT cycle-resume; INDEX is authoritative |
71
-
72
- 2. **Verify the stage file.** Confirm only the last line's artifact exists and is non-empty
73
- (ledger `How plan.md created` `plan.md` must be present and non-empty). Do not re-probe
74
- every lifecycle file.
75
- 3. **Drift handling.** If the ledger's last line disagrees with files-on-disk, rebuild the
76
- ledger from filesystem state and note the correction. A rebuilt ledger is the file-landing
77
- skeleton (no `started`/`Done` lines), which still pins cycle position:
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`): report only.
83
+ Summarize its `outcome.md` and ask what is next; never reopen it.
84
+
85
+ For a live intent's directory:
86
+
87
+ 1. **Read `savepoint.md` first.** It is a deterministic, append-only ledger, one line per
88
+ event, newest at the bottom: `{utc-iso8601} {Stage} {milestone}`. Classify the station
89
+ from the last line alone (the table in `references/boarding-matrix.md`, read when
90
+ classifying), then verify only that line's artifact is real (sentinel-aware:
91
+ `Savepoint.stage_file_present?`). Do not re-probe every lifecycle file.
92
+ 2. **Drift.** When the last line disagrees with the files on disk, rebuild the ledger from
93
+ disk and note the correction. A rebuilt ledger is the file-landing skeleton, which still
94
+ pins the station:
78
95
  ```bash
79
- ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.rebuild_savepoint("<intent_dir>")'
96
+ ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'
80
97
  ```
81
- 4. **Derive the next step:**
82
- - First unchecked item in `checklist.md` if it exists, else
83
- - "advance to the next lifecycle stage" (e.g. ledger shows Why/spec.md next is How).
84
- - The newest `## Insights` entry supplies human-readable context (Insights are
85
- append-only, newest at the bottom).
86
- 5. **Announce, then hand off to `plastic-intent-starting`:**
98
+ 3. **Read the hand-off.** When `resources/handoff--*.md` exists, its newest file is the prior
99
+ session's own account of where things stand; read it after the ledger, never instead of it.
100
+ 4. **Derive the next step:** the first unchecked item in `checklist.md` when it exists, else
101
+ the next thing the station needs (see the matrix). The newest `## Insights` entry supplies
102
+ the human-readable context; an entry marked `(autonomous)` means an auto team was
103
+ delivering it, so say so and offer to hand back to `plastic-auto`.
104
+ 5. **Announce, then continue at that station:**
87
105
  ```
88
106
  Resuming intent [ID] - [name]
89
- Store: [global | project:<slug> | local]
90
- Stage: [from ledger last line]
91
- Next step: [first unchecked checklist item | advance to <stage>]
92
- Context: [newest ## Insights entry]
93
- Drift: [none | ledger rebuilt from filesystem]
107
+ Store: [global | project:<slug>]
108
+ Station: [from the ledger's last line]
109
+ Next step: [first unchecked checklist item | what the station needs]
110
+ Context: [newest ## Insights entry | hand-off summary]
111
+ Drift: [none | ledger rebuilt from disk]
94
112
  ```
95
- Hand off to `plastic-intent-starting`: it takes the lock, boards at this station, and is
96
- where the single "auto or guided?" ask for the intent route lives, asked there exactly
97
- once and never duplicated here. Its auto branch is the one that hands off to `plastic-auto`;
98
- this skill never hands to `plastic-auto` directly.
113
+ Then continue the work in the session's current mode. In auto mode the running team
114
+ already holds the delivery lock; if a lock is held by a session that is gone, the
115
+ `plastic-doctor` skill's lock section repairs or reclaims it.
116
+
117
+ ## Roadmap route: resume the mid-flight roadmap
118
+
119
+ 1. Resolve the tier root (project or global) and run the shared reader in which mode:
120
+ ```bash
121
+ ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <root>/roadmaps --which
122
+ ```
123
+ Read `state` and the winning `roadmap`. A `tie` lists `tie_candidates` to present side by
124
+ side and let the user pick; never pick silently. The reader ranks liveness the way
125
+ `references/liveness-ranking.md` describes (read it when a ranking needs explaining): a
126
+ `delivering` or `blocked` entry wins, else the newest ledger or `## Log` timestamp.
127
+ `roadmaps/<slug>.savepoint.md` is a derived signal read here, never a status field;
128
+ `INDEX.md` stays the sole status writer.
129
+ 2. **Present state:** the roadmap's `## Goal`, the current batch with each entry's mirrored
130
+ status, the ledger's newest line beside the newest `## Log` line. Read
131
+ `../plastic-conventions/references/roadmaps.md` for the file format and the status-mirror
132
+ rule when a roadmap file needs interpreting.
133
+ 3. Then continue with the next dispatchable entry in the session's mode: direct work on it,
134
+ or `plastic-auto` when the owner says auto. The coordinator that drives a batch appends
135
+ to `roadmaps/<slug>.savepoint.md` at its dispatch, merge, park, and handoff points with
136
+ `ruby ~/.plastic/scripts/roadmap-savepoint append`; this skill only reads it.
99
137
 
100
138
  ## References
101
139
 
102
- - Read `references/context-management.md` for the save/continue protocol and for
103
- debugging the resume flow.
140
+ | Trigger | Read |
141
+ |---|---|
142
+ | Filling the board on the project route | `references/board-fill.md` |
143
+ | Classifying the station from the ledger's last line | `references/boarding-matrix.md` |
144
+ | Explaining why one roadmap ranked above another | `references/liveness-ranking.md` |
145
+ | Saving or restoring context across a long session, or debugging a resume | `references/context-management.md` |
@@ -0,0 +1,34 @@
1
+ # Boarding matrix: which station a resume lands at
2
+
3
+ The station 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). On drift, rebuild the ledger 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, tick 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-station 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`.
@@ -20,9 +20,9 @@ step looks stale):
20
20
  2. Confirm the artifact that line implies (`plan.md`, `checklist.md`, `outcome.md`, ...) is
21
21
  present and non-empty on disk.
22
22
  3. If the two disagree, the ledger has drifted: rebuild it rather than hand-editing:
23
- `ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.rebuild_savepoint("<intent_dir>")'`
23
+ `ruby -r ~/.plastic/scripts/lib/savepoint -e 'Savepoint.rebuild_savepoint("<intent_dir>")'`
24
24
  4. Re-read the rebuilt last line and re-derive the next step from `checklist.md`'s first
25
25
  unchecked item.
26
26
 
27
27
  The general "land on the board / priority order / stale future intents" flow now lives in
28
- `plastic-project-continuing`; this file no longer duplicates it.
28
+ `plastic-intent-continuing`; this file no longer duplicates it.
@@ -12,7 +12,7 @@ user-invocable: true
12
12
  - User explicitly says "new intent" or "create intent"
13
13
  - An agent discovers work needed during implementation
14
14
 
15
- ## Determine Tier
15
+ ## Determine the store
16
16
 
17
17
  **Global intent** (strategic): created when working outside a registered project, or when the user expresses a high-level goal. Stored in `~/.plastic/store/`.
18
18
 
@@ -79,7 +79,7 @@ rule and the tool.
79
79
  frontmatter edge and reproject. Links are decided by context influence (a `chain` edge has a high
80
80
  bar: the candidate's context must materially help deliver this intent), not by shared files or a
81
81
  similarity score. To gather candidates with their context and record an edge, use the
82
- `plastic-intent-linking` skill and `scripts/link-suggest`.
82
+ `scripts/link-suggest` and `scripts/project-links`.
83
83
 
84
84
  Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine: the
85
85
  tiers of influence, sources versus chain, and how the `## Links` projection is derived. This path
@@ -78,4 +78,4 @@ State is derived from what exists, not from what's declared.
78
78
 
79
79
  The intent file is born complete with all five sanctioned `##` sections; the lifecycle files (`spec.md`/`plan.md`/`checklist.md`/`outcome.md`) are sentinel placeholders that read as "stage not reached" until an agent fills them and deletes the `<!-- plastic:placeholder -->` first line.
80
80
 
81
- Always scaffold through `new-intent` (or this skill). Never hand-author intent files: the write-time create gate blocks an incomplete or malformed intent file, and hand-authoring is the bypass this contract is designed to remove.
81
+ Always scaffold through `new-intent` (or this skill). Never hand-author intent files: `new-intent` validates the file it writes (`scripts/validate-intent`) and `end-intent` checks it again at close, and hand-authoring is the bypass this contract is designed to remove.
@@ -24,7 +24,7 @@ installed directory.
24
24
  | # | Step | Who does it |
25
25
  |---|---|---|
26
26
  | 0 | Precondition check | You, before touching outcome.md |
27
- | 1 | outcome.md + intent-file `## Outcome` summary | `scripts/end-intent` |
27
+ | 1 | backfill spec/plan/action/outcome from the record, self-check, intent-file `## Outcome` summary | `scripts/end-intent` |
28
28
  | 2 | INDEX.md terminal move (Active -> Completed/Abandoned) | `scripts/end-intent` |
29
29
  | 3 | savepoint `Done` bookend | `scripts/end-intent` |
30
30
  | 4 | store auto-commit | `scripts/end-intent` |
@@ -39,45 +39,36 @@ deliveries; separately, one session delivered four intents back to back and
39
39
  never ran the old step-5 one-liner at all, intent 188). Never restate
40
40
  outcome/INDEX/savepoint/disarm prose inline again; call `scripts/end-intent`.
41
41
 
42
- ### Step 0. Precondition (the gate is section-blind, not selective)
42
+ ### Step 0. Precondition (the record is what gets backfilled)
43
43
 
44
- `Bridge.check_gate` (scripts/lib/bridge.rb) is LIVE code already wired into
45
- the write-time hook. Its outcome.md rule is a blind scan of the WHOLE
46
- checklist.md: `content.scan(/^- \[ \]/)` counts every unchecked box, in
47
- every section, with no awareness of which section a box lives in. ANY
48
- unchecked box anywhere blocks the outcome.md write; there is no exemption
49
- for orchestrator-owned or completion-tracking items.
44
+ Nothing refuses the close any more (the 1.x write-time gate and `end-intent`'s
45
+ exit-6 structure gate were retired in 2.0, intents 302 and 308). What you leave
46
+ on disk is what the record becomes, so before the call:
50
47
 
51
48
  1. Read checklist.md. Tick every item as it is actually performed, including
52
49
  an item that describes the close itself: running this very procedure IS
53
- what that item describes, so tick it at the moment you begin the close,
54
- before authoring outcome.md. By the time outcome.md is written,
55
- checklist.md must read 100 percent checked; there is no other way past
56
- the gate.
50
+ what that item describes. An unchecked box is not a refusal, it is a
51
+ reported gap that lands verbatim in the backfilled `## Follow-ups`.
57
52
  2. Confirm every acceptance criterion in spec.md is verifiable (tests pass,
58
53
  or the manual check described in its HOW line was actually run).
59
- 3. The structure gate (intent 222) now enforces this: `scripts/end-intent`
60
- refuses with exit 6 and names the exact unchecked box (or any other
61
- structural gap: intent-file validity, lifecycle-artifact presence,
62
- `## Links` projection). On a refusal, fix via the OWNING tool, never a
63
- hand edit of the check's own output:
64
- - checklist/outcome content - finish it yourself, the same as before.
65
- - links projection - run
66
- `ruby ~/.plastic/scripts/maintenance-run --tool project-links --intent <id> --apply`.
67
- - a savepoint issue - advisory only (WARN, never blocks): run
68
- `plastic-intent-savepoint` to rebuild via `Bridge.rebuild_savepoint` if
69
- you want it clean, but it never refuses the close on its own.
70
- Then re-run `scripts/end-intent`.
54
+ 3. Decide what you have to say. A spec.md, plan.md, action file, or outcome.md
55
+ left as the scaffold placeholder is written from the record by
56
+ `scripts/end-intent` (the intent file's `## Intent`, `### Decisions`, and
57
+ `## Insights`, the checklist, the diff on the intent's own worktree). A
58
+ file you wrote, even under a still-present sentinel, is never touched.
59
+ Write outcome.md yourself when the summary deserves more than the
60
+ `--outcome-summary` line; otherwise let the backfill carry it.
71
61
 
72
62
  ### Step 1-5. Run `scripts/end-intent`
73
63
 
74
- First author outcome.md for real (never leave the scaffold placeholder in
75
- place): copy `templates/outcome.md`, set the frontmatter to
76
- `disposition: delivered` or `disposition: abandoned`, and fill `## Summary`,
77
- `## Delivered`, `## Verification`, `## Follow-ups`. On abandon, `## Summary`
78
- states the abandonment reason and the trail (see Pivot below). Also author
64
+ Author outcome.md yourself when it deserves prose: copy `templates/outcome.md`,
65
+ set the frontmatter to `disposition: delivered` or `disposition: abandoned`, and
66
+ fill `## Summary`, `## Delivered`, `## Verification`, `## Follow-ups`. On
67
+ abandon, `## Summary` states the abandonment reason and the trail (see Pivot
68
+ below). A placeholder outcome.md is backfilled from the record instead, with the
69
+ close's disposition and the `--outcome-summary` line as its summary. Also author
79
70
  the rich INDEX entry note now (a short line in the store's existing
80
- Completed/Abandoned convention: mode/tier, what shipped or why it was
71
+ Completed/Abandoned convention: mode, what shipped or why it was
81
72
  abandoned, suite result, merge/spawn notes); content authoring stays with
82
73
  you, `--index-note` only appends what you write.
83
74
 
@@ -91,9 +82,11 @@ ruby ~/.plastic/scripts/end-intent \
91
82
  --index-note "<rich Completed/Abandoned entry description>"
92
83
  ```
93
84
 
94
- This does all of steps 1-5 in order: guards outcome.md (a missing or
95
- still-placeholder file is caught by the structure gate first and exits 6; a
96
- wrong-disposition file exits 2; either way it authors nothing), stamps the
85
+ This does all of steps 1-5 in order: backfills every missing or placeholder
86
+ spec.md, plan.md, action file, and outcome.md from the record (never a file
87
+ you wrote), runs doctor's per-intent structure check and the outcome guard as
88
+ a self-check that reports on stderr and proceeds (an unchecked box, a
89
+ malformed intent file, a wrong-disposition outcome.md you wrote), stamps the
97
90
  intent file's `## Outcome` section, moves the INDEX.md
98
91
  line from `## Active` to `## Completed` or `## Abandoned` (dated today,
99
92
  idempotent, accepting either a real em dash or a plain hyphen as the id/
@@ -127,8 +120,7 @@ correctly, for the first time on that path (D7).
127
120
 
128
121
  Exit codes: 0 success (the intent is closed AND its delivery lock is gone);
129
122
  1 a usage or resolution failure, OR an INDEX id that resolves to neither
130
- `## Active` nor the terminal section; 2 the outcome.md guard refusing (fix
131
- outcome.md and re-run, nothing was written); 3 steps 1-4 already committed
123
+ `## Active` nor the terminal section; 3 steps 1-4 already committed
132
124
  but disarm could not verify the lock is gone afterward (run `/plastic-doctor
133
125
  check the lock status`); 4 a live foreign session holds the lock (back off);
134
126
  5 the code worktree is dirty (commit/stash first, or pass
@@ -171,8 +163,7 @@ historical record of what was planned.
171
163
 
172
164
  ## Routing
173
165
 
174
- `plastic-releasing`, `plastic-auto`, `plastic-intent-executing`, the curator
175
- agent, `store-curating`, and `store-indexing` all delegate their mechanical
166
+ `plastic-releasing`, `plastic-auto`, and `plastic-intent-executing` all delegate their mechanical
176
167
  close to this skill (or call `scripts/end-intent` directly for steps 1-5).
177
168
  None of them restate the outcome/INDEX/savepoint/disarm prose inline any
178
169
  more; if you find one that does, that surface has drifted and should route
@@ -7,11 +7,11 @@
7
7
  "scope": "behavior",
8
8
  "set": "train",
9
9
  "prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
10
- "expected_output": "Defers to the existing Bridge.check_gate hard gate rather than writing outcome.md; tells the user to finish the checklist item first instead of fighting the deny.",
10
+ "expected_output": "Ticks or finishes the item before calling scripts/end-intent, because an unchecked box is reported by the structure self-check and lands verbatim in the backfilled Follow-ups; never a refusal (the write-time gate was removed in 2.0, intents 302 and 308).",
11
11
  "files": [],
12
12
  "assertions": [
13
- { "type": "human", "check": "SKILL.md Step 0 states the gate blocks outcome.md while unchecked non-completion items remain, and instructs finishing the checklist rather than attempting the write", "result": "expect-pass" },
14
- { "type": "code", "check": "Bridge.check_gate(intent_dir, 'outcome.md') returns a non-nil block reason when checklist.md has an unchecked '- [ ]' item (scripts/lib/bridge.rb)", "result": "pass" }
13
+ { "type": "human", "check": "SKILL.md Step 0 states that nothing refuses the close, that an unchecked box is a reported gap landing in Follow-ups, and instructs finishing the checklist before the call", "result": "expect-pass" },
14
+ { "type": "code", "check": "scripts/end-intent exits 0 on an unchecked '- [ ]' item and prints 'structure check: intent_checklist_complete' (test/end_intent_test.rb)", "result": "pass" }
15
15
  ]
16
16
  },
17
17
  {
@@ -53,7 +53,7 @@
53
53
  "scope": "triggering",
54
54
  "set": "validation",
55
55
  "prompt": "Start work on intent 87.",
56
- "expected_output": "Does NOT activate plastic-intent-ending; this is a boarding request (plastic-intent-starting), the opposite end of the lifecycle from a close.",
56
+ "expected_output": "Does NOT activate plastic-intent-ending; this is a resume request (plastic-intent-continuing), the opposite end of the lifecycle from a close.",
57
57
  "files": [],
58
58
  "assertions": [
59
59
  { "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: plastic-intent-executing
3
- description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (at L a fresh subagent per task with two-stage review, at S and M one executor dispatch for the whole consolidated action). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
3
+ description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (one executor dispatch for the whole consolidated action, tests first, reviewed by risk). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
4
4
  user-invocable: true
5
5
  ---
6
6
 
@@ -8,7 +8,7 @@ user-invocable: true
8
8
 
9
9
  ## Overview
10
10
 
11
- Load plan from the active intent's `plan.md`, execute all tasks, review per the tier gate below, report when complete.
11
+ Load plan from the active intent's `plan.md`, execute all tasks, review as below, report when complete.
12
12
 
13
13
  ## Step 0: Sync Worktree First
14
14
 
@@ -40,12 +40,9 @@ If `superpowers:subagent-driven-development` is available as a skill, delegate t
40
40
  - Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
41
41
 
42
42
  ### Subagent-Driven (Default)
43
- Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. How many dispatches it makes depends on the tier stamped at the top of `spec.md` (the `Tier:` line, the single authoritative record). `plan.md` carries a bold `**Tier:**` field copied from it, a convenience only:
43
+ Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. One executor dispatch implements the whole consolidated action from `plan.md`, the action file's failure-mode matrix, and `checklist.md` in one pass, tests first: the matrix's tests are committed red before the code. Several independent action files are handed to the same executor in order; they are not a reason for a per-task review loop (removed in 2.0, intent 307).
44
44
 
45
- - **S or M:** one executor dispatch implements the whole consolidated action from `plan.md` plus `checklist.md` in one pass. There is no per-task implementer-then-two-reviewers loop.
46
- - **L:** a fresh subagent per task, and a two-stage review after each task: spec compliance first, then code quality.
47
-
48
- The final independent review in Step 3 runs at every tier. It is a separate agent with fresh context, and it is never the maker.
45
+ The post-execution review in Step 3 runs by risk (the rule lives in the auto skill). When it runs, the reviewer is a separate agent with fresh context, never the maker. The plan itself is reviewed before code by the adversarial plan reviewer (`plan-reviewer-prompt.md`), dispatched by the lead at How.
49
46
 
50
47
  ### Inline (Fallback)
51
48
  Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
@@ -62,46 +59,15 @@ Run Step 0 (Sync Worktree First) before this step.
62
59
 
63
60
  ### Step 2: Execute Each Task
64
61
 
65
- Read the `Tier:` line stamped at the top of `spec.md` first (the authority), then follow the matching branch. `plan.md`'s bold `**Tier:**` field is a convenience copy of the same value, useful when `spec.md` is not already open.
66
-
67
- #### At S or M: one executor dispatch
68
-
69
- Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), the checklist items it must tick, the project context from CLAUDE.md, and the active intent context from `{ID}--{slug}.md`. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
62
+ Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), every action file with its failure-mode matrix, the checklist items it must tick, the project context from CLAUDE.md, the active intent context from `{ID}--{slug}.md`, and the worktree path. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor writes the matrix's tests and commits them red, implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
70
63
 
71
64
  Read its response by code:
72
- - DONE or DONE_WITH_CONCERNS → proceed to Step 3. Run no per-task spec review and no per-task quality review at these tiers; Step 3's final review covers the work.
65
+ - DONE or DONE_WITH_CONCERNS → proceed to Step 3.
73
66
  - NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
74
67
  - BLOCKED → stop, report to the user, wait for resolution.
75
68
 
76
- #### At L: one subagent per task
77
-
78
- For each task sequentially (never parallel: conflict risk):
79
-
80
- **a. Dispatch implementer subagent**
81
- Use the Agent tool with the implementer prompt template. Include:
82
- - Full task text (pasted in, not file reference)
83
- - Project context from CLAUDE.md
84
- - Active intent context from `{ID}--{slug}.md`
85
-
86
- **b. Handle implementer response**
87
- - DONE → proceed to spec review
88
- - DONE_WITH_CONCERNS → note concerns, proceed to spec review
89
- - NEEDS_CONTEXT → provide missing context, re-dispatch
90
- - BLOCKED → stop, report to user, wait for resolution
91
-
92
- **c. Dispatch spec compliance reviewer**
93
- Use the Agent tool with spec-reviewer prompt. The reviewer reads actual code and compares against the task requirements. Pass/fail.
94
- - If fail: implementer fixes, spec reviewer re-reviews (loop until pass)
95
-
96
- **d. Dispatch code quality reviewer**
97
- Only after spec compliance passes. Reviews clean code, testing, architecture. Pass/fail.
98
- - If fail: implementer fixes, quality reviewer re-reviews (loop until pass)
99
-
100
- **e. Tick as it lands, then move to next**
101
- Follow `## Tick-as-you-land` below: move the task's checklist item to `## Completed` and add a `## Session Log` row in the same edit.
102
-
103
- ### Step 3: Final Review
104
- After all tasks complete, dispatch a final reviewer for the entire implementation. This runs at every tier, S, M, and L. The reviewer is a separate agent with fresh context and is never the maker. At S and M this is the only review the work gets, so if it returns changes, re-dispatch the executor to fix them, then re-review.
69
+ ### Step 3: Review by Risk
70
+ Apply the auto skill's risk rule to the executor's return and the diff: a matrix row no test could prove, a diff touching a hook, the lock, the worktree code, the installer, or a release file, a DONE_WITH_CONCERNS or a deviation from the matrix, or an owner-facing surface no test pins. When a rule fires, dispatch the post-execution reviewer with `code-quality-reviewer-prompt.md` (a separate agent with fresh context, never the maker); if it returns changes, re-dispatch the executor to fix them, then run the suite once more. When no rule fires, the green suite is the review.
105
71
 
106
72
  ### Step 4: Update Intent and Complete
107
73
  Capture observations in `## Insights`. When ALL checklist items are checked:
@@ -142,22 +108,19 @@ row (Date, Items Completed, Notes). Do not batch several tasks' worth of
142
108
  checklist updates into one later edit; tick the moment the task is verified,
143
109
  before moving to the next task.
144
110
 
145
- ## Verify before every owner gate
111
+ ## Verify before every owner review
146
112
 
147
113
  Hard rule: before presenting any completed work to the owner, independently
148
114
  verify it. Grep or run the artifact the work just produced (the test suite,
149
115
  the changed file, the installed output) rather than restating the intended
150
116
  change. Never present an unverified claim to the owner. If verification
151
- fails, fix it before the gate, not after.
152
-
153
- Read `../plastic-conventions/references/gates-and-enforcement.md` for the transition-gate
154
- mechanics, the audited escape, and gate logging behind every owner gate named here.
117
+ fails, fix it before the review, not after.
155
118
 
156
119
  ## Methods report (audits and sweeps)
157
120
 
158
121
  When the work is an audit or a sweep (checking many files or many instances of
159
122
  something rather than building one artifact), deposit a methods report to
160
- `{intent_dir}/resources/` before the gate: what was checked, how it was
123
+ `{intent_dir}/resources/` before the review: what was checked, how it was
161
124
  checked, and what was found. This lets the owner review the method, not just
162
125
  the conclusion.
163
126
 
@@ -175,7 +138,7 @@ When presenting a batch of Exec decisions for the owner to rule, read
175
138
  `~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
176
139
  persisting each ruling with `--stage Exec`.
177
140
 
178
- ## Gate position
141
+ ## Position in the cycle
179
142
 
180
143
  - **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
181
144
  - **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.