@zalom/plastic 2.0.0-alpha.8 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PLASTIC.md +13 -136
- package/README.md +357 -133
- package/agents/plastic-enforcer.md +20 -15
- package/agents/plastic-executor.md +15 -4
- package/agents/plastic-node-research.md +30 -0
- package/agents/plastic-node-verify.md +28 -0
- package/agents/plastic-node-work.md +33 -0
- package/agents/{plastic-advisor.md → plastic-primary-advisor.md} +7 -9
- package/agents/{plastic-faux-advisor.md → plastic-secondary-advisor.md} +9 -12
- package/assets/plastic-logo.svg +1 -0
- package/bin/crap +4 -0
- package/bin/lib/context_budget.rb +43 -6
- package/bin/lib/skill_census.rb +839 -0
- package/bin/plastic +6 -0
- package/bin/plastic-skill-census +114 -0
- package/bin/test +24 -4
- package/bin/verify-change +345 -0
- package/config_asks.yml +4 -4
- package/deprecations.yml +1 -1
- package/{skills/agent-advisor/references → docs/help}/advisor-protocol.md +19 -24
- package/{skills/auto/references → docs/help}/agent-architecture.md +16 -14
- package/{skills/conventions/references → docs/help}/completion-and-done.md +15 -16
- package/docs/help/human-report-contract.md +152 -0
- package/{skills/conventions/references → docs/help}/knowledge-graph.md +9 -0
- package/{skills/conventions/references → docs/help}/locks-and-worktrees.md +23 -13
- package/{skills/conventions/references → docs/help}/maintenance-and-revisions.md +1 -1
- package/{skills/conventions/references → docs/help}/roadmaps.md +2 -2
- package/{skills/tutorial/references → docs/help}/track-1-guided.md +28 -47
- package/{skills/tutorial/references → docs/help}/track-2-auto.md +8 -8
- package/{skills/tutorial/references → docs/help}/track-3-projects-and-roadmaps.md +24 -17
- package/hooks/call-budget +4 -0
- package/hooks/hooks.json +24 -0
- package/hooks/message-display +62 -1
- package/hooks/session-start +5 -1
- package/hooks/statusline +32 -27
- package/hooks/stop +5 -0
- package/package.json +5 -3
- package/scripts/append-ledger +2 -1
- package/scripts/dashboard.rb +267 -16
- package/scripts/day-summary +2 -1
- package/scripts/doctor.rb +680 -39
- package/scripts/end-intent +238 -22
- package/scripts/exec-worktree +5 -5
- package/scripts/file-session-intent +2 -1
- package/scripts/graph-measure +249 -0
- package/scripts/hook-call-budget +222 -0
- package/scripts/hook-capture +24 -123
- package/scripts/hook-close +2 -1
- package/scripts/hook-message-display +19 -5
- package/scripts/hook-record +24 -16
- package/scripts/hook-savepoint +27 -3
- package/scripts/hook-session-start +359 -321
- package/scripts/hook-stop +58 -0
- package/scripts/index-projection +74 -0
- package/scripts/insight-append +17 -4
- package/scripts/install.rb +9 -7
- package/scripts/lib/action_graph_shim.rb +279 -0
- package/scripts/lib/active_delivery.rb +105 -0
- package/scripts/lib/agent_models.rb +63 -25
- package/scripts/lib/arm.rb +48 -83
- package/scripts/lib/atomic_write.rb +31 -0
- package/scripts/lib/backup.rb +65 -0
- package/scripts/lib/cli/command.rb +92 -0
- package/scripts/lib/cli/commands/auto.rb +18 -0
- package/scripts/lib/cli/commands/auto_brief.rb +44 -0
- package/scripts/lib/cli/commands/auto_lock.rb +99 -0
- package/scripts/lib/cli/commands/auto_report.rb +50 -0
- package/scripts/lib/cli/commands/auto_take.rb +31 -0
- package/scripts/lib/cli/commands/backup.rb +43 -0
- package/scripts/lib/cli/commands/checkout.rb +25 -0
- package/scripts/lib/cli/commands/continue.rb +66 -0
- package/scripts/lib/cli/commands/doctor.rb +81 -0
- package/scripts/lib/cli/commands/feedback.rb +40 -0
- package/scripts/lib/cli/commands/help.rb +69 -0
- package/scripts/lib/cli/commands/hook.rb +32 -0
- package/scripts/lib/cli/commands/index.rb +23 -0
- package/scripts/lib/cli/commands/install.rb +21 -0
- package/scripts/lib/cli/commands/installer_verb.rb +37 -0
- package/scripts/lib/cli/commands/intent.rb +19 -0
- package/scripts/lib/cli/commands/intent_answer.rb +37 -0
- package/scripts/lib/cli/commands/intent_command.rb +53 -0
- package/scripts/lib/cli/commands/intent_end.rb +62 -0
- package/scripts/lib/cli/commands/intent_new.rb +62 -0
- package/scripts/lib/cli/commands/intent_note.rb +43 -0
- package/scripts/lib/cli/commands/intent_rule.rb +36 -0
- package/scripts/lib/cli/commands/intent_show.rb +32 -0
- package/scripts/lib/cli/commands/intent_spec.rb +44 -0
- package/scripts/lib/cli/commands/intent_step.rb +71 -0
- package/scripts/lib/cli/commands/intent_verify.rb +26 -0
- package/scripts/lib/cli/commands/migrate.rb +16 -0
- package/scripts/lib/cli/commands/migrate_stores.rb +31 -0
- package/scripts/lib/cli/commands/next.rb +54 -0
- package/scripts/lib/cli/commands/project.rb +19 -0
- package/scripts/lib/cli/commands/project_links.rb +42 -0
- package/scripts/lib/cli/commands/project_list.rb +20 -0
- package/scripts/lib/cli/commands/project_new.rb +72 -0
- package/scripts/lib/cli/commands/query.rb +31 -0
- package/scripts/lib/cli/commands/render.rb +33 -0
- package/scripts/lib/cli/commands/roadmap.rb +19 -0
- package/scripts/lib/cli/commands/roadmap_check.rb +54 -0
- package/scripts/lib/cli/commands/roadmap_log.rb +54 -0
- package/scripts/lib/cli/commands/roadmap_migrate.rb +53 -0
- package/scripts/lib/cli/commands/roadmap_next.rb +70 -0
- package/scripts/lib/cli/commands/roadmap_show.rb +45 -0
- package/scripts/lib/cli/commands/rollback.rb +20 -0
- package/scripts/lib/cli/commands/search.rb +60 -0
- package/scripts/lib/cli/commands/session.rb +18 -0
- package/scripts/lib/cli/commands/session_commit.rb +42 -0
- package/scripts/lib/cli/commands/session_handoff.rb +34 -0
- package/scripts/lib/cli/commands/session_summary.rb +35 -0
- package/scripts/lib/cli/commands/status.rb +68 -0
- package/scripts/lib/cli/commands/subcommand_list.rb +36 -0
- package/scripts/lib/cli/commands/sync.rb +46 -0
- package/scripts/lib/cli/commands/uninstall.rb +20 -0
- package/scripts/lib/cli/commands/update.rb +20 -0
- package/scripts/lib/cli/commands/version.rb +53 -0
- package/scripts/lib/cli/frontier.rb +86 -0
- package/scripts/lib/cli/intent_progress.rb +36 -0
- package/scripts/lib/cli/legacy.rb +80 -0
- package/scripts/lib/cli/output.rb +137 -0
- package/scripts/lib/cli/scope.rb +134 -0
- package/scripts/lib/cli/table.rb +65 -0
- package/scripts/lib/cli.rb +94 -0
- package/scripts/lib/codex_adapter.rb +198 -0
- package/scripts/lib/compact_instructions.rb +13 -5
- package/scripts/lib/core_integrity.rb +71 -0
- package/scripts/lib/dashboard_screen.rb +40 -0
- package/scripts/lib/data_boundary.rb +132 -0
- package/scripts/lib/day_summary.rb +30 -16
- package/scripts/lib/doctor_core.rb +114 -38
- package/scripts/lib/doctor_session_ledger.rb +5 -53
- package/scripts/lib/engine_permissions.rb +88 -0
- package/scripts/lib/exec_worktree.rb +24 -21
- package/scripts/lib/feedback_report.rb +1 -1
- package/scripts/lib/graph_edges.rb +137 -0
- package/scripts/lib/graph_file.rb +246 -0
- package/scripts/lib/graph_measure.rb +645 -0
- package/scripts/lib/graph_measure_budget.rb +409 -0
- package/scripts/lib/graph_measure_cohorts.rb +487 -0
- package/scripts/lib/graph_measure_models.rb +413 -0
- package/scripts/lib/graph_measure_report.rb +532 -0
- package/scripts/lib/graph_tree.rb +98 -0
- package/scripts/lib/guarded_append.rb +155 -0
- package/scripts/lib/handoff.rb +40 -13
- package/scripts/lib/harness_adapter.rb +184 -0
- package/scripts/lib/hook_registry.rb +27 -3
- package/scripts/lib/hook_replay.rb +229 -0
- package/scripts/lib/index_entry.rb +62 -0
- package/scripts/lib/index_projection.rb +201 -0
- package/scripts/lib/insights.rb +1 -1
- package/scripts/lib/installer_core.rb +532 -71
- package/scripts/lib/intent_screen.rb +9 -6
- package/scripts/lib/intent_screen_ansi.rb +73 -12
- package/scripts/lib/intent_validator.rb +2 -2
- package/scripts/lib/lock.rb +10 -11
- package/scripts/lib/message_display.rb +377 -173
- package/scripts/lib/meter_watch.rb +185 -0
- package/scripts/lib/node_file.rb +234 -0
- package/scripts/lib/node_ids.rb +99 -0
- package/scripts/lib/node_input.rb +913 -0
- package/scripts/lib/node_input_compatibility.rb +62 -0
- package/scripts/lib/node_ledger.rb +386 -0
- package/scripts/lib/node_progress.rb +153 -0
- package/scripts/lib/node_return.rb +204 -0
- package/scripts/lib/node_worktree.rb +337 -0
- package/scripts/lib/outcome_report.rb +440 -0
- package/scripts/lib/preflight.rb +4 -6
- package/scripts/lib/project_config.rb +46 -0
- package/scripts/lib/project_validator.rb +3 -2
- package/scripts/lib/qmd_sync.rb +8 -7
- package/scripts/lib/ready_set.rb +462 -0
- package/scripts/lib/reference_archive.rb +45 -0
- package/scripts/lib/release_guard.rb +18 -0
- package/scripts/lib/report_screen.rb +1460 -74
- package/scripts/lib/rlm/corpus.rb +13 -0
- package/scripts/lib/rlm/probe.rb +29 -0
- package/scripts/lib/rlm/query.rb +22 -0
- package/scripts/lib/roadmap_graph.rb +210 -0
- package/scripts/lib/roadmap_migration.rb +95 -0
- package/scripts/lib/roadmap_queue.rb +158 -8
- package/scripts/lib/roadmap_render.rb +150 -0
- package/scripts/lib/roadmap_savepoint.rb +64 -14
- package/scripts/lib/runner_absorb.rb +703 -0
- package/scripts/lib/runner_answer.rb +206 -0
- package/scripts/lib/runner_core.rb +194 -0
- package/scripts/lib/runner_dispatch.rb +525 -0
- package/scripts/lib/runner_policy.rb +191 -0
- package/scripts/lib/runner_proposals.rb +275 -0
- package/scripts/lib/runner_rewind.rb +201 -0
- package/scripts/lib/runner_sweep.rb +231 -0
- package/scripts/lib/runner_until_empty.rb +252 -0
- package/scripts/lib/runner_watch.rb +389 -0
- package/scripts/lib/savepoint.rb +141 -19
- package/scripts/lib/scaffold_intent.rb +6 -3
- package/scripts/lib/screen_paint.rb +555 -0
- package/scripts/lib/screens/dashboard.rb +20 -0
- package/scripts/lib/screens/plan.rb +18 -0
- package/scripts/lib/screens/roadmap.rb +15 -0
- package/scripts/lib/search_index.rb +55 -0
- package/scripts/lib/session_close.rb +30 -28
- package/scripts/lib/session_git.rb +25 -18
- package/scripts/lib/session_ledger.rb +48 -4
- package/scripts/lib/session_usage.rb +190 -0
- package/scripts/lib/sqlite.rb +22 -0
- package/scripts/lib/stop_gate.rb +95 -0
- package/scripts/lib/store_discovery.rb +7 -6
- package/scripts/lib/store_layout.rb +54 -0
- package/scripts/lib/store_provisioning.rb +2 -1
- package/scripts/lib/store_sync.rb +85 -0
- package/scripts/lib/stores_move.rb +93 -0
- package/scripts/lib/verify_intent.rb +36 -8
- package/scripts/lib/version_number.rb +48 -0
- package/scripts/lib/work_graph.rb +59 -0
- package/scripts/lib/work_graph_validator.rb +201 -0
- package/scripts/lib/worktree.rb +27 -32
- package/scripts/lib/worktree_sweep.rb +6 -5
- package/scripts/link-suggest +2 -1
- package/scripts/meter-watch +57 -0
- package/scripts/migrate-to-global +1 -1
- package/scripts/new-intent +4 -13
- package/scripts/node-input +92 -0
- package/scripts/node-run +225 -0
- package/scripts/node-transition +291 -0
- package/scripts/outcome-report +74 -0
- package/scripts/plastic-lock +42 -33
- package/scripts/promote-session-item +3 -2
- package/scripts/read-config +53 -9
- package/scripts/ready-set +126 -0
- package/scripts/release-check +123 -0
- package/scripts/report-screen +192 -30
- package/scripts/roadmap-graph +119 -0
- package/scripts/roadmap-savepoint +7 -0
- package/scripts/runner +581 -0
- package/scripts/savepoint-note +11 -9
- package/scripts/session-commit +2 -1
- package/scripts/session-usage +56 -0
- package/scripts/skill-lint +115 -6
- package/scripts/spawn-preamble +2 -2
- package/scripts/update.rb +25 -4
- package/scripts/validate-work-graph +39 -0
- package/scripts/verify-intent +3 -2
- package/scripts/write-handoff +2 -1
- package/templates/agents.md +7 -7
- package/templates/config.yml +16 -9
- package/templates/dashboard-screen.md +22 -0
- package/templates/display-fixture.md +21 -0
- package/templates/graph.md +16 -0
- package/templates/index.md +1 -1
- package/templates/intent-screen.md +1 -1
- package/templates/node-decision.md +11 -0
- package/templates/node-research.md +13 -0
- package/templates/node-verify.md +13 -0
- package/templates/node-work.md +22 -0
- package/templates/outcome.md +15 -2
- package/templates/project.yml +1 -1
- package/templates/render.css +10 -0
- package/templates/report-plan.md +15 -0
- package/templates/report-roadmap-delivered.md +10 -0
- package/templates/report-roadmap-plan.md +9 -0
- package/templates/report-roadmap-state.md +9 -0
- package/templates/report-state.md +1 -1
- package/templates/roadmap.md +13 -0
- package/bin/plastic.js +0 -70
- package/scripts/lib/bridge.rb +0 -116
- package/skills/agent-advisor/SKILL.md +0 -92
- package/skills/auto/SKILL.md +0 -295
- package/skills/auto/evals/evals.json +0 -255
- package/skills/auto/references/end-tail.md +0 -66
- package/skills/auto/references/human-report-contract.md +0 -78
- package/skills/conventions/SKILL.md +0 -29
- package/skills/dashboard/SKILL.md +0 -169
- package/skills/dashboard/evals/evals.json +0 -38
- package/skills/dashboard/references/classification.md +0 -22
- package/skills/dashboard/templates/dashboard-global.md +0 -20
- package/skills/dashboard/templates/dashboard-project.md +0 -19
- package/skills/direct/SKILL.md +0 -66
- package/skills/direct/references/request-signals.md +0 -59
- package/skills/doctor/SKILL.md +0 -299
- package/skills/doctor/report.md +0 -102
- package/skills/feedback/SKILL.md +0 -98
- package/skills/feedback/references/transport-and-privacy.md +0 -65
- package/skills/feedback/report.md +0 -36
- package/skills/install/SKILL.md +0 -217
- package/skills/intent-continuing/SKILL.md +0 -154
- package/skills/intent-continuing/references/board-fill.md +0 -43
- package/skills/intent-continuing/references/boarding-matrix.md +0 -34
- package/skills/intent-continuing/references/context-management.md +0 -28
- package/skills/intent-continuing/references/liveness-ranking.md +0 -57
- package/skills/intent-creating/SKILL.md +0 -164
- package/skills/intent-creating/evals/evals.json +0 -72
- package/skills/intent-creating/references/lifecycle.md +0 -81
- package/skills/intent-creating/references/wikilinks.md +0 -8
- package/skills/intent-ending/SKILL.md +0 -173
- package/skills/intent-ending/evals/evals.json +0 -74
- package/skills/intent-executing/SKILL.md +0 -170
- package/skills/intent-executing/evals/evals.json +0 -66
- package/skills/intent-executing/implementer-prompt.md +0 -42
- package/skills/intent-executing/spec-reviewer-prompt.md +0 -27
- package/skills/intent-speccing/SKILL.md +0 -130
- package/skills/intent-speccing/evals/evals.json +0 -126
- package/skills/intent-speccing/references/design-principles.md +0 -44
- package/skills/intent-speccing/references/per-section-fill-rules.md +0 -92
- package/skills/intent-speccing/references/self-verify-checklist.md +0 -37
- package/skills/project-creating/SKILL.md +0 -162
- package/skills/project-creating/references/hubs-projects.md +0 -55
- package/skills/project-creating/references/project-scaffolding.md +0 -97
- package/skills/releasing/SKILL.md +0 -337
- package/skills/releasing/references/deprecations.md +0 -60
- package/skills/releasing/references/promotion-and-tagging.md +0 -66
- package/skills/releasing/references/release-lines.md +0 -105
- package/skills/roadmap/SKILL.md +0 -64
- package/skills/roadmap/references/file-format.md +0 -124
- package/skills/roadmap/references/operations.md +0 -112
- package/skills/rollback/SKILL.md +0 -91
- package/skills/tutorial/SKILL.md +0 -65
- package/skills/tutorial/evals/evals.json +0 -186
- package/skills/uninstall/SKILL.md +0 -75
- package/skills/update/SKILL.md +0 -126
- /package/{skills/auto/references → docs/help}/agent-report-contract.md +0 -0
- /package/{skills/intent-executing → docs/help}/code-quality-reviewer-prompt.md +0 -0
- /package/{skills/conventions/references → docs/help}/lifecycle-and-savepoints.md +0 -0
- /package/{skills/intent-executing → docs/help}/plan-reviewer-prompt.md +0 -0
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-intent-ending",
|
|
3
|
-
"notes": "Intent 161. Scopes: description triggering (3-6) and behavior (1-2: the two mandatory D6 cases). Case B graduates into test/end_intent_test.rb (test_done_bookend_lands_once_and_is_idempotent) per evaluating-skills conventions.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "behavior",
|
|
8
|
-
"set": "train",
|
|
9
|
-
"prompt": "checklist.md has one unchecked non-completion item. Try to complete the intent.",
|
|
10
|
-
"expected_output": "Ticks or finishes the item before calling scripts/end-intent, because an unchecked box is reported by the structure self-check and lands verbatim in the backfilled Follow-ups; never a refusal (the write-time gate was removed in 2.0, intents 302 and 308).",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{ "type": "human", "check": "SKILL.md Step 0 states that nothing refuses the close, that an unchecked box is a reported gap landing in Follow-ups, and instructs finishing the checklist before the call", "result": "expect-pass" },
|
|
14
|
-
{ "type": "code", "check": "scripts/end-intent exits 0 on an unchecked '- [ ]' item and prints 'structure check: intent_checklist_complete' (test/end_intent_test.rb)", "result": "pass" }
|
|
15
|
-
]
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"id": 2,
|
|
19
|
-
"scope": "behavior",
|
|
20
|
-
"set": "train",
|
|
21
|
-
"prompt": "Run the mechanical close (scripts/end-intent) for a delivered intent with a real outcome.md.",
|
|
22
|
-
"expected_output": "The savepoint Done bookend lands exactly once in savepoint.md, and a second run of the same command does not duplicate it (this is the regression the intent fixes: releasing used to skip this line entirely).",
|
|
23
|
-
"files": [],
|
|
24
|
-
"assertions": [
|
|
25
|
-
{ "type": "human", "check": "SKILL.md Step 1-4 calls scripts/end-intent as one script instead of restating the outcome/INDEX/savepoint one-liners in prose", "result": "expect-pass" },
|
|
26
|
-
{ "type": "code", "check": "test/end_intent_test.rb#test_done_bookend_lands_once_and_is_idempotent is green", "result": "pass" }
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"id": 3,
|
|
31
|
-
"scope": "triggering",
|
|
32
|
-
"set": "train",
|
|
33
|
-
"prompt": "Mark intent 87 done, it shipped.",
|
|
34
|
-
"expected_output": "Activates plastic-intent-ending to run the mechanical close (outcome.md, INDEX move, savepoint bookend, commit, disarm, reindex, report).",
|
|
35
|
-
"files": [],
|
|
36
|
-
"assertions": [
|
|
37
|
-
{ "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"id": 4,
|
|
42
|
-
"scope": "triggering",
|
|
43
|
-
"set": "train",
|
|
44
|
-
"prompt": "This one's not worth finishing, abandon it and wrap this up.",
|
|
45
|
-
"expected_output": "Activates plastic-intent-ending (indirect trigger: 'wrap this up' names no lifecycle vocabulary directly). Abandoned runs the identical procedure, only outcome.md content and the INDEX section differ.",
|
|
46
|
-
"files": [],
|
|
47
|
-
"assertions": [
|
|
48
|
-
{ "type": "code", "check": "router CHOICE == plastic-intent-ending", "result": "expect-pass" }
|
|
49
|
-
]
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"id": 5,
|
|
53
|
-
"scope": "triggering",
|
|
54
|
-
"set": "validation",
|
|
55
|
-
"prompt": "Start work on intent 87.",
|
|
56
|
-
"expected_output": "Does NOT activate plastic-intent-ending; this is a resume request (plastic-intent-continuing), the opposite end of the lifecycle from a close.",
|
|
57
|
-
"files": [],
|
|
58
|
-
"assertions": [
|
|
59
|
-
{ "type": "code", "check": "router CHOICE != plastic-intent-ending", "result": "expect-pass" }
|
|
60
|
-
]
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"id": 6,
|
|
64
|
-
"scope": "triggering",
|
|
65
|
-
"set": "validation",
|
|
66
|
-
"prompt": "Cut a release and tag it v1.2.0.",
|
|
67
|
-
"expected_output": "Does NOT activate plastic-intent-ending directly; activates plastic-releasing, which internally calls scripts/end-intent for the mechanical close as one of its own steps.",
|
|
68
|
-
"files": [],
|
|
69
|
-
"assertions": [
|
|
70
|
-
{ "type": "code", "check": "router CHOICE == plastic-releasing", "result": "expect-pass" }
|
|
71
|
-
]
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-executing
|
|
3
|
-
description: Use when you have a written implementation plan to execute. Default mode is subagent-driven (one executor dispatch for the whole consolidated action, tests first, reviewed by risk). Fallback mode is inline execution for environments without subagent support. If superpowers:subagent-driven-development or superpowers:executing-plans are available, delegates to them.
|
|
4
|
-
user-invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Executing a Plan
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
Load plan from the active intent's `plan.md`, execute all tasks, review as below, report when complete.
|
|
12
|
-
|
|
13
|
-
## Step 0: Sync Worktree First
|
|
14
|
-
|
|
15
|
-
Before Step 1 (Load Plan) in either workflow below, sync the code worktree with
|
|
16
|
-
main first, so no edit lands on a path a merged rename or delete already removed:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
After syncing, verify the plan's target files exist at the paths plan.md names.
|
|
23
|
-
If a named file or directory is missing (renamed or removed upstream), stop and
|
|
24
|
-
report it rather than editing a stale path.
|
|
25
|
-
|
|
26
|
-
Read `../plastic-conventions/references/locks-and-worktrees.md` for delivery isolation: the
|
|
27
|
-
single-owner lock, claims, worktrees, solo mode, and the station ledger, before touching the
|
|
28
|
-
worktree above. This path resolves relative to this skill's own installed directory.
|
|
29
|
-
|
|
30
|
-
## Mode Selection
|
|
31
|
-
|
|
32
|
-
### Check for superpowers first
|
|
33
|
-
If `superpowers:subagent-driven-development` is available as a skill, delegate to it. If only `superpowers:executing-plans` is available, delegate to that. If neither is available, use Plastic's own execution engine below.
|
|
34
|
-
|
|
35
|
-
**CRITICAL: when delegating to superpowers:**
|
|
36
|
-
- Tell the skill that the plan is at `~/.plastic/store/ID--slug/plan.md` (not `docs/superpowers/plans/`)
|
|
37
|
-
- Tell the skill that specs live at `~/.plastic/store/ID--slug/spec.md` (not `docs/superpowers/specs/`)
|
|
38
|
-
- All meta-artifacts must stay inside `~/.plastic/store/ID--slug/`
|
|
39
|
-
- Code files go in the project tree as normal
|
|
40
|
-
- Superpowers skills respect "user preferences for plan/spec location"; Plastic IS that preference
|
|
41
|
-
|
|
42
|
-
### Subagent-Driven (Default)
|
|
43
|
-
Dispatches subagents to do the work. The controller never implements. It dispatches, reviews, and tracks progress. One executor dispatch implements the whole consolidated action from `plan.md`, the action file's failure-mode matrix, and `checklist.md` in one pass, tests first: the matrix's tests are committed red before the code. Several independent action files are handed to the same executor in order; they are not a reason for a per-task review loop (removed in 2.0, intent 307).
|
|
44
|
-
|
|
45
|
-
The post-execution review in Step 3 runs by risk (the rule lives in the auto skill). When it runs, the reviewer is a separate agent with fresh context, never the maker. The plan itself is reviewed before code by the adversarial plan reviewer (`plan-reviewer-prompt.md`), dispatched by the lead at How.
|
|
46
|
-
|
|
47
|
-
### Inline (Fallback)
|
|
48
|
-
Executes tasks sequentially in the current session. Use when subagents aren't available or user explicitly requests inline mode.
|
|
49
|
-
|
|
50
|
-
To select: user says "inline", "execute inline", or "no subagents".
|
|
51
|
-
|
|
52
|
-
## Subagent-Driven Workflow
|
|
53
|
-
|
|
54
|
-
### Step 1: Load Plan
|
|
55
|
-
Run Step 0 (Sync Worktree First) before this step.
|
|
56
|
-
1. Read the active intent's `plan.md`
|
|
57
|
-
2. Extract ALL tasks with their full text, store in memory. Never make subagents read the plan file.
|
|
58
|
-
3. Create a task list to track progress
|
|
59
|
-
|
|
60
|
-
### Step 2: Execute Each Task
|
|
61
|
-
|
|
62
|
-
Dispatch ONE executor subagent and give it the whole delivery: every task's full text from `plan.md` (pasted in, never a file reference), every action file with its failure-mode matrix, the checklist items it must tick, the project context from CLAUDE.md, the active intent context from `{ID}--{slug}.md`, and the worktree path. In auto mode this is the `plastic-executor` agent; elsewhere use the `implementer-prompt.md` template. The executor writes the matrix's tests and commits them red, implements the consolidated action in order, ticks each item as it lands (see `## Tick-as-you-land`), and drives the test suite green.
|
|
63
|
-
|
|
64
|
-
After each commit lands (the red commit and every commit after it), append a `Commit` line to the savepoint ledger: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Commit --text "<sha> <what it proves>"` (intent 317, D17). This is what feeds `report-screen delay`; a commit with no line is a gap the delay report cannot explain.
|
|
65
|
-
|
|
66
|
-
Read its response by code:
|
|
67
|
-
- DONE or DONE_WITH_CONCERNS → proceed to Step 3.
|
|
68
|
-
- NEEDS_CONTEXT → provide the missing context, re-dispatch the executor.
|
|
69
|
-
- BLOCKED → stop, report to the user, wait for resolution.
|
|
70
|
-
|
|
71
|
-
### Step 3: Review by Risk
|
|
72
|
-
Apply the auto skill's risk rule to the executor's return and the diff: a matrix row no test could prove, a diff touching a hook, the lock, the worktree code, the installer, or a release file, a DONE_WITH_CONCERNS or a deviation from the matrix, or an owner-facing surface no test pins. When a rule fires, dispatch the post-execution reviewer with `code-quality-reviewer-prompt.md` (a separate agent with fresh context, never the maker); if it returns changes, re-dispatch the executor to fix them, then run the suite once more. When no rule fires, the green suite is the review.
|
|
73
|
-
|
|
74
|
-
Whenever a review verdict returns - the plan review before code, or the post-execution review above - the lead appends a `Review` line: `ruby ~/.plastic/scripts/savepoint-note <intent_dir> --kind Review --text "<verdict, what changed>"` (intent 317, D17). This is the other half of what `report-screen delay` reads.
|
|
75
|
-
|
|
76
|
-
**The D19 heading convention.** An action file's `## Delivered` row (in `outcome.md`) is proven by whichever `actions/ACTION_N.md` heading carries that row's label as a standalone token - `### Row A -` proves row A, `### S1 -` proves row S1. Write action-file section headings so the label they prove is unambiguous (never a substring another label could also match, like `A` inside `AB`); `report-screen delivered`'s Proven-by column renders `not recorded` when no heading matches.
|
|
77
|
-
|
|
78
|
-
### Step 4: Update Intent and Complete
|
|
79
|
-
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
80
|
-
|
|
81
|
-
1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
|
|
82
|
-
2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
|
|
83
|
-
|
|
84
|
-
**This is NOT optional.** An intent with all checklist items done but no Outcome is a broken state. Complete the intent immediately, do not leave it for later.
|
|
85
|
-
|
|
86
|
-
## Inline Workflow
|
|
87
|
-
|
|
88
|
-
### Step 1: Load and Review Plan
|
|
89
|
-
Run Step 0 (Sync Worktree First) before this step.
|
|
90
|
-
1. Read plan file from active intent
|
|
91
|
-
2. Review critically, raise concerns before starting
|
|
92
|
-
3. Create task list to track progress
|
|
93
|
-
|
|
94
|
-
### Step 2: Execute Tasks
|
|
95
|
-
For each task:
|
|
96
|
-
1. Mark as in_progress
|
|
97
|
-
2. Follow each step exactly
|
|
98
|
-
3. Run verifications as specified
|
|
99
|
-
4. Tick as it lands: follow `## Tick-as-you-land` below
|
|
100
|
-
|
|
101
|
-
### Step 3: Update Intent and Complete
|
|
102
|
-
Capture observations in `## Insights`. When ALL checklist items are checked:
|
|
103
|
-
|
|
104
|
-
1. Update the intent's cluster entries in `INDEX.md` to show `_(completed)_`. Do this first, so the store auto-commit in the next step picks it up. `plastic-intent-ending` does not cover cluster maintenance (`store-indexing` and `store-curating` own it), so doing it here keeps the step from being lost.
|
|
105
|
-
2. Hand the mechanical close to `plastic-intent-ending`. It owns `outcome.md`, the intent file's `## Outcome` stamp, the INDEX terminal move, the savepoint `Done` line, the store auto-commit, disarm, the QMD reindex, and the EM-to-CTO owner report, as ONE delegation. Author the outcome.md content when that skill asks for it; do not restate the mechanical steps here.
|
|
106
|
-
|
|
107
|
-
**This is NOT optional.** Complete the intent immediately when work is done.
|
|
108
|
-
|
|
109
|
-
## Tick-as-you-land
|
|
110
|
-
|
|
111
|
-
As each task lands, in the same edit: move its checklist item from `## In
|
|
112
|
-
Progress` to `## Completed` in `checklist.md`, and add one `## Session Log`
|
|
113
|
-
row (Date, Items Completed, Notes). Do not batch several tasks' worth of
|
|
114
|
-
checklist updates into one later edit; tick the moment the task is verified,
|
|
115
|
-
before moving to the next task.
|
|
116
|
-
|
|
117
|
-
## Verify before every owner review
|
|
118
|
-
|
|
119
|
-
Hard rule: before presenting any completed work to the owner, independently
|
|
120
|
-
verify it. Grep or run the artifact the work just produced (the test suite,
|
|
121
|
-
the changed file, the installed output) rather than restating the intended
|
|
122
|
-
change. Never present an unverified claim to the owner. If verification
|
|
123
|
-
fails, fix it before the review, not after.
|
|
124
|
-
|
|
125
|
-
## Methods report (audits and sweeps)
|
|
126
|
-
|
|
127
|
-
When the work is an audit or a sweep (checking many files or many instances of
|
|
128
|
-
something rather than building one artifact), deposit a methods report to
|
|
129
|
-
`{intent_dir}/resources/` before the review: what was checked, how it was
|
|
130
|
-
checked, and what was found. This lets the owner review the method, not just
|
|
131
|
-
the conclusion.
|
|
132
|
-
|
|
133
|
-
## Reroute vs dispatch
|
|
134
|
-
|
|
135
|
-
A human-facing instruction like "run /plastic-intent-speccing" means the user
|
|
136
|
-
types that slash command themselves; it is never handed to a
|
|
137
|
-
subagent. Agent-facing dispatch text is a prompt passed to the Agent tool for
|
|
138
|
-
a subagent to execute. Keep the two separate: do not address a slash command
|
|
139
|
-
to a subagent, and do not paste a dispatch prompt at the user.
|
|
140
|
-
|
|
141
|
-
## Owner decisions during Exec
|
|
142
|
-
|
|
143
|
-
When presenting a batch of Exec decisions for the owner to rule, read
|
|
144
|
-
`~/.plastic/_decision-tables.md` and follow the numbered-table procedure,
|
|
145
|
-
persisting each ruling with `--stage Exec`.
|
|
146
|
-
|
|
147
|
-
## Position in the cycle
|
|
148
|
-
|
|
149
|
-
- **Before:** `plan.md` and `checklist.md` exist; the worktree is armed.
|
|
150
|
-
- **Produces:** code changes, a ticked checklist, and (for audits or sweeps) a methods report in `resources/`.
|
|
151
|
-
- **Next:** `plastic-intent-ending` owns `outcome.md` and the rest of the mechanical close (see intent 161). The Update-Intent-and-Complete step above hands off to it.
|
|
152
|
-
|
|
153
|
-
Read `../plastic-conventions/references/lifecycle-and-savepoints.md` for the subagent
|
|
154
|
-
report-home contract this handoff relies on.
|
|
155
|
-
|
|
156
|
-
## Model Selection for Subagents
|
|
157
|
-
|
|
158
|
-
Match model to task complexity:
|
|
159
|
-
- **Mechanical tasks** (config files, boilerplate): cheapest available
|
|
160
|
-
- **Standard implementation**: default model
|
|
161
|
-
- **Architecture, integration, review**: most capable model
|
|
162
|
-
|
|
163
|
-
## Prompt Templates
|
|
164
|
-
|
|
165
|
-
Subagent prompts are in this skill's directory:
|
|
166
|
-
- `implementer-prompt.md`: template for implementer subagents
|
|
167
|
-
- `spec-reviewer-prompt.md`: template for spec compliance reviewers
|
|
168
|
-
- `code-quality-reviewer-prompt.md`: template for code quality reviewers
|
|
169
|
-
|
|
170
|
-
Read the appropriate template when dispatching each subagent type.
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-intent-executing",
|
|
3
|
-
"notes": "Intent 164. New evals.json for the executing-plan skill: refuse-to-present-unverified, sync-worktree-first, and the reroute-vs-dispatch distinction. 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": "A task just landed: a new method was added and its test file was written. The agent is about to tell the owner the task is done and move to the next one.",
|
|
10
|
-
"expected_output": "Before presenting the completed task to the owner, the agent independently verifies it: greps the changed file or runs the specific test, rather than restating what it intended to do. It does not present the claim until the grep or test run has actually been observed.",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "human",
|
|
15
|
-
"check": "a grep or test run against the actual artifact is shown before the owner-facing claim; no claim is presented as done without that observed check",
|
|
16
|
-
"result": "expect-pass"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": 2,
|
|
22
|
-
"scope": "behavior",
|
|
23
|
-
"set": "validation",
|
|
24
|
-
"prompt": "The agent finished implementing a task and, without running anything, tells the owner \"Task 3 is complete and the tests pass.\"",
|
|
25
|
-
"expected_output": "This is a refusal case: the skill does not allow presenting a pass claim without first grepping or running the artifact. The correct behavior is to run the verification first and only then report the observed result.",
|
|
26
|
-
"files": [],
|
|
27
|
-
"assertions": [
|
|
28
|
-
{
|
|
29
|
-
"type": "human",
|
|
30
|
-
"check": "the skill's stated hard rule blocks an unverified claim like this; expected behavior is verify-then-report, not report-then-hope",
|
|
31
|
-
"result": "expect-pass"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 3,
|
|
37
|
-
"scope": "behavior",
|
|
38
|
-
"set": "train",
|
|
39
|
-
"prompt": "Execution is starting for an intent whose plan.md was written two days ago; the code worktree has not been touched since.",
|
|
40
|
-
"expected_output": "Before Step 1 (Load Plan), the agent syncs the code worktree with main: `git -C <worktree> fetch origin && git -C <worktree> merge --ff-only origin/main`, then verifies the plan's target files exist at the paths plan.md names before editing any of them.",
|
|
41
|
-
"files": [],
|
|
42
|
-
"assertions": [
|
|
43
|
-
{
|
|
44
|
-
"type": "code",
|
|
45
|
-
"check": "the fetch-and-merge --ff-only sync command runs before Load Plan; target file existence is checked before the first edit",
|
|
46
|
-
"result": "expect-pass"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": 4,
|
|
52
|
-
"scope": "behavior",
|
|
53
|
-
"set": "validation",
|
|
54
|
-
"prompt": "The plan's next step reads \"run /plastic-intent-speccing\" as a human-facing instruction to consolidate the spec once Exec finishes an audit task.",
|
|
55
|
-
"expected_output": "The agent tells the user to type the /plastic-intent-speccing command themselves; it does not dispatch a subagent with that slash-command text as a prompt, and it does not paste an agent-facing dispatch prompt at the user instead.",
|
|
56
|
-
"files": [],
|
|
57
|
-
"assertions": [
|
|
58
|
-
{
|
|
59
|
-
"type": "human",
|
|
60
|
-
"check": "the slash-command instruction is directed at the user, not handed to the Agent tool as a subagent prompt; no dispatch-prompt text leaks into the user-facing message",
|
|
61
|
-
"result": "expect-pass"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Implementer Subagent Prompt
|
|
2
|
-
|
|
3
|
-
You are implementing a specific task from a plan. You have been given the full task text below.
|
|
4
|
-
|
|
5
|
-
## Your Task
|
|
6
|
-
|
|
7
|
-
{{TASK_TEXT}}
|
|
8
|
-
|
|
9
|
-
## Project Context
|
|
10
|
-
|
|
11
|
-
{{PROJECT_CONTEXT}}
|
|
12
|
-
|
|
13
|
-
## Active Intent
|
|
14
|
-
|
|
15
|
-
{{INTENT_CONTEXT}}
|
|
16
|
-
|
|
17
|
-
## Instructions
|
|
18
|
-
|
|
19
|
-
1. Read the task carefully. If anything is unclear, report NEEDS_CONTEXT with what you need.
|
|
20
|
-
2. Implement exactly what the task specifies — nothing more, nothing less.
|
|
21
|
-
3. Write tests first when the task includes test steps (TDD).
|
|
22
|
-
4. Follow the file paths specified in the task exactly.
|
|
23
|
-
5. Commit after each logical unit of work.
|
|
24
|
-
6. When done, self-review against this checklist:
|
|
25
|
-
- [ ] All steps in the task are completed
|
|
26
|
-
- [ ] Tests pass
|
|
27
|
-
- [ ] Code is clean and follows project conventions
|
|
28
|
-
- [ ] No unrelated changes
|
|
29
|
-
|
|
30
|
-
## Report Format
|
|
31
|
-
|
|
32
|
-
End your work with one of these status lines:
|
|
33
|
-
|
|
34
|
-
**DONE** — All steps completed, tests pass, code committed.
|
|
35
|
-
|
|
36
|
-
**DONE_WITH_CONCERNS** — Completed but I noticed: [describe concerns].
|
|
37
|
-
|
|
38
|
-
**NEEDS_CONTEXT** — I need clarification on: [specific questions].
|
|
39
|
-
|
|
40
|
-
**BLOCKED** — Cannot proceed because: [describe blocker].
|
|
41
|
-
|
|
42
|
-
It is always OK to report BLOCKED or NEEDS_CONTEXT. Do not guess or improvise when uncertain.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Spec Compliance Reviewer Prompt
|
|
2
|
-
|
|
3
|
-
The implementer says they finished this task. Verify independently — their report may be incomplete or optimistic.
|
|
4
|
-
|
|
5
|
-
## Task Requirements
|
|
6
|
-
|
|
7
|
-
{{TASK_TEXT}}
|
|
8
|
-
|
|
9
|
-
## Instructions
|
|
10
|
-
|
|
11
|
-
1. Read the actual code that was written (not the implementer's report)
|
|
12
|
-
2. Compare line by line against the task requirements
|
|
13
|
-
3. Check for:
|
|
14
|
-
- Missing requirements — anything in the task that wasn't implemented
|
|
15
|
-
- Extra work — anything added that the task didn't ask for
|
|
16
|
-
- Misunderstandings — code that doesn't match what the task intended
|
|
17
|
-
- Test coverage — are all specified behaviors tested?
|
|
18
|
-
|
|
19
|
-
## Report Format
|
|
20
|
-
|
|
21
|
-
**PASS** — All task requirements are correctly implemented. No gaps, no extras.
|
|
22
|
-
|
|
23
|
-
**FAIL** — Issues found:
|
|
24
|
-
- [file:line] Description of what's wrong and what was expected
|
|
25
|
-
- [file:line] Description of what's missing
|
|
26
|
-
|
|
27
|
-
Be specific. Reference exact file paths and line numbers.
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-intent-speccing
|
|
3
|
-
description: >-
|
|
4
|
-
Thinking mode for an intent: the conversation that turns an idea into rulings, the
|
|
5
|
-
research that backs them, and the action files that say how the work runs. Use when the
|
|
6
|
-
user wants to think a request through before building it, says "let's design this",
|
|
7
|
-
"brainstorm", "grill me", "research this first", "spec this intent", "write the spec",
|
|
8
|
-
or when a prompt is too vague to run directly and the direct skill routes here. Also
|
|
9
|
-
fires on an indirect ask that never names a spec, such as "turn what we just discussed
|
|
10
|
-
into the contract the work runs from." Absorbs what the former intent-brainstorming,
|
|
11
|
-
intent-grilling, and intent-researching skills used to do (intent 304).
|
|
12
|
-
user-invocable: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Intent Speccing: thinking mode
|
|
16
|
-
|
|
17
|
-
One skill for the whole thinking conversation on an intent. It asks one question at a time,
|
|
18
|
-
records every owner ruling the moment it lands, grills when asked, deposits research in
|
|
19
|
-
`resources/`, and ends by writing the action files the work runs from and consolidating the
|
|
20
|
-
rulings into `spec.md`. There is no separate brainstorm, grill, or research skill; those are
|
|
21
|
-
the modes below.
|
|
22
|
-
|
|
23
|
-
## Active intent
|
|
24
|
-
|
|
25
|
-
Resolve the active intent before anything else: read `~/.plastic/projects.yml`, match the
|
|
26
|
-
working directory against registered project paths (a match means the project store at
|
|
27
|
-
`~/.plastic/projects/{slug}/store/`, no match means `~/.plastic/store/`), then read that
|
|
28
|
-
store's `INDEX.md` under `## Active`. Exactly one active intent is the one to work; several
|
|
29
|
-
means ask which; none means stop and say so ("No active intent. Create one first with
|
|
30
|
-
/plastic-intent-creating"). Every artifact goes into `{store}/{id}--{slug}/`; never write
|
|
31
|
-
outside it.
|
|
32
|
-
|
|
33
|
-
## The conversation
|
|
34
|
-
|
|
35
|
-
QMD-first: before scanning the store by hand for prior decisions, specs, or research, run
|
|
36
|
-
`ruby ~/.plastic/scripts/qmd-sync search "<terms>"` and open the authoritative intent file for
|
|
37
|
-
any hit you act on. The command is a no-op when QMD is absent.
|
|
38
|
-
|
|
39
|
-
1. **Context first.** Check the project state (files, docs, recent commits) and the intent's
|
|
40
|
-
`## Context` and `## Insights`. Assess scope: a request that describes several independent
|
|
41
|
-
subsystems is decomposed first, one thinking conversation per piece, before any detail
|
|
42
|
-
question is spent.
|
|
43
|
-
2. **One question per message, in prose.** No multiple-choice chips; a short menu of named
|
|
44
|
-
options is fine when the choice is genuinely enumerable, phrased as a sentence. Focus on
|
|
45
|
-
purpose, constraints, and success criteria. Before asking how something works, look:
|
|
46
|
-
in a codebase the answer is usually on disk.
|
|
47
|
-
3. **Propose two or three approaches** with trade-offs, leading with the recommendation and
|
|
48
|
-
the reason for it. YAGNI: strip what the design does not need.
|
|
49
|
-
4. **Present the design in sections** scaled to their complexity (a few sentences when
|
|
50
|
-
straightforward, up to 300 words when nuanced): architecture, components, data flow,
|
|
51
|
-
error handling, testing. Get a ruling after each section. Read
|
|
52
|
-
`references/design-principles.md` before proposing a design for the unit-boundary and
|
|
53
|
-
existing-codebase guidance (follow established patterns, no unrelated refactoring).
|
|
54
|
-
5. **Record every ruling as it lands.** The moment the owner rules, before the next question:
|
|
55
|
-
```
|
|
56
|
-
ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
|
|
57
|
-
```
|
|
58
|
-
Never batch. A later ruling that conflicts with an earlier one gets a new insight naming
|
|
59
|
-
the superseded one; both stay on record and the later wins. When presenting a batch of
|
|
60
|
-
options for the owner to pick from, read `~/.plastic/_decision-tables.md` and follow the
|
|
61
|
-
numbered-table procedure.
|
|
62
|
-
|
|
63
|
-
No implementation starts until a design has been presented and ruled on. That holds for a
|
|
64
|
-
config change and a one-function utility as much as for a subsystem; the design can be three
|
|
65
|
-
sentences, but it is presented.
|
|
66
|
-
|
|
67
|
-
### Grill mode
|
|
68
|
-
|
|
69
|
-
When the owner says "grill me" or asks to stress-test a plan or design, the same conversation
|
|
70
|
-
turns relentless. Identify the root in one sentence and restate it. Walk the decision tree
|
|
71
|
-
branch by branch: state the branch, ask a specific question, lead with your own recommended
|
|
72
|
-
answer, resolve before moving on, name dependencies between decisions and resolve the
|
|
73
|
-
upstream one first. Do not accept "it depends" without "on what?"; do not skip edge cases; do
|
|
74
|
-
not assume when you can verify; challenge assumptions ("why not the alternative?"). Every
|
|
75
|
-
three or four questions, summarize what is decided. At natural checkpoints, about every ten
|
|
76
|
-
questions, offer to continue or to pause and capture what is decided; a pause records every
|
|
77
|
-
ruling so far and stops. When all branches are resolved, list the decisions and the deferred
|
|
78
|
-
items, then offer the hand-off below.
|
|
79
|
-
|
|
80
|
-
### Research mode
|
|
81
|
-
|
|
82
|
-
When a question needs evidence rather than a ruling, research it and deposit the report in
|
|
83
|
-
`{intent_dir}/resources/{type}--{topic}.md`, with `{type}` one of `deep-research`,
|
|
84
|
-
`competitive-analysis`, `technical-spike`, `reference`, `landscape-survey` and `{topic}` in
|
|
85
|
-
kebab-case. Choose the depth and say why: shallow (one or two searches plus a look at the
|
|
86
|
-
code, minutes) for a narrow factual question; deep (several sources, cross-checked, a
|
|
87
|
-
landscape or an architectural decision, or when a wrong answer would cause an architectural
|
|
88
|
-
mistake) through the harness's deep-research capability when it has one, else a manual
|
|
89
|
-
fan-out of searches. The report carries a summary, findings with citations, sources, and a
|
|
90
|
-
"Relevance to intent" section; tables for findings and comparisons. Log one line in the
|
|
91
|
-
intent's `## Insights` naming the file and the key finding. Research does not chain to
|
|
92
|
-
another step; the conversation decides what to do with it.
|
|
93
|
-
|
|
94
|
-
## Closing the conversation
|
|
95
|
-
|
|
96
|
-
When the rulings are enough to build from:
|
|
97
|
-
|
|
98
|
-
1. **Write the action files.** Every ruling that says how the work runs lands in
|
|
99
|
-
`actions/ACTION_N.md` (at least one real file, no placeholder): the files to touch, the
|
|
100
|
-
order, the tests that prove each step, the rules. The action files are what direct mode or
|
|
101
|
-
an auto team executes; they exist before the work runs.
|
|
102
|
-
2. **Consolidate `spec.md`** from the rulings, section by section in template order. Read
|
|
103
|
-
`references/per-section-fill-rules.md` when filling the template. Build the ruling ledger
|
|
104
|
-
in fixed order first: `## Context` and `### Decisions`, then `## Insights` newest-last so a
|
|
105
|
-
later ruling supersedes an earlier one, then `resources/discovery--<slug>.md`, then any
|
|
106
|
-
other `resources/*.md`. Encode every ruling into its section; a collapsed single-line
|
|
107
|
-
section is complete when it names everything. If a section cannot be filled from the
|
|
108
|
-
ledger, stop and ask for the missing ruling; never invent scope. A spec.md left as the
|
|
109
|
-
placeholder is backfilled from the record at close (`## Problem`, `## Decisions`,
|
|
110
|
-
`## Acceptance Criteria`; the rest stays stub text), so consolidate only when the
|
|
111
|
-
rulings say more than the record already does.
|
|
112
|
-
3. **Self-verify.** Read `references/self-verify-checklist.md` before presenting; fix any
|
|
113
|
-
failing check and re-verify from the top.
|
|
114
|
-
4. **Present and hand off.** Present `spec.md` and the action files. Then offer the routes:
|
|
115
|
-
run it now inline when the work is small enough for direct mode; hand to `plastic-auto`
|
|
116
|
-
when the owner says auto and the checklist above passes (all decisions resolved, scope
|
|
117
|
-
bounded, dependencies named, success criteria defined); or keep thinking.
|
|
118
|
-
|
|
119
|
-
Report, in this order: which files were written (`spec.md` new or rewritten, the action
|
|
120
|
-
files), the count of acceptance criteria, which `## Insights` rulings superseded an earlier
|
|
121
|
-
decision and where each landed, and the route chosen. If step 2 stopped for a missing
|
|
122
|
-
ruling, report that instead: which section, what is missing, the question put to the owner.
|
|
123
|
-
|
|
124
|
-
## References
|
|
125
|
-
|
|
126
|
-
| Trigger | Read |
|
|
127
|
-
|---|---|
|
|
128
|
-
| Before proposing a design (unit boundaries, existing codebases) | `references/design-principles.md` |
|
|
129
|
-
| Filling the spec template (closing step 2) | `references/per-section-fill-rules.md` |
|
|
130
|
-
| Self-verifying before presenting (closing step 3) | `references/self-verify-checklist.md` |
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "plastic-intent-speccing",
|
|
3
|
-
"notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the evals.json convention.",
|
|
4
|
-
"evals": [
|
|
5
|
-
{
|
|
6
|
-
"id": 1,
|
|
7
|
-
"scope": "triggering",
|
|
8
|
-
"set": "train",
|
|
9
|
-
"prompt": "The active intent is at Why with Context and Decisions recorded. Consolidate the enriched Why into spec.md.",
|
|
10
|
-
"expected_output": "Activates plastic-intent-speccing (the user-typed Why-to-How consolidation command).",
|
|
11
|
-
"files": [],
|
|
12
|
-
"assertions": [
|
|
13
|
-
{
|
|
14
|
-
"type": "code",
|
|
15
|
-
"check": "router CHOICE == plastic-intent-speccing",
|
|
16
|
-
"result": "expect-pass"
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": 2,
|
|
22
|
-
"scope": "triggering",
|
|
23
|
-
"set": "train",
|
|
24
|
-
"prompt": "Turn what we just discussed into the contract the planner builds from.",
|
|
25
|
-
"expected_output": "Activates plastic-intent-speccing; an indirect trigger that names neither the skill nor spec.md.",
|
|
26
|
-
"files": [],
|
|
27
|
-
"assertions": [
|
|
28
|
-
{
|
|
29
|
-
"type": "code",
|
|
30
|
-
"check": "router CHOICE == plastic-intent-speccing",
|
|
31
|
-
"result": "expect-pass"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"id": 3,
|
|
37
|
-
"scope": "triggering",
|
|
38
|
-
"set": "validation",
|
|
39
|
-
"prompt": "Brainstorm this intent.",
|
|
40
|
-
"expected_output": "Activates plastic-intent-speccing (brainstorming is a mode of the thinking conversation since intent 304).",
|
|
41
|
-
"files": [],
|
|
42
|
-
"assertions": [
|
|
43
|
-
{
|
|
44
|
-
"type": "code",
|
|
45
|
-
"check": "router CHOICE != plastic-intent-speccing",
|
|
46
|
-
"result": "expect-pass"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": 4,
|
|
52
|
-
"scope": "triggering",
|
|
53
|
-
"set": "validation",
|
|
54
|
-
"prompt": "Write the plan.",
|
|
55
|
-
"expected_output": "Does NOT activate plastic-intent-speccing; a plan is written from the action files by the executing skill.",
|
|
56
|
-
"files": [],
|
|
57
|
-
"assertions": [
|
|
58
|
-
{
|
|
59
|
-
"type": "code",
|
|
60
|
-
"check": "router CHOICE != plastic-intent-speccing",
|
|
61
|
-
"result": "expect-pass"
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"id": 5,
|
|
67
|
-
"scope": "behavior",
|
|
68
|
-
"set": "train",
|
|
69
|
-
"prompt": "Intent Y is at Why: Context describes the problem and goal, and 5 Decisions are recorded resolving scope, approach, and one rejected alternative. Consolidate into spec.md.",
|
|
70
|
-
"expected_output": "Produces spec.md starting at the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
|
|
71
|
-
"files": [],
|
|
72
|
-
"assertions": [
|
|
73
|
-
{
|
|
74
|
-
"type": "human",
|
|
75
|
-
"check": "The file starts at the Spec heading; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
|
|
76
|
-
"result": "expect-pass"
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"id": 6,
|
|
82
|
-
"scope": "behavior",
|
|
83
|
-
"set": "train",
|
|
84
|
-
"prompt": "Intent Z has Decisions recording D4: ship the setting as a CLI flag. A later Insights entry, timestamped after D4, reads: superseding ruling, ship as a config-file setting instead of a CLI flag, per user correction. Consolidate into spec.md.",
|
|
85
|
-
"expected_output": "The produced spec Approach and Decisions sections encode the LATER ruling (config-file setting); the superseded earlier Decision (CLI flag) does not stand as the shipped design in any section. The Decisions section notes that the later Insight supersedes D4.",
|
|
86
|
-
"files": [],
|
|
87
|
-
"assertions": [
|
|
88
|
-
{
|
|
89
|
-
"type": "human",
|
|
90
|
-
"check": "Approach and Decisions state the config-file setting, not the CLI flag; no section still asserts the CLI-flag path as the shipped design",
|
|
91
|
-
"result": "expect-pass"
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"id": 7,
|
|
97
|
-
"scope": "behavior",
|
|
98
|
-
"set": "validation",
|
|
99
|
-
"prompt": "Intent W is at Why. Context says the team wants error handling that is more resilient, but no Decision or Insight states which specific mechanism (retry, circuit breaker, or fallback) was chosen. Consolidate into spec.md.",
|
|
100
|
-
"expected_output": "Stops at step 5 (the gap rule) instead of inventing an Approach; asks the user which error-handling mechanism was decided, naming the missing ruling and the section it blocks.",
|
|
101
|
-
"files": [],
|
|
102
|
-
"assertions": [
|
|
103
|
-
{
|
|
104
|
-
"type": "human",
|
|
105
|
-
"check": "no invented Approach or Decisions content fills the gap; the agent asks for the missing ruling instead of guessing a default mechanism",
|
|
106
|
-
"result": "expect-pass"
|
|
107
|
-
}
|
|
108
|
-
]
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
"id": 8,
|
|
112
|
-
"scope": "behavior",
|
|
113
|
-
"set": "validation",
|
|
114
|
-
"prompt": "Intent V has Decisions recording 3 rejected alternatives, each with a one-line reason it lost. Consolidate into spec.md.",
|
|
115
|
-
"expected_output": "Alternatives Considered renders as a table (Alternative, Not chosen because), not the bullet-dash form shown in the template; the produced spec file contains no em-dashes or en-dashes anywhere in the file.",
|
|
116
|
-
"files": [],
|
|
117
|
-
"assertions": [
|
|
118
|
-
{
|
|
119
|
-
"type": "human",
|
|
120
|
-
"check": "Alternatives Considered is a two-column table with one row per rejected alternative; a full-file dash-glyph scan of the produced spec file finds none",
|
|
121
|
-
"result": "expect-pass"
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
]
|
|
126
|
-
}
|