@zalom/plastic 2.0.0-alpha.9 → 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 +11 -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 +55 -2
- 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 +153 -30
- 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 +7 -0
- 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 +23 -14
- 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 +531 -71
- package/scripts/lib/intent_screen.rb +4 -4
- 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 +350 -54
- 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 +1371 -47
- 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 +365 -28
- 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 +177 -16
- 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 +8 -3
- 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 -296
- 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 -176
- 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
|
@@ -28,13 +28,14 @@ in 2.0, intent 304; the lead writes the Why and How record itself):
|
|
|
28
28
|
reviewed before code; dispatches the executor; applies the risk rule; closes.
|
|
29
29
|
- **plastic-executor** (Exec): commits the matrix's tests red, writes the code, checks off
|
|
30
30
|
`checklist.md`, appends `## Insights`, and drives the suite green.
|
|
31
|
-
- **the plan reviewer**: a fresh agent on
|
|
32
|
-
`plan-reviewer-prompt.md`,
|
|
33
|
-
- **the post-execution reviewer**: a fresh agent on `code-quality-reviewer-prompt.md`,
|
|
31
|
+
- **the plan reviewer**: a fresh agent on the auto skill's
|
|
32
|
+
`references/plan-reviewer-prompt.md`, an optional dispatch before any code exists.
|
|
33
|
+
- **the post-execution reviewer**: a fresh agent on `references/code-quality-reviewer-prompt.md`,
|
|
34
34
|
dispatched only when the auto skill's risk rule fires; never the maker.
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
One agent boot (the executor) is the minimum delivery; the plan reviewer is a second,
|
|
37
|
+
optional boot when the lead calls for review before code, and the post-execution reviewer is
|
|
38
|
+
a third only when risk calls for it.
|
|
38
39
|
|
|
39
40
|
### Handoff Contracts
|
|
40
41
|
|
|
@@ -44,8 +45,8 @@ the code, the red and green commits, a checked-off checklist, `## Insights`, and
|
|
|
44
45
|
report. Dispatch is sequential on a single branch, because the deliverables share files.
|
|
45
46
|
|
|
46
47
|
The chain: intent `## Intent` / `## Context`, then enriched `## Context` plus `### Decisions`,
|
|
47
|
-
then `spec.md`, then `plan.md` plus `actions/` plus `checklist.md`, then
|
|
48
|
-
the code changes plus a checked-off checklist plus `## Insights`.
|
|
48
|
+
then `spec.md`, then `plan.md` plus `actions/` plus `checklist.md`, then an optional plan
|
|
49
|
+
review, then the code changes plus a checked-off checklist plus `## Insights`.
|
|
49
50
|
|
|
50
51
|
### Spawn Preamble (L2 live-state injection)
|
|
51
52
|
|
|
@@ -88,9 +89,10 @@ not revoke the registered delegate's authorization.
|
|
|
88
89
|
|
|
89
90
|
### Review Ownership
|
|
90
91
|
|
|
91
|
-
The lead owns every review decision: it dispatches the plan reviewer before code
|
|
92
|
-
|
|
93
|
-
never delegates that decision, and neither reviewer is ever
|
|
92
|
+
The lead owns every review decision: it dispatches the plan reviewer before code when one
|
|
93
|
+
runs, takes the review into its own record, and decides from the risk rule whether the
|
|
94
|
+
post-execution reviewer runs. It never delegates that decision, and neither reviewer is ever
|
|
95
|
+
the maker of what it reviews.
|
|
94
96
|
Nothing blocks a write in 2.0 (the gate hooks were removed, intent 302); the lock, the
|
|
95
97
|
worktree, and the record are how the team keeps one delivery in one place.
|
|
96
98
|
|
|
@@ -116,14 +118,14 @@ written path, and the lead verifies state from the files (`plastic-lock status`,
|
|
|
116
118
|
### Delegation
|
|
117
119
|
|
|
118
120
|
The roles are thin handoff contracts, not a spawning engine. Dispatch runs through Plastic's
|
|
119
|
-
own engine, `plastic
|
|
121
|
+
own engine, `plastic intent step`: one executor for the consolidated action, the two
|
|
120
122
|
reviewer prompts as fresh agents. The team model defines who hands what to whom and where the
|
|
121
123
|
reviews sit; the engine does the actual spawning.
|
|
122
124
|
|
|
123
125
|
### Fallback by Case
|
|
124
126
|
|
|
125
127
|
If the harness supports agent dispatch, auto mode dispatches through
|
|
126
|
-
`plastic
|
|
128
|
+
`plastic intent step`. If the harness has no agent dispatch at all (Codex CLI today), the
|
|
127
129
|
lead walks the five steps itself: it still writes the matrix and the tests first, and reviews
|
|
128
130
|
its own plan against the matrix before code, saying so in `## Insights`.
|
|
129
131
|
|
|
@@ -145,8 +147,8 @@ tests first, one suite run per intent.
|
|
|
145
147
|
## Autonomous Delivery
|
|
146
148
|
|
|
147
149
|
Human owns What and Why for human-initiated intents. The team assists (research, exploration)
|
|
148
|
-
but the human drives until handoff. When Why is complete, or the human
|
|
149
|
-
the auto team takes over How and Exec autonomously.
|
|
150
|
+
but the human drives until handoff. When Why is complete, or the human runs
|
|
151
|
+
`plastic auto take ID`, the auto team takes over How and Exec autonomously.
|
|
150
152
|
|
|
151
153
|
- **Safe-by-default:** the executor always prefers non-destructive routes (rename vs delete,
|
|
152
154
|
additive migrations, backups before changes). Destructive actions on existing projects
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
# Completion and
|
|
1
|
+
# Completion and the End Tail
|
|
2
2
|
|
|
3
3
|
This chapter holds what "intent done" means and the End-stage tail.
|
|
4
4
|
|
|
5
5
|
#### What "intent done" means (intent 93)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Completion is one law with three signals, and they must agree. INDEX `## Completed` /
|
|
8
8
|
`## Abandoned` is the single canonical terminal marker: it is the store-wide ledger a fresh
|
|
9
9
|
session reads first, so it wins on any conflict. `outcome.md` is the "deliverable exists"
|
|
10
|
-
signal, and the savepoint `
|
|
11
|
-
agree; when they disagree, INDEX is authoritative and `doctor` flags the mismatch (the
|
|
10
|
+
signal, and the savepoint's terminal `delivered|abandoned` line is the audit echo. All three
|
|
11
|
+
must agree; when they disagree, INDEX is authoritative and `doctor` flags the mismatch (the
|
|
12
12
|
`done_signals` check: `outcome.md` real but still under `## Active`, or terminal without a
|
|
13
|
-
real `outcome.md`, or a terminal intent whose savepoint carries no
|
|
13
|
+
real `outcome.md`, or a terminal intent whose savepoint carries no terminal disposition line).
|
|
14
14
|
|
|
15
15
|
`outcome.md` is mandatory at every terminal transition, delivered and abandoned alike. It
|
|
16
16
|
self-declares its disposition through a `disposition: delivered|abandoned` frontmatter
|
|
17
17
|
header. The delivered path authors it with the result; the abandoned path authors it with
|
|
18
18
|
the abandonment reason and no longer leaves the scaffolded placeholder sentinel in place.
|
|
19
19
|
|
|
20
|
-
The canonical End tail runs in this order
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
The canonical End tail runs in this order: `outcome.md -> INDEX terminal -> the terminal
|
|
21
|
+
savepoint line -> commit -> disarm (Worktree.release -> Lock.release) -> QMD reindex`, the
|
|
22
|
+
reindex always LAST. Running the reindex last keeps the index from ever referencing a lock
|
|
23
|
+
that disarm just removed.
|
|
24
24
|
|
|
25
25
|
`scripts/end-intent` performs this order's disarm step (verify the code worktree is clean,
|
|
26
26
|
then merge/remove worktrees, then clear the lock) as its own step 5, mechanically, since
|
|
@@ -31,13 +31,12 @@ foreign session, reclaims a stale one with an audit line), and a dirty code work
|
|
|
31
31
|
refuses before removal rather than force-discarding uncommitted changes.
|
|
32
32
|
|
|
33
33
|
The post-done access window is lock-bounded: `[INDEX terminal -> Lock.release]`. Through it
|
|
34
|
-
the completing session keeps full read and write access to the terminal directory
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
still present or stale). Finishing the tail is FINISHING a completion, never a reactivation:
|
|
34
|
+
the completing session keeps full read and write access to the terminal directory (108's
|
|
35
|
+
lock-held keep-guard holds it open while `delivery.lock` exists). Once the lock is released
|
|
36
|
+
the window closes and the directory is frozen. A crash mid-tail is recovered by stale-lock
|
|
37
|
+
reclaim plus finishing the tail; `doctor` surfaces this as a "stalled completion" (terminal in
|
|
38
|
+
INDEX but the lock is still present or stale). Finishing the tail is FINISHING a completion, never a reactivation:
|
|
40
39
|
a done intent is never moved back to `## Active`.
|
|
41
40
|
|
|
42
41
|
One report per audience: a delivery produces `outcome.md` plus one EM-to-CTO owner report, and
|
|
43
|
-
no other step restates either (see `
|
|
42
|
+
no other step restates either (see `plastic help human-report-contract`).
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Human Report Contract (the report screens, intent 317)
|
|
2
|
+
|
|
3
|
+
D15: the prose EM-to-CTO briefing this doc used to define is retired. The orchestrator now
|
|
4
|
+
prints one of these report screens, filled from the record by `scripts/report-screen`, never
|
|
5
|
+
written by eye:
|
|
6
|
+
|
|
7
|
+
- **`report-screen plan <intent_dir>`** - the pre-delivery report (intent 331b), printed once
|
|
8
|
+
at the How boundary, before the executor is dispatched: Asked, Decisions, Steps, Mode,
|
|
9
|
+
Reviewer, then the Steps table (Step, Action, What) and the Risks table.
|
|
10
|
+
- **`report-screen state <intent_dir> [--changed "<text>"]`** - the mid-delivery report. One
|
|
11
|
+
intent's field table (Store, Status, Stage, Savepoint, Progress, Next, Insight) plus a
|
|
12
|
+
`Changed` row naming what caused the print, and its Steps table.
|
|
13
|
+
- **`report-screen state --all <store_root>`** - the roster across every in-delivery intent,
|
|
14
|
+
most recently changed first, then one collapsed block (Stage, Next, Changed, first three
|
|
15
|
+
open steps) per intent.
|
|
16
|
+
- **`report-screen delivered <intent_dir>`** - the post-delivery report, printed once at close:
|
|
17
|
+
Asked, Delivered (with a Proven-by column), Evidence, Needs you.
|
|
18
|
+
- **`report-screen delay <intent_dir>`** - printed only on request ("why did X take so long"):
|
|
19
|
+
the delivery as a timeline plus the derived `Where the time went` line.
|
|
20
|
+
- **`report-screen session <tier_root>`** - the answer to an UNNAMED status ask ("where are we
|
|
21
|
+
with delivery", "what is the status"): one `delivered` screen per intent this session
|
|
22
|
+
completed, oldest first, then the `state --all` roster. Intent 330's ruling: a status ask
|
|
23
|
+
answers with what actually shipped, not the in-flight roster alone.
|
|
24
|
+
- **`dashboard.rb continue|project <slug> --screen`** - the dashboard screen (intent 331d):
|
|
25
|
+
Active, In delivery, Delivered, Roadmap, Sessions, Changed, then the Where-we-are and
|
|
26
|
+
Where-we-go-next tables. A separate script from the other four (`dashboard.rb`, not
|
|
27
|
+
`report-screen`), since it aggregates across a whole store or project rather than one
|
|
28
|
+
intent; it prints on `continue` and on loading a project, not as a delivery trigger.
|
|
29
|
+
|
|
30
|
+
## Binding table (intent 331f)
|
|
31
|
+
|
|
32
|
+
Every command or lead role that shows state names its own report verb, one row per binding
|
|
33
|
+
and trigger. Each one carries the SAME rule next to its verb: print the screen as the first
|
|
34
|
+
characters of the reply, nothing before it, no fence, or the hook cannot paint it.
|
|
35
|
+
|
|
36
|
+
| Command or lead | Trigger | Verb |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `plastic continue` | project route (continue, load project) | `dashboard.rb ... --screen` |
|
|
39
|
+
| `plastic continue` | a named intent | `report-screen state` |
|
|
40
|
+
| `plastic continue` | "where are we" (a status ask) | `report-screen session` |
|
|
41
|
+
| `plastic continue` | "why so long" | `report-screen delay` |
|
|
42
|
+
| `plastic continue` | a roadmap route | `report-screen roadmap ... state` |
|
|
43
|
+
| the auto team's lead | the How boundary, before the executor | `report-screen plan` |
|
|
44
|
+
| the auto team's lead | each of the five triggers | `report-screen state` |
|
|
45
|
+
| the auto team's lead | close | `report-screen delivered` |
|
|
46
|
+
| `plastic intent end` | the close | `report-screen delivered` |
|
|
47
|
+
| `plastic intent spec` | the action files are written | `report-screen plan` |
|
|
48
|
+
| `plastic roadmap show` | any invocation | `report-screen roadmap ... state` |
|
|
49
|
+
| `plastic status` | any invocation | in-process (`Scope#stores`) |
|
|
50
|
+
| `plastic intent step` | after the red commit, and after the suite | `report-screen state` |
|
|
51
|
+
|
|
52
|
+
## A roadmap's own three reports (intent 331c)
|
|
53
|
+
|
|
54
|
+
A roadmap gets the same pre-, in-, and post-delivery shape as an intent, through
|
|
55
|
+
`report-screen roadmap <roadmap.md> plan|state|delivered [--ansi] [--store-root <dir>]`:
|
|
56
|
+
|
|
57
|
+
- **`roadmap plan`** - the pre-delivery report: the Goal's first sentence, the batch (or legacy
|
|
58
|
+
wave) count and intent count, the batch order, and when the roadmap was created; then the
|
|
59
|
+
full entries table.
|
|
60
|
+
- **`roadmap state`** - the in-delivery report: Goal, a Progress bar over intents delivered of
|
|
61
|
+
intents total (never batches), the frontier batch, who is delivering it and their lead, the
|
|
62
|
+
next queued entry, and the last ledger event; then the entries table with each entry's own
|
|
63
|
+
checklist progress and lead.
|
|
64
|
+
- **`roadmap delivered`** - the post-delivery report: a meta line (closed time, or `in progress`
|
|
65
|
+
when the goal is not yet reached; intent count; duration) directly under the title, the
|
|
66
|
+
delivered table with each entry's merge sha, and the `## Log` table.
|
|
67
|
+
|
|
68
|
+
Every cell traces to the roadmap file, `INDEX.md` (which always wins on status), the roadmap's
|
|
69
|
+
own savepoint ledger, or (falling back when no ledger file exists) the roadmap's `## Log` -
|
|
70
|
+
never a second parser: `RoadmapQueue`'s own public `roadmap` reader supplies every entry.
|
|
71
|
+
|
|
72
|
+
## The five triggers for `state`
|
|
73
|
+
|
|
74
|
+
Print `state` (one intent, or `--all` for the roster) on any of these; a checklist tick alone,
|
|
75
|
+
an executor's intermediate commit, or an agent going idle is NOT one of them:
|
|
76
|
+
|
|
77
|
+
| Trigger | Scope |
|
|
78
|
+
|---|---|
|
|
79
|
+
| A savepoint line lands (a stage boundary: Why, How, Exec started, outcome written, End) | that intent |
|
|
80
|
+
| A review verdict returns (plan review or post-execution review), naming what it changed | that intent |
|
|
81
|
+
| A blocker or needs-input is logged | that intent |
|
|
82
|
+
| A merge or a release lands | that intent |
|
|
83
|
+
| The owner asks ("where are we", "state of X", "continue X") | all in delivery, or the one named |
|
|
84
|
+
|
|
85
|
+
`delivered` prints exactly once, at Completion. `delay` prints only when the owner asks why a
|
|
86
|
+
delivery took long.
|
|
87
|
+
|
|
88
|
+
Every verb prints the same plain Markdown on every harness (owner ruling 2026-08-31); where a
|
|
89
|
+
harness can paint it (Claude Code, through 316a's message-display hook), it substitutes a
|
|
90
|
+
painted rendering of that same output, never a different one, and no skill or script branches
|
|
91
|
+
on harness name to decide.
|
|
92
|
+
|
|
93
|
+
## Depth for small work
|
|
94
|
+
|
|
95
|
+
For small work in auto mode, only the How-boundary `plan` screen prints mid-flight (intent
|
|
96
|
+
331f moved this print off `state`, since there is no separate briefing per stage any more).
|
|
97
|
+
Larger work prints `state` at every trigger in the table above. This is a
|
|
98
|
+
depth cut, not a different report: the screen's shape never changes, only how often it fires.
|
|
99
|
+
A delivery still ends with `outcome.md` plus one `delivered` screen.
|
|
100
|
+
|
|
101
|
+
## One report per audience
|
|
102
|
+
|
|
103
|
+
A delivery produces exactly two artifacts: `outcome.md` (generated by `scripts/end-intent`
|
|
104
|
+
from `graph.md`, `nodes/`, and the ledger when the intent has one, intent 339; hand-authored
|
|
105
|
+
by `plastic intent end` otherwise) and one `delivered` screen at the End stage. No stage or skill restates a delivery already
|
|
106
|
+
written to `outcome.md`; point at it instead. Skills do not open with a banner that names the
|
|
107
|
+
skill or restates the intent id and name the owner just typed. Announce only what the reader
|
|
108
|
+
cannot already know: an error, a result, a choice with its reason, or a handoff.
|
|
109
|
+
|
|
110
|
+
## Boundary vs intent 74
|
|
111
|
+
|
|
112
|
+
Intent 74's report contract (`references/agent-report-contract.md`) is the INTERNAL,
|
|
113
|
+
machine-checked handoff from a dispatched specialist back to the orchestrator: a structured
|
|
114
|
+
envelope plus a per-role payload. This contract is the OUTWARD screen shown to the owner.
|
|
115
|
+
Different direction, different audience, different form. The orchestrator reads the intent 74
|
|
116
|
+
report and reflects it into the record (savepoint, outcome.md) that `report-screen` then
|
|
117
|
+
renders. The two never merge.
|
|
118
|
+
|
|
119
|
+
## Brevity: point, don't repeat
|
|
120
|
+
|
|
121
|
+
Surface rules are owned by the `plain-writing` skill. This contract does not restate them. Its
|
|
122
|
+
job is naming which screen prints when, not the wording inside it - `report-screen` derives
|
|
123
|
+
every cell from the record (D14), so there is no prose left to style here.
|
|
124
|
+
|
|
125
|
+
## Emission: guided vs auto
|
|
126
|
+
|
|
127
|
+
In guided mode, `state` prints at each stage boundary and the human decides before the next
|
|
128
|
+
stage starts.
|
|
129
|
+
|
|
130
|
+
In auto mode, `state` prints at every trigger for larger work; for small work only the How
|
|
131
|
+
boundary's `plan` screen prints (see `## Depth for small work` above). The orchestrator takes
|
|
132
|
+
the go-ahead itself and moves on, except at the existing hard stops (destructive action without
|
|
133
|
+
a safe alternative, project-path confirm).
|
|
134
|
+
|
|
135
|
+
## Column vocabulary (D5, intent 331f)
|
|
136
|
+
|
|
137
|
+
Owner ruling 2026-09-05 11:05 UTC: "What" is never a column name, because What is a stage, not
|
|
138
|
+
a value. The id column reads `Graph ID`; the title column reads `Intent`. Every Steps table
|
|
139
|
+
reads `Step | Status | Detail` (the plan screen's own Steps table reads
|
|
140
|
+
`Step | Action | Detail`); every Risks table reads `N | Risk`; the Delivered/Evidence/Needs-you
|
|
141
|
+
tables on the `delivered` screen read `Row | Detail | Proven by`, `Kind | Detail | Source`, and
|
|
142
|
+
`N | Need | Reason`. The plan screen's Asked row prints the intent title before its first
|
|
143
|
+
colon, never the whole intent line. This applies to every screen the family prints: `state`,
|
|
144
|
+
`roster`, `session`, `delivered`, `delay`, `plan`, `roadmap` (`plan`/`state`/`delivered`), and
|
|
145
|
+
`dashboard`. `outcome.md`'s own `| Row | What |` heading is an AUTHORING convention inside the
|
|
146
|
+
file a human writes, never a rendered header, and stays unchanged.
|
|
147
|
+
|
|
148
|
+
## Width bound (D7, intent 331f)
|
|
149
|
+
|
|
150
|
+
No rendered row passes 115 visible columns. A long cell (the roadmap Goal, an intent title, an
|
|
151
|
+
Asked line) truncates on a word boundary with a single ellipsis; `ReportScreen.fit_screen`
|
|
152
|
+
shrinks a table's widest column first, floor 8, before it ever truncates a whole row.
|
|
@@ -45,3 +45,12 @@ This chapter holds the linking doctrine from Frontmatter and the branch-vs-root
|
|
|
45
45
|
the relation on the PREDECESSOR's `chain` (and mirror it as a
|
|
46
46
|
`[[id--slug|<target's full intent: text>]]` wikilink in `## Links`).
|
|
47
47
|
- **Rule of thumb:** if the intent could exist without its parent, it's a root.
|
|
48
|
+
|
|
49
|
+
## Naming
|
|
50
|
+
|
|
51
|
+
A thing is named after the concept family it lives under. A node is a graph-engineering
|
|
52
|
+
concept, so its name comes from graph engineering (node, edge, ready set, critical path),
|
|
53
|
+
from the Plastic concepts coined on top of it (intent, ledger, node input, lease, gate, runner),
|
|
54
|
+
and from the software and AI engineering concepts those rest on (review, fix, test, verify,
|
|
55
|
+
dispatch, executor, reviewer). A name from outside that stack is refused. Where no existing
|
|
56
|
+
concept fits, that is a design finding to raise, not a word to coin.
|
|
@@ -4,10 +4,10 @@ This chapter holds the delivery lock, claims, worktrees, the fail-safe doctrine,
|
|
|
4
4
|
|
|
5
5
|
### Delivery Isolation and the Single-Owner Lock
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
The delivery lock names the session delivering an intent, as its owner or a delegate. Locks
|
|
8
|
+
and worktrees exist only for auto teams: an interactive session working direct or thinking
|
|
9
|
+
takes no lock and records into its day ledger instead (the oldest day in the last seven whose
|
|
10
|
+
checklist carries the session's line, else today).
|
|
11
11
|
|
|
12
12
|
For an auto team, exactly one team develops an intent's delivery at a time. Ownership is
|
|
13
13
|
session-keyed and durable: arming acquires `delivery.lock` inside the intent directory
|
|
@@ -17,9 +17,7 @@ but never grants access and is never inferred from transcripts or filesystem pat
|
|
|
17
17
|
fields on legacy locks display as `Unknown`. Liveness is a lease: the record hook refreshes
|
|
18
18
|
the lock file's mtime on every write the owning session makes, and that mtime is the sole
|
|
19
19
|
heartbeat truth. The lock counts as stale only when the mtime is older than the TTL. No
|
|
20
|
-
process id is consulted anywhere. The
|
|
21
|
-
records into; the lock file is the truth of who owns a delivery, and wins on any
|
|
22
|
-
disagreement. Another team that finds a fresh lock backs off; a stale lock is reclaimed only
|
|
20
|
+
process id is consulted anywhere. The lock file is the truth of who owns a delivery. Another team that finds a fresh lock backs off; a stale lock is reclaimed only
|
|
23
21
|
by explicit takeover, which replaces the lock and appends an audit line to the intent's
|
|
24
22
|
savepoint.md. Rearming the same session preserves its acquired identity and refreshes known
|
|
25
23
|
provenance; an explicit takeover replaces the controller and starts new provenance.
|
|
@@ -31,7 +29,7 @@ retained as descriptive history, bounded to the 20 most recent terminal entries.
|
|
|
31
29
|
a delegate, and an artifact claim are distinct evidence: controller ownership authorizes the
|
|
32
30
|
delivery, delegate registration authorizes a child session, and a claim selects one current
|
|
33
31
|
writer for one artifact. Disarm clears the lock; the End tail is ordered: verify, merge and
|
|
34
|
-
remove worktrees, clear the lock
|
|
32
|
+
remove worktrees, then clear the lock. Repair
|
|
35
33
|
is one idempotent function with two entry points: the `plastic-lock` command (`who`, status,
|
|
36
34
|
fix, release, reclaim, delegate) and the `plastic-doctor` skill's lock section, so repair
|
|
37
35
|
self-heals. `who` is read-only and reports the controller, mtime heartbeat, delegates, and
|
|
@@ -84,24 +82,24 @@ Provisioning fails open for intents that touch no project code (pure research or
|
|
|
84
82
|
intents in the global store, or a non-git repo): those get the lock only, and the worktree
|
|
85
83
|
block stays unprovisioned. The fail-open path is always logged, never silent.
|
|
86
84
|
|
|
87
|
-
Cleanup is part of
|
|
85
|
+
Cleanup is part of the End tail: it merges the branch, then removes the worktree. Never leave
|
|
88
86
|
an orphaned worktree behind, and clear a stale worktree reference with `git worktree prune`.
|
|
89
87
|
|
|
90
88
|
|
|
91
89
|
#### Intent delivery, station by station
|
|
92
90
|
|
|
93
|
-
How one auto-team intent travels from boarding to
|
|
91
|
+
How one auto-team intent travels from boarding to the End tail, and what the lock and
|
|
94
92
|
the record hook do at each station. Nothing in the third column blocks; the fourth column is
|
|
95
93
|
what gets written down.
|
|
96
94
|
|
|
97
|
-
| Station | Delivered artifact | Lock
|
|
95
|
+
| Station | Delivered artifact | Lock steps | Record |
|
|
98
96
|
|---|---|---|---|
|
|
99
|
-
| Start (board) | none (a procedure, not a stage) | `plastic-lock fix` self-heals stale, corrupt, or legacy state; arm acquires `delivery.lock` (O_EXCL, session-keyed), provisions the code worktree
|
|
97
|
+
| Start (board) | none (a procedure, not a stage) | `plastic-lock fix` self-heals stale, corrupt, or legacy state; arm acquires `delivery.lock` (O_EXCL, session-keyed), provisions the code worktree | savepoint confirms the boarding station |
|
|
100
98
|
| What (create) | `<id>--<slug>.md`, born complete | no lock yet; `new-intent` validates the file it writes (`scripts/validate-intent`) | savepoint `What` line; intent listed in INDEX `## Active` |
|
|
101
99
|
| Why | `spec.md` | owner writes refresh the lease (lock file mtime heartbeat) | savepoint `Why started`, `Why spec.md created` |
|
|
102
100
|
| How | `plan.md`, `actions/ACTION_N.md` (at least one), `checklist.md` | heartbeat on writes | savepoint `How started`, `How plan.md created`, `How checklist.md created`, `Exec started` |
|
|
103
101
|
| Exec | code on the intent branch, checklist checked off | heartbeat; code edits confined to the provisioned worktree; delegates write under the owner's lock | checklist boxes; savepoint milestones; the day-ledger line promotes when a project file lands |
|
|
104
|
-
| End (done) | mandatory `outcome.md` (`disposition: delivered\|abandoned`), INDEX moves to Completed or Abandoned | ordered End tail: verify, merge and remove worktrees, disarm clears `delivery.lock`,
|
|
102
|
+
| End (done) | mandatory `outcome.md` (`disposition: delivered\|abandoned`), INDEX moves to Completed or Abandoned | ordered End tail: verify, merge and remove worktrees, disarm clears `delivery.lock`, and the QMD reindex runs LAST; `end-intent` backfills a placeholder `outcome.md` from the record and its structure check reports (never refuses) | the savepoint's terminal `delivered` (or `abandoned`) line; takeover audits, if any, remain in savepoint.md |
|
|
105
103
|
| Maintenance (Future, Terminal, or Active-with-a-stale-or-no-lock) | `revisions.md` move-and-record entries | detects (never acquires) `delivery.lock`; defers and reports while the target's lock is FRESH (`Lock.fresh?`); a stale or absent lock is not-active, maintenance proceeds | append-only, rule-tagged `revisions.md` entry written in the same operation as the change, or the change is refused; lands via a fresh branch off store main merged back as one closed op, never `git add -A` |
|
|
106
104
|
|
|
107
105
|
## The write guard is not residue
|
|
@@ -8,7 +8,7 @@ Plastic separates two different things an earlier doctrine blurred under one wor
|
|
|
8
8
|
"immutable." WORK is the delivered CONTENT an intent produced: the code and project files a
|
|
9
9
|
delivery changed, the research it recorded, the outcome it wrote. Once the intent is terminal
|
|
10
10
|
(Completed or Abandoned), that content is immutable - the only way to change it is another
|
|
11
|
-
intent that continues or reverts it. Editing a
|
|
11
|
+
intent that continues or reverts it. Editing a terminal intent's own artifacts so it looks like it
|
|
12
12
|
delivered something different, or that parts are missing, is forbidden (the book analogy:
|
|
13
13
|
never rewrite the text on the pages of an old, valuable book).
|
|
14
14
|
|
|
@@ -6,8 +6,8 @@ This chapter holds the full roadmap file format and its relationship to INDEX.md
|
|
|
6
6
|
|
|
7
7
|
Roadmaps exist for planned parallel delivery of intents in a coherent and organized way. A roadmap
|
|
8
8
|
is a named, ordered, delivery-side collection of intents: the delivery-side counterpart to a
|
|
9
|
-
release (completion-side, tracked in `CHANGELOG.md`).
|
|
10
|
-
|
|
9
|
+
release (completion-side, tracked in `CHANGELOG.md`). Create one by hand from the template, then
|
|
10
|
+
use `plastic roadmap show`, `next`, `log`, and `check` to read, drive, and audit it.
|
|
11
11
|
|
|
12
12
|
File location: `roadmaps/{slug}.md`, a sibling of `INDEX.md`, wherever `INDEX.md` lives, never
|
|
13
13
|
inside `store/` (store holds intent directories, not project artifacts). For a project that is its
|
|
@@ -9,7 +9,7 @@ end to end: a piece of work moved through What, Why, How, and Exec, with a finis
|
|
|
9
9
|
|
|
10
10
|
## Before you start
|
|
11
11
|
|
|
12
|
-
Run
|
|
12
|
+
Run `plastic update` first, so the commands below match what is
|
|
13
13
|
actually installed.
|
|
14
14
|
|
|
15
15
|
Work in a sandbox: this track always creates a global-store intent; the throwaway repo below
|
|
@@ -22,7 +22,7 @@ directory instead (see station 6). Either way, nothing in this track touches a r
|
|
|
22
22
|
|
|
23
23
|
### 1. Create the intent
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Run `plastic intent new` and describe the work in plain words, for example "add a
|
|
26
26
|
short Usage section to this project's README."
|
|
27
27
|
|
|
28
28
|
Artifact: a new intent directory, `{id}--slug.md`, plus the sentinel placeholder lifecycle
|
|
@@ -35,7 +35,7 @@ tool, never written by hand.
|
|
|
35
35
|
|
|
36
36
|
### 2. Board the intent
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Run `plastic continue` and name the intent.
|
|
39
39
|
|
|
40
40
|
Artifact: a delivery lock (a `delivery.lock` file in the intent directory) naming this
|
|
41
41
|
session as the one owner, and a line in `savepoint.md` recording the stage. The agent then
|
|
@@ -46,78 +46,59 @@ sessions from editing the same intent at the same time.
|
|
|
46
46
|
|
|
47
47
|
### 3. Why, rulings one at a time
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
Run `plastic intent spec` (say "grill me" for a harder, interview-style pass over
|
|
50
50
|
the same ground). It asks conversational prose questions, one at a
|
|
51
51
|
time, never a multiple-choice menu, and answers them one at a time in return.
|
|
52
52
|
|
|
53
53
|
Artifact: `## Context` and `### Decisions` in the intent file fill in as each answer lands, and
|
|
54
54
|
each ruling also lands as its own `## Insights` entry the moment it is made, never batched for
|
|
55
|
-
later. This station's product is the enriched Why; it hands off to
|
|
55
|
+
later. This station's product is the enriched Why; it hands off to `plastic intent spec`
|
|
56
56
|
next, it does not write `spec.md` itself.
|
|
57
57
|
|
|
58
58
|
Checkpoint: after two or three answers, look at the intent file. Every ruling given out loud
|
|
59
59
|
is already sitting in `### Decisions` and in `## Insights`, in writing.
|
|
60
60
|
|
|
61
|
-
### 4.
|
|
61
|
+
### 4. How, write the graph
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Ask the same conversation (`plastic intent spec`) to turn the rulings into the graph.
|
|
64
64
|
|
|
65
|
-
Artifact: `
|
|
65
|
+
Artifact: `graph.md` (nodes, edges, dispatch policy) and one `nodes/N.md` file per node this
|
|
66
|
+
small delivery needs. A delivery this size is one node; many independent tasks instead get
|
|
67
|
+
one node each, dispatched in parallel by the runner.
|
|
66
68
|
|
|
67
|
-
Checkpoint:
|
|
68
|
-
station 3.
|
|
69
|
+
Checkpoint: open `graph.md` and point at the one node this worked example needs.
|
|
69
70
|
|
|
70
|
-
### 5.
|
|
71
|
+
### 5. Exec, drive the runner loop
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
Run `plastic intent step`.
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
A task that depends on an owner decision landing first (a destructive step, a structural
|
|
80
|
-
ruling) gets an `[ORCHESTRATOR]` prefix and blocks every other item until that decision is
|
|
81
|
-
made; this worked example has none.
|
|
82
|
-
|
|
83
|
-
Checkpoint: open `checklist.md`. Every task in `plan.md` has a matching checkbox under
|
|
84
|
-
`## In Progress`; that checklist, not `plan.md` itself, is what gets ticked off and moved to
|
|
85
|
-
`## Completed` during Exec.
|
|
86
|
-
|
|
87
|
-
### 6. Exec, verify before you report
|
|
88
|
-
|
|
89
|
-
Type `/plastic-intent-executing`.
|
|
90
|
-
|
|
91
|
-
Teach the order: first the agent syncs its working copy with the main line, so no edit lands
|
|
92
|
-
on a path a merged change upstream has already touched or removed. Then it makes the change,
|
|
93
|
-
runs whatever verifies it (a test suite, or a manual check for a docs change like this one),
|
|
94
|
-
and only then ticks the checklist box, moving the task from `## In Progress` to
|
|
95
|
-
`## Completed` and adding a `## Session Log` row, before moving to the next task. Verifying
|
|
96
|
-
always comes before checking a box, never after, and each task is ticked the moment it lands,
|
|
97
|
-
never batched for later.
|
|
75
|
+
Teach the loop: `ruby scripts/runner step <intent_dir>` computes which nodes are ready and
|
|
76
|
+
prints a spawn block to dispatch, `ruby scripts/runner status <intent_dir>` reads the
|
|
77
|
+
ledger (running, done, blocked, or waiting on a decision), and `ruby scripts/runner answer`
|
|
78
|
+
closes a node that needs an owner's ruling. Call `step` again after each dispatched node
|
|
79
|
+
returns, until the graph is empty.
|
|
98
80
|
|
|
99
81
|
Artifact: the actual change on disk (the new README Usage section, or, in the global-store
|
|
100
|
-
fallback, a short written note saved as the intent's deliverable) and
|
|
101
|
-
`
|
|
82
|
+
fallback, a short written note saved as the intent's deliverable) and every node in
|
|
83
|
+
`graph.md` at a terminal status.
|
|
102
84
|
|
|
103
|
-
Checkpoint:
|
|
104
|
-
|
|
105
|
-
this session, before moving to station 7.
|
|
85
|
+
Checkpoint: run `runner status` and confirm no node is left running or blocked, before
|
|
86
|
+
moving to station 6.
|
|
106
87
|
|
|
107
|
-
###
|
|
88
|
+
### 6. End
|
|
108
89
|
|
|
109
|
-
|
|
90
|
+
Run `plastic intent end`.
|
|
110
91
|
|
|
111
|
-
Artifact: a real `outcome.md` (Summary, Delivered, Verification, Follow-ups)
|
|
112
|
-
|
|
113
|
-
`savepoint.
|
|
92
|
+
Artifact: a real `outcome.md` (Summary, Delivered, Verification, Follow-ups) generated by
|
|
93
|
+
`scripts/outcome-report` from `graph.md` and the ledger, the intent moved from `## Active`
|
|
94
|
+
to `## Completed` in `INDEX.md`, and the terminal savepoint line.
|
|
114
95
|
|
|
115
96
|
Checkpoint: open `outcome.md` and read its Summary. It should describe, in a sentence or
|
|
116
97
|
two, exactly the README section (or note) just delivered.
|
|
117
98
|
|
|
118
99
|
## Wrap and where to go next
|
|
119
100
|
|
|
120
|
-
That is the full cycle once: create,
|
|
101
|
+
That is the full cycle once: create, graph, runner step, end. Read
|
|
121
102
|
[`your-first-intent-in-10-minutes.md`](https://github.com/zalom/plastic/blob/main/docs/guides/your-first-intent-in-10-minutes.md) for the same path condensed to a single
|
|
122
103
|
read, and [`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md) for where each station wrote its
|
|
123
104
|
work down.
|
|
@@ -9,7 +9,7 @@ agent end to end, and pausing and resuming that delivery will feel familiar.
|
|
|
9
9
|
|
|
10
10
|
## Before you start
|
|
11
11
|
|
|
12
|
-
Run
|
|
12
|
+
Run `plastic update` first, so the commands below match what is
|
|
13
13
|
actually installed.
|
|
14
14
|
|
|
15
15
|
Work in a sandbox: a throwaway git repository, or a global-store intent. Nothing in this
|
|
@@ -19,8 +19,8 @@ track touches a real project.
|
|
|
19
19
|
|
|
20
20
|
### 1. Board a small intent and choose auto
|
|
21
21
|
|
|
22
|
-
Start from an active intent (create one first with
|
|
23
|
-
exists, the same way as track 1 station 1).
|
|
22
|
+
Start from an active intent (create one first with `plastic intent new` if none
|
|
23
|
+
exists, the same way as track 1 station 1). Run `plastic auto take ID`.
|
|
24
24
|
|
|
25
25
|
Artifact: the delivery lock arms, and the agent announces it is taking over the intent for
|
|
26
26
|
autonomous delivery.
|
|
@@ -33,7 +33,7 @@ queued intent from the dashboard's queue itself.)
|
|
|
33
33
|
|
|
34
34
|
No new command at this station. Watch how the work splits.
|
|
35
35
|
|
|
36
|
-
Auto owns How (
|
|
36
|
+
Auto owns How (`graph.md`, `nodes/`) and Exec (the code, the tests, the
|
|
37
37
|
mechanical close) from here on. Inside Exec it follows a few fixed habits: it syncs its
|
|
38
38
|
working copy with the main line before touching anything, ticks each task the moment it
|
|
39
39
|
lands rather than batching several into one later edit, and independently verifies its own
|
|
@@ -45,7 +45,7 @@ can review how it checked, not just what it found.
|
|
|
45
45
|
The user keeps two things: the rulings made along the way, and the review points, moments
|
|
46
46
|
auto is built to pause for, such as confirming a project path or stopping before a
|
|
47
47
|
destructive action with no safe way back. When auto tells you to run a command yourself
|
|
48
|
-
("run
|
|
48
|
+
("run plastic intent spec"), that is an instruction for you to type; it is a different
|
|
49
49
|
thing from the prompts auto hands to its own dispatched subagents, and the two are never
|
|
50
50
|
mixed up in what it tells you.
|
|
51
51
|
|
|
@@ -63,18 +63,18 @@ Checkpoint: open the intent's `savepoint.md` and name the stage its last line re
|
|
|
63
63
|
|
|
64
64
|
### 4. Reading the per-stage reports
|
|
65
65
|
|
|
66
|
-
No new command. At each stage boundary (What, Why, How, Exec
|
|
66
|
+
No new command. At each stage boundary (What, Why, How, Exec) the agent briefs in a
|
|
67
67
|
fixed three-line shape: State (what happened and why it matters), Risk (the one thing that
|
|
68
68
|
could bite, or "nothing flagged"), and Call (the decision left to the user, or the call the
|
|
69
69
|
agent is taking on its own). That is the depth for a medium or large intent. A small intent
|
|
70
|
-
gets one briefing, at How,
|
|
70
|
+
gets one briefing, at How, merging in what the earlier stages would have said.
|
|
71
71
|
|
|
72
72
|
Checkpoint: in the most recent report, point at the State line, the Risk line, and the Call
|
|
73
73
|
line.
|
|
74
74
|
|
|
75
75
|
### 5. Continue and where-was-I after time away
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
Run `plastic continue`.
|
|
78
78
|
|
|
79
79
|
Artifact: the current state, presented and then the session stops. If a specific intent is
|
|
80
80
|
named, the agent reads its stage and savepoint and resumes exactly there, rather than
|