@zalom/plastic 1.0.2 → 1.1.0
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-reference.md +11 -11
- package/PLASTIC.md +37 -7
- package/README.md +47 -0
- package/agents/plastic-enforcer.md +3 -3
- package/agents/plastic-intent-curator.md +9 -10
- package/agents/plastic-intent-discovery.md +1 -0
- package/agents/plastic-spec-specialist.md +9 -6
- package/bin/plastic.js +2 -2
- package/package.json +1 -1
- package/scripts/dashboard.rb +2 -2
- package/scripts/doctor.rb +55 -7
- package/scripts/end-intent +330 -0
- package/scripts/hook-code-gate +1 -1
- package/scripts/hook-continue +1 -1
- package/scripts/hook-create-gate +2 -2
- package/scripts/hook-session-start +1 -1
- package/scripts/lib/bridge.rb +46 -13
- package/scripts/lib/dashboard_banner.rb +1 -1
- package/scripts/lib/installer_core.rb +8 -6
- package/scripts/lib/lock.rb +3 -3
- package/scripts/lib/store_provisioning.rb +1 -1
- package/scripts/new-intent +1 -1
- package/scripts/{versions.rb → rollback.rb} +33 -41
- package/scripts/update.rb +1 -1
- package/skills/_active-intent-gate.md +1 -1
- package/skills/_decision-tables.md +50 -0
- package/skills/auto/SKILL.md +48 -64
- package/skills/auto/evals/evals.json +4 -4
- package/skills/auto/references/agent-architecture.md +2 -2
- package/skills/auto/references/agent-report-contract.md +3 -0
- package/skills/dashboard/SKILL.md +3 -2
- package/skills/doctor/SKILL.md +4 -3
- package/skills/humanizer/SKILL.md +1 -0
- package/skills/install/SKILL.md +2 -1
- package/skills/{brainstorming → intent-brainstorming}/SKILL.md +44 -45
- package/skills/intent-brainstorming/evals/evals.json +67 -0
- package/skills/{brainstorming → intent-brainstorming}/references/design-principles.md +12 -17
- package/skills/{continuing → intent-continuing}/SKILL.md +4 -3
- package/skills/{continuing → intent-continuing}/evals/evals.json +24 -24
- package/skills/{creating-intent → intent-creating}/SKILL.md +4 -3
- package/skills/{creating-intent → intent-creating}/evals/evals.json +1 -1
- package/skills/{intent-discovery → intent-discovering}/SKILL.md +3 -1
- package/skills/intent-ending/SKILL.md +151 -0
- package/skills/intent-ending/evals/evals.json +74 -0
- package/skills/{executing-plan → intent-executing}/SKILL.md +76 -15
- package/skills/intent-executing/evals/evals.json +66 -0
- package/skills/{brainstorming-grill-me → intent-grilling}/SKILL.md +5 -4
- package/skills/{linking-intents → intent-linking}/SKILL.md +2 -1
- package/skills/{linking-intents → intent-linking}/evals/evals.json +1 -1
- package/skills/{lock → intent-locking}/SKILL.md +2 -1
- package/skills/{writing-plans → intent-planning}/SKILL.md +49 -20
- package/skills/intent-planning/evals/evals.json +66 -0
- package/skills/{writing-plans → intent-planning}/references/plan-format.md +31 -7
- package/skills/{research → intent-researching}/SKILL.md +5 -2
- package/skills/{research → intent-researching}/evals/evals.json +1 -1
- package/skills/{savepoint → intent-savepoint}/SKILL.md +2 -1
- package/skills/intent-speccing/SKILL.md +69 -0
- package/skills/intent-speccing/evals/evals.json +126 -0
- package/skills/intent-speccing/references/per-section-fill-rules.md +92 -0
- package/skills/intent-speccing/references/self-verify-checklist.md +38 -0
- package/skills/intent-starting/SKILL.md +3 -2
- package/skills/intent-starting/evals/evals.json +2 -2
- package/skills/{creating-project → project-creating}/SKILL.md +3 -2
- package/skills/releasing/SKILL.md +19 -14
- package/skills/roadmap/SKILL.md +1 -0
- package/skills/{versions → rollback}/SKILL.md +31 -20
- package/skills/{creating-skills → skill-creating}/SKILL.md +3 -2
- package/skills/{creating-skills → skill-creating}/evals/evals.json +5 -5
- package/skills/{creating-skills → skill-creating}/references/progressive-disclosure.md +2 -2
- package/skills/{creating-skills → skill-creating}/references/skills.md +1 -0
- package/skills/{evaluating-skills → skill-evaluating}/SKILL.md +2 -1
- package/skills/{evaluating-skills → skill-evaluating}/evals/evals.json +3 -3
- package/skills/{intent-curator → store-curating}/SKILL.md +7 -7
- package/skills/{intent-curator → store-curating}/evals/evals.json +1 -1
- package/skills/{managing-index → store-indexing}/SKILL.md +7 -7
- package/skills/{managing-index → store-indexing}/evals/evals.json +1 -1
- package/skills/{add-project-store → store-provisioning}/SKILL.md +3 -2
- package/skills/tutorial/SKILL.md +65 -0
- package/skills/tutorial/evals/evals.json +186 -0
- package/skills/tutorial/references/track-1-guided.md +123 -0
- package/skills/tutorial/references/track-2-auto.md +95 -0
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +110 -0
- package/skills/uninstall/SKILL.md +1 -0
- package/skills/update/SKILL.md +2 -1
- package/templates/agents.md +7 -7
- package/skills/brainstorming/evals/evals.json +0 -22
- /package/skills/{continuing → intent-continuing}/references/context-management.md +0 -0
- /package/skills/{creating-intent → intent-creating}/references/lifecycle.md +0 -0
- /package/skills/{creating-intent → intent-creating}/references/wikilinks.md +0 -0
- /package/skills/{executing-plan → intent-executing}/code-quality-reviewer-prompt.md +0 -0
- /package/skills/{executing-plan → intent-executing}/implementer-prompt.md +0 -0
- /package/skills/{executing-plan → intent-executing}/spec-reviewer-prompt.md +0 -0
- /package/skills/{linking-intents → intent-linking}/references/zettelkasten.md +0 -0
- /package/skills/{savepoint → intent-savepoint}/references/context-management.md +0 -0
- /package/skills/{creating-project → project-creating}/references/hubs-projects.md +0 -0
- /package/skills/{creating-project → project-creating}/references/project-scaffolding.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/agents.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/evals.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/hooks.md +0 -0
- /package/skills/{creating-skills → skill-creating}/references/scripts.md +0 -0
- /package/skills/{creating-skills → skill-creating}/scripts/scaffold.rb +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/assets/eval-template.json +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/references/convention-checks.md +0 -0
- /package/skills/{evaluating-skills → skill-evaluating}/references/eval-methodology.md +0 -0
- /package/skills/{managing-index → store-indexing}/references/zettelkasten-linking.md +0 -0
package/skills/roadmap/SKILL.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-roadmap
|
|
3
3
|
description: Use when the user wants to plan a delivery batch, order waves of intents, ship a batch of tickets in one go, track a named collection of intents toward a goal, or asks for a "roadmap". Creates and maintains a roadmap file, a delivery-side collection of intents (the counterpart to a release), separate from INDEX.md status tracking.
|
|
4
|
+
user-invocable: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Roadmap
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
2
|
+
name: plastic-rollback
|
|
3
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
|
|
4
5
|
---
|
|
5
6
|
|
|
6
|
-
# Plastic
|
|
7
|
+
# Plastic Rollback: local version time-machine
|
|
7
8
|
|
|
8
9
|
## When to Use
|
|
9
10
|
- "show plastic versions", "version history", "what versions have I run"
|
|
@@ -13,12 +14,18 @@ description: Use when the user wants to see their Plastic version history or rol
|
|
|
13
14
|
For upgrading to a **new** release, use `plastic-update`. This skill only navigates
|
|
14
15
|
versions you have **already installed**, the ones recorded in the ledger.
|
|
15
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
|
+
|
|
16
23
|
## Channel rule
|
|
17
24
|
|
|
18
|
-
`
|
|
25
|
+
`rollback` restores whichever build you name from the ledger, it does not take a channel
|
|
19
26
|
flag for the target. The pinned `<channel>` below is only the npx invocation itself:
|
|
20
27
|
derive it from `~/.plastic/VERSION` the same way as the other lifecycle skills,
|
|
21
|
-
`-alpha`
|
|
28
|
+
`-alpha` to `@alpha`, `-beta` to `@beta`, otherwise `@latest`.
|
|
22
29
|
|
|
23
30
|
## The ledger
|
|
24
31
|
|
|
@@ -36,45 +43,49 @@ troubleshooting record.
|
|
|
36
43
|
|
|
37
44
|
## Procedure
|
|
38
45
|
|
|
39
|
-
### Show history
|
|
46
|
+
### Show history (read-only, no switch)
|
|
40
47
|
|
|
41
48
|
```bash
|
|
42
|
-
npx -y @zalom/plastic@<channel>
|
|
49
|
+
npx -y @zalom/plastic@<channel> rollback
|
|
43
50
|
```
|
|
44
51
|
|
|
45
|
-
Prints the table with the currently-installed version marked.
|
|
46
|
-
|
|
52
|
+
Prints the table with the currently-installed version marked. Never switches, never
|
|
53
|
+
prompts, no matter what the last recorded action was.
|
|
47
54
|
|
|
48
|
-
###
|
|
55
|
+
### Switch to a specific version
|
|
49
56
|
|
|
50
57
|
```bash
|
|
51
|
-
npx -y @zalom/plastic@<channel>
|
|
52
|
-
npx -y @zalom/plastic@<channel> versions --downgrade --version 1.0.0-alpha.15 # to a specific run
|
|
58
|
+
npx -y @zalom/plastic@<channel> rollback --version 1.0.0-alpha.15
|
|
53
59
|
```
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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.
|
|
58
64
|
|
|
59
|
-
|
|
65
|
+
`--downgrade --version V` and `--upgrade --version V` are accepted as explicit-target
|
|
66
|
+
synonyms of `--version V`, the direction flag is descriptive only:
|
|
60
67
|
|
|
61
68
|
```bash
|
|
62
|
-
npx -y @zalom/plastic@<channel>
|
|
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
|
|
63
71
|
```
|
|
64
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
|
+
|
|
65
76
|
### After any change
|
|
66
77
|
|
|
67
78
|
Run `plastic-doctor` to confirm health, then emit the reporting block and suggest
|
|
68
79
|
`/clear` so the session picks up the swapped conventions:
|
|
69
80
|
|
|
70
81
|
```
|
|
71
|
-
Plastic
|
|
72
|
-
Command: npx -y @zalom/plastic@<channel>
|
|
82
|
+
Plastic rollback (<channel>)
|
|
83
|
+
Command: npx -y @zalom/plastic@<channel> rollback <flags>
|
|
73
84
|
Version: <before> -> <after>
|
|
74
85
|
Doctor: <summary or "all clear">
|
|
75
86
|
```
|
|
76
87
|
|
|
77
88
|
## Notes
|
|
78
89
|
- The ledger is **never** edited or pruned, it is the audit trail.
|
|
79
|
-
-
|
|
80
|
-
the user rather than forcing the
|
|
90
|
+
- Switching cannot un-migrate a store-format change; if a warning appears, surface it to
|
|
91
|
+
the user rather than forcing the switch.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-creating
|
|
2
|
+
name: plastic-skill-creating
|
|
3
3
|
description: >
|
|
4
4
|
Author or revise a Plastic skill, a subagent or Agent role file, or a
|
|
5
5
|
lifecycle hook with progressive disclosure. Use when creating or editing a
|
|
@@ -9,6 +9,7 @@ description: >
|
|
|
9
9
|
when an agent keeps missing a step or ignoring instructions, or when the user
|
|
10
10
|
says "progressive disclosure", "write a skill", "thin router", "split into
|
|
11
11
|
references", or "make this slim".
|
|
12
|
+
user-invocable: true
|
|
12
13
|
---
|
|
13
14
|
|
|
14
15
|
# Creating Skills
|
|
@@ -62,4 +63,4 @@ routes each authoring task to the reference that holds the depth.
|
|
|
62
63
|
- To start a new skill, agent, or hook from a born-slim file, run
|
|
63
64
|
`scripts/scaffold.rb`.
|
|
64
65
|
- To design, run, and grade evals in depth (paired runs, assertions after
|
|
65
|
-
observing, pass rates), use the `plastic-evaluating
|
|
66
|
+
observing, pass rates), use the `plastic-skill-evaluating` skill.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "plastic-creating
|
|
2
|
+
"skill_name": "plastic-skill-creating",
|
|
3
3
|
"evals": [
|
|
4
4
|
{
|
|
5
5
|
"id": 1,
|
|
@@ -45,19 +45,19 @@
|
|
|
45
45
|
{
|
|
46
46
|
"id": 5,
|
|
47
47
|
"prompt": "Run the evals on my skill and check the pass rate",
|
|
48
|
-
"expected_output": "The skill should NOT trigger. Running evals and reading pass rates is the job of plastic-evaluating
|
|
48
|
+
"expected_output": "The skill should NOT trigger. Running evals and reading pass rates is the job of plastic-skill-evaluating, not authoring. Near-miss negative: shares the words 'skill' and 'evals' but the operation is grading an existing skill, not creating or revising one.",
|
|
49
49
|
"files": [],
|
|
50
50
|
"assertions": [
|
|
51
|
-
"The skill does not activate (running and grading evals is plastic-evaluating
|
|
51
|
+
"The skill does not activate (running and grading evals is plastic-skill-evaluating, not authoring)."
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": 6,
|
|
56
56
|
"prompt": "Create a new intent for the dashboard work",
|
|
57
|
-
"expected_output": "The skill should NOT trigger. Creating an intent is plastic-creating
|
|
57
|
+
"expected_output": "The skill should NOT trigger. Creating an intent is plastic-intent-creating. Near-miss negative: shares the verb 'create' but the object is an intent, not a skill, agent, or hook.",
|
|
58
58
|
"files": [],
|
|
59
59
|
"assertions": [
|
|
60
|
-
"The skill does not activate (creating an intent is plastic-creating
|
|
60
|
+
"The skill does not activate (creating an intent is plastic-intent-creating)."
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
{
|
|
@@ -125,8 +125,8 @@ agent reads as a dependency it loads on its own terms. [C8]
|
|
|
125
125
|
| Form | Effect |
|
|
126
126
|
|------|--------|
|
|
127
127
|
| `REQUIRED BACKGROUND: superpowers:test-driven-development` | Good. Names the dependency; the agent loads it when relevant. |
|
|
128
|
-
| `For eval depth, use plastic-evaluating
|
|
129
|
-
| `@skills/evaluating
|
|
128
|
+
| `For eval depth, use plastic-skill-evaluating.` | Good. Names the skill, leaves loading to the agent. |
|
|
129
|
+
| `@skills/skill-evaluating/SKILL.md` | Bad. `@`-path syntax force-loads the file immediately, defeating disclosure. |
|
|
130
130
|
|
|
131
131
|
The `@`-path form pulls the target into context the moment the line is read, so it spends
|
|
132
132
|
the budget the level split was built to protect. Name the skill and let the trigger
|
|
@@ -102,6 +102,7 @@ Use only the documented optionals below. Add nothing beyond them [A6].
|
|
|
102
102
|
| `allowed-tools` | Space-separated tool list (experimental) |
|
|
103
103
|
| `model` | Claude Code extension: pin the model for this skill |
|
|
104
104
|
| `disable-model-invocation` | Claude Code extension: only the user may fire the skill |
|
|
105
|
+
| `user-invocable` | Claude Code extension: set false to hide the skill from the user's / slash menu while leaving it agent-invocable; default true |
|
|
105
106
|
| `context: fork` | Claude Code extension: run the body as a forked task |
|
|
106
107
|
| `paths` | Claude Code extension: scope the skill to matching paths |
|
|
107
108
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-evaluating
|
|
2
|
+
name: plastic-skill-evaluating
|
|
3
3
|
description: >
|
|
4
4
|
Evaluate Plastic skills for correctness, convention compliance, and
|
|
5
5
|
progressive disclosure. Use when testing whether a skill produces good
|
|
@@ -8,6 +8,7 @@ description: >
|
|
|
8
8
|
skill, checking if a description triggers correctly, or assessing
|
|
9
9
|
whether a skill is still needed. Also use when the user says "evaluate",
|
|
10
10
|
"test the skill", "run evals", "check conventions", or "write evals".
|
|
11
|
+
user-invocable: true
|
|
11
12
|
---
|
|
12
13
|
|
|
13
14
|
# Evaluating Skills
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "evaluating
|
|
2
|
+
"skill_name": "skill-evaluating",
|
|
3
3
|
"evals": [
|
|
4
4
|
{
|
|
5
5
|
"id": 1,
|
|
6
|
-
"prompt": "I want to evaluate whether my creating
|
|
6
|
+
"prompt": "I want to evaluate whether my intent-creating skill follows Plastic conventions",
|
|
7
7
|
"expected_output": "The skill should activate and guide the user through convention compliance evaluation: choose eval scope, design test cases using convention-checks reference, run paired evals, write assertions after observing.",
|
|
8
8
|
"files": [],
|
|
9
9
|
"assertions": []
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"id": 2,
|
|
13
|
-
"prompt": "Run evals on the brainstorming skill to see if the description triggers correctly",
|
|
13
|
+
"prompt": "Run evals on the intent-brainstorming skill to see if the description triggers correctly",
|
|
14
14
|
"expected_output": "The skill should activate and guide through description triggering evaluation: design ~20 queries with should-trigger and near-miss negatives, 60/40 train/validation split, compute trigger rates.",
|
|
15
15
|
"files": [],
|
|
16
16
|
"assertions": []
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
2
|
+
name: plastic-store-curating
|
|
3
3
|
description: |
|
|
4
4
|
Use when completing or reviewing intents, reorganizing the index,
|
|
5
5
|
or when the intent store needs maintenance. Examples:
|
|
@@ -11,6 +11,7 @@ description: |
|
|
|
11
11
|
user: "Organize the intents"
|
|
12
12
|
assistant: "I'll use the intent-curator to review clusters, flag orphans, and suggest connections"
|
|
13
13
|
<commentary>Periodic maintenance of the Zettelkasten structure.</commentary></example>
|
|
14
|
+
user-invocable: false
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
# Intent Curator
|
|
@@ -27,9 +28,9 @@ Dispatches to the `plastic-intent-curator` agent for intent store maintenance.
|
|
|
27
28
|
|
|
28
29
|
Invoke the `plastic-intent-curator` agent via the Agent tool with `subagent_type: "plastic-intent-curator"`. Pass the user's request as the prompt, including:
|
|
29
30
|
|
|
30
|
-
1. **What to do**
|
|
31
|
-
2. **Which store**
|
|
32
|
-
3. **Which intents**
|
|
31
|
+
1. **What to do** - complete intent, reorganize, triage stale, etc.
|
|
32
|
+
2. **Which store** - global (`~/.plastic/`) or project (`.plastic/store/`)
|
|
33
|
+
3. **Which intents** - by ID or "all active"
|
|
33
34
|
|
|
34
35
|
The agent handles:
|
|
35
36
|
- Intent lifecycle management (status transitions, Outcome sections)
|
|
@@ -38,10 +39,9 @@ The agent handles:
|
|
|
38
39
|
- Cluster management (create, merge, rename)
|
|
39
40
|
- Orphan detection
|
|
40
41
|
|
|
41
|
-
When an intent reaches a terminal state
|
|
42
|
+
When an intent reaches a terminal state, moved to Completed OR Abandoned, do these things:
|
|
42
43
|
|
|
43
44
|
1. Author a real `outcome.md` in the intent directory from `~/.plastic/templates/outcome.md`, with the frontmatter `disposition: delivered` for a completed intent or `disposition: abandoned` for an abandoned one. `outcome.md` is MANDATORY at every terminal, delivered and abandoned alike: on abandon it records the abandonment reason and replaces the scaffolded placeholder sentinel (never leave `outcome.md` a placeholder at a terminal).
|
|
44
|
-
2.
|
|
45
|
-
3. Refresh the QMD index for the affected store LAST, after the terminal move and savepoint (no-op when QMD absent), running in the background so it never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async`.
|
|
45
|
+
2. Call `plastic-intent-ending` for the terminal-transition close (INDEX move, savepoint `Done` bookend, store commit, disarm, and the QMD reindex last): `ruby ~/.plastic/scripts/end-intent --store <store> --id <id> --disposition delivered|abandoned`, then follow that skill's own disarm and reindex steps. Never restate those one-liners here.
|
|
46
46
|
|
|
47
47
|
After the agent completes, report what changed.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "plastic-
|
|
2
|
+
"skill_name": "plastic-store-curating",
|
|
3
3
|
"notes": "Intent 66a. Spec for the QMD-first discovery step in agents/plastic-intent-curator.md (locate a specific intent before grep/find; distinct from the completion-time reindex step). Runner is intent 76; spec only.",
|
|
4
4
|
"evals": [
|
|
5
5
|
{
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
2
|
+
name: plastic-store-indexing
|
|
3
3
|
description: Use after creating, completing, or abandoning intents, when the user says "index" or "organize", or when INDEX.md needs maintenance. Curates the INDEX.md structure note.
|
|
4
|
+
user-invocable: false
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Managing the Index
|
|
7
8
|
|
|
8
9
|
## When to Use
|
|
9
|
-
- After creating a new intent (automatic
|
|
10
|
+
- After creating a new intent (automatic - part of intent-creating workflow)
|
|
10
11
|
- After completing or abandoning an intent
|
|
11
12
|
- User says "index", "organize", or "clean up"
|
|
12
13
|
- Periodic maintenance when the store grows
|
|
13
14
|
|
|
14
15
|
## INDEX.md Structure
|
|
15
16
|
|
|
16
|
-
INDEX.md is a Zettelkasten main structure note
|
|
17
|
+
INDEX.md is a Zettelkasten main structure note - the brain's entry point. It has four sections:
|
|
17
18
|
|
|
18
19
|
### Active
|
|
19
20
|
Intents currently being worked on. Max 1-2 for focus.
|
|
@@ -41,11 +42,10 @@ Topic-based groupings. Manually curated. Create a new cluster when 3+ intents sh
|
|
|
41
42
|
### Completed
|
|
42
43
|
All completed intents with dates. Links preserved, never deleted.
|
|
43
44
|
|
|
44
|
-
When you move an intent INTO Completed or Abandoned,
|
|
45
|
+
When you move an intent INTO Completed or Abandoned, do these things:
|
|
45
46
|
|
|
46
47
|
1. Author a real `outcome.md` in the intent directory from `~/.plastic/templates/outcome.md`, with the frontmatter `disposition: delivered` for a completed intent or `disposition: abandoned` for an abandoned one. `outcome.md` is MANDATORY at every terminal, delivered and abandoned alike: on abandon it records the abandonment reason and replaces the scaffolded placeholder sentinel (never leave `outcome.md` a placeholder at a terminal).
|
|
47
|
-
2.
|
|
48
|
-
3. Refresh the QMD index for that store LAST, after the terminal move and savepoint (no-op when QMD is absent), in the background so it never blocks: `ruby ~/.plastic/scripts/qmd-sync reindex --store <store-root> --async`.
|
|
48
|
+
2. Call `plastic-intent-ending` for the terminal-transition close (INDEX move, savepoint `Done` bookend, store commit, disarm, and the QMD reindex last): `ruby ~/.plastic/scripts/end-intent --store <store> --id <id> --disposition delivered|abandoned`, then follow that skill's own disarm and reindex steps. Never restate those one-liners here.
|
|
49
49
|
|
|
50
50
|
## Workflow
|
|
51
51
|
|
|
@@ -75,7 +75,7 @@ When 3+ intents share tags but aren't in a cluster, suggest a new cluster headin
|
|
|
75
75
|
### Flag Orphans
|
|
76
76
|
Intents with no links (empty `sources`, empty `chain`, no `## Links` entries, not in any cluster) should be flagged for curation.
|
|
77
77
|
|
|
78
|
-
REQUIRED BACKGROUND: linking
|
|
78
|
+
REQUIRED BACKGROUND: intent-linking (for understanding connection types and Zettelkasten theory)
|
|
79
79
|
|
|
80
80
|
## References
|
|
81
81
|
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-
|
|
2
|
+
name: plastic-store-provisioning
|
|
3
3
|
description: >-
|
|
4
4
|
Add an intent store to a project that is already registered in projects.yml
|
|
5
5
|
but has no store on disk. Use when a project is registered but has no store,
|
|
6
6
|
when you need to provision a store, or when doctor reports a missing project
|
|
7
7
|
store (project_store_dir). Thin wrapper around provision-project-store plus an
|
|
8
8
|
optional qmd register step.
|
|
9
|
+
user-invocable: false
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# Add a Project Store
|
|
12
13
|
|
|
13
14
|
Provision the intent store for a project that is already registered in
|
|
14
15
|
`projects.yml` but whose `~/.plastic/projects/{slug}/store/` is missing. This is
|
|
15
|
-
the standalone path; `plastic-creating
|
|
16
|
+
the standalone path; `plastic-project-creating` provisions the store for brand
|
|
16
17
|
new projects.
|
|
17
18
|
|
|
18
19
|
The provisioner is the single source of truth for store creation. It is pure
|
|
@@ -0,0 +1,65 @@
|
|
|
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 gates 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
|
+
gate message, 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, so the walkthrough
|
|
63
|
+
matches what is actually installed, and work in a sandbox (a throwaway repo, or a global-store
|
|
64
|
+
intent) so nothing real is touched by mistake. Each reference restates this briefly; do not
|
|
65
|
+
skip it even if the user seems experienced.
|
|
@@ -0,0 +1,186 @@
|
|
|
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
|
+
}
|