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