@zalom/plastic 2.0.0-alpha.8 → 2.0.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.
- package/PLASTIC.md +13 -136
- package/README.md +357 -133
- package/agents/plastic-enforcer.md +20 -15
- package/agents/plastic-executor.md +15 -4
- package/agents/plastic-node-research.md +30 -0
- package/agents/plastic-node-verify.md +28 -0
- package/agents/plastic-node-work.md +33 -0
- package/agents/{plastic-advisor.md → plastic-primary-advisor.md} +7 -9
- package/agents/{plastic-faux-advisor.md → plastic-secondary-advisor.md} +9 -12
- package/assets/plastic-logo.svg +1 -0
- package/bin/crap +4 -0
- package/bin/lib/context_budget.rb +43 -6
- package/bin/lib/skill_census.rb +839 -0
- package/bin/plastic +6 -0
- package/bin/plastic-skill-census +114 -0
- package/bin/test +24 -4
- package/bin/verify-change +345 -0
- package/config_asks.yml +4 -4
- package/deprecations.yml +1 -1
- package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +19 -24
- package/{skills/auto/references → docs/help}/agent-architecture.md +16 -14
- package/{skills/conventions/references → docs/help}/completion-and-done.md +15 -16
- package/docs/help/human-report-contract.md +152 -0
- package/{skills/conventions/references → docs/help}/knowledge-graph.md +9 -0
- package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +23 -13
- package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +1 -1
- package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
- package/{skills/tutorial/references → docs/help}/track-1-guided.md +28 -47
- package/{skills/tutorial/references → docs/help}/track-2-auto.md +8 -8
- package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
- package/hooks/call-budget +4 -0
- package/hooks/hooks.json +24 -0
- package/hooks/message-display +62 -1
- package/hooks/session-start +5 -1
- package/hooks/statusline +32 -27
- package/hooks/stop +5 -0
- package/package.json +5 -3
- package/scripts/append-ledger +2 -1
- package/scripts/dashboard.rb +267 -16
- package/scripts/day-summary +2 -1
- package/scripts/doctor.rb +680 -39
- package/scripts/end-intent +238 -22
- package/scripts/exec-worktree +5 -5
- package/scripts/file-session-intent +2 -1
- package/scripts/graph-measure +249 -0
- package/scripts/hook-call-budget +222 -0
- package/scripts/hook-capture +24 -123
- package/scripts/hook-close +2 -1
- package/scripts/hook-message-display +19 -5
- package/scripts/hook-record +24 -16
- package/scripts/hook-savepoint +27 -3
- package/scripts/hook-session-start +359 -321
- package/scripts/hook-stop +58 -0
- package/scripts/index-projection +74 -0
- package/scripts/insight-append +17 -4
- package/scripts/install.rb +9 -7
- package/scripts/lib/action_graph_shim.rb +279 -0
- package/scripts/lib/active_delivery.rb +105 -0
- package/scripts/lib/agent_models.rb +63 -25
- package/scripts/lib/arm.rb +48 -83
- package/scripts/lib/atomic_write.rb +31 -0
- package/scripts/lib/backup.rb +65 -0
- package/scripts/lib/cli/command.rb +92 -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 +99 -0
- package/scripts/lib/cli/commands/auto_report.rb +50 -0
- package/scripts/lib/cli/commands/auto_take.rb +31 -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 +81 -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 +62 -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 +32 -0
- package/scripts/lib/cli/commands/intent_spec.rb +44 -0
- package/scripts/lib/cli/commands/intent_step.rb +71 -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 +54 -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 +33 -0
- package/scripts/lib/cli/commands/roadmap.rb +19 -0
- package/scripts/lib/cli/commands/roadmap_check.rb +54 -0
- package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
- package/scripts/lib/cli/commands/roadmap_migrate.rb +53 -0
- package/scripts/lib/cli/commands/roadmap_next.rb +70 -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 +86 -0
- package/scripts/lib/cli/intent_progress.rb +36 -0
- package/scripts/lib/cli/legacy.rb +80 -0
- package/scripts/lib/cli/output.rb +137 -0
- package/scripts/lib/cli/scope.rb +134 -0
- package/scripts/lib/cli/table.rb +65 -0
- package/scripts/lib/cli.rb +94 -0
- package/scripts/lib/codex_adapter.rb +198 -0
- package/scripts/lib/compact_instructions.rb +13 -5
- package/scripts/lib/core_integrity.rb +71 -0
- package/scripts/lib/dashboard_screen.rb +40 -0
- package/scripts/lib/data_boundary.rb +132 -0
- package/scripts/lib/day_summary.rb +30 -16
- package/scripts/lib/doctor_core.rb +114 -38
- package/scripts/lib/doctor_session_ledger.rb +5 -53
- package/scripts/lib/engine_permissions.rb +88 -0
- package/scripts/lib/exec_worktree.rb +24 -21
- package/scripts/lib/feedback_report.rb +1 -1
- package/scripts/lib/graph_edges.rb +137 -0
- package/scripts/lib/graph_file.rb +246 -0
- package/scripts/lib/graph_measure.rb +645 -0
- package/scripts/lib/graph_measure_budget.rb +409 -0
- package/scripts/lib/graph_measure_cohorts.rb +487 -0
- package/scripts/lib/graph_measure_models.rb +413 -0
- package/scripts/lib/graph_measure_report.rb +532 -0
- package/scripts/lib/graph_tree.rb +98 -0
- package/scripts/lib/guarded_append.rb +155 -0
- package/scripts/lib/handoff.rb +40 -13
- package/scripts/lib/harness_adapter.rb +184 -0
- package/scripts/lib/hook_registry.rb +27 -3
- package/scripts/lib/hook_replay.rb +229 -0
- package/scripts/lib/index_entry.rb +62 -0
- package/scripts/lib/index_projection.rb +201 -0
- package/scripts/lib/insights.rb +1 -1
- package/scripts/lib/installer_core.rb +532 -71
- package/scripts/lib/intent_screen.rb +9 -6
- package/scripts/lib/intent_screen_ansi.rb +73 -12
- package/scripts/lib/intent_validator.rb +2 -2
- package/scripts/lib/lock.rb +10 -11
- package/scripts/lib/message_display.rb +377 -173
- package/scripts/lib/meter_watch.rb +185 -0
- package/scripts/lib/node_file.rb +234 -0
- package/scripts/lib/node_ids.rb +99 -0
- package/scripts/lib/node_input.rb +913 -0
- package/scripts/lib/node_input_compatibility.rb +62 -0
- package/scripts/lib/node_ledger.rb +386 -0
- package/scripts/lib/node_progress.rb +153 -0
- package/scripts/lib/node_return.rb +204 -0
- package/scripts/lib/node_worktree.rb +337 -0
- package/scripts/lib/outcome_report.rb +440 -0
- package/scripts/lib/preflight.rb +4 -6
- package/scripts/lib/project_config.rb +46 -0
- package/scripts/lib/project_validator.rb +3 -2
- package/scripts/lib/qmd_sync.rb +8 -7
- package/scripts/lib/ready_set.rb +462 -0
- package/scripts/lib/reference_archive.rb +45 -0
- package/scripts/lib/release_guard.rb +18 -0
- package/scripts/lib/report_screen.rb +1460 -74
- 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_graph.rb +210 -0
- package/scripts/lib/roadmap_migration.rb +95 -0
- package/scripts/lib/roadmap_queue.rb +158 -8
- package/scripts/lib/roadmap_render.rb +150 -0
- package/scripts/lib/roadmap_savepoint.rb +64 -14
- package/scripts/lib/runner_absorb.rb +703 -0
- package/scripts/lib/runner_answer.rb +206 -0
- package/scripts/lib/runner_core.rb +194 -0
- package/scripts/lib/runner_dispatch.rb +525 -0
- package/scripts/lib/runner_policy.rb +191 -0
- package/scripts/lib/runner_proposals.rb +275 -0
- package/scripts/lib/runner_rewind.rb +201 -0
- package/scripts/lib/runner_sweep.rb +231 -0
- package/scripts/lib/runner_until_empty.rb +252 -0
- package/scripts/lib/runner_watch.rb +389 -0
- package/scripts/lib/savepoint.rb +141 -19
- package/scripts/lib/scaffold_intent.rb +6 -3
- package/scripts/lib/screen_paint.rb +555 -0
- package/scripts/lib/screens/dashboard.rb +20 -0
- package/scripts/lib/screens/plan.rb +18 -0
- package/scripts/lib/screens/roadmap.rb +15 -0
- package/scripts/lib/search_index.rb +55 -0
- package/scripts/lib/session_close.rb +30 -28
- package/scripts/lib/session_git.rb +25 -18
- package/scripts/lib/session_ledger.rb +48 -4
- package/scripts/lib/session_usage.rb +190 -0
- package/scripts/lib/sqlite.rb +22 -0
- package/scripts/lib/stop_gate.rb +95 -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 +36 -8
- package/scripts/lib/version_number.rb +48 -0
- package/scripts/lib/work_graph.rb +59 -0
- package/scripts/lib/work_graph_validator.rb +201 -0
- package/scripts/lib/worktree.rb +27 -32
- package/scripts/lib/worktree_sweep.rb +6 -5
- package/scripts/link-suggest +2 -1
- package/scripts/meter-watch +57 -0
- package/scripts/migrate-to-global +1 -1
- package/scripts/new-intent +4 -13
- package/scripts/node-input +92 -0
- package/scripts/node-run +225 -0
- package/scripts/node-transition +291 -0
- package/scripts/outcome-report +74 -0
- package/scripts/plastic-lock +42 -33
- package/scripts/promote-session-item +3 -2
- package/scripts/read-config +53 -9
- package/scripts/ready-set +126 -0
- package/scripts/release-check +123 -0
- package/scripts/report-screen +192 -30
- package/scripts/roadmap-graph +119 -0
- package/scripts/roadmap-savepoint +7 -0
- package/scripts/runner +581 -0
- package/scripts/savepoint-note +11 -9
- package/scripts/session-commit +2 -1
- package/scripts/session-usage +56 -0
- package/scripts/skill-lint +115 -6
- package/scripts/spawn-preamble +2 -2
- package/scripts/update.rb +25 -4
- package/scripts/validate-work-graph +39 -0
- package/scripts/verify-intent +3 -2
- package/scripts/write-handoff +2 -1
- package/templates/agents.md +7 -7
- package/templates/config.yml +16 -9
- package/templates/dashboard-screen.md +22 -0
- package/templates/display-fixture.md +21 -0
- package/templates/graph.md +16 -0
- package/templates/index.md +1 -1
- package/templates/intent-screen.md +1 -1
- package/templates/node-decision.md +11 -0
- package/templates/node-research.md +13 -0
- package/templates/node-verify.md +13 -0
- package/templates/node-work.md +22 -0
- package/templates/outcome.md +15 -2
- package/templates/project.yml +1 -1
- package/templates/render.css +10 -0
- package/templates/report-plan.md +15 -0
- package/templates/report-roadmap-delivered.md +10 -0
- package/templates/report-roadmap-plan.md +9 -0
- package/templates/report-roadmap-state.md +9 -0
- package/templates/report-state.md +1 -1
- package/templates/roadmap.md +13 -0
- package/bin/plastic.js +0 -70
- package/scripts/lib/bridge.rb +0 -116
- package/skills/agent-advisor/SKILL.md +0 -92
- package/skills/auto/SKILL.md +0 -295
- package/skills/auto/evals/evals.json +0 -255
- package/skills/auto/references/end-tail.md +0 -66
- package/skills/auto/references/human-report-contract.md +0 -78
- package/skills/conventions/SKILL.md +0 -29
- package/skills/dashboard/SKILL.md +0 -169
- 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 -299
- 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 -217
- package/skills/intent-continuing/SKILL.md +0 -154
- package/skills/intent-continuing/references/board-fill.md +0 -43
- package/skills/intent-continuing/references/boarding-matrix.md +0 -34
- 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 -164
- 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 -173
- package/skills/intent-ending/evals/evals.json +0 -74
- package/skills/intent-executing/SKILL.md +0 -170
- package/skills/intent-executing/evals/evals.json +0 -66
- package/skills/intent-executing/implementer-prompt.md +0 -42
- package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
- package/skills/intent-speccing/SKILL.md +0 -130
- 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 -337
- package/skills/releasing/references/deprecations.md +0 -60
- package/skills/releasing/references/promotion-and-tagging.md +0 -66
- package/skills/releasing/references/release-lines.md +0 -105
- package/skills/roadmap/SKILL.md +0 -64
- package/skills/roadmap/references/file-format.md +0 -124
- package/skills/roadmap/references/operations.md +0 -112
- package/skills/rollback/SKILL.md +0 -91
- package/skills/tutorial/SKILL.md +0 -65
- 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}/lifecycle-and-savepoints.md +0 -0
- /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# Roadmap File Format
|
|
2
|
-
|
|
3
|
-
## Location
|
|
4
|
-
|
|
5
|
-
`roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives. For the global tier
|
|
6
|
-
that is `~/.plastic/roadmaps/{slug}.md` (beside `~/.plastic/INDEX.md`); for any project it is
|
|
7
|
-
that project's root, `~/.plastic/projects/{slug}/roadmaps/{slug}.md` (beside that project's
|
|
8
|
-
`INDEX.md` and `project.yml`). `roadmaps/` never sits inside `store/`: `store/` holds intent
|
|
9
|
-
directories, not project artifacts. Create the `roadmaps/` directory the first time a tier gets a
|
|
10
|
-
roadmap.
|
|
11
|
-
|
|
12
|
-
`roadmaps/` lists only live (open or in-flight) roadmaps. Once a roadmap's `## Goal` is reached,
|
|
13
|
-
its file moves to `roadmaps/archived/{slug}.md` (see Close/archive in `operations.md`); the
|
|
14
|
-
`archived/` subdirectory is scaffolded once, alongside `roadmaps/`, with a `.gitkeep`. Its
|
|
15
|
-
name-paired ledger, `roadmaps/{slug}.savepoint.md` (see Savepoint ledger below), moves alongside
|
|
16
|
-
it in the same Close/archive step.
|
|
17
|
-
|
|
18
|
-
## The four sections (in order)
|
|
19
|
-
|
|
20
|
-
1. **Title/meta header** — `# Roadmap: <name>` plus a one-line meta sentence naming what the
|
|
21
|
-
roadmap delivers and which tier (project or global) it lives in.
|
|
22
|
-
2. **`## Goal`** — a checkable prose condition: one or a few sentences a human or coordinator reads
|
|
23
|
-
to decide the roadmap is done. Not an executable checker, not a list of tasks.
|
|
24
|
-
3. **`## Batches`** — ordered batches (`### Batch 1`, `### Batch 2`, ...). Entries inside a batch
|
|
25
|
-
are parallel-safe (can be dispatched together); batches run top to bottom, sequentially (batch 2
|
|
26
|
-
does not start until batch 1's entries are no longer `queued`/`delivering`). A roadmap written
|
|
27
|
-
before owner ruling 145 may instead use `## Waves` / `### Wave N`; both headings are accepted
|
|
28
|
-
when reading, but every new roadmap is scaffolded with `## Batches`, and an existing roadmap
|
|
29
|
-
file's heading is never renamed to migrate it.
|
|
30
|
-
4. **`## Log`** — append-only, dated, one line per event. Newest entry at the bottom. Never edit or
|
|
31
|
-
remove an existing log line.
|
|
32
|
-
|
|
33
|
-
## Entry line shape
|
|
34
|
-
|
|
35
|
-
One line per intent, inside its batch (or wave, on a roadmap still using the legacy heading), as a
|
|
36
|
-
Markdown checkbox:
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
- [x] <intent-id> <title> — delivered
|
|
40
|
-
- [ ] <intent-id> <title> — <status>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
`<intent-id>` and `<title>` match the intent's `INDEX.md` entry (terse, not a summary). The
|
|
44
|
-
checkbox is checked (`[x]`) once `<status>` is `delivered`, unchecked (`[ ]`) for every other
|
|
45
|
-
status. The checkbox is a rendering of the mirrored status token, not a second piece of state: a
|
|
46
|
-
human scanning the file sees at a glance what shipped (checked) and what has not (unchecked),
|
|
47
|
-
while the trailing token still carries the precise state (`queued`/`delivering`/`blocked`/
|
|
48
|
-
`abandoned`) when unchecked.
|
|
49
|
-
|
|
50
|
-
## Status vocabulary
|
|
51
|
-
|
|
52
|
-
`queued` | `delivering` | `delivered` | `abandoned` | `blocked`
|
|
53
|
-
|
|
54
|
-
Status is a **mirror** of `INDEX.md`. `INDEX.md` is the single writer of intent status; on any
|
|
55
|
-
conflict INDEX wins and the roadmap entry (both its token and its checkbox) is corrected to match
|
|
56
|
-
it. The roadmap never sets a status that INDEX does not already reflect.
|
|
57
|
-
|
|
58
|
-
## Log line shape
|
|
59
|
-
|
|
60
|
-
One line per event, starting `YYYY-MM-DD HH:MM UTC` (human-readable, sortable, zone-explicit so
|
|
61
|
-
same-day parallel deliveries can still be ordered), in plain-language EM-to-CTO voice: what shipped
|
|
62
|
-
and why it matters to a non-expert reader, no jargon or internal codenames, ending with a link to
|
|
63
|
-
that entry-intent's `outcome.md`:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
- <YYYY-MM-DD HH:MM UTC> <one plain-language sentence: what shipped, its impact> — see store/<id>--<slug>/outcome.md
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
The log line never restates `outcome.md` detail; it points at it (lossless-by-reference). This
|
|
70
|
-
complements, and does not replace, `INDEX.md`'s `## Completed` section or `CHANGELOG.md`.
|
|
71
|
-
|
|
72
|
-
## Savepoint ledger
|
|
73
|
-
|
|
74
|
-
`roadmaps/{slug}.savepoint.md` is the name-paired sibling of `roadmaps/{slug}.md`: the machine
|
|
75
|
-
counterpart to the human `## Log`, moving to `roadmaps/archived/{slug}.savepoint.md` alongside its
|
|
76
|
-
roadmap on close (see Close/archive). It is created lazily by the first `append` call; there is no
|
|
77
|
-
template to scaffold.
|
|
78
|
-
|
|
79
|
-
Line shape, one event per line, append-only, newest at the bottom:
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
<UTC-iso8601> <event> <detail>
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Two-space fields, mirroring the intent-dir cycle-step ledger (`savepoint.md`). The controlled event
|
|
86
|
-
vocabulary: `created`, `dispatched`, `parked`, `merged`, `release`, `handoff`, `closed`, and
|
|
87
|
-
optionally `added`, `reordered`, `wave`, `batch`. The `(event, detail)` pair is the idempotency key,
|
|
88
|
-
so re-appending the same pair is a no-op.
|
|
89
|
-
|
|
90
|
-
`## Log` and the ledger record the same events in two voices: the Log is the dated, one-sentence,
|
|
91
|
-
EM-to-CTO-plain-language record a human reads cold; the ledger is the terse, machine-timestamped,
|
|
92
|
-
controlled-vocabulary record a coordinator reads at a glance. Both are append-only; neither edits
|
|
93
|
-
the other.
|
|
94
|
-
|
|
95
|
-
The ledger is derived and rebuildable (`ruby ~/.plastic/scripts/roadmap-savepoint rebuild --roadmap
|
|
96
|
-
roadmaps/{slug}.md`, reconstructing it from `## Log`), never a status source: `INDEX.md` stays the
|
|
97
|
-
single writer of intent status, exactly as for the roadmap file itself.
|
|
98
|
-
|
|
99
|
-
## Worked example
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
# Roadmap: Stable 1.0
|
|
103
|
-
|
|
104
|
-
Delivery-side collection of intents that close out the pre-1.0 hardening pass, plastic project store.
|
|
105
|
-
|
|
106
|
-
## Goal
|
|
107
|
-
All intents below are delivered, the suite is green, and a 1.0.0 release is cut.
|
|
108
|
-
|
|
109
|
-
## Batches
|
|
110
|
-
Entries in a batch are parallel-safe; batches run top to bottom. The checkbox tracks delivered/not;
|
|
111
|
-
the token after the em-dash carries the precise mirrored status (queued | delivering | delivered |
|
|
112
|
-
abandoned | blocked); INDEX wins on any conflict.
|
|
113
|
-
|
|
114
|
-
### Batch 1
|
|
115
|
-
- [x] 121 Fix bash gate redirect parsing — delivered
|
|
116
|
-
- [ ] 130 Proportional cycle tiers — delivering
|
|
117
|
-
|
|
118
|
-
### Batch 2
|
|
119
|
-
- [x] 124 Roadmap feature — delivered
|
|
120
|
-
|
|
121
|
-
## Log
|
|
122
|
-
- 2026-07-06 14:32 UTC Shipped the bash-gate redirect fix so quoted arrows and heredoc trailers
|
|
123
|
-
stop blocking legitimate commits — see store/121--fix-bash-gate-redirect-parsing/outcome.md.
|
|
124
|
-
```
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# Roadmap Operations
|
|
2
|
-
|
|
3
|
-
All six verbs operate on the Markdown file directly (Read/Edit). No helper script exists or is
|
|
4
|
-
needed; the file is small and the edits are mechanical.
|
|
5
|
-
|
|
6
|
-
**Human-comprehension goal.** Every operation below should leave the file such that a cold reader
|
|
7
|
-
(no INDEX.md, no intent directories open) can answer "what's shipped, what's running, what's
|
|
8
|
-
next" in under a minute, just from this one file.
|
|
9
|
-
|
|
10
|
-
## Create
|
|
11
|
-
|
|
12
|
-
1. Pick a `slug` (kebab-case, descriptive) and a `title`.
|
|
13
|
-
2. Resolve the tier root: the directory that holds `INDEX.md` (a project's root, beside
|
|
14
|
-
`project.yml`, or `~/.plastic/` for the global tier). `roadmaps/` is always a sibling of
|
|
15
|
-
`INDEX.md`, never inside `store/`. Create `roadmaps/` there if it does not exist yet.
|
|
16
|
-
3. Copy `templates/roadmap.md` to `roadmaps/{slug}.md`.
|
|
17
|
-
4. Fill the header (`# Roadmap: <title>` + the one-line meta) and write a real `## Goal` prose
|
|
18
|
-
condition.
|
|
19
|
-
5. Add at least one `## Batches` batch with real entries (see Add / reorder below), each entry's
|
|
20
|
-
status mirroring that intent's current `INDEX.md` status.
|
|
21
|
-
6. Append the first `## Log` line, a short `YYYY-MM-DD HH:MM UTC`-prefixed plain-language note
|
|
22
|
-
that the roadmap was created.
|
|
23
|
-
7. Append the ledger event (derived, idempotent, safe to re-run; never writes INDEX or roadmap
|
|
24
|
-
status; creates `roadmaps/<slug>.savepoint.md` lazily): `ruby ~/.plastic/scripts/roadmap-savepoint
|
|
25
|
-
append --roadmap roadmaps/<slug>.md --event created --detail "<slug>: <title>"`.
|
|
26
|
-
8. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
|
|
27
|
-
never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
|
|
28
|
-
|
|
29
|
-
## Add / reorder entries
|
|
30
|
-
|
|
31
|
-
- **Add**: append an entry line (`- <intent-id> <title> — <status>`) to the target batch. Pick the
|
|
32
|
-
intent's title and status straight from `INDEX.md`.
|
|
33
|
-
- **New batch**: add a new `### Batch N` heading after the last batch; entries in it are gated
|
|
34
|
-
behind every earlier batch's entries leaving `queued`/`delivering`. A roadmap still on the legacy
|
|
35
|
-
`## Waves` heading keeps using `### Wave N` for a new entry; never migrate an existing roadmap's
|
|
36
|
-
heading to add one.
|
|
37
|
-
- **Reorder**: move an entry line to a different batch, or move a `### Batch` (or, on a legacy
|
|
38
|
-
roadmap, `### Wave`) heading (with its entries) earlier or later. Reordering never changes an
|
|
39
|
-
entry's status; it only changes when the entry is eligible to run.
|
|
40
|
-
- After any add/reorder, append a `## Log` line describing the change (e.g.
|
|
41
|
-
`- <YYYY-MM-DD HH:MM UTC> added 132 to batch 2`).
|
|
42
|
-
- Append the ledger event (derived, idempotent, safe to re-run; never writes INDEX or roadmap
|
|
43
|
-
status): `ruby ~/.plastic/scripts/roadmap-savepoint append --roadmap roadmaps/<slug>.md --event
|
|
44
|
-
added --detail "<id> to batch N"` for an add, or `--event reordered` for a reorder (describe the
|
|
45
|
-
move in `<detail>`).
|
|
46
|
-
- Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
|
|
47
|
-
never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
|
|
48
|
-
|
|
49
|
-
## Sync status mirror
|
|
50
|
-
|
|
51
|
-
1. Read the intent's real status from `INDEX.md` (`## Active`, `## Future`, `## Completed`, or
|
|
52
|
-
`## Abandoned`).
|
|
53
|
-
2. Compare to the roadmap entry's `<status>` token.
|
|
54
|
-
3. If they differ, **INDEX wins**: rewrite the roadmap entry's status token to match INDEX, and
|
|
55
|
-
flip its checkbox in the same edit (`[x]` when the new status is `delivered`, `[ ]` otherwise).
|
|
56
|
-
Never edit INDEX.md from the roadmap skill; the roadmap is a mirror, not a second writer.
|
|
57
|
-
4. Append a `## Log` line recording the change. When the new status is `delivered`, write the
|
|
58
|
-
one-line EM-to-CTO entry described in `file-format.md` (date, what shipped and its impact in
|
|
59
|
-
plain language, then a link to that intent's `outcome.md`). For other transitions, write a
|
|
60
|
-
short dated plain-language line (no codenames, no jargon).
|
|
61
|
-
5. Append the ledger event, only when the status token actually changed (derived, idempotent,
|
|
62
|
-
never writes INDEX or roadmap status): map the new status to its mechanized event (`delivered`
|
|
63
|
-
-> `merged`, `delivering` -> `dispatched`, `blocked`/`abandoned` -> `parked`), then `ruby
|
|
64
|
-
~/.plastic/scripts/roadmap-savepoint append --roadmap roadmaps/<slug>.md --event <event>
|
|
65
|
-
--detail "<intent-id>"` (add a sha in `<detail>` when one is known).
|
|
66
|
-
6. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
|
|
67
|
-
never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
|
|
68
|
-
|
|
69
|
-
## Append a log line
|
|
70
|
-
|
|
71
|
-
- One line per event, starting `YYYY-MM-DD HH:MM UTC`, appended at the bottom of `## Log`. Never
|
|
72
|
-
edit or delete an existing line (append-only).
|
|
73
|
-
- Every line is plain language a non-expert can read, never a codename or a raw `field -> value`.
|
|
74
|
-
A delivery event follows the EM-to-CTO one-line shape with an `outcome.md` link (see
|
|
75
|
-
`file-format.md`); bookkeeping events (created, an intent added to a batch, a batch completed, a
|
|
76
|
-
roadmap closed) are short dated plain-language lines.
|
|
77
|
-
- Append the matching ledger event (derived, idempotent, never writes INDEX or roadmap status):
|
|
78
|
-
when the line records a release cut, `ruby ~/.plastic/scripts/roadmap-savepoint append --roadmap
|
|
79
|
-
roadmaps/<slug>.md --event release --detail "<version>"`; otherwise append the mechanized event
|
|
80
|
-
matching the bookkeeping line just written (see the per-verb event mapping on this page).
|
|
81
|
-
- Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
|
|
82
|
-
never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
|
|
83
|
-
|
|
84
|
-
## Read / consume
|
|
85
|
-
|
|
86
|
-
- A human reading the file gets the current picture directly: `## Goal` for the target, `## Batches`
|
|
87
|
-
(or, on a roadmap still using the legacy `## Waves` heading, that section instead) for what is
|
|
88
|
-
queued/delivering/delivered per batch (checkboxes give the shipped/not-shipped view at a glance),
|
|
89
|
-
`## Log` for a one-line, plain-language history with a link into each intent's `outcome.md` for
|
|
90
|
-
detail.
|
|
91
|
-
- A future coordinator (for example, an auto-mode dispatcher) reads the grouping section
|
|
92
|
-
(`## Batches`, or legacy `## Waves`) top to bottom: a batch is eligible to dispatch once every
|
|
93
|
-
entry in the previous batch is no longer `queued`/`delivering`; within an eligible batch, entries
|
|
94
|
-
still `queued` are parallel-dispatchable. Always re-sync against `INDEX.md` before dispatch
|
|
95
|
-
decisions, since INDEX is the source of truth.
|
|
96
|
-
|
|
97
|
-
## Close / archive
|
|
98
|
-
|
|
99
|
-
1. Confirm the roadmap's `## Goal` prose condition is met (every entry `delivered` or explicitly
|
|
100
|
-
`abandoned` with a recorded reason, plus whatever else the goal states).
|
|
101
|
-
2. Create `roadmaps/archived/` beside `roadmaps/` (both siblings of `INDEX.md`) if it does not
|
|
102
|
-
exist yet.
|
|
103
|
-
3. Append the ledger closed event, while the roadmap is still at its live path (derived,
|
|
104
|
-
idempotent, never writes INDEX or roadmap status): `ruby ~/.plastic/scripts/roadmap-savepoint
|
|
105
|
-
append --roadmap roadmaps/<slug>.md --event closed --detail "<slug>"`.
|
|
106
|
-
4. Move BOTH files: `roadmaps/{slug}.md` -> `roadmaps/archived/{slug}.md` AND
|
|
107
|
-
`roadmaps/{slug}.savepoint.md` -> `roadmaps/archived/{slug}.savepoint.md`. `roadmaps/` itself
|
|
108
|
-
then lists only live (open or in-flight) roadmaps.
|
|
109
|
-
5. Append the final `## Log` line before or as part of the move:
|
|
110
|
-
`- <YYYY-MM-DD HH:MM UTC> roadmap closed`.
|
|
111
|
-
6. Refresh the QMD index for this roadmap (no-op when QMD is absent), in the background so it
|
|
112
|
-
never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <roadmaps-dir> --async`.
|
package/skills/rollback/SKILL.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-rollback
|
|
3
|
-
description: Use when the user wants to see their Plastic version history or roll back to a previously-installed version after a bad release. Manages the local, append-only versions.json ledger and steps between versions the user has actually run. For moving to a brand-new release, use plastic-update instead.
|
|
4
|
-
user-invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Plastic Rollback: local version time-machine
|
|
8
|
-
|
|
9
|
-
## When to Use
|
|
10
|
-
- "show plastic versions", "version history", "what versions have I run"
|
|
11
|
-
- "roll back plastic", "downgrade", "go back to the version that worked", "revert plastic"
|
|
12
|
-
- A new version broke something and the user wants their last known-good build
|
|
13
|
-
|
|
14
|
-
For upgrading to a **new** release, use `plastic-update`. This skill only navigates
|
|
15
|
-
versions you have **already installed**, the ones recorded in the ledger.
|
|
16
|
-
|
|
17
|
-
## Read-only by default
|
|
18
|
-
|
|
19
|
-
A flagless run only prints the version history table. It never switches, never prompts,
|
|
20
|
-
and never offers to keep going further back. Switching a version always needs an
|
|
21
|
-
explicit target, named with `--version`.
|
|
22
|
-
|
|
23
|
-
## Channel rule
|
|
24
|
-
|
|
25
|
-
`rollback` restores whichever build you name from the ledger, it does not take a channel
|
|
26
|
-
flag for the target. The pinned `<channel>` below is only the npx invocation itself:
|
|
27
|
-
derive it from `~/.plastic/VERSION` the same way as the other lifecycle skills,
|
|
28
|
-
`-alpha` to `@alpha`, `-beta` to `@beta`, otherwise `@latest`.
|
|
29
|
-
|
|
30
|
-
## The ledger
|
|
31
|
-
|
|
32
|
-
`~/.plastic/versions.json` is an **append-only JSONL** ledger, one line per version
|
|
33
|
-
change, never modified or deleted:
|
|
34
|
-
|
|
35
|
-
```json
|
|
36
|
-
{"version":"1.0.0-alpha.17","action":"install","at":"..."}
|
|
37
|
-
{"version":"1.0.0-alpha.18","action":"update","at":"..."}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
`action` is one of `install`, `reinstall`, `update`, `downgrade` (derived from version
|
|
41
|
-
direction; the channel is derived from the version string, never stored). It is a
|
|
42
|
-
troubleshooting record.
|
|
43
|
-
|
|
44
|
-
## Procedure
|
|
45
|
-
|
|
46
|
-
### Show history (read-only, no switch)
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
npx -y @zalom/plastic@<channel> rollback
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Prints the table with the currently-installed version marked. Never switches, never
|
|
53
|
-
prompts, no matter what the last recorded action was.
|
|
54
|
-
|
|
55
|
-
### Switch to a specific version
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
npx -y @zalom/plastic@<channel> rollback --version 1.0.0-alpha.15
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
The only way to actually switch. The target must be a version you have actually run (the
|
|
62
|
-
ledger); the direction (upgrade or downgrade) is derived automatically by comparing the
|
|
63
|
-
target to the installed version.
|
|
64
|
-
|
|
65
|
-
`--downgrade --version V` and `--upgrade --version V` are accepted as explicit-target
|
|
66
|
-
synonyms of `--version V`, the direction flag is descriptive only:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
npx -y @zalom/plastic@<channel> rollback --downgrade --version 1.0.0-alpha.15
|
|
70
|
-
npx -y @zalom/plastic@<channel> rollback --upgrade --version 1.0.0-alpha.18
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
A bare `--downgrade` or `--upgrade` with no `--version` is an error: it prints a message
|
|
74
|
-
asking for an explicit target and performs no switch.
|
|
75
|
-
|
|
76
|
-
### After any change
|
|
77
|
-
|
|
78
|
-
Run `plastic-doctor` to confirm health, then emit the reporting block and suggest
|
|
79
|
-
`/clear` so the session picks up the swapped conventions:
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
Plastic rollback (<channel>)
|
|
83
|
-
Command: npx -y @zalom/plastic@<channel> rollback <flags>
|
|
84
|
-
Version: <before> -> <after>
|
|
85
|
-
Doctor: <summary or "all clear">
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Notes
|
|
89
|
-
- The ledger is **never** edited or pruned, it is the audit trail.
|
|
90
|
-
- Switching cannot un-migrate a store-format change; if a warning appears, surface it to
|
|
91
|
-
the user rather than forcing the switch.
|
package/skills/tutorial/SKILL.md
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-tutorial
|
|
3
|
-
description: >-
|
|
4
|
-
Teach a new user how Plastic works through one of three hands-on tracks: deliver a first
|
|
5
|
-
intent stage by stage, hand delivery to the agent in auto mode, or grow a founding intent
|
|
6
|
-
into a small project with a roadmap. Use when the user says "tutorial", "teach me Plastic",
|
|
7
|
-
"walk me through Plastic", "how do I use Plastic", or asks what Plastic can actually do
|
|
8
|
-
before trying it on real work.
|
|
9
|
-
user-invocable: true
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Plastic Tutorial
|
|
13
|
-
|
|
14
|
-
An interactive coach, not an automator. It walks one of three tracks, one step at a time, and
|
|
15
|
-
keeps no state of its own: the intent being used for the walkthrough is the progress bar.
|
|
16
|
-
|
|
17
|
-
## The three tracks
|
|
18
|
-
|
|
19
|
-
This is the one menu in the whole skill. Offer it, then route into the picked track's
|
|
20
|
-
reference. Every checkpoint inside a track is prose, never another menu.
|
|
21
|
-
|
|
22
|
-
1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
|
|
23
|
-
`references/track-1-guided.md`.
|
|
24
|
-
2. **Auto**: hand delivery to the agent and watch the record and reports as it works. Routes to
|
|
25
|
-
`references/track-2-auto.md`.
|
|
26
|
-
3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
|
|
27
|
-
intents, and plan a delivery batch with a roadmap. Routes to
|
|
28
|
-
`references/track-3-projects-and-roadmaps.md`.
|
|
29
|
-
|
|
30
|
-
If the user names what they want instead of picking a number ("show me auto mode", "I want a
|
|
31
|
-
roadmap", "walk me through my first intent"), route straight to the matching track without
|
|
32
|
-
showing the menu again.
|
|
33
|
-
|
|
34
|
-
## The coach contract
|
|
35
|
-
|
|
36
|
-
Narrate one step at a time: say what the next station does, then hand control back so the
|
|
37
|
-
user types the real command themselves. After they run it, look at what appeared (a file, a
|
|
38
|
-
ledger line, a report) and debrief in plain words before moving to the next station. Never
|
|
39
|
-
run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
|
|
40
|
-
does not do the work.
|
|
41
|
-
|
|
42
|
-
Keep no new state. The intent's own lifecycle stage and savepoint are the only progress
|
|
43
|
-
record. This skill never writes a "tutorial progress" file of its own.
|
|
44
|
-
|
|
45
|
-
## The resume rule
|
|
46
|
-
|
|
47
|
-
To pause, the user says "continue the tutorial." Read the walkthrough intent's current stage
|
|
48
|
-
and savepoint (for track 3, check which project-scaffolding steps are already on disk) and
|
|
49
|
-
resume at the matching station. Do not restart from station one, and do not ask the user to
|
|
50
|
-
remember where they left off.
|
|
51
|
-
|
|
52
|
-
## Routing table
|
|
53
|
-
|
|
54
|
-
| Trigger | Reference |
|
|
55
|
-
|---|---|
|
|
56
|
-
| User picks "guided", or names their first intent, a first delivery, or learning the stages one at a time | `references/track-1-guided.md` |
|
|
57
|
-
| User picks "auto", or says "hand it to the agent", "run the whole thing", "show me auto mode" | `references/track-2-auto.md` |
|
|
58
|
-
| User picks "projects and roadmaps", or says "start a project", "I want a roadmap", "plan a batch of work" | `references/track-3-projects-and-roadmaps.md` |
|
|
59
|
-
|
|
60
|
-
## Before any track
|
|
61
|
-
|
|
62
|
-
Every track opens with the same two checks: run `/plastic-update` first (`$plastic-update` on
|
|
63
|
-
Codex), so the walkthrough matches what is actually installed, and work in a sandbox (a
|
|
64
|
-
throwaway repo, or a global-store intent) so nothing real is touched by mistake. Each reference
|
|
65
|
-
restates this briefly; do not skip it even if the user seems experienced.
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-tutorial",
|
|
3
|
-
"notes": "Intent 166, Phase 1. Scopes: triggering (1-6, should and should-not with near-misses) and track routing (7-10, one case per track plus a direct-menu case). plastic-tutorial is a natural-language guided command with no backing Ruby test, so every assertion carries result: expect-pass pending a real observed run, per the intent-speccing evals.json convention. Phase 2 (post-164) can tighten these into observed pass/fail after a paired run.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "triggering",
|
|
8
|
-
"set": "train",
|
|
9
|
-
"prompt": "I want a tutorial on how Plastic works.",
|
|
10
|
-
"expected_output": "Activates plastic-tutorial and offers the three-track menu.",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "code",
|
|
15
|
-
"check": "router CHOICE == plastic-tutorial",
|
|
16
|
-
"result": "expect-pass"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": 2,
|
|
22
|
-
"scope": "triggering",
|
|
23
|
-
"set": "train",
|
|
24
|
-
"prompt": "Teach me Plastic from scratch.",
|
|
25
|
-
"expected_output": "Activates plastic-tutorial and offers the three-track menu.",
|
|
26
|
-
"files": [],
|
|
27
|
-
"assertions": [
|
|
28
|
-
{
|
|
29
|
-
"type": "code",
|
|
30
|
-
"check": "router CHOICE == plastic-tutorial",
|
|
31
|
-
"result": "expect-pass"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 3,
|
|
37
|
-
"scope": "triggering",
|
|
38
|
-
"set": "train",
|
|
39
|
-
"prompt": "Walk me through Plastic before I try it on my real project.",
|
|
40
|
-
"expected_output": "Activates plastic-tutorial and offers the three-track menu.",
|
|
41
|
-
"files": [],
|
|
42
|
-
"assertions": [
|
|
43
|
-
{
|
|
44
|
-
"type": "code",
|
|
45
|
-
"check": "router CHOICE == plastic-tutorial",
|
|
46
|
-
"result": "expect-pass"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": 4,
|
|
52
|
-
"scope": "triggering",
|
|
53
|
-
"set": "validation",
|
|
54
|
-
"prompt": "How do I use Plastic day to day?",
|
|
55
|
-
"expected_output": "Activates plastic-tutorial and offers the three-track menu.",
|
|
56
|
-
"files": [],
|
|
57
|
-
"assertions": [
|
|
58
|
-
{
|
|
59
|
-
"type": "code",
|
|
60
|
-
"check": "router CHOICE == plastic-tutorial",
|
|
61
|
-
"result": "expect-pass"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"id": 5,
|
|
67
|
-
"scope": "triggering",
|
|
68
|
-
"set": "validation",
|
|
69
|
-
"prompt": "I have never touched this tool before. What can it actually do for me before I commit real work to it?",
|
|
70
|
-
"expected_output": "Activates plastic-tutorial; an indirect trigger that names neither the skill nor the word tutorial.",
|
|
71
|
-
"files": [],
|
|
72
|
-
"assertions": [
|
|
73
|
-
{
|
|
74
|
-
"type": "code",
|
|
75
|
-
"check": "router CHOICE == plastic-tutorial",
|
|
76
|
-
"result": "expect-pass"
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"id": 6,
|
|
82
|
-
"scope": "triggering",
|
|
83
|
-
"set": "train",
|
|
84
|
-
"prompt": "Create an intent for adding a search feature.",
|
|
85
|
-
"expected_output": "Does NOT activate plastic-tutorial; activates plastic-intent-creating (a near-miss that shares the word intent but starts real work, not a walkthrough).",
|
|
86
|
-
"files": [],
|
|
87
|
-
"assertions": [
|
|
88
|
-
{
|
|
89
|
-
"type": "code",
|
|
90
|
-
"check": "router CHOICE != plastic-tutorial",
|
|
91
|
-
"result": "expect-pass"
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"id": 7,
|
|
97
|
-
"scope": "triggering",
|
|
98
|
-
"set": "validation",
|
|
99
|
-
"prompt": "Just run the whole thing for me, I do not want to steer any of it.",
|
|
100
|
-
"expected_output": "Does NOT activate plastic-tutorial; activates plastic-auto (a near-miss that describes autonomous delivery of real work, not a walkthrough of how auto works).",
|
|
101
|
-
"files": [],
|
|
102
|
-
"assertions": [
|
|
103
|
-
{
|
|
104
|
-
"type": "code",
|
|
105
|
-
"check": "router CHOICE != plastic-tutorial",
|
|
106
|
-
"result": "expect-pass"
|
|
107
|
-
}
|
|
108
|
-
]
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
"id": 8,
|
|
112
|
-
"scope": "track-routing",
|
|
113
|
-
"set": "train",
|
|
114
|
-
"prompt": "Inside the tutorial menu: show me auto mode.",
|
|
115
|
-
"expected_output": "Routes to track 2 (references/track-2-auto.md), the auto handover track.",
|
|
116
|
-
"files": [],
|
|
117
|
-
"assertions": [
|
|
118
|
-
{
|
|
119
|
-
"type": "code",
|
|
120
|
-
"check": "TRACK == track-2-auto",
|
|
121
|
-
"result": "expect-pass"
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"id": 9,
|
|
127
|
-
"scope": "track-routing",
|
|
128
|
-
"set": "train",
|
|
129
|
-
"prompt": "Inside the tutorial menu: I want a roadmap.",
|
|
130
|
-
"expected_output": "Routes to track 3 (references/track-3-projects-and-roadmaps.md), the projects and roadmaps track.",
|
|
131
|
-
"files": [],
|
|
132
|
-
"assertions": [
|
|
133
|
-
{
|
|
134
|
-
"type": "code",
|
|
135
|
-
"check": "TRACK == track-3-projects-and-roadmaps",
|
|
136
|
-
"result": "expect-pass"
|
|
137
|
-
}
|
|
138
|
-
]
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"id": 10,
|
|
142
|
-
"scope": "track-routing",
|
|
143
|
-
"set": "validation",
|
|
144
|
-
"prompt": "Inside the tutorial menu: start a project.",
|
|
145
|
-
"expected_output": "Routes to track 3 (references/track-3-projects-and-roadmaps.md), the projects and roadmaps track.",
|
|
146
|
-
"files": [],
|
|
147
|
-
"assertions": [
|
|
148
|
-
{
|
|
149
|
-
"type": "code",
|
|
150
|
-
"check": "TRACK == track-3-projects-and-roadmaps",
|
|
151
|
-
"result": "expect-pass"
|
|
152
|
-
}
|
|
153
|
-
]
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"id": 11,
|
|
157
|
-
"scope": "track-routing",
|
|
158
|
-
"set": "validation",
|
|
159
|
-
"prompt": "Walk me through my first intent, one stage at a time.",
|
|
160
|
-
"expected_output": "Routes to track 1 (references/track-1-guided.md), the guided delivery track.",
|
|
161
|
-
"files": [],
|
|
162
|
-
"assertions": [
|
|
163
|
-
{
|
|
164
|
-
"type": "code",
|
|
165
|
-
"check": "TRACK == track-1-guided",
|
|
166
|
-
"result": "expect-pass"
|
|
167
|
-
}
|
|
168
|
-
]
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
"id": 12,
|
|
172
|
-
"scope": "track-routing",
|
|
173
|
-
"set": "train",
|
|
174
|
-
"prompt": "Tutorial. (No further detail given.)",
|
|
175
|
-
"expected_output": "Activates plastic-tutorial and presents the three-track menu itself, since no track was named; this is the one case where the menu is the expected output rather than a routed track.",
|
|
176
|
-
"files": [],
|
|
177
|
-
"assertions": [
|
|
178
|
-
{
|
|
179
|
-
"type": "human",
|
|
180
|
-
"check": "the reply shows the three-track menu (guided, auto, projects and roadmaps) and does not jump into any one track uninvited",
|
|
181
|
-
"result": "expect-pass"
|
|
182
|
-
}
|
|
183
|
-
]
|
|
184
|
-
}
|
|
185
|
-
]
|
|
186
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-uninstall
|
|
3
|
-
description: Use when the user wants to remove Plastic from an agent. Runs the manifest-driven uninstaller (removes skills, hooks, statusline, and any legacy plugin layout), reports exactly what was removed and what was left behind, then gives verification steps. The intent store always stays.
|
|
4
|
-
user-invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Uninstall Plastic
|
|
8
|
-
|
|
9
|
-
The installer tracks every file it writes in a manifest, so uninstall is exact and
|
|
10
|
-
leaves no orphans. Prefer running it through the CLI; this skill wraps the same
|
|
11
|
-
underlying uninstaller and adds reporting + verification.
|
|
12
|
-
|
|
13
|
-
## Channel rule
|
|
14
|
-
|
|
15
|
-
If Plastic is installed, derive `<channel>` from `~/.plastic/VERSION`: a version containing
|
|
16
|
-
`-alpha` means `@alpha`, `-beta` means `@beta`, otherwise `@latest`. If not installed,
|
|
17
|
-
default to `@latest`. The user can always override with `--alpha` / `--beta` / `--latest`.
|
|
18
|
-
|
|
19
|
-
## Procedure
|
|
20
|
-
|
|
21
|
-
### Step 1: Run the uninstaller
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npx -y @zalom/plastic@<channel> uninstall --claude
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
(Use `--codex` / `--hermes` / `--all` to target other agents. `bunx -y @zalom/plastic@<channel> uninstall --claude` works too.)
|
|
28
|
-
|
|
29
|
-
This removes, for the targeted agent:
|
|
30
|
-
- all `~/.claude/skills/plastic-*/` skills
|
|
31
|
-
- all `~/.claude/hooks/plastic-*` hooks (and restores any saved original statusline)
|
|
32
|
-
- the `~/.claude/plastic/` state dir + manifest
|
|
33
|
-
- any **legacy** plugin layout: `plugins/marketplaces/plastic`, `plugins/cache/plastic`,
|
|
34
|
-
the old nested `skills/plastic/`, and the `plastic@plastic` /
|
|
35
|
-
`extraKnownMarketplaces.plastic` / `known_marketplaces.json` registrations
|
|
36
|
-
|
|
37
|
-
### Step 2: Report removed vs left
|
|
38
|
-
|
|
39
|
-
Relay the uninstaller's output to the user: what was **removed** and what was
|
|
40
|
-
**left in place**.
|
|
41
|
-
- **Left:** `~/.plastic/` (intent store, history, projects) and any non-Plastic
|
|
42
|
-
settings.json entries.
|
|
43
|
-
|
|
44
|
-
### Step 3: Verify removal
|
|
45
|
-
|
|
46
|
-
Tell the user to confirm:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
ls ~/.claude/skills | grep '^plastic-' # -> no output
|
|
50
|
-
ls ~/.claude/hooks | grep '^plastic-' # -> no output
|
|
51
|
-
grep -n plastic ~/.claude/settings.json # -> no plastic hook/plugin refs
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Step 4: Report
|
|
55
|
-
|
|
56
|
-
Emit the reporting block, using the Step 3 checks for the verification line:
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Plastic uninstall (<channel>)
|
|
60
|
-
Command: npx -y @zalom/plastic@<channel> uninstall --claude <flags>
|
|
61
|
-
Version: removed
|
|
62
|
-
Verification: <Step 3 results, or "clean">
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Then:
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
Plastic is uninstalled from [agent].
|
|
69
|
-
Your intent store at ~/.plastic/ is untouched.
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Uninstall removes installed harness files only. The store at `~/.plastic/` (intents,
|
|
73
|
-
history, projects, config, version ledger) always stays; no uninstall path deletes it.
|
|
74
|
-
Tell the user: "Your data is at ~/.plastic/. Re-install anytime with
|
|
75
|
-
`npx -y @zalom/plastic@latest install --claude` (or your channel)."
|