@zalom/plastic 1.14.0 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PLASTIC.md +101 -294
- package/README.md +5 -6
- package/agents/plastic-advisor.md +18 -17
- package/agents/plastic-enforcer.md +57 -69
- package/agents/plastic-executor.md +34 -20
- package/agents/plastic-faux-advisor.md +18 -18
- package/config_asks.yml +38 -0
- package/hooks/capture +4 -0
- package/hooks/check-update +12 -3
- package/hooks/close +5 -0
- package/hooks/hooks.json +9 -49
- package/hooks/record +4 -0
- package/package.json +3 -2
- package/scripts/agent-report +8 -9
- package/scripts/append-ledger +195 -0
- package/scripts/codex-hook +101 -95
- package/scripts/dashboard.rb +4 -4
- package/scripts/doctor.rb +106 -43
- package/scripts/end-intent +77 -76
- package/scripts/exec-worktree +11 -20
- package/scripts/file-session-intent +61 -0
- package/scripts/hook-capture +242 -0
- package/scripts/hook-close +34 -0
- package/scripts/hook-record +149 -0
- package/scripts/hook-session-start +95 -12
- package/scripts/install.rb +8 -6
- package/scripts/lib/agent_models.rb +1 -7
- package/scripts/lib/arm.rb +283 -0
- package/scripts/lib/backfill_intent.rb +316 -0
- package/scripts/lib/bridge.rb +24 -1597
- package/scripts/lib/doctor_core.rb +17 -88
- package/scripts/lib/doctor_session_ledger.rb +106 -0
- package/scripts/lib/exec_worktree.rb +14 -60
- package/scripts/lib/harness_text.rb +5 -4
- package/scripts/lib/hook_registry.rb +44 -107
- package/scripts/lib/insights.rb +3 -4
- package/scripts/lib/installer_core.rb +19 -30
- package/scripts/lib/lock.rb +6 -26
- package/scripts/lib/outcome_guard.rb +7 -5
- package/scripts/lib/project_validator.rb +30 -1
- package/scripts/lib/roadmap_queue.rb +3 -3
- package/scripts/lib/roadmap_savepoint.rb +1 -1
- package/scripts/lib/rule_catalog.rb +6 -3
- package/scripts/lib/savepoint.rb +320 -0
- package/scripts/lib/scaffold_intent.rb +13 -179
- package/scripts/lib/session_backfill.rb +184 -0
- package/scripts/lib/session_close.rb +84 -0
- package/scripts/lib/session_git.rb +469 -0
- package/scripts/lib/session_ledger.rb +497 -0
- package/scripts/lib/store_discovery.rb +1 -1
- package/scripts/lib/store_provisioning.rb +1 -1
- package/scripts/maintenance-run +7 -7
- package/scripts/new-intent +63 -4
- package/scripts/plastic-lock +94 -41
- package/scripts/promote-session-item +150 -0
- package/scripts/rebuild-graph +1 -1
- package/scripts/roadmap-next +2 -2
- package/scripts/rollback.rb +42 -3
- package/scripts/scaffold-intent +37 -63
- package/scripts/session-commit +116 -0
- package/scripts/spawn-preamble +5 -5
- package/scripts/update.rb +7 -3
- package/skills/agent-advisor/SKILL.md +3 -3
- package/skills/agent-advisor/references/advisor-protocol.md +20 -20
- package/skills/auto/SKILL.md +218 -317
- package/skills/auto/evals/evals.json +10 -10
- package/skills/auto/references/agent-architecture.md +102 -90
- package/skills/auto/references/agent-report-contract.md +4 -21
- package/skills/auto/references/end-tail.md +47 -53
- package/skills/auto/references/human-report-contract.md +8 -8
- package/skills/conventions/SKILL.md +1 -3
- package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
- package/skills/conventions/references/locks-and-worktrees.md +47 -55
- package/skills/conventions/references/maintenance-and-revisions.md +12 -12
- package/skills/dashboard/SKILL.md +1 -1
- package/skills/direct/SKILL.md +66 -0
- package/skills/direct/references/request-signals.md +59 -0
- package/skills/doctor/SKILL.md +58 -11
- package/skills/doctor/report.md +3 -1
- package/skills/install/SKILL.md +11 -9
- package/skills/intent-continuing/SKILL.md +131 -89
- package/skills/intent-continuing/references/boarding-matrix.md +34 -0
- package/skills/intent-continuing/references/context-management.md +2 -2
- package/skills/intent-creating/SKILL.md +2 -2
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-ending/SKILL.md +28 -37
- package/skills/intent-ending/evals/evals.json +4 -4
- package/skills/intent-executing/SKILL.md +12 -49
- package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
- package/skills/intent-speccing/SKILL.md +108 -51
- package/skills/intent-speccing/evals/evals.json +5 -5
- package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
- package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
- package/skills/project-creating/SKILL.md +1 -1
- package/skills/releasing/SKILL.md +7 -8
- package/skills/tutorial/SKILL.md +2 -2
- package/skills/tutorial/references/track-1-guided.md +16 -18
- package/skills/tutorial/references/track-2-auto.md +12 -13
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
- package/templates/agents.md +4 -7
- package/templates/project.yml +7 -0
- package/templates/roadmap.md +1 -1
- package/templates/savepoint.md +2 -2
- package/templates/session-intent.md +29 -0
- package/agents/plastic-brainstorming.md +0 -48
- package/agents/plastic-future-intent-researcher.md +0 -35
- package/agents/plastic-intent-curator.md +0 -47
- package/agents/plastic-intent-discovery.md +0 -43
- package/agents/plastic-planner.md +0 -56
- package/agents/plastic-spec-specialist.md +0 -53
- package/hooks/auto-arm +0 -5
- package/hooks/bash-gate +0 -3
- package/hooks/continue +0 -31
- package/hooks/edit-gates +0 -3
- package/hooks/future-intent-check +0 -25
- package/hooks/gate-check +0 -12
- package/hooks/power-tools +0 -8
- package/scripts/hook-auto-arm +0 -51
- package/scripts/hook-bash-gate +0 -78
- package/scripts/hook-code-gate +0 -38
- package/scripts/hook-continue +0 -48
- package/scripts/hook-create-gate +0 -51
- package/scripts/hook-edit-gates +0 -58
- package/scripts/hook-future-intent-check +0 -90
- package/scripts/hook-gate-check +0 -169
- package/scripts/hook-links-gate +0 -54
- package/scripts/hook-lock-gate +0 -47
- package/scripts/hook-power-tools +0 -38
- package/scripts/hook-savepoint-pre +0 -32
- package/scripts/lib/codex_edit_gates.rb +0 -138
- package/scripts/lib/edit_gates.rb +0 -398
- package/scripts/lib/links_gate.rb +0 -140
- package/scripts/lib/qmd_hook.rb +0 -41
- package/scripts/lib/spec_header.rb +0 -83
- package/scripts/lib/start_intent.rb +0 -296
- package/scripts/start-intent +0 -89
- package/skills/_active-intent-gate.md +0 -26
- package/skills/auto/references/tiers.md +0 -100
- package/skills/continuing/SKILL.md +0 -34
- package/skills/continuing/evals/evals.json +0 -91
- package/skills/conventions/references/gates-and-enforcement.md +0 -53
- package/skills/conventions/references/tiers-and-dispatch.md +0 -135
- package/skills/doctor/references/gates-stuck-detection.md +0 -43
- package/skills/intent-brainstorming/SKILL.md +0 -118
- package/skills/intent-brainstorming/evals/evals.json +0 -67
- package/skills/intent-continuing/evals/evals.json +0 -145
- package/skills/intent-discovering/SKILL.md +0 -56
- package/skills/intent-grilling/SKILL.md +0 -108
- package/skills/intent-linking/SKILL.md +0 -128
- package/skills/intent-linking/evals/evals.json +0 -22
- package/skills/intent-linking/references/zettelkasten.md +0 -45
- package/skills/intent-locking/SKILL.md +0 -64
- package/skills/intent-planning/SKILL.md +0 -145
- package/skills/intent-planning/evals/evals.json +0 -81
- package/skills/intent-planning/references/plan-format.md +0 -130
- package/skills/intent-researching/SKILL.md +0 -123
- package/skills/intent-researching/evals/evals.json +0 -22
- package/skills/intent-savepoint/SKILL.md +0 -83
- package/skills/intent-savepoint/references/context-management.md +0 -32
- package/skills/intent-starting/SKILL.md +0 -151
- package/skills/intent-starting/evals/evals.json +0 -117
- package/skills/intent-starting/references/boarding-matrix.md +0 -35
- package/skills/project-continuing/SKILL.md +0 -119
- package/skills/project-continuing/evals/evals.json +0 -100
- package/skills/roadmap-continuing/SKILL.md +0 -89
- package/skills/roadmap-continuing/evals/evals.json +0 -82
- package/skills/skill-creating/SKILL.md +0 -75
- package/skills/skill-creating/evals/evals.json +0 -108
- package/skills/skill-creating/references/agents.md +0 -168
- package/skills/skill-creating/references/defaults-first.md +0 -23
- package/skills/skill-creating/references/evals.md +0 -41
- package/skills/skill-creating/references/hooks.md +0 -251
- package/skills/skill-creating/references/progressive-disclosure.md +0 -176
- package/skills/skill-creating/references/scripts.md +0 -166
- package/skills/skill-creating/references/skills.md +0 -169
- package/skills/skill-creating/scripts/scaffold.rb +0 -313
- package/skills/skill-evaluating/SKILL.md +0 -141
- package/skills/skill-evaluating/assets/eval-template.json +0 -12
- package/skills/skill-evaluating/evals/evals.json +0 -75
- package/skills/skill-evaluating/references/convention-checks.md +0 -76
- package/skills/skill-evaluating/references/eval-methodology.md +0 -154
- package/skills/store-curating/SKILL.md +0 -64
- package/skills/store-curating/evals/evals.json +0 -38
- package/skills/store-indexing/SKILL.md +0 -93
- package/skills/store-indexing/evals/evals.json +0 -22
- package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
- package/skills/store-provisioning/SKILL.md +0 -55
- /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
- /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
- /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Boarding matrix — which station Start drops you at
|
|
2
|
-
|
|
3
|
-
The station is derived from `savepoint.md`'s last line plus the real artifacts on disk.
|
|
4
|
-
Classify from the last line alone, then verify ONLY that line's artifact is real
|
|
5
|
-
(sentinel-aware). On drift, rebuild the ledger from disk and note it.
|
|
6
|
-
|
|
7
|
-
| savepoint last line | latest delivered | boards at | continue with |
|
|
8
|
-
|---|---|---|---|
|
|
9
|
-
| `What {id}--{slug}.md` (born) | What | **What / Why** | What work (106-expanded), then brainstorm → `spec.md` |
|
|
10
|
-
| `Why started` (spec still sentinel) | What | **Why** | continue brainstorming → `spec.md` |
|
|
11
|
-
| `Why spec.md created` | Why | **How** | `plan.md` + `actions/` + `checklist.md` |
|
|
12
|
-
| `How started` / `How plan.md created` | (How in progress) | **How** | finish `plan.md` → `checklist.md` |
|
|
13
|
-
| `How checklist.md created` / `Exec started` | How | **Exec** | implement, tick the checklist |
|
|
14
|
-
| `Exec outcome.md created` | Exec | **ready to complete** | exit at Done |
|
|
15
|
-
| `Done delivered` / `Done abandoned` | terminal | **report only** | immutable; ask what is next |
|
|
16
|
-
|
|
17
|
-
## Per-station behaviour (what "continue" means)
|
|
18
|
-
|
|
19
|
-
- **What** → do what What requires (to be expanded in 106), then brainstorm → `spec.md`.
|
|
20
|
-
- **Why** → continue brainstorming; deliver `spec.md`.
|
|
21
|
-
- **How** → continue `plan.md` + `actions/` + `checklist.md`.
|
|
22
|
-
- **Exec** → verify what has been delivered, then continue (or restart) the delivery /
|
|
23
|
-
research. The first unchecked `checklist.md` item is the next step; the newest `## Insights`
|
|
24
|
-
entry supplies human-readable context.
|
|
25
|
-
- **ready to complete** → `outcome.md` is real; run the ending procedure (~93).
|
|
26
|
-
- **Done** → terminal. Report the outcome, ask what is next. Never reopen; INDEX is
|
|
27
|
-
authoritative.
|
|
28
|
-
|
|
29
|
-
## Notes
|
|
30
|
-
|
|
31
|
-
- The mode (auto / guided) is asked exactly ONCE, whatever station Start lands at. It is never
|
|
32
|
-
re-asked at a later station. The lock is taken FIRST regardless of station (terminal intents
|
|
33
|
-
excepted: they get no lock and no resume).
|
|
34
|
-
- An `## Insights` entry marked `(autonomous)` means the intent was being delivered
|
|
35
|
-
autonomously; in guided mode, surface that and offer to hand back to `plastic-auto`.
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-project-continuing
|
|
3
|
-
description: >-
|
|
4
|
-
Use when the user wants to land on the project board, asks "what should I work on" in this
|
|
5
|
-
project, or wants active intents plus the most-valuable next work surfaced. This is the
|
|
6
|
-
default route of plastic-continuing for a bare "continue" with no specific intent or roadmap
|
|
7
|
-
named. It presents state and stops without asking how to proceed - that single mode question
|
|
8
|
-
lives in plastic-intent-starting, once the user names a specific intent to work.
|
|
9
|
-
user-invocable: true
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Project Continuing - land on the board
|
|
13
|
-
|
|
14
|
-
`plastic-project-continuing` is the project route of `plastic-continuing`. It lands on the
|
|
15
|
-
Markdown board, presents active work and the most-valuable next work, and stops. It does not
|
|
16
|
-
resume a specific intent by ledger (that is `plastic-intent-continuing`) and it asks nothing.
|
|
17
|
-
|
|
18
|
-
## Continue (present the board)
|
|
19
|
-
|
|
20
|
-
Land on the Markdown board via the `plastic-dashboard` skill. Rendering belongs there, not
|
|
21
|
-
here - run the data payload and fill + present the matching template:
|
|
22
|
-
- Project loaded -> `ruby ~/.plastic/scripts/dashboard.rb project <slug> --data`
|
|
23
|
-
- Otherwise (no project loaded, the global fallback) -> `ruby ~/.plastic/scripts/dashboard.rb continue --data`
|
|
24
|
-
|
|
25
|
-
Fill the matching template from `plastic-dashboard`'s `templates/` and **present the filled
|
|
26
|
-
Markdown in your reply** (every time, non-optional). If the reply does not contain the filled
|
|
27
|
-
Markdown, the user sees nothing - tool-call stdout and hook `additionalContext` are both
|
|
28
|
-
invisible to them. `hook-continue` also emits a one-line `systemMessage` summary as a
|
|
29
|
-
hook-owned fallback; treat it as a floor only, never as a substitute for presenting the full
|
|
30
|
-
board here. See `plastic-dashboard` for the fill mechanics (`references/board-fill.md` has the
|
|
31
|
-
scoped detail).
|
|
32
|
-
|
|
33
|
-
The board load runs the scoped store check on every load (`doctor --store <scope>`): the
|
|
34
|
-
global board runs `--store global` and a project board runs `--store <slug>`. The result
|
|
35
|
-
arrives in the payload as `store_health`; surface it as a one-line store-health note. It is
|
|
36
|
-
non-fatal (a warn or fail is shown as data, it does not block continuing).
|
|
37
|
-
|
|
38
|
-
## Priority Order
|
|
39
|
-
|
|
40
|
-
1. **Active intents first** - surface work in progress.
|
|
41
|
-
2. **Project context** - if in a registered project, show governing + tactical intents.
|
|
42
|
-
3. **Stale future intents** - surface for triage (see below).
|
|
43
|
-
4. **Fresh future intents** - offer as next work.
|
|
44
|
-
|
|
45
|
-
## Stale Future Intents
|
|
46
|
-
|
|
47
|
-
If a future intent's `created` date is older than the configured `stale_threshold_days`
|
|
48
|
-
(default 3), surface it for triage without taking action:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
Stale future intents (no action taken):
|
|
52
|
-
|
|
53
|
-
- [ID - name] (X days old)
|
|
54
|
-
a) Activate - start working on it now
|
|
55
|
-
b) Abandon - mark as abandoned
|
|
56
|
-
c) Defer to agent: implement | research | ideate
|
|
57
|
-
d) Auto - go fully autonomous (invokes plastic-auto)
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
When the user activates a future intent, move it to `## Active` in INDEX.md and auto-commit.
|
|
61
|
-
|
|
62
|
-
**Defer to agent: research.** Selecting `research` is a real dispatch, not a label. Resolve
|
|
63
|
-
`plastic-future-intent-researcher`'s model via `read-config agents.models.<basename> --project
|
|
64
|
-
<repo>` (project override, then global, then the shipped tier default) rather than relying on
|
|
65
|
-
bare frontmatter, which also honors a sanctioned `agents.models.<name>` override if one is
|
|
66
|
-
configured. Dispatch the agent (Agent tool, `subagent_type: "plastic-future-intent-researcher"`)
|
|
67
|
-
on the selected stale future intent, passing the resolved model explicitly. The agent writes its
|
|
68
|
-
findings into that intent's `## Context` (see `agents/plastic-future-intent-researcher.md`); it
|
|
69
|
-
does not itself dispatch further sub-agents. Once it returns, re-present the stale-future-intent
|
|
70
|
-
triage so the user can act on the fresh findings now on record.
|
|
71
|
-
|
|
72
|
-
## Deciding rules
|
|
73
|
-
|
|
74
|
-
The board's ranked next-work order is deterministic, computed by `dashboard.rb`; this skill
|
|
75
|
-
never re-derives it. Cite the rule NAMES only when explaining a ranking or disposition: Effort,
|
|
76
|
-
Value, Flags, Override, Caps. Read `plastic-dashboard`'s `references/classification.md` for the
|
|
77
|
-
definitions; do not restate or copy them here.
|
|
78
|
-
|
|
79
|
-
## Then stop
|
|
80
|
-
|
|
81
|
-
Present "here is the state, what next?" and wait. Offer active intents first, then future
|
|
82
|
-
intents. Do not start executing work. The only follow-up from here:
|
|
83
|
-
- User/agent names a specific intent to continue -> hand to `plastic-intent-continuing`
|
|
84
|
-
(which reads the ledger and, in turn, hands to `plastic-intent-starting` for the single
|
|
85
|
-
auto-or-guided ask).
|
|
86
|
-
|
|
87
|
-
## Coordination
|
|
88
|
-
|
|
89
|
-
Intent 149 has landed: the dashboard is demoted to prose (no Value x Effort grid). This skill
|
|
90
|
-
was built against the live INDEX.md-parsing `--data` path (147, the DB cutover, has not
|
|
91
|
-
landed). Its rule-name citations (`classification.md`, cited by name, not logic) and the
|
|
92
|
-
`dashboard.rb project <slug> --data` -> `dashboard-project.md` path still resolve.
|
|
93
|
-
|
|
94
|
-
Intent 149a has landed on top of 149: the four intent lists (recently worked, active, future,
|
|
95
|
-
next work) now render as Markdown tables. The prose demotion and the no-grid stance are unchanged,
|
|
96
|
-
and the rule-name citations and the `dashboard.rb project <slug> --data` -> `dashboard-project.md`
|
|
97
|
-
path still resolve.
|
|
98
|
-
|
|
99
|
-
Intent 148 landed: roadmaps are the primary planning surface. When the tier has a mid-flight
|
|
100
|
-
roadmap (`ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <tier>/roadmaps` reports a `state`
|
|
101
|
-
other than `none`), the roadmap route (`plastic-roadmap-continuing`) is the live surface for
|
|
102
|
-
"what to work next", and `plastic-continuing` routes there. This board still presents project
|
|
103
|
-
state and stops, asking nothing (unchanged): it does not itself dispatch, re-rank, or resume a
|
|
104
|
-
roadmap. The global store and any project with no roadmap report `none`, so this board stays the
|
|
105
|
-
default route for them.
|
|
106
|
-
|
|
107
|
-
Intent 202 has landed on top of 149/149a: the project board is short by default. The
|
|
108
|
-
Recently-worked table and the raw Future table are both gone, replaced by a 2-3 sentence
|
|
109
|
-
prose summary (built in `dashboard.rb`, not by this skill) plus a one-line footer stating
|
|
110
|
-
true totals. Active is capped at 3 (ordered lifecycle-stage descending, a later savepoint
|
|
111
|
-
breaking a tie - D2), Next-work at 5. Conversational paging ("more"/"all") re-invokes
|
|
112
|
-
`dashboard.rb ... --data` with `--limit-active`/`--limit-next`/`--all`, carrying no state on
|
|
113
|
-
disk; `--plain` prints the full uncapped board as plain text for a real pager. The rule-name
|
|
114
|
-
citations and the `dashboard.rb project <slug> --data` -> `dashboard-project.md` path still
|
|
115
|
-
resolve.
|
|
116
|
-
|
|
117
|
-
## References
|
|
118
|
-
|
|
119
|
-
- `references/board-fill.md` - the template-fill mechanics and store-health surfacing detail.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-project-continuing",
|
|
3
|
-
"notes": "Intent 158a1. New project route, absorbing intent-continuing's Continue/Priority Order/Stale Future Intents sections (move, not duplicate). Scopes: description triggering (1-3) and behavior/convention compliance (4-10), the latter checked against SKILL.md.",
|
|
4
|
-
"results": {
|
|
5
|
-
"triggering": { "cases": 3, "passed": 3, "run": "2026-07-10, one subagent per case" },
|
|
6
|
-
"behavior": { "cases": 7, "passed": 7, "evidence": "convention checks against skills/project-continuing/SKILL.md after the 158a1 extraction; id 10 (intent 170) added for the research-dispatch wiring of plastic-future-intent-researcher" }
|
|
7
|
-
},
|
|
8
|
-
"evals": [
|
|
9
|
-
{
|
|
10
|
-
"id": 1, "scope": "triggering", "set": "train",
|
|
11
|
-
"prompt": "what should I work on in this project",
|
|
12
|
-
"expected_output": "Activates plastic-project-continuing.",
|
|
13
|
-
"files": [],
|
|
14
|
-
"assertions": [
|
|
15
|
-
{ "type": "code", "check": "router CHOICE == plastic-project-continuing", "observed": "plastic-project-continuing", "result": "pass" }
|
|
16
|
-
]
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": 2, "scope": "triggering", "set": "train",
|
|
20
|
-
"prompt": "land me on the project board",
|
|
21
|
-
"expected_output": "Activates plastic-project-continuing.",
|
|
22
|
-
"files": [],
|
|
23
|
-
"assertions": [
|
|
24
|
-
{ "type": "code", "check": "router CHOICE == plastic-project-continuing", "observed": "plastic-project-continuing", "result": "pass" }
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"id": 3, "scope": "triggering", "set": "validation",
|
|
29
|
-
"prompt": "continue",
|
|
30
|
-
"expected_output": "Bare 'continue' with no specific intent or roadmap named reaches plastic-project-continuing via plastic-continuing's default route.",
|
|
31
|
-
"files": [],
|
|
32
|
-
"assertions": [
|
|
33
|
-
{ "type": "code", "check": "router CHOICE == plastic-project-continuing", "observed": "plastic-project-continuing", "result": "pass" }
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"id": 4, "scope": "behavior", "set": "train",
|
|
38
|
-
"prompt": "Is dashboard selection project-aware?",
|
|
39
|
-
"expected_output": "Project loaded -> `dashboard.rb project <slug> --data` -> fills dashboard-project.md; otherwise -> `dashboard.rb continue --data`. Skill only invokes, does not render.",
|
|
40
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
41
|
-
"assertions": [
|
|
42
|
-
{ "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 board)' section", "result": "pass" }
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": 5, "scope": "behavior", "set": "train",
|
|
47
|
-
"prompt": "Does the skill cite the classification rules by name instead of copying the logic?",
|
|
48
|
-
"expected_output": "SKILL.md's 'Deciding rules' section names Effort/Value/Flags/Override/Caps and points to plastic-dashboard's references/classification.md; it does not restate the rule definitions.",
|
|
49
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
50
|
-
"assertions": [
|
|
51
|
-
{ "type": "convention", "check": "rule names cited, no copied Effort/Value/Flags/Override/Caps definitions", "observed": "present in 'Deciding rules'", "result": "pass" }
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": 6, "scope": "behavior", "set": "train",
|
|
56
|
-
"prompt": "Does the project route ask 'auto or guided?' before stopping?",
|
|
57
|
-
"expected_output": "No. The project route presents state then stops; it asks nothing. The single ask lives in plastic-intent-starting once a specific intent is named.",
|
|
58
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
59
|
-
"assertions": [
|
|
60
|
-
{ "type": "convention", "check": "no 'auto or guided' ask anywhere in SKILL.md", "observed": "absent", "result": "pass" }
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": 7, "scope": "behavior", "set": "validation",
|
|
65
|
-
"prompt": "Does the skill present the board before stopping?",
|
|
66
|
-
"expected_output": "The filled Markdown board is presented in the reply (non-optional), then a 'Then stop' section waits for the user.",
|
|
67
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
68
|
-
"assertions": [
|
|
69
|
-
{ "type": "convention", "check": "presentation is mandatory and precedes the 'Then stop' wait", "observed": "present", "result": "pass" }
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"id": 8, "scope": "behavior", "set": "validation",
|
|
74
|
-
"prompt": "Does the skill carry the intent-202 coordination note (project board short by default)?",
|
|
75
|
-
"expected_output": "A 'Coordination' section records that intent 202 has landed: the Recently-worked and raw Future tables are gone, replaced by a prose summary (built in dashboard.rb) and an honest-totals footer; Active is capped at 3 (lifecycle-stage descending, D2) and Next-work at 5; conversational paging re-invokes dashboard.rb --data with --limit-active/--limit-next/--all (no state on disk); --plain prints the full uncapped plain-text board. The rule-name citations and the dashboard.rb project <slug> --data -> dashboard-project.md path still resolve.",
|
|
76
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
77
|
-
"assertions": [
|
|
78
|
-
{ "type": "convention", "check": "'202' present with the landed coordination note describing the new shape, caps, paging flags, and --plain", "observed": "present: 'Intent 202 has landed' paragraph with the described content", "result": "pass" }
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"id": 9, "scope": "behavior", "set": "validation",
|
|
83
|
-
"prompt": "Are Priority Order and Stale Future Intents present here and only here (not in intent-continuing)?",
|
|
84
|
-
"expected_output": "Both sections are present verbatim in this skill; they no longer exist in skills/intent-continuing/SKILL.md.",
|
|
85
|
-
"files": ["skills/project-continuing/SKILL.md", "skills/intent-continuing/SKILL.md"],
|
|
86
|
-
"assertions": [
|
|
87
|
-
{ "type": "convention", "check": "'## Priority Order' and '## Stale Future Intents' present here, absent from intent-continuing", "observed": "present here, absent there", "result": "pass" }
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"id": 10, "scope": "behavior", "set": "validation",
|
|
92
|
-
"prompt": "In the stale-future-intent triage, the user picks option c) Defer to agent: research. What happens?",
|
|
93
|
-
"expected_output": "A real dispatch, not a label: plastic-future-intent-researcher's model is resolved via `read-config agents.models.<basename> --project <repo>` (never bare frontmatter, sanctioned-override-aware), the agent is dispatched via the Agent tool on the selected stale future intent and writes its findings into that intent's `## Context`, then the skill re-presents the stale-future-intent triage.",
|
|
94
|
-
"files": ["skills/project-continuing/SKILL.md"],
|
|
95
|
-
"assertions": [
|
|
96
|
-
{ "type": "convention", "check": "the 'Defer to agent: research' paragraph under Stale Future Intents resolves the model via read-config (not bare frontmatter), dispatches plastic-future-intent-researcher via the Agent tool, and re-presents the triage after the agent returns", "observed": "'Defer to agent: research.' paragraph present: resolves via read-config agents.models.<basename> --project <repo>, dispatches subagent_type plastic-future-intent-researcher, findings land in ## Context, then re-presents the triage", "result": "pass" }
|
|
97
|
-
]
|
|
98
|
-
}
|
|
99
|
-
]
|
|
100
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-roadmap-continuing
|
|
3
|
-
description: >-
|
|
4
|
-
Use when the user wants to continue or resume a roadmap, pick up a mid-flight delivery batch,
|
|
5
|
-
asks "where is the roadmap", or wants to resume the batch that was shipping, including an
|
|
6
|
-
indirect ask that never names a roadmap directly (for example "where did that batch of
|
|
7
|
-
intents land"). This is the roadmap route of plastic-continuing: it finds the tier's
|
|
8
|
-
mid-flight roadmap, presents its state, then asks how to proceed exactly once.
|
|
9
|
-
user-invocable: true
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Roadmap Continuing - resume the mid-flight roadmap
|
|
13
|
-
|
|
14
|
-
`plastic-roadmap-continuing` is the roadmap route of `plastic-continuing`. It finds the tier's
|
|
15
|
-
mid-flight roadmap, presents its state, then asks the user how to proceed, exactly once.
|
|
16
|
-
|
|
17
|
-
Before intent 158a1 there was no automated way to do this: the `171` (consistency-dividend)
|
|
18
|
-
roadmap handoff had to be resumed by hand, carried as a free-prose note in `171`'s own
|
|
19
|
-
`## Insights`. This skill closes that gap.
|
|
20
|
-
|
|
21
|
-
## Find the mid-flight roadmap
|
|
22
|
-
|
|
23
|
-
1. Determine the tier (project vs. global) and enumerate that tier's live `roadmaps/*.md`
|
|
24
|
-
(exclude `roadmaps/archived/`). Read via Read/glob, or `plastic-roadmap`'s Read/consume
|
|
25
|
-
verb. See `plastic-roadmap`'s `references/file-format.md` for the file grammar; do not
|
|
26
|
-
duplicate it here.
|
|
27
|
-
2. For each candidate, also read its paired ledger `roadmaps/<slug>.savepoint.md` when present
|
|
28
|
-
(see `plastic-roadmap`'s `references/file-format.md#savepoint-ledger`): its last line(s) are a
|
|
29
|
-
cheaper, precise last-event signal (for example `dispatched 134` or `merged 172`), read
|
|
30
|
-
alongside the existing `## Batches` (or legacy `## Waves`) / `## Log` judgment. The ledger is read-only here, a derived
|
|
31
|
-
signal, never a new status field; INDEX.md stays the sole status writer.
|
|
32
|
-
3. Rank liveness by calling the shared reader in which mode (one implementation across the
|
|
33
|
-
auto loop and this skill):
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
ruby ~/.plastic/scripts/roadmap-next --roadmaps-dir <tier>/roadmaps --which
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Read `state` and the winning `roadmap`. When `state` is `tie`, `tie_candidates` lists the
|
|
40
|
-
equally-live roadmaps to present side by side; the single "auto or guided?" ask below
|
|
41
|
-
doubles as the resolution. `roadmap-next` liveness-ranks the same way this skill used to do
|
|
42
|
-
by eye (a `delivering` or `blocked` entry wins, else the newest ledger or `## Log`
|
|
43
|
-
timestamp), now deterministically. See `references/liveness-ranking.md` for the algorithm it
|
|
44
|
-
implements.
|
|
45
|
-
4. A genuine tie (two candidates equally live) is presented to the user and resolved by the
|
|
46
|
-
single ask below, not silently picked.
|
|
47
|
-
|
|
48
|
-
Read `../plastic-conventions/references/roadmaps.md` for the roadmap file format, batch
|
|
49
|
-
semantics, and the status-mirror rule behind the candidates gathered above. This path resolves
|
|
50
|
-
relative to this skill's own installed directory.
|
|
51
|
-
|
|
52
|
-
## Present state
|
|
53
|
-
|
|
54
|
-
Present the chosen roadmap's `## Goal`, the current batch with each entry's mirrored status, the
|
|
55
|
-
ledger's newest line(s) (the last mechanized event) alongside the newest `## Log` line, before any
|
|
56
|
-
ask, so the coordinator sees the machine last-event at a glance.
|
|
57
|
-
|
|
58
|
-
## Ask once
|
|
59
|
-
|
|
60
|
-
Ask "auto or guided?" exactly once, after presenting state, mirroring
|
|
61
|
-
`plastic-intent-starting`'s single-ask contract:
|
|
62
|
-
- **guided** -> continue step by step with the user.
|
|
63
|
-
- **auto** -> hand off to `plastic-auto` to drive the next batch or entry.
|
|
64
|
-
|
|
65
|
-
Never re-ask. No new roadmap or INDEX status field is invented anywhere in this flow.
|
|
66
|
-
|
|
67
|
-
## The shared reader
|
|
68
|
-
|
|
69
|
-
Liveness ranking and frontier selection live in one place, `scripts/lib/roadmap_queue.rb`
|
|
70
|
-
(intent 148), behind the `scripts/roadmap-next` CLI. This skill calls it in which mode rather
|
|
71
|
-
than ranking roadmaps in prose, so the auto loop (`plastic-auto`) and this skill share exactly
|
|
72
|
-
one implementation (no forked ranking logic). 158a1 originally added no script because the
|
|
73
|
-
benefit was marginal for a read-time judgment; the auto-loop consumer flipped that calculus by
|
|
74
|
-
making the ranking load-bearing and deterministic. The reader is read-only: it consumes the
|
|
75
|
-
roadmap `.md`, the 134 `<slug>.savepoint.md` ledger, and INDEX.md, and writes nothing. INDEX.md
|
|
76
|
-
stays the single status writer.
|
|
77
|
-
|
|
78
|
-
## Caller contract: who writes the ledger
|
|
79
|
-
|
|
80
|
-
This skill is a reader, not a writer, of `roadmaps/<slug>.savepoint.md`. The coordinator flows
|
|
81
|
-
(`plastic-auto`, the enforcer, and this skill's own resume-and-hand-off path) call `ruby
|
|
82
|
-
~/.plastic/scripts/roadmap-savepoint append` at their own dispatch, merge, park, handoff, and
|
|
83
|
-
release points, the same events `plastic-roadmap`'s verbs append at their closing steps. A
|
|
84
|
-
resuming coordinator therefore both reads the ledger here and writes to it as it drives the next
|
|
85
|
-
batch or entry.
|
|
86
|
-
|
|
87
|
-
## References
|
|
88
|
-
|
|
89
|
-
- `references/liveness-ranking.md` - the read-time ranking algorithm and the tie rule.
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-roadmap-continuing",
|
|
3
|
-
"notes": "Intent 158a1. New roadmap route, closing the gap that forced the 171 (consistency-dividend) roadmap handoff to be resumed by hand. Scopes: description triggering (1-3) and behavior/convention compliance (4-8), the latter checked against SKILL.md.",
|
|
4
|
-
"results": {
|
|
5
|
-
"triggering": { "cases": 3, "passed": 3, "run": "2026-07-10, one subagent per case" },
|
|
6
|
-
"behavior": { "cases": 5, "passed": 5, "evidence": "convention checks against skills/roadmap-continuing/SKILL.md and references/liveness-ranking.md" }
|
|
7
|
-
},
|
|
8
|
-
"evals": [
|
|
9
|
-
{
|
|
10
|
-
"id": 1, "scope": "triggering", "set": "train",
|
|
11
|
-
"prompt": "continue the roadmap",
|
|
12
|
-
"expected_output": "Activates plastic-roadmap-continuing.",
|
|
13
|
-
"files": [],
|
|
14
|
-
"assertions": [
|
|
15
|
-
{ "type": "code", "check": "router CHOICE == plastic-roadmap-continuing", "observed": "plastic-roadmap-continuing", "result": "pass" }
|
|
16
|
-
]
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": 2, "scope": "triggering", "set": "train",
|
|
20
|
-
"prompt": "resume the delivery batch we were shipping",
|
|
21
|
-
"expected_output": "Activates plastic-roadmap-continuing.",
|
|
22
|
-
"files": [],
|
|
23
|
-
"assertions": [
|
|
24
|
-
{ "type": "code", "check": "router CHOICE == plastic-roadmap-continuing", "observed": "plastic-roadmap-continuing", "result": "pass" }
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"id": 3, "scope": "triggering", "set": "validation",
|
|
29
|
-
"prompt": "where did that batch of intents land",
|
|
30
|
-
"expected_output": "Activates plastic-roadmap-continuing (indirect trigger: a roadmap-resume request that never names 'roadmap' or 'continue').",
|
|
31
|
-
"files": [],
|
|
32
|
-
"assertions": [
|
|
33
|
-
{ "type": "code", "check": "router CHOICE == plastic-roadmap-continuing", "observed": "plastic-roadmap-continuing", "result": "pass" }
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"id": 4, "scope": "behavior", "set": "train",
|
|
38
|
-
"prompt": "Does the skill rank liveness correctly when a batch entry is delivering or blocked?",
|
|
39
|
-
"expected_output": "A roadmap with any delivering/blocked batch entry wins the ranking outright over every other candidate.",
|
|
40
|
-
"files": ["skills/roadmap-continuing/references/liveness-ranking.md"],
|
|
41
|
-
"assertions": [
|
|
42
|
-
{ "type": "convention", "check": "delivering/blocked-wins rule documented as step 2 of the algorithm", "observed": "present", "result": "pass" }
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": 5, "scope": "behavior", "set": "train",
|
|
47
|
-
"prompt": "Does the skill fall back to newest Log date when no candidate is delivering/blocked?",
|
|
48
|
-
"expected_output": "Among remaining candidates, the most recent ## Log entry timestamp wins.",
|
|
49
|
-
"files": ["skills/roadmap-continuing/references/liveness-ranking.md"],
|
|
50
|
-
"assertions": [
|
|
51
|
-
{ "type": "convention", "check": "newest-Log-date fallback documented as step 3", "observed": "present", "result": "pass" }
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": 6, "scope": "behavior", "set": "train",
|
|
56
|
-
"prompt": "Does the skill present the roadmap state before asking?",
|
|
57
|
-
"expected_output": "The '## Present state' section (Goal, current batch, newest Log line) runs before the '## Ask once' section.",
|
|
58
|
-
"files": ["skills/roadmap-continuing/SKILL.md"],
|
|
59
|
-
"assertions": [
|
|
60
|
-
{ "type": "convention", "check": "Present state precedes Ask once in document order", "observed": "present", "result": "pass" }
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": 7, "scope": "behavior", "set": "validation",
|
|
65
|
-
"prompt": "Does the skill ask 'auto or guided?' exactly once?",
|
|
66
|
-
"expected_output": "Exactly one ask, after presenting state; never re-asked.",
|
|
67
|
-
"files": ["skills/roadmap-continuing/SKILL.md"],
|
|
68
|
-
"assertions": [
|
|
69
|
-
{ "type": "convention", "check": "the literal phrase 'auto or guided' appears on exactly one line of SKILL.md", "observed": "one occurrence", "result": "pass" }
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"id": 8, "scope": "behavior", "set": "validation",
|
|
74
|
-
"prompt": "Does the skill invent a new roadmap or INDEX status field, or add a new script?",
|
|
75
|
-
"expected_output": "No. Liveness is computed at read time from existing files; INDEX.md stays the sole status writer; the enumeration/ranking is prose, not a helper script.",
|
|
76
|
-
"files": ["skills/roadmap-continuing/SKILL.md", "skills/roadmap-continuing/references/liveness-ranking.md"],
|
|
77
|
-
"assertions": [
|
|
78
|
-
{ "type": "convention", "check": "no new field or script introduced; 'No new script' section present", "observed": "present", "result": "pass" }
|
|
79
|
-
]
|
|
80
|
-
}
|
|
81
|
-
]
|
|
82
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-skill-creating
|
|
3
|
-
description: >
|
|
4
|
-
Author or revise a Plastic skill, a subagent or Agent role file, or a
|
|
5
|
-
lifecycle hook with progressive disclosure. Use when creating or editing a
|
|
6
|
-
SKILL.md, writing a description or frontmatter, designing the slim body,
|
|
7
|
-
building references, evals, or scripts, or scaffolding a new skill. Also use
|
|
8
|
-
when a skill is too big or over its token budget, when prompts are bloated,
|
|
9
|
-
when an agent keeps missing a step or ignoring instructions, or when the user
|
|
10
|
-
says "progressive disclosure", "write a skill", "thin router", "split into
|
|
11
|
-
references", or "make this slim".
|
|
12
|
-
user-invocable: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Creating Skills
|
|
16
|
-
|
|
17
|
-
Author skills, agents, and hooks as thin routers over deep references. This
|
|
18
|
-
body carries the rules that must stay correct without opening anything, then
|
|
19
|
-
routes each authoring task to the reference that holds the depth.
|
|
20
|
-
|
|
21
|
-
## Rules (must be right even if no reference is opened)
|
|
22
|
-
|
|
23
|
-
- Three load levels, hard budgets: metadata around 100 tokens (always loaded),
|
|
24
|
-
body under 5000 tokens and under 500 lines (loaded on trigger), references on
|
|
25
|
-
demand. Keep the body well under budget, not at the ceiling.
|
|
26
|
-
- Progressive disclosure first: the body routes, the references hold the depth.
|
|
27
|
-
Any deep how-to in the body belongs in a reference instead.
|
|
28
|
-
- Description states WHEN to use, not the workflow. Write it in third person,
|
|
29
|
-
front-load concrete trigger keywords, and include at least one indirect
|
|
30
|
-
trigger (a request that never names the domain). Never summarize the steps.
|
|
31
|
-
- Bind every reference link to an observable trigger condition. Never leave a
|
|
32
|
-
bare pointer to a reference.
|
|
33
|
-
- References stay one level deep. Any reference over 100 lines opens with a
|
|
34
|
-
table of contents.
|
|
35
|
-
- Build at least three evals before writing extensive docs.
|
|
36
|
-
- Match determinism to fragility: a deterministic script for fragile or
|
|
37
|
-
repeated mechanical steps, prose for judgment calls.
|
|
38
|
-
- Imperative voice, no second person. User-facing docs (README, docs/, AGENTS.md,
|
|
39
|
-
CLAUDE.md) never use em-dashes or en-dashes, and newly authored skill text avoids
|
|
40
|
-
them (use commas, periods, parentheses, colons). Existing internal files and the
|
|
41
|
-
sanctioned template emissions (templates/index.md's INDEX line shape) are not
|
|
42
|
-
violations.
|
|
43
|
-
- The `plastic-` prefix is reserved for skills and hooks Plastic itself ships. A skill
|
|
44
|
-
authored outside Plastic's own tree takes a different name; doctor's ownership checks
|
|
45
|
-
and the installer's purge both key off the prefix.
|
|
46
|
-
|
|
47
|
-
## Route the authoring task to its reference
|
|
48
|
-
|
|
49
|
-
| Authoring task | Open |
|
|
50
|
-
|---|---|
|
|
51
|
-
| Starting any authoring task: load the load-level model and the thin-router pattern first | `references/progressive-disclosure.md` |
|
|
52
|
-
| Authoring an Agent Skill (frontmatter, description, slim body, voice) | `references/skills.md` |
|
|
53
|
-
| Authoring a subagent or Agent role file | `references/agents.md` |
|
|
54
|
-
| Authoring a lifecycle hook | `references/hooks.md` |
|
|
55
|
-
| Deciding script versus prose, or writing a script | `references/scripts.md` |
|
|
56
|
-
| Building evals for a skill | `references/evals.md` |
|
|
57
|
-
|
|
58
|
-
Read `references/defaults-first.md` before naming an external skill as a default, for the
|
|
59
|
-
Plastic-first, delegate-by-exception rule.
|
|
60
|
-
|
|
61
|
-
## Shrink context, or let a skill self-improve
|
|
62
|
-
|
|
63
|
-
- When prompts or tool output blow the context budget, open `references/hooks.md` (E7) for
|
|
64
|
-
the global token levers: a PostToolUse hook that trims noisy tool output before it enters
|
|
65
|
-
context, and Programmatic Tool Calling that keeps looped tool results in code, not context.
|
|
66
|
-
- When a skill should learn from its own real runs, open `references/hooks.md` (E8) for the
|
|
67
|
-
propose-only Stop or SubagentStop loop (transcript to proposed edits to human approval to
|
|
68
|
-
git, effort-gated). The dedicated skill is the future `improving-skills` skill.
|
|
69
|
-
|
|
70
|
-
## Scaffolder and evals
|
|
71
|
-
|
|
72
|
-
- To start a new skill, agent, or hook from a born-slim file, run
|
|
73
|
-
`scripts/scaffold.rb`.
|
|
74
|
-
- To design, run, and grade evals in depth (paired runs, assertions after
|
|
75
|
-
observing, pass rates), use the `plastic-skill-evaluating` skill.
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-skill-creating",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I want to author a new Plastic skill, how should I structure it?",
|
|
7
|
-
"expected_output": "The skill should activate. This is a direct authoring request that names the domain. Guide the user through progressive disclosure: metadata around 100 tokens, a slim body under 5000 tokens and 500 lines that routes, and references on demand. Point to references/skills.md for frontmatter, description, and voice, and route load-level questions through references/progressive-disclosure.md first.",
|
|
8
|
-
"files": [],
|
|
9
|
-
"assertions": [
|
|
10
|
-
"The skill activates (direct authoring request that names the domain).",
|
|
11
|
-
"The response routes to references rather than dumping deep how-to inline.",
|
|
12
|
-
"The response states the load-level budgets (around 100 token metadata, body under 5000 tokens and 500 lines)."
|
|
13
|
-
]
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"id": 2,
|
|
17
|
-
"prompt": "The agent keeps ignoring my instructions and the file is huge, help me restructure it",
|
|
18
|
-
"expected_output": "The skill should activate. This is an indirect trigger that never names skills or progressive disclosure, but the symptoms (bloated file, agent missing or skipping steps) are exactly the over-budget body case the skill covers. Guide toward splitting the body into references, keeping the body a thin router, and binding each reference to an observable trigger condition.",
|
|
19
|
-
"files": [],
|
|
20
|
-
"assertions": [
|
|
21
|
-
"The skill activates on the indirect trigger (no skill or progressive-disclosure keyword in the prompt).",
|
|
22
|
-
"The response guides toward splitting the body into references and keeping a thin router."
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"id": 3,
|
|
27
|
-
"prompt": "Scaffold a new lifecycle hook for Plastic",
|
|
28
|
-
"expected_output": "The skill should activate. Authoring a lifecycle hook is in scope. Route to references/hooks.md and offer scripts/scaffold.rb to start the hook from a born-slim file.",
|
|
29
|
-
"files": [],
|
|
30
|
-
"assertions": [
|
|
31
|
-
"The skill activates (authoring a lifecycle hook is in scope).",
|
|
32
|
-
"The response routes to references/hooks.md and offers scripts/scaffold.rb."
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 4,
|
|
37
|
-
"prompt": "Our prompts are bloated and we keep blowing the context budget",
|
|
38
|
-
"expected_output": "The skill should activate. This is an indirect trigger: the user describes bloated prompts and a context budget problem without naming skills. The skill restructures instructions into a thin router over deep references with hard load-level budgets, which is the fix for this symptom.",
|
|
39
|
-
"files": [],
|
|
40
|
-
"assertions": [
|
|
41
|
-
"The skill activates on the indirect context-budget trigger (no skill keyword in the prompt).",
|
|
42
|
-
"The response treats the fix as a thin router over deep references with hard load-level budgets."
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"id": 5,
|
|
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-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
|
-
"files": [],
|
|
50
|
-
"assertions": [
|
|
51
|
-
"The skill does not activate (running and grading evals is plastic-skill-evaluating, not authoring)."
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": 6,
|
|
56
|
-
"prompt": "Create a new intent for the dashboard work",
|
|
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
|
-
"files": [],
|
|
59
|
-
"assertions": [
|
|
60
|
-
"The skill does not activate (creating an intent is plastic-intent-creating)."
|
|
61
|
-
]
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": 7,
|
|
65
|
-
"prompt": "I keep losing every team fight because of a skill issue in this game, any tips?",
|
|
66
|
-
"expected_output": "The skill should NOT trigger. This is a gaming question with no relation to authoring instructions. Near-miss negative: shares the word 'skill' in an unrelated sense.",
|
|
67
|
-
"files": [],
|
|
68
|
-
"assertions": [
|
|
69
|
-
"The skill does not activate (gaming question, unrelated sense of 'skill')."
|
|
70
|
-
]
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"id": 8,
|
|
74
|
-
"prompt": "Write unit tests for my Ruby model that validates email addresses",
|
|
75
|
-
"expected_output": "The skill should NOT trigger. Writing test code is a Ruby testing task. Near-miss negative: shares 'write' and 'test' but has nothing to do with authoring a skill, agent, or hook.",
|
|
76
|
-
"files": [],
|
|
77
|
-
"assertions": [
|
|
78
|
-
"The skill does not activate (writing test code is a Ruby testing task, not authoring a skill)."
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"id": 9,
|
|
83
|
-
"prompt": "Author a slim SKILL.md for a PDF-extraction skill",
|
|
84
|
-
"expected_output": "Activation is assumed for this output-quality case. Correct output is a SKILL.md whose frontmatter description is third person, front-loads concrete trigger keywords, states WHEN to use rather than the workflow, and includes at least one indirect trigger. The body stays under 5000 tokens and under 500 lines and routes to references rather than carrying deep how-to. Each reference link names an observable trigger condition with no bare pointer like 'see references/'. References stay one level deep, and no string contains an em-dash or en-dash.",
|
|
85
|
-
"files": [],
|
|
86
|
-
"assertions": [
|
|
87
|
-
"The frontmatter description is written in the third person (no 'you' or 'I').",
|
|
88
|
-
"The description front-loads concrete trigger keywords in its opening clause.",
|
|
89
|
-
"The description includes at least one indirect trigger (a symptom phrasing that never names PDF extraction or skills).",
|
|
90
|
-
"The body is under 5000 tokens and under 500 lines.",
|
|
91
|
-
"Every reference link is bound to an observable trigger condition (no bare pointer such as 'see references/').",
|
|
92
|
-
"References stay one level deep (no reference points to a deeper reference).",
|
|
93
|
-
"No string in the SKILL.md or its references contains an em-dash or en-dash."
|
|
94
|
-
]
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"id": 10,
|
|
98
|
-
"prompt": "Make this subagent role file slim, the description is vague and the body is too long",
|
|
99
|
-
"expected_output": "The skill should activate. Authoring or revising a subagent or Agent role file is in scope, and the symptoms (vague description, over-long body) are the progressive-disclosure case. Route to references/agents.md, tighten the description to state WHEN, and move depth into references. Output should keep the body under budget and use no em-dashes.",
|
|
100
|
-
"files": [],
|
|
101
|
-
"assertions": [
|
|
102
|
-
"The skill activates (revising a subagent or Agent role file is in scope).",
|
|
103
|
-
"The response routes to references/agents.md and tightens the description to state WHEN.",
|
|
104
|
-
"The proposed output keeps the body under budget and uses no em-dash or en-dash."
|
|
105
|
-
]
|
|
106
|
-
}
|
|
107
|
-
]
|
|
108
|
-
}
|