@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,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-grilling
|
|
3
|
-
description: >-
|
|
4
|
-
Deep brainstorming that interviews the user relentlessly about a plan or design until reaching shared understanding.
|
|
5
|
-
Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
|
|
6
|
-
Pair with plastic-intent-brainstorming for quick ideation and use grill-me for thorough interrogation. If superpowers:brainstorming is installed it complements this skill, but it is not required.
|
|
7
|
-
user-invocable: true
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Grill Me — Deep Brainstorming
|
|
11
|
-
|
|
12
|
-
You are about to interview the user relentlessly. This is NOT a quick brainstorm — it is a thorough interrogation of every assumption, dependency, and design decision until you reach shared understanding.
|
|
13
|
-
|
|
14
|
-
## Detect Mode
|
|
15
|
-
|
|
16
|
-
**Coding mode** — the user is designing something that involves code (feature, architecture, refactor, system design):
|
|
17
|
-
- You CAN and SHOULD explore the codebase to answer your own questions
|
|
18
|
-
- Before asking "how does X work?", check if you can find out yourself
|
|
19
|
-
- Ground your questions in what actually exists, not what you imagine
|
|
20
|
-
|
|
21
|
-
**Non-coding mode** — the user is designing something conceptual (process, workflow, strategy, product):
|
|
22
|
-
- No codebase to explore
|
|
23
|
-
- Focus purely on the design tree
|
|
24
|
-
|
|
25
|
-
## Workflow
|
|
26
|
-
|
|
27
|
-
### 1. Identify the Root
|
|
28
|
-
|
|
29
|
-
Ask: "What are we designing?" Get the one-sentence version. Restate it back to confirm.
|
|
30
|
-
|
|
31
|
-
### 2. Walk the Decision Tree
|
|
32
|
-
|
|
33
|
-
For each branch of the design:
|
|
34
|
-
|
|
35
|
-
1. **State the branch** — "Let's talk about [aspect]."
|
|
36
|
-
2. **Ask your question** — Be specific. "How will X handle Y when Z happens?"
|
|
37
|
-
3. **Provide your recommended answer** — Always lead with what YOU think the answer should be, based on what you know. Let the user confirm, correct, or redirect.
|
|
38
|
-
4. **Resolve before moving on** — Do not leave ambiguity. If the user says "I'm not sure", help them decide. Push.
|
|
39
|
-
5. **Track dependencies** — If decision A affects decision B, say so. Resolve A first.
|
|
40
|
-
|
|
41
|
-
### 3. Be Relentless
|
|
42
|
-
|
|
43
|
-
- Do NOT accept vague answers. "It depends" requires "on what?"
|
|
44
|
-
- Do NOT skip edge cases. "What happens when the list is empty?"
|
|
45
|
-
- Do NOT assume. If you think you know, verify.
|
|
46
|
-
- Do NOT be polite at the expense of thoroughness. Friendly but unrelenting.
|
|
47
|
-
- DO challenge the user's assumptions. "Why not [alternative]?"
|
|
48
|
-
- DO synthesize as you go. After every 3-4 questions, summarize what's been decided.
|
|
49
|
-
|
|
50
|
-
### 4. Time Awareness
|
|
51
|
-
|
|
52
|
-
This process is thorough. It typically takes 20-45 minutes for a complex design. At natural checkpoints (~every 10 questions), offer:
|
|
53
|
-
|
|
54
|
-
> "We've covered [areas]. Still to explore: [areas]. Continue, or pause and capture what we have?"
|
|
55
|
-
|
|
56
|
-
If the user wants to pause, capture all decisions made so far into the active intent's `## Context` / `### Decisions`, ready for /plastic-intent-speccing to consolidate later.
|
|
57
|
-
|
|
58
|
-
### 5. Close Out
|
|
59
|
-
|
|
60
|
-
When all branches are resolved:
|
|
61
|
-
|
|
62
|
-
1. Record every ruling in the active intent's `## Context` / `### Decisions`, then hand off
|
|
63
|
-
to /plastic-intent-speccing to consolidate them into `spec.md` (that skill owns
|
|
64
|
-
`spec.md` exclusively)
|
|
65
|
-
2. List all decisions made
|
|
66
|
-
3. List any deferred items (things the user explicitly chose to decide later)
|
|
67
|
-
4. Proceed to Autonomous Handoff Offer (step 6)
|
|
68
|
-
|
|
69
|
-
### 6. Autonomous Handoff Offer
|
|
70
|
-
|
|
71
|
-
After closing out (decisions listed, spec consolidated by /plastic-intent-speccing), assess whether the agent has enough context to deliver the intent autonomously.
|
|
72
|
-
|
|
73
|
-
**Self-assessment checklist:**
|
|
74
|
-
- All key decisions resolved (no open "it depends" or "TBD")
|
|
75
|
-
- Scope is clear and bounded
|
|
76
|
-
- Dependencies are identified
|
|
77
|
-
- Success criteria are defined
|
|
78
|
-
|
|
79
|
-
If ALL items pass, offer autonomous delivery:
|
|
80
|
-
|
|
81
|
-
> "I have enough context to take this from here. Here's my understanding:
|
|
82
|
-
>
|
|
83
|
-
> **Decisions:** [list key decisions]
|
|
84
|
-
> **Scope:** [one-line scope summary]
|
|
85
|
-
> **Approach:** [high-level approach]
|
|
86
|
-
>
|
|
87
|
-
> Want to grill more, or should I go autonomous?"
|
|
88
|
-
|
|
89
|
-
- If human says go → invoke `plastic-auto`
|
|
90
|
-
- If human says grill more → continue grilling (reset to step 2)
|
|
91
|
-
- If human says neither (wants to drive manually) → proceed as before (offer planning)
|
|
92
|
-
|
|
93
|
-
This offer replaces the final question in Close Out ("Ready to plan implementation, or do you want another pass?"). The new options are:
|
|
94
|
-
1. Go autonomous (`plastic-auto`)
|
|
95
|
-
2. Grill more (continue interrogation)
|
|
96
|
-
3. Plan manually (invoke `superpowers:writing-plans` or proceed with human-driven planning)
|
|
97
|
-
|
|
98
|
-
## Relationship to superpowers:brainstorming
|
|
99
|
-
|
|
100
|
-
| | superpowers:brainstorming | plastic-intent-grilling |
|
|
101
|
-
|---|---|---|
|
|
102
|
-
| Speed | Quick (5-10 min) | Thorough (20-45 min) |
|
|
103
|
-
| Depth | Surface-level exploration | Exhaustive decision tree |
|
|
104
|
-
| When | Starting ideation, exploring options | Stress-testing a design, resolving ambiguity |
|
|
105
|
-
| Output | Initial spec | Battle-tested spec with all branches resolved |
|
|
106
|
-
| Style | Collaborative, exploratory | Interrogative, relentless |
|
|
107
|
-
|
|
108
|
-
Use `superpowers:brainstorming` to generate ideas. Use `plastic-intent-grilling` to pressure-test them.
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-linking
|
|
3
|
-
description: Use when creating connections between intents, the user says "link" or "connect", or when discovering that two intents are related. Manages sources, chain, and cross-reference links.
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Linking Intents
|
|
8
|
-
|
|
9
|
-
## When to Use
|
|
10
|
-
- During intent creation (automatic: ask about related intents)
|
|
11
|
-
- User says "link", "connect", "relates to"
|
|
12
|
-
- Agent discovers a relationship between intents during work
|
|
13
|
-
|
|
14
|
-
## Discovery and ranking are separate
|
|
15
|
-
|
|
16
|
-
Two distinct steps, do not conflate them:
|
|
17
|
-
|
|
18
|
-
1. **Discovery** (finding candidate related intents) may use any tool: grep, find, ripgrep,
|
|
19
|
-
or QMD/Serena when present (QMD-first per the project rule). Discovery casts a wide net.
|
|
20
|
-
2. **Ranking** the candidates is a CONTEXT-INFLUENCE judgement: read each candidate's `## Intent`
|
|
21
|
-
and `## Context` and ask whether that context actually informed this intent. Ranking is NOT a
|
|
22
|
-
structural metric (no shared-file or shared-symbol grading: on intent 90, matching whole files
|
|
23
|
-
flagged 35 intents because ~20 touch `bridge.rb`). It is NOT a similarity score either (QMD
|
|
24
|
-
relevance measures topic proximity, not influence). A script cannot make this call; an agent
|
|
25
|
-
does.
|
|
26
|
-
|
|
27
|
-
## The three tiers (by context influence)
|
|
28
|
-
|
|
29
|
-
Read `../plastic-conventions/references/knowledge-graph.md` for the full linking doctrine behind
|
|
30
|
-
these tiers, the sources-versus-chain distinction, and the `## Links` projection. This path
|
|
31
|
-
resolves relative to this skill's own installed directory.
|
|
32
|
-
|
|
33
|
-
- **sources:** the foundational context that shaped this intent's CREATION (a split, an idea born
|
|
34
|
-
during development, a merge). Earns an edge. Decided by origin, never inferred.
|
|
35
|
-
- **chain:** the context that materially helps DELIVER this intent. HIGH bar: only the genuinely
|
|
36
|
-
delivery-moving intents, not everything in the same area. Earns an edge, reflected in `## Links`.
|
|
37
|
-
Worked example (intent 90): 79 created it so 79 is a source; 80 deferred the exact fix 90 makes,
|
|
38
|
-
so its context directly helps delivery and 80 is chain; 49/66/73 are same-area background, so
|
|
39
|
-
they get a shared tag and no link.
|
|
40
|
-
- **tags:** loose theme grouping for search. NOT a link.
|
|
41
|
-
|
|
42
|
-
**Timing.** The influence judgement happens at What/Why (and during upkeep), guided by this rule.
|
|
43
|
-
It does not wait for code to exist; it is reasoning over the candidate's context, not over a diff.
|
|
44
|
-
|
|
45
|
-
**Record the call.** For every edge an agent adds, store a rating (high / medium / low) plus a
|
|
46
|
-
one-line reason as a dated line under the intent file's `## Insights` section (per 96 D3, link
|
|
47
|
-
rationale lives in the intent file, not a side file). It stays out of frontmatter (graph only) and
|
|
48
|
-
out of the projected `## Links` label, so the audit trail never breaks the projection identity.
|
|
49
|
-
|
|
50
|
-
## `## Links` is derived (never author it by hand)
|
|
51
|
-
|
|
52
|
-
`## Links` is a DERIVED view of `sources` then `chain`, not a place to write links. Never
|
|
53
|
-
hand-write a `## Links` line, and never auto-delete one. To add a link, add the frontmatter
|
|
54
|
-
edge (below), then let the projection regenerate the section (`scripts/project-links`).
|
|
55
|
-
|
|
56
|
-
Run `scripts/link-suggest <id>` to gather candidate intents WITH each one's Intent and Context (the
|
|
57
|
-
evidence you judge influence on) and to flag drift (a `## Links` line with no frontmatter edge
|
|
58
|
-
behind it). To record a confirmed edge plus its rating and reason, run it with
|
|
59
|
-
`--record <id> --edge <sources|chain> --rating <high|medium|low> --reason "..." --confirm`. It never
|
|
60
|
-
grades influence itself, never writes an edge without `--confirm`, and never deletes.
|
|
61
|
-
|
|
62
|
-
## Connection Types (the frontmatter edges)
|
|
63
|
-
|
|
64
|
-
### 1. Sources (Backward)
|
|
65
|
-
The `sources` array in frontmatter. The direct ascendant(s) this intent was created from / emerged from the lifecycle of (formation, not topic similarity), backward links to the work it was built out of:
|
|
66
|
-
```yaml
|
|
67
|
-
sources: ["1a", "1a2"]
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### 2. Chain (Forward)
|
|
71
|
-
The `chain` array in frontmatter. What this intent spawned AND related-but-not-spawned successors it leads to, forward links to children, follow-on, and related work:
|
|
72
|
-
```yaml
|
|
73
|
-
chain: ["1b1", "1b2"]
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 3. Tags (for discovery, not links)
|
|
77
|
-
Shared tags in frontmatter enable filtered discovery. Use `project-<name>` tags for project membership. A shared tag is a loose theme grouping: it earns NO edge.
|
|
78
|
-
```yaml
|
|
79
|
-
tags: [plastic, project-reddit-kb]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Workflow
|
|
83
|
-
|
|
84
|
-
### 1. Identify Intents to Connect
|
|
85
|
-
|
|
86
|
-
QMD-first (when available): before scanning the store with grep/Read, run
|
|
87
|
-
`ruby ~/.plastic/scripts/qmd-sync search "<terms>"` to surface candidate, prior, or related
|
|
88
|
-
intents to propose as sources/chain, then open the authoritative intent file for any hit you act
|
|
89
|
-
on. The command is a no-op when QMD is absent, so fall back to the directory scan below.
|
|
90
|
-
|
|
91
|
-
Show existing intents by scanning the store's directory for intent files:
|
|
92
|
-
```bash
|
|
93
|
-
for dir in $STORE_ROOT/store/*/; do
|
|
94
|
-
f=$(find "$dir" -maxdepth 1 -name "*.md" ! -name "spec.md" ! -name "plan.md" ! -name "checklist.md" ! -name "outcome.md" ! -name "savepoint.md" | head -1)
|
|
95
|
-
[ -n "$f" ] && ruby -ryaml -e '
|
|
96
|
-
data = File.read(ARGV[0]).split("---")[1]
|
|
97
|
-
parsed = YAML.safe_load(data)
|
|
98
|
-
puts "#{parsed["id"]} | #{parsed["intent"]}" if parsed
|
|
99
|
-
' "$f" 2>/dev/null
|
|
100
|
-
done
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### 2. Choose Connection Type
|
|
104
|
-
Ask the user which type of connection:
|
|
105
|
-
- **source**: "this was CREATED FROM that" (D1). The reciprocal update is one-directional (I1): add the ascendant id to this intent's `sources[]` AND add this intent's id to the ascendant's `chain[]`. A merely-related (not-created-from) connection is NOT a source: record it on the predecessor's `chain[]` only, plus a `## Links` wikilink, with NO `sources` (the related-but-not-spawned rule).
|
|
106
|
-
- **cross-reference**: "these are related" (add wikilink in `## Links` of both intents)
|
|
107
|
-
|
|
108
|
-
### 3. Apply Connection
|
|
109
|
-
|
|
110
|
-
**For sources (a true created-from edge only):**
|
|
111
|
-
Update frontmatter arrays on both intents (I1, two-sided):
|
|
112
|
-
- Add the parent's ID to the child's `sources` array
|
|
113
|
-
- Add the child's ID to the parent's `chain` array
|
|
114
|
-
|
|
115
|
-
For the merely-related case, only the predecessor's `chain` (and both sides' `## Links`)
|
|
116
|
-
get the link, never `sources`. `chain` is NOT strictly the reverse of `sources` (I2):
|
|
117
|
-
relational `chain` entries are valid and must never be "corrected" by adding a reciprocal
|
|
118
|
-
`sources`.
|
|
119
|
-
|
|
120
|
-
**For cross-references:**
|
|
121
|
-
Add a wikilink in the `## Links` section of **both** intents (bidirectional).
|
|
122
|
-
|
|
123
|
-
### 4. Update INDEX.md Clusters
|
|
124
|
-
If both intents share a topic, ensure they're in the same cluster.
|
|
125
|
-
|
|
126
|
-
## References
|
|
127
|
-
|
|
128
|
-
- Read `references/zettelkasten.md` for the three Zettelkasten structures (Folgezettel, directed graph, tags), ID encoding rules, and dual-mode (Obsidian + programmatic) design
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-intent-linking",
|
|
3
|
-
"notes": "Intent 66a. Spec for the QMD-first discovery step (surface candidate/related intents to propose as sources/chain before grep/Read). Runner is intent 76; this case is a spec, not executed.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "behavior",
|
|
8
|
-
"set": "validation",
|
|
9
|
-
"prompt": "QMD is present. The user says: link this intent to the related upload-pipeline work.",
|
|
10
|
-
"expected_output": "Before scanning the store directory with grep/Read to identify related intents, runs `ruby ~/.plastic/scripts/qmd-sync search \"upload pipeline\"` to surface candidate or related intents to propose as sources/chain, then opens the authoritative intent file for any hit it links. No-op fallback to the directory scan when QMD is absent.",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "human",
|
|
15
|
-
"check": "qmd-sync search is run before the directory scan; authoritative file opened for any hit before proposing sources/chain",
|
|
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
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Zettelkasten Structure
|
|
2
|
-
|
|
3
|
-
Plastic implements three Zettelkasten structures:
|
|
4
|
-
|
|
5
|
-
| Structure | Implementation | Purpose |
|
|
6
|
-
|---|---|---|
|
|
7
|
-
| Folgezettel (linked list) | `sources` + `chain` in frontmatter | Sequential provenance |
|
|
8
|
-
| Directed graph (web of notes) | `## Links` with wikilinks | Obsidian navigation |
|
|
9
|
-
| Tag-based taxonomy | `tags` in frontmatter | Topic grouping |
|
|
10
|
-
|
|
11
|
-
INDEX.md is a structure note (hub), not a table of contents.
|
|
12
|
-
|
|
13
|
-
`## Links` mirrors the frontmatter graph exactly. Each entry is
|
|
14
|
-
`- [[id--slug|<target's full intent: text>]]` (cross-store: `- [[store:id--slug|...]]`),
|
|
15
|
-
a clickable `id--slug` target with the target's full `intent:` text as the label.
|
|
16
|
-
Ordering is mandatory: all `sources` first (top), then all `chain`, frontmatter order
|
|
17
|
-
preserved within each group. Sources never appear at the end. No source/chain tags, no
|
|
18
|
-
sub-grouping. An intent with empty `sources` and `chain` carries the empty-state comment.
|
|
19
|
-
|
|
20
|
-
## Folgezettel IDs
|
|
21
|
-
|
|
22
|
-
IDs encode lineage using Luhmann's alternating convention:
|
|
23
|
-
- Root intents: sequential numbers (`1`, `2`, `3`...)
|
|
24
|
-
- Branches alternate letters and numbers: `1` → `1a` → `1a1` → `1a1a` → ...
|
|
25
|
-
- Multiple branches from the same parent increment: `1a`, `1b`, `1c`
|
|
26
|
-
- IDs are assigned at creation time and never change
|
|
27
|
-
|
|
28
|
-
## Knowledge Graph
|
|
29
|
-
|
|
30
|
-
`sources` and `chain` form the directed knowledge graph:
|
|
31
|
-
- `sources` = the direct ascendant(s) this intent was created from / emerged from the
|
|
32
|
-
lifecycle of (formation, not topic similarity); a DAG (acyclic), strong must-load context.
|
|
33
|
-
- `chain` = forward continuations AND related-but-not-spawned successors it leads to; a
|
|
34
|
-
directed graph that may cycle, lighter contributory context.
|
|
35
|
-
- Reciprocity is one-directional: every `sources` edge has a reciprocal `chain` entry (I1),
|
|
36
|
-
but `chain` may carry relational entries with no reciprocal `sources` (I2), so the graph is
|
|
37
|
-
NOT strictly double-linked.
|
|
38
|
-
|
|
39
|
-
## Dual-Mode
|
|
40
|
-
|
|
41
|
-
This store works in two modes without modification:
|
|
42
|
-
- **Obsidian** (human, offline) — browse, link, write markdown
|
|
43
|
-
- **Programmatic** (any agent) — read/write via filesystem operations
|
|
44
|
-
|
|
45
|
-
No special tooling required for either mode.
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-locking
|
|
3
|
-
description: Inspect, repair, release, or reclaim an intent's delivery lock. Use when a lock-gate deny names /plastic-lock, when resuming interrupted work after a crash, reboot, or /tmp wipe, when a lock reads held or stale, or when the user says "fix the lock", "who holds the lock", or "reclaim the lock".
|
|
4
|
-
user-invocable: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Plastic Lock
|
|
8
|
-
|
|
9
|
-
Command-only wrapper around `~/.plastic/scripts/plastic-lock`. The durable
|
|
10
|
-
delivery lock is a `delivery.lock` file in the intent directory: ownership is
|
|
11
|
-
session-keyed, liveness is a lease (the owner's hooks refresh the file mtime;
|
|
12
|
-
stale means the heartbeat is older than the TTL). The /tmp bridge is only a
|
|
13
|
-
cache; the lock file wins every disagreement.
|
|
14
|
-
|
|
15
|
-
Read `../plastic-conventions/references/locks-and-worktrees.md` for delivery isolation in full:
|
|
16
|
-
the single-owner lock, claims, worktrees, solo mode, and the station ledger behind every verb
|
|
17
|
-
below. This path resolves relative to this skill's own installed directory.
|
|
18
|
-
|
|
19
|
-
## Verbs
|
|
20
|
-
|
|
21
|
-
Run from the project (the intent resolves from this session's bridge), or pass
|
|
22
|
-
`--intent-dir` explicitly:
|
|
23
|
-
|
|
24
|
-
| Verb | What it does | When |
|
|
25
|
-
|---|---|---|
|
|
26
|
-
| `who` | Print a compact owner, heartbeat, claim, and delegate view from durable files only | Safe human inspection; requires `--intent-dir` |
|
|
27
|
-
| `status` | Report the lock file, bridge cache, freshness, agreement | Always safe; run first |
|
|
28
|
-
| `fix` | Idempotent repair: rebuild lock + bridge from disk truth for THIS session. Never touches a fresh foreign lock | Interrupted work, corrupted state, /tmp wiped, legacy pid locks |
|
|
29
|
-
| `release` | Owner clears the lock | Ending or abandoning a boarding |
|
|
30
|
-
| `reclaim` | Explicit takeover of a STALE lock; appends an audit line to savepoint.md | The owner is gone and the lease expired |
|
|
31
|
-
| `delegate` | Owner registers a subagent session and optional provenance, or marks it `finished`/`failed` | Auto-mode orchestration |
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
ruby ~/.plastic/scripts/plastic-lock status
|
|
35
|
-
ruby ~/.plastic/scripts/plastic-lock who --intent-dir <store>/<id>--<slug>
|
|
36
|
-
ruby ~/.plastic/scripts/plastic-lock fix --intent-dir <store>/<id>--<slug>
|
|
37
|
-
ruby ~/.plastic/scripts/plastic-lock reclaim --intent-dir <store>/<id>--<slug>
|
|
38
|
-
ruby ~/.plastic/scripts/plastic-lock delegate --delegate <subagent-session-id> \
|
|
39
|
-
--harness codex --agent plastic-executor --model <model> --thread <thread-id>
|
|
40
|
-
ruby ~/.plastic/scripts/plastic-lock delegate --delegate <subagent-session-id> --status finished
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
When the current controller knows its provenance, `fix` and `reclaim` accept
|
|
44
|
-
`--harness`, `--agent`, `--model`, `--thread`, and `--mode auto|guided`.
|
|
45
|
-
Provenance is descriptive; the session remains the authorization identity.
|
|
46
|
-
|
|
47
|
-
## Rules
|
|
48
|
-
|
|
49
|
-
- `fix` exits non-zero when another session holds a FRESH lock: back off, do
|
|
50
|
-
not retry in a loop. `status` shows the owner.
|
|
51
|
-
- `who` is strictly read-only. It reads `delivery.lock`, its mtime, and claim
|
|
52
|
-
files; it never reads or repairs a bridge, searches transcripts, heartbeats,
|
|
53
|
-
or writes. Missing legacy provenance displays as `Unknown` rather than being
|
|
54
|
-
inferred.
|
|
55
|
-
- The `delivery.lock` file mtime is the sole heartbeat and freshness truth.
|
|
56
|
-
Provenance timestamps do not replace it.
|
|
57
|
-
- Only the lock owner may register delegates or mark them `finished` or
|
|
58
|
-
`failed`. Terminal status is observational and does not remove the delegate
|
|
59
|
-
session from the authorization list. Finished and failed activity history is
|
|
60
|
-
bounded to the 20 most recent terminal entries.
|
|
61
|
-
- `reclaim` refuses a fresh lock. There is no silent reclaim anywhere; every
|
|
62
|
-
takeover is audited in the intent's savepoint.md.
|
|
63
|
-
- Acquiring a lock for new work is NOT this skill's job: board through
|
|
64
|
-
`/plastic-intent-starting`, which calls the same repair internally.
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-planning
|
|
3
|
-
description: "Write implementation plans from a spec. Produces plan.md, checklist.md, and at least one real actions/ACTION_N.md (every tier) in the active intent directory."
|
|
4
|
-
user-invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Writing Plans
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
|
|
12
|
-
|
|
13
|
-
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
14
|
-
|
|
15
|
-
## Active Intent Gate
|
|
16
|
-
|
|
17
|
-
Before proceeding, resolve the active intent:
|
|
18
|
-
|
|
19
|
-
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/`.
|
|
20
|
-
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"
|
|
21
|
-
3. **Resolve intent directory:** `{store}/store/{id}--{slug}/`
|
|
22
|
-
4. **Read spec:** Load `{intent_dir}/spec.md`. If no spec exists → refuse: "No spec found. Run /plastic-intent-speccing first."
|
|
23
|
-
|
|
24
|
-
All artifacts go to the intent directory. Never write to external paths.
|
|
25
|
-
|
|
26
|
-
## Scope Check
|
|
27
|
-
|
|
28
|
-
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans, one per subsystem. Each plan should produce working, testable software on its own.
|
|
29
|
-
|
|
30
|
-
## Tier shapes
|
|
31
|
-
|
|
32
|
-
Read `../plastic-conventions/references/tiers-and-dispatch.md` for tier sizing and the
|
|
33
|
-
stage-to-agent dispatch rules behind this section. This path resolves relative to this skill's own
|
|
34
|
-
installed directory.
|
|
35
|
-
|
|
36
|
-
Read the spec's stamped `Tier:` line (written by intent-speccing) and pick the action shape it calls for. Every tier produces at least one REAL action file in `actions/`; the tier only changes how many:
|
|
37
|
-
|
|
38
|
-
- **S or M (default):** write ONE consolidated `actions/ACTION_1.md` that carries the whole ordered delivery (the steps plus the exact changes). `plan.md` still holds the overall map and `checklist.md` still mirrors the task list. You may split into a few action files when that reads cleaner, but one real action file is the floor.
|
|
39
|
-
- **L (many independent tasks, dispatched in parallel):** self-contained `actions/ACTION_N.md`, one per task, each readable without the plan (see `references/plan-format.md`).
|
|
40
|
-
|
|
41
|
-
A `.gitkeep` never counts as an action, and an empty `actions/` fails the How gate at every tier. At S/M, keep it to a single consolidated action file rather than one-per-task; over-splitting a small intent is the S/M failure mode, an empty `actions/` is the tier-wide one.
|
|
42
|
-
|
|
43
|
-
## File Structure
|
|
44
|
-
|
|
45
|
-
Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
|
|
46
|
-
|
|
47
|
-
- Design units with clear boundaries and well-defined interfaces. Each file should have one clear responsibility.
|
|
48
|
-
- You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
|
|
49
|
-
- Files that change together should live together. Split by responsibility, not by technical layer.
|
|
50
|
-
- In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
|
|
51
|
-
|
|
52
|
-
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
|
|
53
|
-
|
|
54
|
-
## Bite-Sized Task Granularity
|
|
55
|
-
|
|
56
|
-
Granularity follows the `Tier:` line the spec stamped.
|
|
57
|
-
|
|
58
|
-
**At M or L, each step is one action (2-5 minutes):**
|
|
59
|
-
- "Write the failing test" - step
|
|
60
|
-
- "Run it to make sure it fails" - step
|
|
61
|
-
- "Implement the minimal code to make the test pass" - step
|
|
62
|
-
- "Run the tests and make sure they pass" - step
|
|
63
|
-
- "Commit" - step
|
|
64
|
-
|
|
65
|
-
**At S, size each step to the work.** Do not slice a small delivery into fixed 2-5 minute steps. Keep steps coarse enough to read in one pass, and let the one consolidated `actions/ACTION_1.md` carry the whole delivery. Each step still names its exact file paths, its exact changes, and how it is verified. Only the slicing relaxes.
|
|
66
|
-
|
|
67
|
-
This changes granularity, nothing else. Every tier still produces at least one real `actions/ACTION_N.md`, and an empty or `.gitkeep`-only `actions/` still fails the How gate (see `## Tier shapes` above).
|
|
68
|
-
|
|
69
|
-
## Plan Format
|
|
70
|
-
|
|
71
|
-
For the exact plan/task/checklist/action format (the Plan Document Header
|
|
72
|
-
template, the full Task Structure worked example, and the checklist.md /
|
|
73
|
-
actions/ACTION_N.md templates), read `references/plan-format.md` before
|
|
74
|
-
writing plan.md. Every plan starts with the header template and decomposes
|
|
75
|
-
into tasks matching the Task Structure shape.
|
|
76
|
-
|
|
77
|
-
## No Placeholders
|
|
78
|
-
|
|
79
|
-
Every step must contain the actual content an engineer needs. These are **plan failures**, never write them:
|
|
80
|
-
- "TBD", "TODO", "implement later", "fill in details"
|
|
81
|
-
- "Add appropriate error handling" / "add validation" / "handle edge cases"
|
|
82
|
-
- "Write tests for the above" (without actual test code)
|
|
83
|
-
- "Similar to Task N" (repeat the code; the engineer may be reading tasks out of order)
|
|
84
|
-
- Steps that describe what to do without showing how (code blocks required for code steps)
|
|
85
|
-
- References to types, functions, or methods not defined in any task
|
|
86
|
-
|
|
87
|
-
## Remember
|
|
88
|
-
- Exact file paths always
|
|
89
|
-
- Complete code in every step: if a step changes code, show the code
|
|
90
|
-
- Exact commands with expected output
|
|
91
|
-
- DRY, YAGNI, TDD, frequent commits
|
|
92
|
-
|
|
93
|
-
## Self-Review
|
|
94
|
-
|
|
95
|
-
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself, not a subagent dispatch.
|
|
96
|
-
|
|
97
|
-
**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
|
|
98
|
-
|
|
99
|
-
**2. Placeholder scan:** Search your plan for red flags, any of the patterns from the "No Placeholders" section above. Fix them.
|
|
100
|
-
|
|
101
|
-
**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clear_layers` in Task 3 but `clear_full_layers` in Task 7 is a bug.
|
|
102
|
-
|
|
103
|
-
If you find issues, fix them inline. No need to re-review, just fix and move on. If you find a spec requirement with no task, add the task.
|
|
104
|
-
|
|
105
|
-
## Plastic Artifacts
|
|
106
|
-
|
|
107
|
-
After writing `plan.md`, create `checklist.md` (execution registry following the
|
|
108
|
-
FORM: `## In Progress`, `## Completed`, `## Session Log`) and at least one real
|
|
109
|
-
`actions/ACTION_N.md` (self-contained, in an `actions/` directory inside the intent
|
|
110
|
-
directory). At S/M write one consolidated `actions/ACTION_1.md`; at L write one
|
|
111
|
-
`actions/ACTION_N.md` per task (see Tier shapes above). For the exact format of
|
|
112
|
-
both, read `references/plan-format.md`.
|
|
113
|
-
|
|
114
|
-
## Owner-decision hard-gate items
|
|
115
|
-
|
|
116
|
-
When a task depends on an owner decision that must be made before any code edit
|
|
117
|
-
happens (a destructive step, a structural ruling, a merge that must land first),
|
|
118
|
-
add a checklist item prefixed `[ORCHESTRATOR]` that names the decision and states
|
|
119
|
-
plainly that it blocks all code edits until the owner rules on it. Order these
|
|
120
|
-
items first: destructive or structural rulings apply before the sweeping edits
|
|
121
|
-
that depend on them.
|
|
122
|
-
|
|
123
|
-
When collecting owner rulings for `[ORCHESTRATOR]` hard-gate items, read
|
|
124
|
-
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure.
|
|
125
|
-
|
|
126
|
-
## Gate position
|
|
127
|
-
|
|
128
|
-
- **Before:** `spec.md` exists.
|
|
129
|
-
- **Produces:** `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md` (every tier; one consolidated file at S/M, one per task at L).
|
|
130
|
-
- **Next:** /plastic-intent-executing.
|
|
131
|
-
|
|
132
|
-
Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
|
|
133
|
-
report-home contract this handoff relies on.
|
|
134
|
-
|
|
135
|
-
## Git Commit
|
|
136
|
-
|
|
137
|
-
After writing all artifacts (plan.md, checklist.md, and the actions/ACTION_N.md files), commit to the store:
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
cd {store_root} && git add . && git commit -m "docs: plan for intent {id}: {name}"
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Execution Handoff
|
|
144
|
-
|
|
145
|
-
Plan complete. Invoke `plastic-intent-executing` to begin execution.
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-intent-planning",
|
|
3
|
-
"notes": "Intent 164, updated by 133a. Evals for the writing-plans skill: action-file enforcement at every tier (S/M consolidate the delivery into one real actions/ACTION_1.md, L writes one actions/ACTION_N.md per task) and the checklist FORM plus [ORCHESTRATOR] hard-gate item convention. All assertions are pending a real observed run per the plastic-evaluating-skills convention.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "behavior",
|
|
8
|
-
"set": "train",
|
|
9
|
-
"prompt": "spec.md is stamped Tier: M and describes a single subsystem change touching four files across two tasks. Write the plan.",
|
|
10
|
-
"expected_output": "Produces plan.md plus checklist.md plus at least one real actions/ACTION_N.md. At M the planner consolidates the whole delivery into a single actions/ACTION_1.md (it may split into a few files if that reads cleaner); the actions/ directory is never left empty or .gitkeep-only. checklist.md mirrors plan.md's task list.",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "code",
|
|
15
|
-
"check": "at least one real (non-empty, non-.gitkeep) file exists under actions/ for this intent; checklist.md exists and mirrors plan.md's task list",
|
|
16
|
-
"result": "expect-pass"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": 2,
|
|
22
|
-
"scope": "behavior",
|
|
23
|
-
"set": "train",
|
|
24
|
-
"prompt": "spec.md is stamped Tier: S and describes a single-file config change. Write the plan.",
|
|
25
|
-
"expected_output": "Produces plan.md plus checklist.md plus one consolidated actions/ACTION_1.md carrying the whole ordered delivery (the steps plus the exact changes). The actions/ directory is never left empty or .gitkeep-only, matching the every-tier action-file rule.",
|
|
26
|
-
"files": [],
|
|
27
|
-
"assertions": [
|
|
28
|
-
{
|
|
29
|
-
"type": "code",
|
|
30
|
-
"check": "at least one real (non-empty, non-.gitkeep) actions/ACTION_N.md exists under actions/ for this intent; no empty or .gitkeep-only actions/ dir remains",
|
|
31
|
-
"result": "expect-pass"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 3,
|
|
37
|
-
"scope": "behavior",
|
|
38
|
-
"set": "train",
|
|
39
|
-
"prompt": "spec.md is stamped Tier: L and describes a cross-cutting redesign decomposed into eight independent tasks meant to be dispatched to separate subagents in parallel. Write the plan.",
|
|
40
|
-
"expected_output": "Produces self-contained actions/ACTION_N.md, one file per task, each readable without the plan (full task text, code, and commands copied in). checklist.md has one item per task.",
|
|
41
|
-
"files": [],
|
|
42
|
-
"assertions": [
|
|
43
|
-
{
|
|
44
|
-
"type": "code",
|
|
45
|
-
"check": "actions/ directory contains one ACTION_N.md per task; each action file is self-contained (no bare references like \"see Task 3\" without the content)",
|
|
46
|
-
"result": "expect-pass"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": 4,
|
|
52
|
-
"scope": "behavior",
|
|
53
|
-
"set": "validation",
|
|
54
|
-
"prompt": "spec.md names an owner decision (whether to delete or archive a legacy table) that must be ruled on before any code edit in the plan can proceed. Write the plan.",
|
|
55
|
-
"expected_output": "checklist.md includes a checklist item prefixed [ORCHESTRATOR] that names the owner decision and states it blocks all code edits until the owner rules; this item is ordered before the sweeping edit tasks that depend on it. checklist.md follows the FORM: ## In Progress, ## Completed (empty), ## Session Log with Date | Items Completed | Notes columns.",
|
|
56
|
-
"files": [],
|
|
57
|
-
"assertions": [
|
|
58
|
-
{
|
|
59
|
-
"type": "human",
|
|
60
|
-
"check": "an [ORCHESTRATOR] item exists, names the decision, states it blocks code edits, and precedes dependent tasks; checklist.md has the three FORM sections in the right shape",
|
|
61
|
-
"result": "expect-pass"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"id": 5,
|
|
67
|
-
"scope": "behavior",
|
|
68
|
-
"set": "validation",
|
|
69
|
-
"prompt": "spec.md is stamped Tier: S. A prior draft left actions/ with only a .gitkeep. Write the plan and its actions.",
|
|
70
|
-
"expected_output": "Writes at least one real actions/ACTION_1.md (non-empty, not the placeholder sentinel, not a .gitkeep) that consolidates the whole S-tier delivery. Leaving actions/ empty or .gitkeep-only is a plan failure that would block the How gate; the planner never does this at any tier.",
|
|
71
|
-
"files": [],
|
|
72
|
-
"assertions": [
|
|
73
|
-
{
|
|
74
|
-
"type": "code",
|
|
75
|
-
"check": "actions/ contains at least one real action file (non-empty *.md, first line not the placeholder sentinel); no .gitkeep-only or empty actions/ dir remains",
|
|
76
|
-
"result": "expect-pass"
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
}
|
|
80
|
-
]
|
|
81
|
-
}
|