@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,44 +0,0 @@
|
|
|
1
|
-
# Design Principles: Unit Boundaries and Existing Codebases
|
|
2
|
-
|
|
3
|
-
General good-developer guidance behind two parts of the Process: how to design for
|
|
4
|
-
isolation and clarity, and how to behave in an existing codebase. Also holds the
|
|
5
|
-
Process Flow diagram (the same ordered flow the Checklist already states as numbered
|
|
6
|
-
steps).
|
|
7
|
-
|
|
8
|
-
## Design for isolation and clarity
|
|
9
|
-
|
|
10
|
-
- Break the system into smaller units that each have one clear purpose, communicate through well-defined interfaces, and can be understood and tested independently
|
|
11
|
-
- For each unit, you should be able to answer: what does it do, how do you use it, and what does it depend on?
|
|
12
|
-
- Can someone understand what a unit does without reading its internals? Can you change the internals without breaking consumers? If not, the boundaries need work.
|
|
13
|
-
- Smaller, well-bounded units are also easier for you to work with - you reason better about code you can hold in context at once, and your edits are more reliable when files are focused. When a file grows large, that's often a signal that it's doing too much.
|
|
14
|
-
|
|
15
|
-
## Working in existing codebases
|
|
16
|
-
|
|
17
|
-
- Explore the current structure before proposing changes. Follow existing patterns.
|
|
18
|
-
- Where existing code has problems that affect the work (e.g., a file that's grown too large, unclear boundaries, tangled responsibilities), include targeted improvements as part of the design - the way a good developer improves code they're working in.
|
|
19
|
-
- Don't propose unrelated refactoring. Stay focused on what serves the current goal.
|
|
20
|
-
|
|
21
|
-
## Process Flow (diagram)
|
|
22
|
-
|
|
23
|
-
The Checklist above already states this ordered flow as numbered steps 1-6; this
|
|
24
|
-
diagram is the same flow in a visual form.
|
|
25
|
-
|
|
26
|
-
```dot
|
|
27
|
-
digraph brainstorming {
|
|
28
|
-
"Explore project context" [shape=box];
|
|
29
|
-
"Grill in prose" [shape=box];
|
|
30
|
-
"Propose 2-3 approaches" [shape=box];
|
|
31
|
-
"Present design sections" [shape=box];
|
|
32
|
-
"Owner rules?" [shape=diamond];
|
|
33
|
-
"Collect rulings\n(persist each immediately)" [shape=box];
|
|
34
|
-
"Invoke /plastic-intent-speccing" [shape=doublecircle];
|
|
35
|
-
|
|
36
|
-
"Explore project context" -> "Grill in prose";
|
|
37
|
-
"Grill in prose" -> "Propose 2-3 approaches";
|
|
38
|
-
"Propose 2-3 approaches" -> "Present design sections";
|
|
39
|
-
"Present design sections" -> "Owner rules?";
|
|
40
|
-
"Owner rules?" -> "Present design sections" [label="no, revise"];
|
|
41
|
-
"Owner rules?" -> "Collect rulings\n(persist each immediately)" [label="yes"];
|
|
42
|
-
"Collect rulings\n(persist each immediately)" -> "Invoke /plastic-intent-speccing";
|
|
43
|
-
}
|
|
44
|
-
```
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# Per-Section Fill Rules
|
|
2
|
-
|
|
3
|
-
The single shared method for turning the rulings into `spec.md`. `plastic-intent-speccing`
|
|
4
|
-
(the thinking conversation) and the auto orchestrator both point here; neither restates these
|
|
5
|
-
rules. One fill rule per template section, in template order.
|
|
6
|
-
|
|
7
|
-
Read the ruling ledger first (built in step 2 of the SKILL.md sequence): `## Context` plus
|
|
8
|
-
`### Decisions`, then `## Insights` newest-last (a later ruling supersedes an earlier
|
|
9
|
-
conflicting one), then `resources/discovery--<slug>.md`, then any other `resources/*.md`.
|
|
10
|
-
Every rule below names which part of that ledger feeds the section.
|
|
11
|
-
|
|
12
|
-
## 1. Problem
|
|
13
|
-
|
|
14
|
-
Source: the intent's `## Intent` line plus the problem narrative in `## Context`.
|
|
15
|
-
|
|
16
|
-
State the problem as a problem, not a solution: what is broken, missing, or costly today, for
|
|
17
|
-
whom. Do not describe the fix here, that belongs in Approach. If `## Insights` records a later
|
|
18
|
-
reframe of the problem (a scope correction, a retargeted root cause), the later framing wins.
|
|
19
|
-
|
|
20
|
-
## 2. Goals
|
|
21
|
-
|
|
22
|
-
Source: explicit goal statements in `## Context`, plus any `### Decisions` entry that commits to
|
|
23
|
-
delivering a specific outcome.
|
|
24
|
-
|
|
25
|
-
One bullet per goal, each a concrete, observable outcome the delivery must reach. Encode every
|
|
26
|
-
Decision that commits to an outcome as its own bullet, do not compress two Decisions into one
|
|
27
|
-
vague goal. A single-line collapsed Goals section is complete if it names every
|
|
28
|
-
outcome; do not pad it with restated Problem text.
|
|
29
|
-
|
|
30
|
-
## 3. Non-Goals
|
|
31
|
-
|
|
32
|
-
Source: `### Decisions` entries that name something explicitly out of scope, and `## Insights`
|
|
33
|
-
rulings that narrowed scope after the initial brainstorm.
|
|
34
|
-
|
|
35
|
-
One bullet per excluded item, each naming what is out and, briefly, why (a sibling intent owns
|
|
36
|
-
it, a scope-reframe ruling cut it, it is a future intent). If a later Insight narrows scope
|
|
37
|
-
further than an earlier Decision, the Insight's narrower boundary is the one recorded.
|
|
38
|
-
|
|
39
|
-
## 4. Approach
|
|
40
|
-
|
|
41
|
-
Source: every `### Decisions` entry that describes HOW, resolved into one coherent narrative.
|
|
42
|
-
|
|
43
|
-
Write prose, not a decision list. Synthesize the chosen path so it reads as one design: what
|
|
44
|
-
gets built, in what shape, and how the pieces fit. Every Decision that shapes the approach must
|
|
45
|
-
be traceable to a sentence here, but do not restate each Decision by its Dn label, that
|
|
46
|
-
enumeration belongs in the Decisions section. Use a table only where the Approach itself compares
|
|
47
|
-
options inline (rare; usually that comparison belongs in Alternatives Considered instead).
|
|
48
|
-
|
|
49
|
-
## 5. Alternatives Considered
|
|
50
|
-
|
|
51
|
-
Source: `### Decisions` entries and `## Insights` rulings that name a rejected path and the
|
|
52
|
-
reason it lost.
|
|
53
|
-
|
|
54
|
-
Render as a table, not the template's bullet-dash form, so the reason column stays uniform and
|
|
55
|
-
free of dash-glyph punctuation:
|
|
56
|
-
|
|
57
|
-
| Alternative | Not chosen because |
|
|
58
|
-
|---|---|
|
|
59
|
-
| <rejected path> | <the ruling's stated reason, paraphrased> |
|
|
60
|
-
|
|
61
|
-
One row per rejected alternative. If two Decisions reject variants of the same alternative, merge
|
|
62
|
-
them into one row rather than duplicating it. Never use an em-dash or en-dash in the reason
|
|
63
|
-
column; write "because" or a colon instead.
|
|
64
|
-
|
|
65
|
-
## 6. Decisions
|
|
66
|
-
|
|
67
|
-
Source: `### Decisions` verbatim, in the order recorded, one entry per Decision.
|
|
68
|
-
|
|
69
|
-
One bullet per decision, each keeping its `Dn` label and its ruling in paraphrase or verbatim.
|
|
70
|
-
Do not drop a decision because it seems minor: every Decision must appear here even if its effect
|
|
71
|
-
on the shipped Approach or Goals is small. When `## Insights` records a later ruling that
|
|
72
|
-
supersedes an earlier Decision, add or amend the bullet to state the later ruling and note which
|
|
73
|
-
earlier Decision it supersedes.
|
|
74
|
-
|
|
75
|
-
## 7. Acceptance Criteria
|
|
76
|
-
|
|
77
|
-
Source: any criteria named directly in `### Decisions` or `## Insights`, plus one inferred
|
|
78
|
-
criterion per Goal that has no explicit criterion on record.
|
|
79
|
-
|
|
80
|
-
One checkbox bullet per criterion, each concretely checkable: a fact a reviewer can confirm true
|
|
81
|
-
or false by inspection, a command, or a file, never a vague quality judgment. Every Goal must map
|
|
82
|
-
to at least one criterion. A criterion that cannot be checked without more interpretation is not
|
|
83
|
-
done, rewrite it or ask (the gap rule, SKILL.md step 5).
|
|
84
|
-
|
|
85
|
-
## 8. Open Questions
|
|
86
|
-
|
|
87
|
-
Source: any question raised during Why that has no matching Decision or Insight resolving it.
|
|
88
|
-
|
|
89
|
-
List each unresolved question as its own bullet. If every question raised during Why has a
|
|
90
|
-
resolving Decision or Insight, write `None` and, directly under it, one line per resolved
|
|
91
|
-
question naming which Decision or Insight resolved it (so a reader can audit the resolution
|
|
92
|
-
instead of taking "None" on faith).
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Self-Verify Checklist
|
|
2
|
-
|
|
3
|
-
Run this before presenting spec.md (SKILL.md step 7). Ten checks: the four points of
|
|
4
|
-
brainstorming's proven Spec Self-Review, merged with the six binding output checks this skill
|
|
5
|
-
adds. Fix any failing check, then re-verify from the top; do not present a spec that fails one of
|
|
6
|
-
these.
|
|
7
|
-
|
|
8
|
-
## Brainstorming's four Spec Self-Review points
|
|
9
|
-
|
|
10
|
-
1. **Placeholder scan.** Any "TBD", "TODO", incomplete section, or vague requirement left in the
|
|
11
|
-
draft? Fix it before moving on.
|
|
12
|
-
2. **Internal consistency.** Do any two sections contradict each other? Does the Approach
|
|
13
|
-
actually match what Goals and Acceptance Criteria describe?
|
|
14
|
-
3. **Scope check.** Is this spec focused enough for a single implementation plan, or does the
|
|
15
|
-
Problem actually describe more than one independent piece of work that needs decomposing
|
|
16
|
-
first?
|
|
17
|
-
4. **Ambiguity check.** Could any requirement be read two different ways? If so, pick one
|
|
18
|
-
reading and rewrite the line so only that reading survives.
|
|
19
|
-
|
|
20
|
-
## The six binding output checks
|
|
21
|
-
|
|
22
|
-
5. **No template placeholder text remains.** No literal `<intent name>`, `<alternative>`, `...`,
|
|
23
|
-
sample bracket text, or other template filler from `templates/spec.md` survives anywhere in
|
|
24
|
-
the artifact.
|
|
25
|
-
6. **No header line.** The file starts at the `# Spec:` heading; there is no `Tier:` line (removed in 2.0, intent 304).
|
|
26
|
-
7. **All 8 sections present, in template order.** Problem, Goals, Non-Goals, Approach,
|
|
27
|
-
Alternatives Considered, Decisions, Acceptance Criteria, Open Questions, each present once, in
|
|
28
|
-
that order, none merged into another.
|
|
29
|
-
8. **Every `## Insights` ruling is traceable to a spec line.** Walk the Insights log entry by
|
|
30
|
-
entry: each one lands in some section of the spec. Where two rulings conflict, the later one
|
|
31
|
-
(further down the log) is the one that landed, and the earlier one does not silently persist
|
|
32
|
-
in a different section.
|
|
33
|
-
9. **Acceptance criteria are concretely checkable.** Each Acceptance Criteria bullet reads as a
|
|
34
|
-
fact a reviewer can confirm true or false by inspection, a command, or a named file, not a
|
|
35
|
-
quality judgment a reviewer would have to interpret.
|
|
36
|
-
10. **No em-dashes or en-dashes anywhere in the artifact.** Scan the full file; replace any dash
|
|
37
|
-
glyph with a comma, period, parenthesis, or colon.
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plastic-project-creating
|
|
3
|
-
description: >-
|
|
4
|
-
Create a new project from an implementation intent. Sets up project directory,
|
|
5
|
-
git init, AGENTS.md with founding intent decisions, plastic-install --local,
|
|
6
|
-
tactical mirror, projects.yml registration, and framework scaffolding.
|
|
7
|
-
Use when an implementation intent spawns a project, or manually by user.
|
|
8
|
-
user-invocable: true
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Creating a Project
|
|
12
|
-
|
|
13
|
-
## Precondition
|
|
14
|
-
|
|
15
|
-
An active intent must exist with enough context to define a project — at minimum: name/slug, path, and key decisions from `## Context > ### Decisions`.
|
|
16
|
-
|
|
17
|
-
## Workflow
|
|
18
|
-
|
|
19
|
-
### 1. Determine Project Identity
|
|
20
|
-
|
|
21
|
-
- **Slug:** derived from intent name (kebab-case, 2-4 words) or user-specified
|
|
22
|
-
- **Path:** from `~/.plastic/config.yml` `project_roots` (first entry as default), or user-specified
|
|
23
|
-
- Confirm path with user before creation
|
|
24
|
-
|
|
25
|
-
### 2. Create Project Directory
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
mkdir -p <project_root>/<slug>
|
|
29
|
-
cd <project_root>/<slug>
|
|
30
|
-
git init
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### 3. Run `plastic-install --local`
|
|
34
|
-
|
|
35
|
-
Invoke `plastic-install --local` in the project directory. This creates:
|
|
36
|
-
```
|
|
37
|
-
.plastic/
|
|
38
|
-
├── store/
|
|
39
|
-
├── INDEX.md
|
|
40
|
-
└── config.yml
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 4. Populate AGENTS.md
|
|
44
|
-
|
|
45
|
-
Create `AGENTS.md` in the project root from the skeleton in
|
|
46
|
-
`references/project-scaffolding.md` ("AGENTS.md skeleton"): read it now and fill in
|
|
47
|
-
the project name, governing intent IDs, decisions, and project-specific rules.
|
|
48
|
-
|
|
49
|
-
### 5. Create Tactical Mirror
|
|
50
|
-
|
|
51
|
-
Create the first intent in the project's store at `~/.plastic/projects/{slug}/store/`
|
|
52
|
-
using the frontmatter, sections, and INDEX.md line in `references/project-scaffolding.md`
|
|
53
|
-
("Tactical mirror intent"), including the Hub multi-intent variant if there is more
|
|
54
|
-
than one founding intent.
|
|
55
|
-
|
|
56
|
-
**Directory:** `~/.plastic/projects/{slug}/store/1--{slug}/`
|
|
57
|
-
**File:** `~/.plastic/projects/{slug}/store/1--{slug}/1--{slug}.md`
|
|
58
|
-
|
|
59
|
-
### 6. Register in projects.yml
|
|
60
|
-
|
|
61
|
-
Read `~/.plastic/projects.yml` and add the entry shown in
|
|
62
|
-
`references/project-scaffolding.md` ("projects.yml registration block"). For
|
|
63
|
-
Hub-spawned projects, `parent` references the primary founding intent.
|
|
64
|
-
|
|
65
|
-
### 7. Provision the Project Store
|
|
66
|
-
|
|
67
|
-
The `provision-project-store` verb is the single source of truth for store
|
|
68
|
-
creation. Run it after the project is registered in step 6 (the provisioner
|
|
69
|
-
requires registration), and before the QMD step:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
ruby ~/.plastic/scripts/provision-project-store <slug>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
This ensures `~/.plastic/projects/<slug>/store/` exists with `.gitkeep`, and
|
|
76
|
-
writes `INDEX.md` and `project.yml` only if missing. It is idempotent, so it is
|
|
77
|
-
safe even when the tactical mirror in step 5 already created the store directory.
|
|
78
|
-
Do not create the store with an inline `mkdir`; the provisioner is the only place
|
|
79
|
-
a store is made. For a project that is already registered but store-less, use the
|
|
80
|
-
`plastic-doctor` skill's provisioning section instead.
|
|
81
|
-
|
|
82
|
-
### 8. Mark Global Intent(s) Completed
|
|
83
|
-
|
|
84
|
-
For each founding intent:
|
|
85
|
-
|
|
86
|
-
1. Write `## Outcome` in the intent file:
|
|
87
|
-
> "Spawned project `<slug>` at `<path>`. Decisions carried to AGENTS.md. Tactical mirror: `project-<slug>:1`."
|
|
88
|
-
2. Write `outcome.md` with full details (all decisions, project path, tactical mirror ID)
|
|
89
|
-
3. Update `chain` to include `project-<slug>:1`
|
|
90
|
-
4. Move from `## Active` to `## Completed` in `~/.plastic/INDEX.md` (with today's date)
|
|
91
|
-
|
|
92
|
-
### 9. Framework Scaffolding
|
|
93
|
-
|
|
94
|
-
If decisions specify a framework, run the appropriate scaffolding command AFTER steps 3-4 (so scaffolding doesn't overwrite Plastic files or AGENTS.md):
|
|
95
|
-
|
|
96
|
-
| Framework | Command |
|
|
97
|
-
|---|---|
|
|
98
|
-
| Rails | `rails new <slug> [options from decisions] --skip-git` (skip git — already initialized) |
|
|
99
|
-
| Node/npm | `npm init -y` |
|
|
100
|
-
| Ruby gem | `bundle gem <slug>` |
|
|
101
|
-
| Other | As specified in decisions |
|
|
102
|
-
|
|
103
|
-
After scaffolding, verify AGENTS.md and `.plastic/` still exist. If scaffolding overwrote them, restore.
|
|
104
|
-
|
|
105
|
-
### 10. Auto-commit Both Stores
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
cd ~/.plastic && git add . && git commit -m "feat: spawn project <slug> from intent <ID>"
|
|
109
|
-
cd <project> && git add . && git commit -m "feat: initialize project from intent <ID>"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### 11. Register the project store with QMD (optional)
|
|
113
|
-
|
|
114
|
-
If QMD is installed, register the new project's store as a search collection:
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
ruby ~/.plastic/scripts/qmd-sync register --store ~/.plastic/projects/<slug>/store
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
`qmd-sync` no-ops when QMD is absent, so run it unconditionally. This adds the
|
|
121
|
-
`plastic-<slug>` collection and indexes it.
|
|
122
|
-
|
|
123
|
-
### 12. Self-Check with validate-project
|
|
124
|
-
|
|
125
|
-
Before announcing, verify the spawn actually landed everything it claims to
|
|
126
|
-
have created. Run:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
ruby ~/.plastic/scripts/validate-project <slug>
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
If this exits 0, proceed to step 13. If it exits non-zero, STOP: do not
|
|
133
|
-
proceed to Announce. Read the `missing:` and error lines it printed to
|
|
134
|
-
stderr, fix the named gap(s), for example:
|
|
135
|
-
|
|
136
|
-
- missing `project.yml` or `INDEX.md` or `store/`: re-run
|
|
137
|
-
`ruby ~/.plastic/scripts/provision-project-store <slug>` (step 7), then
|
|
138
|
-
re-check
|
|
139
|
-
- missing project-root `AGENTS.md`: repeat step 4 (populate AGENTS.md at the
|
|
140
|
-
project root, not `~/.plastic/projects/<slug>/`)
|
|
141
|
-
- project directory missing on disk: repeat step 2
|
|
142
|
-
- not registered in projects.yml: repeat step 6
|
|
143
|
-
|
|
144
|
-
Re-run `validate-project <slug>` after each fix until it exits 0. Only a
|
|
145
|
-
project spawn that passes this self-check moves on to be announced as
|
|
146
|
-
created. A spawn that never verifies itself is exactly the bug this step
|
|
147
|
-
exists to close (intent 190; the intent-26 spawn shipped with no
|
|
148
|
-
`project.yml` and no root `AGENTS.md`, caught only weeks later by a doctor
|
|
149
|
-
sweep).
|
|
150
|
-
|
|
151
|
-
### 13. Announce
|
|
152
|
-
|
|
153
|
-
Log in `## Insights` of each founding intent:
|
|
154
|
-
> "Project `<slug>` created at `<path>`. Tactical mirror: `project-<slug>:1` (autonomous)"
|
|
155
|
-
|
|
156
|
-
Announce to user:
|
|
157
|
-
> "Project `<slug>` created at `<path>`. AGENTS.md populated with [N] decisions from [founding intent IDs]. Tactical mirror `1` is now the active intent in the project store."
|
|
158
|
-
|
|
159
|
-
## References
|
|
160
|
-
|
|
161
|
-
- Read `references/project-scaffolding.md` before steps 4-6, for the AGENTS.md skeleton, the tactical mirror intent format, and the projects.yml registration block
|
|
162
|
-
- Read `references/hubs-projects.md` for the full hub/project relationship model, project creation flow, and cross-linking conventions
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Hubs and Projects
|
|
2
|
-
|
|
3
|
-
## Hubs
|
|
4
|
-
|
|
5
|
-
A Hub is a cloud of intents around related topics. Hubs emerge naturally from
|
|
6
|
-
Folgezettel branching — intents that spawn in the same direction cluster.
|
|
7
|
-
|
|
8
|
-
- A Hub can spawn a Project. The Hub holds the founding ideas.
|
|
9
|
-
- A single intent can also spawn a Project.
|
|
10
|
-
- Hub-spawned projects revolve around different ideas around related topics.
|
|
11
|
-
- Intent-spawned projects revolve around the single founding intent.
|
|
12
|
-
- A Project is the deliverable outcome of one or more intents.
|
|
13
|
-
|
|
14
|
-
Hubs are represented as clusters in INDEX.md.
|
|
15
|
-
|
|
16
|
-
## Projects — Full Detail
|
|
17
|
-
|
|
18
|
-
A Project is a deliverable grouping of intents. Projects have two stores:
|
|
19
|
-
|
|
20
|
-
- **Global store** (`~/.plastic/store/`): strategic intents
|
|
21
|
-
- **Project store** (`~/.plastic/projects/{slug}/store/`): tactical intents
|
|
22
|
-
|
|
23
|
-
`projects.yml` maps project slugs to codebase paths:
|
|
24
|
-
```yaml
|
|
25
|
-
projects:
|
|
26
|
-
plastic:
|
|
27
|
-
path: "/path/to/plastic"
|
|
28
|
-
remote: "git@github.com:org/plastic.git"
|
|
29
|
-
registered: '2026-05-26'
|
|
30
|
-
status: active
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Config resolution: `~/.plastic/projects/{slug}/config.yml` overrides `~/.plastic/config.yml`.
|
|
34
|
-
|
|
35
|
-
Cross-linking: project intents reference global intents via `[[global:ID]]`. Global intents reference project intents via `[[project-slug:ID]]`.
|
|
36
|
-
|
|
37
|
-
## Privacy and Collaboration
|
|
38
|
-
|
|
39
|
-
**Plastic is personal.** All intent data lives under `~/.plastic/` — one location,
|
|
40
|
-
one git repo, never pushed. Each person has their own intent store.
|
|
41
|
-
|
|
42
|
-
Collaboration happens through pull requests and project conventions, not shared intents.
|
|
43
|
-
When an intent delivers something that changes how a project works, the decision gets
|
|
44
|
-
written into the project's shared files (README, docs, config). The intents themselves
|
|
45
|
-
are private working memory.
|
|
46
|
-
|
|
47
|
-
## Project Creation Flow
|
|
48
|
-
|
|
49
|
-
When an implementation intent spawns a project:
|
|
50
|
-
1. Determine project path from config `project_roots` or intent context
|
|
51
|
-
2. `gh repo create --private` (agent-created repos are always private by default)
|
|
52
|
-
3. Set up project directory, git init, AGENTS.md with founding intent decisions
|
|
53
|
-
4. Register in `projects.yml`
|
|
54
|
-
5. Create tactical mirror in project store
|
|
55
|
-
6. The global intent completes; the tactical mirror becomes the active intent
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Project Scaffolding Templates
|
|
2
|
-
|
|
3
|
-
Full templates for the artifacts created while spawning a project: the AGENTS.md
|
|
4
|
-
skeleton (Workflow step 4), the tactical mirror intent (step 5), and the
|
|
5
|
-
projects.yml registration block (step 6).
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
- [AGENTS.md skeleton (step 4)](#agentsmd-skeleton-step-4)
|
|
10
|
-
- [Tactical mirror intent (step 5)](#tactical-mirror-intent-step-5)
|
|
11
|
-
- [projects.yml registration block (step 6)](#projectsyml-registration-block-step-6)
|
|
12
|
-
|
|
13
|
-
## AGENTS.md skeleton (step 4)
|
|
14
|
-
|
|
15
|
-
Create `AGENTS.md` in the project root with:
|
|
16
|
-
|
|
17
|
-
```markdown
|
|
18
|
-
# <Project Name> — Agent Instructions
|
|
19
|
-
|
|
20
|
-
Read `PLASTIC.md` in `~/.plastic/` for the core conventions; deeper doctrine lives in
|
|
21
|
-
the `plastic-conventions` skill's chapters. Follow it exactly.
|
|
22
|
-
|
|
23
|
-
This file is the operating contract for this project. Any agent entering
|
|
24
|
-
this project reads this file first.
|
|
25
|
-
|
|
26
|
-
## Global Store
|
|
27
|
-
|
|
28
|
-
Location: `~/.plastic/`
|
|
29
|
-
Governing intent(s): <list of founding intent IDs with descriptions>
|
|
30
|
-
|
|
31
|
-
## Decisions
|
|
32
|
-
|
|
33
|
-
<Copy ALL decisions from founding intent(s)' `## Context > ### Decisions`>
|
|
34
|
-
|
|
35
|
-
Each decision should include:
|
|
36
|
-
- The decision itself
|
|
37
|
-
- The rationale (why this choice)
|
|
38
|
-
- Date decided
|
|
39
|
-
|
|
40
|
-
## Project-Specific Rules
|
|
41
|
-
|
|
42
|
-
<Any rules derived from the decisions — e.g., "Use Minitest, not RSpec",
|
|
43
|
-
"37signals methodology", "sqlite-vec for vector storage">
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Tactical mirror intent (step 5)
|
|
47
|
-
|
|
48
|
-
Create the first intent in the project's store at `~/.plastic/projects/{slug}/store/`:
|
|
49
|
-
|
|
50
|
-
**Directory:** `~/.plastic/projects/{slug}/store/1--{slug}/`
|
|
51
|
-
**File:** `~/.plastic/projects/{slug}/store/1--{slug}/1--{slug}.md`
|
|
52
|
-
|
|
53
|
-
```yaml
|
|
54
|
-
---
|
|
55
|
-
id: '1'
|
|
56
|
-
intent: "<same description as founding intent>"
|
|
57
|
-
sources: ["global:<founding_intent_ID>"]
|
|
58
|
-
chain: []
|
|
59
|
-
created: <today>
|
|
60
|
-
author: <same as founding intent author>
|
|
61
|
-
tags: [<relevant tags>]
|
|
62
|
-
---
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Sections:
|
|
66
|
-
- `## Intent` — same as founding intent
|
|
67
|
-
- `## Context` — carry forward relevant Context and Decisions
|
|
68
|
-
- `## Outcome` — (pending)
|
|
69
|
-
- `## Insights` — empty
|
|
70
|
-
- `## Links` — `[[global:<founding_intent_ID>|<founding intent name>]]`
|
|
71
|
-
|
|
72
|
-
Update the project's `~/.plastic/projects/{slug}/INDEX.md`:
|
|
73
|
-
```markdown
|
|
74
|
-
# Index
|
|
75
|
-
|
|
76
|
-
## Active
|
|
77
|
-
- [1 — <intent name>](store/1--<slug>/1--<slug>.md) — implementation, from: global:<ID>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**For multi-intent spawning (Hub):**
|
|
81
|
-
- `sources`: `["global:<id1>", "global:<id2>", ...]` — all founding intents
|
|
82
|
-
- All founding intents' decisions merge into AGENTS.md
|
|
83
|
-
- Context carries forward from all founding intents
|
|
84
|
-
|
|
85
|
-
## projects.yml registration block (step 6)
|
|
86
|
-
|
|
87
|
-
Read `~/.plastic/projects.yml` and add:
|
|
88
|
-
|
|
89
|
-
```yaml
|
|
90
|
-
<slug>:
|
|
91
|
-
path: <full-path>
|
|
92
|
-
parent: "<founding_intent_ID>"
|
|
93
|
-
registered: <today>
|
|
94
|
-
status: active
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
For Hub-spawned projects, `parent` references the primary founding intent.
|