@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
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-brainstorming
|
|
3
|
-
description: "Explore intent requirements and design before implementation. Produces
|
|
2
|
+
name: plastic-intent-brainstorming
|
|
3
|
+
description: "Explore intent requirements and design before implementation, through conversational prose questions asked one at a time (no multiple-choice chips), persisting each owner ruling immediately as an insight. Produces the enriched Why (Context and Decisions) in the active intent directory; hands off to /plastic-intent-speccing for spec.md."
|
|
4
|
+
user-invocable: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Brainstorming Ideas Into Designs
|
|
7
8
|
|
|
8
|
-
Help turn ideas into fully formed designs
|
|
9
|
+
Help turn ideas into fully formed designs through natural collaborative dialogue.
|
|
9
10
|
|
|
10
|
-
Announce: "I'm using the brainstorming skill to explore the design for intent {id}
|
|
11
|
+
Announce: "I'm using the brainstorming skill to explore the design for intent {id}: {name}."
|
|
11
12
|
|
|
12
|
-
Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design and
|
|
13
|
+
Start by understanding the current project context, then ask questions one at a time, in prose, to refine the idea. Once you understand what you're building, present the design and collect the owner's rulings on it. This skill's product is the enriched Why, not spec.md.
|
|
13
14
|
|
|
14
15
|
<HARD-GATE>
|
|
15
|
-
Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has
|
|
16
|
+
Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has ruled on it. This applies to EVERY project regardless of perceived simplicity.
|
|
16
17
|
</HARD-GATE>
|
|
17
18
|
|
|
18
19
|
## Active Intent Gate
|
|
@@ -20,34 +21,32 @@ Do NOT invoke any implementation skill, write any code, scaffold any project, or
|
|
|
20
21
|
Before proceeding, resolve the active intent:
|
|
21
22
|
|
|
22
23
|
1. **Detect store:** Read `~/.plastic/projects.yml`, match CWD against registered project paths. If match → project store at `~/.plastic/projects/{slug}/store/`. If no match → global store at `~/.plastic/store/`.
|
|
23
|
-
2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-creating
|
|
24
|
+
2. **Find active intent:** Read `INDEX.md` from the detected store. Look under `## Active`. If exactly one → use it. If multiple → ask which. If none → refuse: "No active intent. Create one first with /plastic-intent-creating"
|
|
24
25
|
3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
|
|
25
26
|
|
|
26
27
|
All artifacts go to the intent directory. Never write to external paths.
|
|
27
28
|
|
|
28
29
|
## Anti-Pattern: "This Is Too Simple To Need A Design"
|
|
29
30
|
|
|
30
|
-
Every project goes through this process. A todo list, a single-function utility, a config change
|
|
31
|
+
Every project goes through this process. A todo list, a single-function utility, a config change: all of them. "Simple" projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get a ruling.
|
|
31
32
|
|
|
32
33
|
## Checklist
|
|
33
34
|
|
|
34
35
|
You MUST create a task for each of these items and complete them in order:
|
|
35
36
|
|
|
36
|
-
1. **Explore project context
|
|
37
|
-
2. **
|
|
38
|
-
3. **Propose 2-3 approaches
|
|
39
|
-
4. **Present design
|
|
40
|
-
5. **
|
|
41
|
-
6. **
|
|
42
|
-
7. **User reviews written spec** — ask user to review before proceeding
|
|
43
|
-
8. **Transition to planning** — invoke `plastic-writing-plans`
|
|
37
|
+
1. **Explore project context**: check files, docs, recent commits, read active intent
|
|
38
|
+
2. **Grill in prose**: ask conversational prose questions, one at a time, no multiple-choice chips; understand purpose/constraints/success criteria
|
|
39
|
+
3. **Propose 2-3 approaches**: with trade-offs and your recommendation
|
|
40
|
+
4. **Present design**: in sections scaled to their complexity, get a ruling after each section
|
|
41
|
+
5. **Collect rulings**: for each owner ruling, immediately persist it (see Collect rulings below); never batch
|
|
42
|
+
6. **Hand off to /plastic-intent-speccing**: the enriched Why is done; do not author spec.md here
|
|
44
43
|
|
|
45
44
|
## Process Flow
|
|
46
45
|
|
|
47
|
-
The Checklist above states the ordered flow (steps 1-
|
|
46
|
+
The Checklist above states the ordered flow (steps 1-6). For the same flow as a
|
|
48
47
|
diagram, read `references/design-principles.md`.
|
|
49
48
|
|
|
50
|
-
**The terminal state is
|
|
49
|
+
**The terminal state is the handoff below.** Do NOT invoke any implementation skill and do NOT write spec.md. Brainstorming's product is the enriched Why.
|
|
51
50
|
|
|
52
51
|
## The Process
|
|
53
52
|
|
|
@@ -55,9 +54,9 @@ diagram, read `references/design-principles.md`.
|
|
|
55
54
|
- QMD-first (when available): before scanning the store with grep/Read for prior decisions, specs, or outcomes, run `ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate, prior, or related intents, then open the authoritative intent file for any hit you act on. The command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
|
|
56
55
|
- Check out the current project state first (files, docs, recent commits)
|
|
57
56
|
- Before asking detailed questions, assess scope: if the request describes multiple independent subsystems (e.g., "build a platform with chat, file storage, billing, and analytics"), flag this immediately. Don't spend questions refining details of a project that needs to be decomposed first.
|
|
58
|
-
- If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own spec → plan → implementation cycle.
|
|
59
|
-
- For appropriately-scoped projects, ask questions one at a time to refine the idea
|
|
60
|
-
-
|
|
57
|
+
- If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own Why → spec → plan → implementation cycle.
|
|
58
|
+
- For appropriately-scoped projects, ask questions one at a time, in prose, to refine the idea
|
|
59
|
+
- Ask conversational prose questions, not multiple-choice chips. A short menu of named options is fine when the choice is genuinely enumerable, but phrase it as a sentence, not a bulleted picker.
|
|
61
60
|
- Only one question per message - if a topic needs more exploration, break it into multiple questions
|
|
62
61
|
- Focus on understanding: purpose, constraints, success criteria
|
|
63
62
|
|
|
@@ -79,39 +78,39 @@ guidance (what makes a good interface, when a file has grown too large) and
|
|
|
79
78
|
existing-codebase guidance (follow established patterns, fold in targeted
|
|
80
79
|
improvements without unrelated refactoring).
|
|
81
80
|
|
|
82
|
-
##
|
|
83
|
-
**Documentation:**
|
|
84
|
-
- Write the validated design (spec) to `{intent_dir}/spec.md` using the `${CLAUDE_PLUGIN_ROOT}/templates/spec.md` form
|
|
85
|
-
- Use elements-of-style:writing-clearly-and-concisely skill if available
|
|
86
|
-
- Commit to the store repo:
|
|
87
|
-
```
|
|
88
|
-
cd {store_root} && git add . && git commit -m "docs: spec for intent {id} — {name}"
|
|
89
|
-
```
|
|
81
|
+
## Collect rulings
|
|
90
82
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
1. **Placeholder scan:** Any "TBD", "TODO", incomplete sections, or vague requirements? Fix them.
|
|
94
|
-
2. **Internal consistency:** Do any sections contradict each other? Does the architecture match the feature descriptions?
|
|
95
|
-
3. **Scope check:** Is this focused enough for a single implementation plan, or does it need decomposition?
|
|
96
|
-
4. **Ambiguity check:** Could any requirement be interpreted two different ways? If so, pick one and make it explicit.
|
|
83
|
+
Each owner ruling triggers one immediate persist call, never a batch. The moment the
|
|
84
|
+
owner rules on a question or a design section, before moving to the next one, run:
|
|
97
85
|
|
|
98
|
-
|
|
86
|
+
```
|
|
87
|
+
ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
|
|
88
|
+
```
|
|
99
89
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
90
|
+
When a later ruling conflicts with an earlier one already on record, append a new
|
|
91
|
+
insight that names the superseded ruling and states plainly that this one supersedes
|
|
92
|
+
it. Both insights stay on record; the later one wins.
|
|
103
93
|
|
|
104
|
-
|
|
94
|
+
When presenting a batch of design options or rulings for the owner to choose, read
|
|
95
|
+
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure.
|
|
105
96
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
97
|
+
## Handoff
|
|
98
|
+
|
|
99
|
+
Why exploration complete. The enriched Why is captured (Context, Decisions, one
|
|
100
|
+
insight per ruling). Invoke /plastic-intent-speccing to consolidate it into spec.md.
|
|
101
|
+
Do not author spec.md here.
|
|
102
|
+
|
|
103
|
+
## Gate position
|
|
104
|
+
|
|
105
|
+
- **Before:** an active intent exists with the lock armed.
|
|
106
|
+
- **Produces:** the enriched Why (`## Context`, `### Decisions`, one `## Insights` entry per ruling).
|
|
107
|
+
- **Next:** /plastic-intent-speccing consolidates the enriched Why into spec.md.
|
|
109
108
|
|
|
110
109
|
## Key Principles
|
|
111
110
|
|
|
112
111
|
- **One question at a time** - Don't overwhelm with multiple questions
|
|
113
|
-
- **
|
|
112
|
+
- **Prose, not chips** - Ask conversational prose questions; skip multiple-choice menus
|
|
114
113
|
- **YAGNI ruthlessly** - Remove unnecessary features from all designs
|
|
115
114
|
- **Explore alternatives** - Always propose 2-3 approaches before settling
|
|
116
|
-
- **Incremental validation** - Present design,
|
|
115
|
+
- **Incremental validation** - Present design, collect a ruling before moving on
|
|
117
116
|
- **Be flexible** - Go back and clarify when something doesn't make sense
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "plastic-intent-brainstorming",
|
|
3
|
+
"notes": "Intent 66a. Spec for the QMD-first step in the Why/explore-context phase (surface prior decisions/specs/outcomes before grep/Read). Runner is intent 76; spec only. Intent 164 extended this file with the prose-grilling, conflict-supersession, and handoff-to-speccing scenarios; evals 2-4 are pending a real observed run per the plastic-evaluating-skills convention.",
|
|
4
|
+
"evals": [
|
|
5
|
+
{
|
|
6
|
+
"id": 1,
|
|
7
|
+
"scope": "behavior",
|
|
8
|
+
"set": "validation",
|
|
9
|
+
"prompt": "QMD is present. Brainstorming the active intent during the Why phase, the agent needs prior decisions and specs on caching.",
|
|
10
|
+
"expected_output": "In the explore-project-context (Why) step, before scanning the store with grep/Read, runs `ruby ~/.plastic/scripts/qmd-sync search \"caching decisions\"` to surface prior decisions, specs, or outcomes, then opens the authoritative intent file for any hit it acts on. No-op fallback to INDEX.md / file scan when QMD is absent.",
|
|
11
|
+
"files": [],
|
|
12
|
+
"assertions": [
|
|
13
|
+
{
|
|
14
|
+
"type": "human",
|
|
15
|
+
"check": "qmd-sync search is run during Why before grep/Read; authoritative file opened for any hit",
|
|
16
|
+
"observed": "SKILL.md (or agent file) carries the QMD-first step: run qmd-sync search before grep/Read, then open the authoritative file; no-op fallback when QMD is absent",
|
|
17
|
+
"result": "pass"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": 2,
|
|
23
|
+
"scope": "behavior",
|
|
24
|
+
"set": "validation",
|
|
25
|
+
"prompt": "During Why exploration for intent X, the owner first rules that a setting ships as a CLI flag. Later in the same session, after more discussion, the owner rules that it should ship as a config-file setting instead, explicitly reversing the earlier call.",
|
|
26
|
+
"expected_output": "The skill persists BOTH rulings as separate insight-append calls with --stage Why: one for the CLI-flag ruling when it was made, and a second for the config-file ruling that names the CLI-flag ruling as superseded and states that this ruling supersedes it. Neither call is skipped, merged, or batched.",
|
|
27
|
+
"files": [],
|
|
28
|
+
"assertions": [
|
|
29
|
+
{
|
|
30
|
+
"type": "human",
|
|
31
|
+
"check": "two separate `ruby ~/.plastic/scripts/insight-append {intent_dir} \"<ruling text>\" --stage Why --author human` calls are made, one per ruling, immediately as each ruling lands; the second insight names the superseded CLI-flag ruling and states supersession",
|
|
32
|
+
"result": "expect-pass"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": 3,
|
|
38
|
+
"scope": "behavior",
|
|
39
|
+
"set": "train",
|
|
40
|
+
"prompt": "Brainstorming a new intent about notification delivery, the agent needs to learn the owner's preferred channel (email, push, or SMS).",
|
|
41
|
+
"expected_output": "The agent asks a single conversational prose question about the preferred channel, one at a time, phrased as a sentence rather than a bulleted or lettered multiple-choice menu.",
|
|
42
|
+
"files": [],
|
|
43
|
+
"assertions": [
|
|
44
|
+
{
|
|
45
|
+
"type": "human",
|
|
46
|
+
"check": "the question is prose, not a chip/lettered multiple-choice menu; only one question is asked per message",
|
|
47
|
+
"result": "expect-pass"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": 4,
|
|
53
|
+
"scope": "behavior",
|
|
54
|
+
"set": "train",
|
|
55
|
+
"prompt": "Design for intent Y is presented and the owner has ruled on every open section.",
|
|
56
|
+
"expected_output": "The skill states the enriched Why is captured (Context, Decisions, one insight per ruling) and invokes /plastic-intent-speccing as the handoff. It does not write spec.md itself.",
|
|
57
|
+
"files": [],
|
|
58
|
+
"assertions": [
|
|
59
|
+
{
|
|
60
|
+
"type": "code",
|
|
61
|
+
"check": "no spec.md write action is taken by this skill; the terminal message names /plastic-intent-speccing and states spec.md is not authored here",
|
|
62
|
+
"result": "expect-pass"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
@@ -20,30 +20,25 @@ steps).
|
|
|
20
20
|
|
|
21
21
|
## Process Flow (diagram)
|
|
22
22
|
|
|
23
|
-
The Checklist above already states this ordered flow as numbered steps 1-
|
|
23
|
+
The Checklist above already states this ordered flow as numbered steps 1-6; this
|
|
24
24
|
diagram is the same flow in a visual form.
|
|
25
25
|
|
|
26
26
|
```dot
|
|
27
27
|
digraph brainstorming {
|
|
28
28
|
"Explore project context" [shape=box];
|
|
29
|
-
"
|
|
29
|
+
"Grill in prose" [shape=box];
|
|
30
30
|
"Propose 2-3 approaches" [shape=box];
|
|
31
31
|
"Present design sections" [shape=box];
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
"Explore project context" -> "Ask clarifying questions";
|
|
39
|
-
"Ask clarifying questions" -> "Propose 2-3 approaches";
|
|
32
|
+
"Owner rules?" [shape=diamond];
|
|
33
|
+
"Collect rulings\n(persist each immediately)" [shape=box];
|
|
34
|
+
"Invoke /plastic-intent-speccing" [shape=doublecircle];
|
|
35
|
+
|
|
36
|
+
"Explore project context" -> "Grill in prose";
|
|
37
|
+
"Grill in prose" -> "Propose 2-3 approaches";
|
|
40
38
|
"Propose 2-3 approaches" -> "Present design sections";
|
|
41
|
-
"Present design sections" -> "
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"Spec self-review\n(fix inline)" -> "User reviews spec?";
|
|
46
|
-
"User reviews spec?" -> "Write spec" [label="changes requested"];
|
|
47
|
-
"User reviews spec?" -> "Invoke plastic-writing-plans" [label="approved"];
|
|
39
|
+
"Present design sections" -> "Owner rules?";
|
|
40
|
+
"Owner rules?" -> "Present design sections" [label="no, revise"];
|
|
41
|
+
"Owner rules?" -> "Collect rulings\n(persist each immediately)" [label="yes"];
|
|
42
|
+
"Collect rulings\n(persist each immediately)" -> "Invoke /plastic-intent-speccing";
|
|
48
43
|
}
|
|
49
44
|
```
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-continuing
|
|
3
|
-
description: Use when the user says "continue", "resume", or "pick up where we left off", or when starting a new session. Continues work with the latest project context: lands on the right dashboard, then presents choices. Boot (health check, core context, version, statusline) is owned by the SessionStart hook, not this skill. Does not drive work autonomously (that is plastic-auto).
|
|
2
|
+
name: plastic-intent-continuing
|
|
3
|
+
description: 'Use when the user says "continue", "resume", or "pick up where we left off", or when starting a new session. Continues work with the latest project context: lands on the right dashboard, then presents choices. Boot (health check, core context, version, statusline) is owned by the SessionStart hook, not this skill. Does not drive work autonomously (that is plastic-auto).'
|
|
4
|
+
user-invocable: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Continuing
|
|
7
8
|
|
|
8
|
-
`plastic-continuing` continues work. It presents the latest state via the dashboard and offers
|
|
9
|
+
`plastic-intent-continuing` continues work. It presents the latest state via the dashboard and offers
|
|
9
10
|
choices, then stops. It does NOT execute work autonomously (that is `plastic-auto`) and does
|
|
10
11
|
NOT render the dashboard itself (it only invokes it).
|
|
11
12
|
|
|
@@ -1,51 +1,51 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "plastic-continuing",
|
|
2
|
+
"skill_name": "plastic-intent-continuing",
|
|
3
3
|
"notes": "Intent 36, updated for 36a (boot moved into hook-session-start; the skill is now work-continuation only). Scopes: description triggering (1-8) and behavior/convention compliance of the work-continuation skill (9-14). Triggering assertions follow the plastic-auto eval style (one subagent router per case). Behavior assertions are convention checks against the SKILL.md.",
|
|
4
4
|
"results": {
|
|
5
5
|
"triggering": { "cases": 8, "passed": 8, "run": "2026-06-16, one subagent per case" },
|
|
6
|
-
"behavior": { "cases": 6, "passed": 6, "evidence": "convention checks against skills/continuing/SKILL.md after the intent-36 rewrite; doctor --core verified at 0.07s with 9 liveness checks and full doctor unchanged at 30 checks" }
|
|
6
|
+
"behavior": { "cases": 6, "passed": 6, "evidence": "convention checks against skills/intent-continuing/SKILL.md after the intent-36 rewrite; doctor --core verified at 0.07s with 9 liveness checks and full doctor unchanged at 30 checks" }
|
|
7
7
|
},
|
|
8
8
|
"evals": [
|
|
9
9
|
{
|
|
10
10
|
"id": 1, "scope": "triggering", "set": "train",
|
|
11
11
|
"prompt": "continue",
|
|
12
|
-
"expected_output": "Activates plastic-continuing (the bare 'continue' keyword is the documented trigger).",
|
|
12
|
+
"expected_output": "Activates plastic-intent-continuing (the bare 'continue' keyword is the documented trigger).",
|
|
13
13
|
"files": [],
|
|
14
14
|
"assertions": [
|
|
15
|
-
{ "type": "code", "check": "router CHOICE == plastic-continuing", "observed": "plastic-continuing", "result": "pass" }
|
|
15
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-continuing", "observed": "plastic-intent-continuing", "result": "pass" }
|
|
16
16
|
]
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"id": 2, "scope": "triggering", "set": "train",
|
|
20
20
|
"prompt": "resume where we left off",
|
|
21
|
-
"expected_output": "Activates plastic-continuing.",
|
|
21
|
+
"expected_output": "Activates plastic-intent-continuing.",
|
|
22
22
|
"files": [],
|
|
23
23
|
"assertions": [
|
|
24
|
-
{ "type": "code", "check": "router CHOICE == plastic-continuing", "observed": "plastic-continuing", "result": "pass" }
|
|
24
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-continuing", "observed": "plastic-intent-continuing", "result": "pass" }
|
|
25
25
|
]
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"id": 3, "scope": "triggering", "set": "validation",
|
|
29
29
|
"prompt": "pick up where we left off in this project",
|
|
30
|
-
"expected_output": "Activates plastic-continuing.",
|
|
30
|
+
"expected_output": "Activates plastic-intent-continuing.",
|
|
31
31
|
"files": [],
|
|
32
32
|
"assertions": [
|
|
33
|
-
{ "type": "code", "check": "router CHOICE == plastic-continuing", "observed": "plastic-continuing", "result": "pass" }
|
|
33
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-continuing", "observed": "plastic-intent-continuing", "result": "pass" }
|
|
34
34
|
]
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"id": 4, "scope": "triggering", "set": "train",
|
|
38
38
|
"prompt": "boot plastic and show me where things stand",
|
|
39
|
-
"expected_output": "Activates plastic-continuing (continuing work + presenting state is the skill's purpose; boot itself is hook-owned).",
|
|
39
|
+
"expected_output": "Activates plastic-intent-continuing (continuing work + presenting state is the skill's purpose; boot itself is hook-owned).",
|
|
40
40
|
"files": [],
|
|
41
41
|
"assertions": [
|
|
42
|
-
{ "type": "code", "check": "router CHOICE == plastic-continuing", "observed": "plastic-continuing", "result": "pass" }
|
|
42
|
+
{ "type": "code", "check": "router CHOICE == plastic-intent-continuing", "observed": "plastic-intent-continuing", "result": "pass" }
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"id": 5, "scope": "triggering", "set": "train",
|
|
47
47
|
"prompt": "continue delivering this intent autonomously, don't ask me",
|
|
48
|
-
"expected_output": "Does NOT settle on plastic-continuing for execution. Shares 'continue' but the autonomous-delivery intent routes to plastic-auto.",
|
|
48
|
+
"expected_output": "Does NOT settle on plastic-intent-continuing for execution. Shares 'continue' but the autonomous-delivery intent routes to plastic-auto.",
|
|
49
49
|
"files": [],
|
|
50
50
|
"assertions": [
|
|
51
51
|
{ "type": "code", "check": "router CHOICE == plastic-auto", "observed": "plastic-auto", "result": "pass" }
|
|
@@ -54,35 +54,35 @@
|
|
|
54
54
|
{
|
|
55
55
|
"id": 6, "scope": "triggering", "set": "validation",
|
|
56
56
|
"prompt": "continue the for-loop to the next iteration in this function",
|
|
57
|
-
"expected_output": "Does NOT activate plastic-continuing. Near-miss: shares 'continue' but is a code-editing task.",
|
|
57
|
+
"expected_output": "Does NOT activate plastic-intent-continuing. Near-miss: shares 'continue' but is a code-editing task.",
|
|
58
58
|
"files": [],
|
|
59
59
|
"assertions": [
|
|
60
|
-
{ "type": "code", "check": "router CHOICE != plastic-continuing", "observed": "none", "result": "pass" }
|
|
60
|
+
{ "type": "code", "check": "router CHOICE != plastic-intent-continuing", "observed": "none", "result": "pass" }
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"id": 7, "scope": "triggering", "set": "train",
|
|
65
65
|
"prompt": "resume the paused background download",
|
|
66
|
-
"expected_output": "Does NOT activate plastic-continuing. Near-miss: shares 'resume' but is unrelated to Plastic sessions.",
|
|
66
|
+
"expected_output": "Does NOT activate plastic-intent-continuing. Near-miss: shares 'resume' but is unrelated to Plastic sessions.",
|
|
67
67
|
"files": [],
|
|
68
68
|
"assertions": [
|
|
69
|
-
{ "type": "code", "check": "router CHOICE != plastic-continuing", "observed": "none", "result": "pass" }
|
|
69
|
+
{ "type": "code", "check": "router CHOICE != plastic-intent-continuing", "observed": "none", "result": "pass" }
|
|
70
70
|
]
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"id": 8, "scope": "triggering", "set": "validation",
|
|
74
74
|
"prompt": "what's the dashboard look like right now",
|
|
75
|
-
"expected_output": "May activate plastic-dashboard rather than plastic-continuing; an overview request without 'continue/resume' is a dashboard task.",
|
|
75
|
+
"expected_output": "May activate plastic-dashboard rather than plastic-intent-continuing; an overview request without 'continue/resume' is a dashboard task.",
|
|
76
76
|
"files": [],
|
|
77
77
|
"assertions": [
|
|
78
|
-
{ "type": "code", "check": "router CHOICE != plastic-continuing", "observed": "plastic-dashboard", "result": "pass" }
|
|
78
|
+
{ "type": "code", "check": "router CHOICE != plastic-intent-continuing", "observed": "plastic-dashboard", "result": "pass" }
|
|
79
79
|
]
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
"id": 9, "scope": "behavior", "set": "train",
|
|
83
83
|
"prompt": "Does the skill defer boot to the SessionStart hook rather than running it itself?",
|
|
84
84
|
"expected_output": "SKILL.md states boot (health check, core context, version banner, statusline) is owned by hook-session-start / plastic-statusline, not this skill.",
|
|
85
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
85
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
86
86
|
"assertions": [
|
|
87
87
|
{ "type": "convention", "check": "SKILL.md says boot is owned by the SessionStart hook and the skill does not run it", "observed": "'Boot is not this skill's job.' paragraph naming hook-session-start and plastic-statusline", "result": "pass" }
|
|
88
88
|
]
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"id": 10, "scope": "behavior", "set": "train",
|
|
92
92
|
"prompt": "Does the skill avoid running doctor / setting the statusline itself?",
|
|
93
93
|
"expected_output": "SKILL.md does NOT instruct running doctor.rb --core or setting the statusline; it attributes those to the hooks.",
|
|
94
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
94
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
95
95
|
"assertions": [
|
|
96
96
|
{ "type": "convention", "check": "no in-skill boot step invokes doctor.rb --core or sets the statusline; both are attributed to hooks", "observed": "doctor --core and statusline mentioned only as hook-owned in the 'Boot is not this skill's job' note", "result": "pass" }
|
|
97
97
|
]
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"id": 11, "scope": "behavior", "set": "train",
|
|
101
101
|
"prompt": "Is dashboard selection project-aware?",
|
|
102
102
|
"expected_output": "Project loaded -> `dashboard.rb project <slug>`; otherwise -> `dashboard.rb continue`. Skill only invokes, does not render.",
|
|
103
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
103
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
104
104
|
"assertions": [
|
|
105
105
|
{ "type": "convention", "check": "both dashboard invocations present and gated on project detection", "observed": "'dashboard.rb project <slug>' and 'dashboard.rb continue' in the 'Continue (present the dashboard)' section", "result": "pass" }
|
|
106
106
|
]
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"id": 12, "scope": "behavior", "set": "validation",
|
|
110
110
|
"prompt": "Is ledger-resume conditional and ledger-driven?",
|
|
111
111
|
"expected_output": "Resume fires only when a specific intent is named; reads savepoint.md last line as stage, verifies the stage file, rebuilds on drift, derives next step from first unchecked checklist item.",
|
|
112
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
112
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
113
113
|
"assertions": [
|
|
114
114
|
{ "type": "convention", "check": "Conditional Ledger-Resume section reads last ledger line, verifies stage file, calls rebuild_savepoint on drift, uses first unchecked checklist item", "observed": "all four present in 'Conditional Ledger-Resume'", "result": "pass" }
|
|
115
115
|
]
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"id": 13, "scope": "behavior", "set": "validation",
|
|
119
119
|
"prompt": "Are the stale prose-savepoint fields gone?",
|
|
120
120
|
"expected_output": "No 'In progress' / 'Blockers' fields read from a prose savepoint remain; the ledger model is used instead.",
|
|
121
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
121
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
122
122
|
"assertions": [
|
|
123
123
|
{ "type": "convention", "check": "no prose-savepoint announce template (In progress / Blockers from prose)", "observed": "absent; announce uses Stage/Next step/Context/Drift derived from ledger + checklist", "result": "pass" }
|
|
124
124
|
]
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"id": 14, "scope": "behavior", "set": "validation",
|
|
128
128
|
"prompt": "Is the 'Determine Store' local-store gap filled?",
|
|
129
129
|
"expected_output": "Step 2 of Determine Store describes local/project-store detection (no empty step).",
|
|
130
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
130
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
131
131
|
"assertions": [
|
|
132
132
|
{ "type": "convention", "check": "Determine Store step 2 documents local/project store detection via projects.yml + CWD match", "observed": "filled", "result": "pass" }
|
|
133
133
|
]
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"id": 15, "scope": "behavior", "set": "validation",
|
|
137
137
|
"prompt": "QMD is present. The user says: continue the work on the statusline coloring (names the intent by description, not id).",
|
|
138
138
|
"expected_output": "Before scanning the store with grep/Read to locate the named intent, runs `ruby ~/.plastic/scripts/qmd-sync search \"statusline coloring\"` to surface the candidate intent, then opens the authoritative intent file for the hit it resumes. No-op fallback to INDEX.md / file scan when QMD is absent.",
|
|
139
|
-
"files": ["skills/continuing/SKILL.md"],
|
|
139
|
+
"files": ["skills/intent-continuing/SKILL.md"],
|
|
140
140
|
"assertions": [
|
|
141
141
|
{ "type": "human", "check": "qmd-sync search is run before grep/Read when the intent is named by description; authoritative file opened for the hit", "observed": "Conditional Ledger-Resume carries the QMD-first step: run qmd-sync search before grep/Read, then open the authoritative file; no-op fallback when QMD is absent", "result": "pass" }
|
|
142
142
|
]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-creating
|
|
2
|
+
name: plastic-intent-creating
|
|
3
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
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Creating an Intent
|
|
@@ -72,7 +73,7 @@ Having a "parent" in mind does NOT automatically mean branch. Choose by meaning:
|
|
|
72
73
|
frontmatter edge and reproject. Links are decided by context influence (a `chain` edge has a high
|
|
73
74
|
bar: the candidate's context must materially help deliver this intent), not by shared files or a
|
|
74
75
|
similarity score. To gather candidates with their context and record an edge, use the
|
|
75
|
-
`plastic-linking
|
|
76
|
+
`plastic-intent-linking` skill and `scripts/link-suggest`.
|
|
76
77
|
|
|
77
78
|
### 3. Determine Intent Properties
|
|
78
79
|
|
|
@@ -125,7 +126,7 @@ cleanly, and do not work around the failure by hand-writing the files.
|
|
|
125
126
|
### 6. If Implementation Intent Spawns a Project
|
|
126
127
|
|
|
127
128
|
When the user says "start building" or the plan calls for a new project, invoke the
|
|
128
|
-
`plastic-creating
|
|
129
|
+
`plastic-project-creating` skill; it owns project directory creation, AGENTS.md
|
|
129
130
|
population, projects.yml registration, store provisioning, and the auto-commit of
|
|
130
131
|
both stores. Add `project-<slug>` to this intent's `tags` array either before
|
|
131
132
|
invoking it or as part of that skill's handoff.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_name": "plastic-creating
|
|
2
|
+
"skill_name": "plastic-intent-creating",
|
|
3
3
|
"notes": "Intent 68. Scope: output-quality for the sources-vs-chain construction rules (D1/D2). Asserts the related-but-not-spawned case produces NO sources plus a predecessor chain link and a ## Links mirror, contrasted with the created-from case (true ascendant -> --sources set, reciprocal chain). The machine-checkable half lives in test/new_intent_test.rb (test_sources_path_gets_child_in_chain_frontmatter); this file documents the agent-facing scenario for skill evaluation and is NOT run by bin/test.",
|
|
4
4
|
"evals": [
|
|
5
5
|
{
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: plastic-intent-
|
|
2
|
+
name: plastic-intent-discovering
|
|
3
3
|
description: >-
|
|
4
4
|
What-stage context deposit at intent activation: run QMD discovery over the
|
|
5
5
|
intent's chain/sources and related parked intents, and write findings to
|
|
6
6
|
resources/discovery--<slug>.md for the Why stage to consume. Use when an intent
|
|
7
7
|
is activated (moved from Future to Active), after the lock is armed, under it,
|
|
8
8
|
and before Why begins. Never writes the intent file itself.
|
|
9
|
+
user-invocable: false
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# Intent Discovery — What-stage context deposit
|
|
@@ -33,6 +34,7 @@ lock. Dispatched as the `plastic-intent-discovery` background agent.
|
|
|
33
34
|
the intent file, spec.md, or any lifecycle deliverable. The lock-owner-only
|
|
34
35
|
write rule stays intact; the Why-stage `plastic-brainstorming` agent reads the
|
|
35
36
|
deposit and enriches `## Context`.
|
|
37
|
+
Shape the deposit tabular-first per `PLASTIC.md` (## Tabular-First Reporting, intent 160).
|
|
36
38
|
|
|
37
39
|
## Stage coverage
|
|
38
40
|
This is the What-stage agent in the one-agent-per-stage table (What:
|