@zalom/plastic 1.14.0 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PLASTIC.md +101 -294
- package/README.md +5 -6
- package/agents/plastic-advisor.md +18 -17
- package/agents/plastic-enforcer.md +57 -69
- package/agents/plastic-executor.md +34 -20
- package/agents/plastic-faux-advisor.md +18 -18
- package/config_asks.yml +38 -0
- package/hooks/capture +4 -0
- package/hooks/check-update +12 -3
- package/hooks/close +5 -0
- package/hooks/hooks.json +9 -49
- package/hooks/record +4 -0
- package/package.json +3 -2
- package/scripts/agent-report +8 -9
- package/scripts/append-ledger +195 -0
- package/scripts/codex-hook +101 -95
- package/scripts/dashboard.rb +4 -4
- package/scripts/doctor.rb +106 -43
- package/scripts/end-intent +77 -76
- package/scripts/exec-worktree +11 -20
- package/scripts/file-session-intent +61 -0
- package/scripts/hook-capture +242 -0
- package/scripts/hook-close +34 -0
- package/scripts/hook-record +149 -0
- package/scripts/hook-session-start +95 -12
- package/scripts/install.rb +8 -6
- package/scripts/lib/agent_models.rb +1 -7
- package/scripts/lib/arm.rb +283 -0
- package/scripts/lib/backfill_intent.rb +316 -0
- package/scripts/lib/bridge.rb +24 -1597
- package/scripts/lib/doctor_core.rb +17 -88
- package/scripts/lib/doctor_session_ledger.rb +106 -0
- package/scripts/lib/exec_worktree.rb +14 -60
- package/scripts/lib/harness_text.rb +5 -4
- package/scripts/lib/hook_registry.rb +44 -107
- package/scripts/lib/insights.rb +3 -4
- package/scripts/lib/installer_core.rb +19 -30
- package/scripts/lib/lock.rb +6 -26
- package/scripts/lib/outcome_guard.rb +7 -5
- package/scripts/lib/project_validator.rb +30 -1
- package/scripts/lib/roadmap_queue.rb +3 -3
- package/scripts/lib/roadmap_savepoint.rb +1 -1
- package/scripts/lib/rule_catalog.rb +6 -3
- package/scripts/lib/savepoint.rb +320 -0
- package/scripts/lib/scaffold_intent.rb +13 -179
- package/scripts/lib/session_backfill.rb +184 -0
- package/scripts/lib/session_close.rb +84 -0
- package/scripts/lib/session_git.rb +469 -0
- package/scripts/lib/session_ledger.rb +497 -0
- package/scripts/lib/store_discovery.rb +1 -1
- package/scripts/lib/store_provisioning.rb +1 -1
- package/scripts/maintenance-run +7 -7
- package/scripts/new-intent +63 -4
- package/scripts/plastic-lock +94 -41
- package/scripts/promote-session-item +150 -0
- package/scripts/rebuild-graph +1 -1
- package/scripts/roadmap-next +2 -2
- package/scripts/rollback.rb +42 -3
- package/scripts/scaffold-intent +37 -63
- package/scripts/session-commit +116 -0
- package/scripts/spawn-preamble +5 -5
- package/scripts/update.rb +7 -3
- package/skills/agent-advisor/SKILL.md +3 -3
- package/skills/agent-advisor/references/advisor-protocol.md +20 -20
- package/skills/auto/SKILL.md +218 -317
- package/skills/auto/evals/evals.json +10 -10
- package/skills/auto/references/agent-architecture.md +102 -90
- package/skills/auto/references/agent-report-contract.md +4 -21
- package/skills/auto/references/end-tail.md +47 -53
- package/skills/auto/references/human-report-contract.md +8 -8
- package/skills/conventions/SKILL.md +1 -3
- package/skills/conventions/references/lifecycle-and-savepoints.md +35 -1
- package/skills/conventions/references/locks-and-worktrees.md +47 -55
- package/skills/conventions/references/maintenance-and-revisions.md +12 -12
- package/skills/dashboard/SKILL.md +1 -1
- package/skills/direct/SKILL.md +66 -0
- package/skills/direct/references/request-signals.md +59 -0
- package/skills/doctor/SKILL.md +58 -11
- package/skills/doctor/report.md +3 -1
- package/skills/install/SKILL.md +11 -9
- package/skills/intent-continuing/SKILL.md +131 -89
- package/skills/intent-continuing/references/boarding-matrix.md +34 -0
- package/skills/intent-continuing/references/context-management.md +2 -2
- package/skills/intent-creating/SKILL.md +2 -2
- package/skills/intent-creating/references/lifecycle.md +1 -1
- package/skills/intent-ending/SKILL.md +28 -37
- package/skills/intent-ending/evals/evals.json +4 -4
- package/skills/intent-executing/SKILL.md +12 -49
- package/skills/intent-executing/plan-reviewer-prompt.md +39 -0
- package/skills/intent-speccing/SKILL.md +108 -51
- package/skills/intent-speccing/evals/evals.json +5 -5
- package/skills/intent-speccing/references/per-section-fill-rules.md +4 -4
- package/skills/intent-speccing/references/self-verify-checklist.md +1 -2
- package/skills/project-creating/SKILL.md +1 -1
- package/skills/releasing/SKILL.md +7 -8
- package/skills/tutorial/SKILL.md +2 -2
- package/skills/tutorial/references/track-1-guided.md +16 -18
- package/skills/tutorial/references/track-2-auto.md +12 -13
- package/skills/tutorial/references/track-3-projects-and-roadmaps.md +2 -2
- package/templates/agents.md +4 -7
- package/templates/project.yml +7 -0
- package/templates/roadmap.md +1 -1
- package/templates/savepoint.md +2 -2
- package/templates/session-intent.md +29 -0
- package/agents/plastic-brainstorming.md +0 -48
- package/agents/plastic-future-intent-researcher.md +0 -35
- package/agents/plastic-intent-curator.md +0 -47
- package/agents/plastic-intent-discovery.md +0 -43
- package/agents/plastic-planner.md +0 -56
- package/agents/plastic-spec-specialist.md +0 -53
- package/hooks/auto-arm +0 -5
- package/hooks/bash-gate +0 -3
- package/hooks/continue +0 -31
- package/hooks/edit-gates +0 -3
- package/hooks/future-intent-check +0 -25
- package/hooks/gate-check +0 -12
- package/hooks/power-tools +0 -8
- package/scripts/hook-auto-arm +0 -51
- package/scripts/hook-bash-gate +0 -78
- package/scripts/hook-code-gate +0 -38
- package/scripts/hook-continue +0 -48
- package/scripts/hook-create-gate +0 -51
- package/scripts/hook-edit-gates +0 -58
- package/scripts/hook-future-intent-check +0 -90
- package/scripts/hook-gate-check +0 -169
- package/scripts/hook-links-gate +0 -54
- package/scripts/hook-lock-gate +0 -47
- package/scripts/hook-power-tools +0 -38
- package/scripts/hook-savepoint-pre +0 -32
- package/scripts/lib/codex_edit_gates.rb +0 -138
- package/scripts/lib/edit_gates.rb +0 -398
- package/scripts/lib/links_gate.rb +0 -140
- package/scripts/lib/qmd_hook.rb +0 -41
- package/scripts/lib/spec_header.rb +0 -83
- package/scripts/lib/start_intent.rb +0 -296
- package/scripts/start-intent +0 -89
- package/skills/_active-intent-gate.md +0 -26
- package/skills/auto/references/tiers.md +0 -100
- package/skills/continuing/SKILL.md +0 -34
- package/skills/continuing/evals/evals.json +0 -91
- package/skills/conventions/references/gates-and-enforcement.md +0 -53
- package/skills/conventions/references/tiers-and-dispatch.md +0 -135
- package/skills/doctor/references/gates-stuck-detection.md +0 -43
- package/skills/intent-brainstorming/SKILL.md +0 -118
- package/skills/intent-brainstorming/evals/evals.json +0 -67
- package/skills/intent-continuing/evals/evals.json +0 -145
- package/skills/intent-discovering/SKILL.md +0 -56
- package/skills/intent-grilling/SKILL.md +0 -108
- package/skills/intent-linking/SKILL.md +0 -128
- package/skills/intent-linking/evals/evals.json +0 -22
- package/skills/intent-linking/references/zettelkasten.md +0 -45
- package/skills/intent-locking/SKILL.md +0 -64
- package/skills/intent-planning/SKILL.md +0 -145
- package/skills/intent-planning/evals/evals.json +0 -81
- package/skills/intent-planning/references/plan-format.md +0 -130
- package/skills/intent-researching/SKILL.md +0 -123
- package/skills/intent-researching/evals/evals.json +0 -22
- package/skills/intent-savepoint/SKILL.md +0 -83
- package/skills/intent-savepoint/references/context-management.md +0 -32
- package/skills/intent-starting/SKILL.md +0 -151
- package/skills/intent-starting/evals/evals.json +0 -117
- package/skills/intent-starting/references/boarding-matrix.md +0 -35
- package/skills/project-continuing/SKILL.md +0 -119
- package/skills/project-continuing/evals/evals.json +0 -100
- package/skills/roadmap-continuing/SKILL.md +0 -89
- package/skills/roadmap-continuing/evals/evals.json +0 -82
- package/skills/skill-creating/SKILL.md +0 -75
- package/skills/skill-creating/evals/evals.json +0 -108
- package/skills/skill-creating/references/agents.md +0 -168
- package/skills/skill-creating/references/defaults-first.md +0 -23
- package/skills/skill-creating/references/evals.md +0 -41
- package/skills/skill-creating/references/hooks.md +0 -251
- package/skills/skill-creating/references/progressive-disclosure.md +0 -176
- package/skills/skill-creating/references/scripts.md +0 -166
- package/skills/skill-creating/references/skills.md +0 -169
- package/skills/skill-creating/scripts/scaffold.rb +0 -313
- package/skills/skill-evaluating/SKILL.md +0 -141
- package/skills/skill-evaluating/assets/eval-template.json +0 -12
- package/skills/skill-evaluating/evals/evals.json +0 -75
- package/skills/skill-evaluating/references/convention-checks.md +0 -76
- package/skills/skill-evaluating/references/eval-methodology.md +0 -154
- package/skills/store-curating/SKILL.md +0 -64
- package/skills/store-curating/evals/evals.json +0 -38
- package/skills/store-indexing/SKILL.md +0 -93
- package/skills/store-indexing/evals/evals.json +0 -22
- package/skills/store-indexing/references/zettelkasten-linking.md +0 -32
- package/skills/store-provisioning/SKILL.md +0 -55
- /package/skills/{project-continuing → intent-continuing}/references/board-fill.md +0 -0
- /package/skills/{roadmap-continuing → intent-continuing}/references/liveness-ranking.md +0 -0
- /package/skills/{intent-brainstorming → intent-speccing}/references/design-principles.md +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Adversarial Plan Reviewer Prompt
|
|
2
|
+
|
|
3
|
+
You review a plan before any code exists. The lead of this intent wrote `spec.md`, `plan.md`,
|
|
4
|
+
and at least one `actions/ACTION_N.md` that carries a failure-mode matrix: one row per
|
|
5
|
+
operation, naming a failure mode and the test that would catch it. Your job is to find what
|
|
6
|
+
that matrix misses and what it claims but cannot deliver, so the executor builds against a
|
|
7
|
+
plan that has already been attacked.
|
|
8
|
+
|
|
9
|
+
## Intent
|
|
10
|
+
|
|
11
|
+
{{INTENT_DIR}} (read `spec.md`, `plan.md`, every `actions/ACTION_N.md`, and anything under
|
|
12
|
+
`resources/` the spec cites). Target tree: {{WORKTREE}}.
|
|
13
|
+
|
|
14
|
+
## Instructions
|
|
15
|
+
|
|
16
|
+
1. Read the spec's decisions and the matrix first, then the tree. Check every claim by
|
|
17
|
+
opening the named file at the named line; never accept a line number from the spec on
|
|
18
|
+
trust.
|
|
19
|
+
2. For every operation in the spec, name a failure mode the matrix does not cover, or a
|
|
20
|
+
covered failure mode whose named test cannot actually detect it (the test reads a
|
|
21
|
+
different file, the regex cannot match, the assertion is a tautology, the fixture never
|
|
22
|
+
produces the case).
|
|
23
|
+
3. Grep the tree for every name the plan deletes, renames, or re-points, and list each
|
|
24
|
+
caller, test, doc, or template the plan does not name.
|
|
25
|
+
4. Where the plan touches a test the suite pins by exact string, quote the pinned string and
|
|
26
|
+
say what the change must keep verbatim.
|
|
27
|
+
5. Run any probe that settles a claim cheaply (a single test file, a measurement); report the
|
|
28
|
+
numbers.
|
|
29
|
+
6. Write no code and edit no repository file. Your output is the review.
|
|
30
|
+
|
|
31
|
+
## Report Format
|
|
32
|
+
|
|
33
|
+
One line first, the verdict: **REVISE** or **PROCEED**, with the biggest risk in the same
|
|
34
|
+
sentence.
|
|
35
|
+
|
|
36
|
+
Then numbered findings under `## A. Matrix gaps`, `## B. Missed files and pins`, and
|
|
37
|
+
`## C. Probes`. Each finding names the file and line you read and states what the spec or
|
|
38
|
+
the matrix must add, change, or drop. Be concrete and adversarial; do not pad; do not restate
|
|
39
|
+
the plan.
|
|
@@ -1,73 +1,130 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plastic-intent-speccing
|
|
3
|
-
description:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
skill).
|
|
3
|
+
description: >-
|
|
4
|
+
Thinking mode for an intent: the conversation that turns an idea into rulings, the
|
|
5
|
+
research that backs them, and the action files that say how the work runs. Use when the
|
|
6
|
+
user wants to think a request through before building it, says "let's design this",
|
|
7
|
+
"brainstorm", "grill me", "research this first", "spec this intent", "write the spec",
|
|
8
|
+
or when a prompt is too vague to run directly and the direct skill routes here. Also
|
|
9
|
+
fires on an indirect ask that never names a spec, such as "turn what we just discussed
|
|
10
|
+
into the contract the work runs from." Absorbs what the former intent-brainstorming,
|
|
11
|
+
intent-grilling, and intent-researching skills used to do (intent 304).
|
|
13
12
|
user-invocable: true
|
|
14
13
|
---
|
|
15
14
|
|
|
16
|
-
# Intent Speccing
|
|
15
|
+
# Intent Speccing: thinking mode
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
One skill for the whole thinking conversation on an intent. It asks one question at a time,
|
|
18
|
+
records every owner ruling the moment it lands, grills when asked, deposits research in
|
|
19
|
+
`resources/`, and ends by writing the action files the work runs from and consolidating the
|
|
20
|
+
rulings into `spec.md`. There is no separate brainstorm, grill, or research skill; those are
|
|
21
|
+
the modes below.
|
|
21
22
|
|
|
22
|
-
##
|
|
23
|
+
## Active intent
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
Resolve the active intent before anything else: read `~/.plastic/projects.yml`, match the
|
|
26
|
+
working directory against registered project paths (a match means the project store at
|
|
27
|
+
`~/.plastic/projects/{slug}/store/`, no match means `~/.plastic/store/`), then read that
|
|
28
|
+
store's `INDEX.md` under `## Active`. Exactly one active intent is the one to work; several
|
|
29
|
+
means ask which; none means stop and say so ("No active intent. Create one first with
|
|
30
|
+
/plastic-intent-creating"). Every artifact goes into `{store}/{id}--{slug}/`; never write
|
|
31
|
+
outside it.
|
|
28
32
|
|
|
29
|
-
## The
|
|
33
|
+
## The conversation
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
QMD-first: before scanning the store by hand for prior decisions, specs, or research, run
|
|
36
|
+
`ruby ~/.plastic/scripts/qmd-sync search "<terms>"` and open the authoritative intent file for
|
|
37
|
+
any hit you act on. The command is a no-op when QMD is absent.
|
|
38
|
+
|
|
39
|
+
1. **Context first.** Check the project state (files, docs, recent commits) and the intent's
|
|
40
|
+
`## Context` and `## Insights`. Assess scope: a request that describes several independent
|
|
41
|
+
subsystems is decomposed first, one thinking conversation per piece, before any detail
|
|
42
|
+
question is spent.
|
|
43
|
+
2. **One question per message, in prose.** No multiple-choice chips; a short menu of named
|
|
44
|
+
options is fine when the choice is genuinely enumerable, phrased as a sentence. Focus on
|
|
45
|
+
purpose, constraints, and success criteria. Before asking how something works, look:
|
|
46
|
+
in a codebase the answer is usually on disk.
|
|
47
|
+
3. **Propose two or three approaches** with trade-offs, leading with the recommendation and
|
|
48
|
+
the reason for it. YAGNI: strip what the design does not need.
|
|
49
|
+
4. **Present the design in sections** scaled to their complexity (a few sentences when
|
|
50
|
+
straightforward, up to 300 words when nuanced): architecture, components, data flow,
|
|
51
|
+
error handling, testing. Get a ruling after each section. Read
|
|
52
|
+
`references/design-principles.md` before proposing a design for the unit-boundary and
|
|
53
|
+
existing-codebase guidance (follow established patterns, no unrelated refactoring).
|
|
54
|
+
5. **Record every ruling as it lands.** The moment the owner rules, before the next question:
|
|
55
|
+
```
|
|
56
|
+
ruby ~/.plastic/scripts/insight-append {intent_dir} "<ruling text>" --stage Why --author human
|
|
57
|
+
```
|
|
58
|
+
Never batch. A later ruling that conflicts with an earlier one gets a new insight naming
|
|
59
|
+
the superseded one; both stay on record and the later wins. When presenting a batch of
|
|
60
|
+
options for the owner to pick from, read `~/.plastic/_decision-tables.md` and follow the
|
|
61
|
+
numbered-table procedure.
|
|
62
|
+
|
|
63
|
+
No implementation starts until a design has been presented and ruled on. That holds for a
|
|
64
|
+
config change and a one-function utility as much as for a subsystem; the design can be three
|
|
65
|
+
sentences, but it is presented.
|
|
66
|
+
|
|
67
|
+
### Grill mode
|
|
41
68
|
|
|
42
|
-
|
|
69
|
+
When the owner says "grill me" or asks to stress-test a plan or design, the same conversation
|
|
70
|
+
turns relentless. Identify the root in one sentence and restate it. Walk the decision tree
|
|
71
|
+
branch by branch: state the branch, ask a specific question, lead with your own recommended
|
|
72
|
+
answer, resolve before moving on, name dependencies between decisions and resolve the
|
|
73
|
+
upstream one first. Do not accept "it depends" without "on what?"; do not skip edge cases; do
|
|
74
|
+
not assume when you can verify; challenge assumptions ("why not the alternative?"). Every
|
|
75
|
+
three or four questions, summarize what is decided. At natural checkpoints, about every ten
|
|
76
|
+
questions, offer to continue or to pause and capture what is decided; a pause records every
|
|
77
|
+
ruling so far and stops. When all branches are resolved, list the decisions and the deferred
|
|
78
|
+
items, then offer the hand-off below.
|
|
43
79
|
|
|
44
|
-
|
|
45
|
-
`spec.md` exists (this is the gates-by-name framing: gate-check enforces spec.md before plan.md,
|
|
46
|
-
not the Transition Gates table row). Writing `plan.md` is what opens the code gate for Exec, and
|
|
47
|
-
writing `plan.md` is not this skill's job, that is `plastic-intent-planning`. State this to the user
|
|
48
|
-
at step 6 so the handoff at step 8 is expected, not a surprise.
|
|
80
|
+
### Research mode
|
|
49
81
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
82
|
+
When a question needs evidence rather than a ruling, research it and deposit the report in
|
|
83
|
+
`{intent_dir}/resources/{type}--{topic}.md`, with `{type}` one of `deep-research`,
|
|
84
|
+
`competitive-analysis`, `technical-spike`, `reference`, `landscape-survey` and `{topic}` in
|
|
85
|
+
kebab-case. Choose the depth and say why: shallow (one or two searches plus a look at the
|
|
86
|
+
code, minutes) for a narrow factual question; deep (several sources, cross-checked, a
|
|
87
|
+
landscape or an architectural decision, or when a wrong answer would cause an architectural
|
|
88
|
+
mistake) through the harness's deep-research capability when it has one, else a manual
|
|
89
|
+
fan-out of searches. The report carries a summary, findings with citations, sources, and a
|
|
90
|
+
"Relevance to intent" section; tables for findings and comparisons. Log one line in the
|
|
91
|
+
intent's `## Insights` naming the file and the key finding. Research does not chain to
|
|
92
|
+
another step; the conversation decides what to do with it.
|
|
53
93
|
|
|
54
|
-
##
|
|
94
|
+
## Closing the conversation
|
|
55
95
|
|
|
56
|
-
|
|
57
|
-
is convention-only: the orchestrator and the planner read it, no gate and no doctor check
|
|
58
|
-
validates it.
|
|
96
|
+
When the rulings are enough to build from:
|
|
59
97
|
|
|
60
|
-
|
|
98
|
+
1. **Write the action files.** Every ruling that says how the work runs lands in
|
|
99
|
+
`actions/ACTION_N.md` (at least one real file, no placeholder): the files to touch, the
|
|
100
|
+
order, the tests that prove each step, the rules. The action files are what direct mode or
|
|
101
|
+
an auto team executes; they exist before the work runs.
|
|
102
|
+
2. **Consolidate `spec.md`** from the rulings, section by section in template order. Read
|
|
103
|
+
`references/per-section-fill-rules.md` when filling the template. Build the ruling ledger
|
|
104
|
+
in fixed order first: `## Context` and `### Decisions`, then `## Insights` newest-last so a
|
|
105
|
+
later ruling supersedes an earlier one, then `resources/discovery--<slug>.md`, then any
|
|
106
|
+
other `resources/*.md`. Encode every ruling into its section; a collapsed single-line
|
|
107
|
+
section is complete when it names everything. If a section cannot be filled from the
|
|
108
|
+
ledger, stop and ask for the missing ruling; never invent scope. A spec.md left as the
|
|
109
|
+
placeholder is backfilled from the record at close (`## Problem`, `## Decisions`,
|
|
110
|
+
`## Acceptance Criteria`; the rest stays stub text), so consolidate only when the
|
|
111
|
+
rulings say more than the record already does.
|
|
112
|
+
3. **Self-verify.** Read `references/self-verify-checklist.md` before presenting; fix any
|
|
113
|
+
failing check and re-verify from the top.
|
|
114
|
+
4. **Present and hand off.** Present `spec.md` and the action files. Then offer the routes:
|
|
115
|
+
run it now inline when the work is small enough for direct mode; hand to `plastic-auto`
|
|
116
|
+
when the owner says auto and the checklist above passes (all decisions resolved, scope
|
|
117
|
+
bounded, dependencies named, success criteria defined); or keep thinking.
|
|
61
118
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
instead: which section, what is missing, and the question put to the user.
|
|
119
|
+
Report, in this order: which files were written (`spec.md` new or rewritten, the action
|
|
120
|
+
files), the count of acceptance criteria, which `## Insights` rulings superseded an earlier
|
|
121
|
+
decision and where each landed, and the route chosen. If step 2 stopped for a missing
|
|
122
|
+
ruling, report that instead: which section, what is missing, the question put to the owner.
|
|
67
123
|
|
|
68
124
|
## References
|
|
69
125
|
|
|
70
126
|
| Trigger | Read |
|
|
71
127
|
|---|---|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
128
|
+
| Before proposing a design (unit boundaries, existing codebases) | `references/design-principles.md` |
|
|
129
|
+
| Filling the spec template (closing step 2) | `references/per-section-fill-rules.md` |
|
|
130
|
+
| Self-verifying before presenting (closing step 3) | `references/self-verify-checklist.md` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skill_name": "plastic-intent-speccing",
|
|
3
|
-
"notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the
|
|
3
|
+
"notes": "Intent 163. Scopes: description triggering (1-4) and behavior (5-8: all-8-sections output, mandatory superseding-ruling case, STOP-and-ask gap rule, tabular alternatives with no em-dash). No dedicated Ruby test file backs this skill yet (natural-language guided command), so all assertions are result: expect-pass pending a real observed run, per the evals.json convention.",
|
|
4
4
|
"evals": [
|
|
5
5
|
{
|
|
6
6
|
"id": 1,
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"scope": "triggering",
|
|
38
38
|
"set": "validation",
|
|
39
39
|
"prompt": "Brainstorm this intent.",
|
|
40
|
-
"expected_output": "
|
|
40
|
+
"expected_output": "Activates plastic-intent-speccing (brainstorming is a mode of the thinking conversation since intent 304).",
|
|
41
41
|
"files": [],
|
|
42
42
|
"assertions": [
|
|
43
43
|
{
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"scope": "triggering",
|
|
53
53
|
"set": "validation",
|
|
54
54
|
"prompt": "Write the plan.",
|
|
55
|
-
"expected_output": "Does NOT activate plastic-intent-speccing;
|
|
55
|
+
"expected_output": "Does NOT activate plastic-intent-speccing; a plan is written from the action files by the executing skill.",
|
|
56
56
|
"files": [],
|
|
57
57
|
"assertions": [
|
|
58
58
|
{
|
|
@@ -67,12 +67,12 @@
|
|
|
67
67
|
"scope": "behavior",
|
|
68
68
|
"set": "train",
|
|
69
69
|
"prompt": "Intent Y is at Why: Context describes the problem and goal, and 5 Decisions are recorded resolving scope, approach, and one rejected alternative. Consolidate into spec.md.",
|
|
70
|
-
"expected_output": "Produces spec.md
|
|
70
|
+
"expected_output": "Produces spec.md starting at the Spec heading; all 8 template sections present once, in template order (Problem, Goals, Non-Goals, Approach, Alternatives Considered, Decisions, Acceptance Criteria, Open Questions); no template placeholder text remains; every recorded Decision is encoded into its matching section.",
|
|
71
71
|
"files": [],
|
|
72
72
|
"assertions": [
|
|
73
73
|
{
|
|
74
74
|
"type": "human",
|
|
75
|
-
"check": "
|
|
75
|
+
"check": "The file starts at the Spec heading; all 8 sections appear once each, in template order; no placeholder text; every Decision traces to a section",
|
|
76
76
|
"result": "expect-pass"
|
|
77
77
|
}
|
|
78
78
|
]
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Per-Section Fill Rules
|
|
2
2
|
|
|
3
|
-
The single shared method for turning the
|
|
4
|
-
|
|
5
|
-
|
|
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
6
|
|
|
7
7
|
Read the ruling ledger first (built in step 2 of the SKILL.md sequence): `## Context` plus
|
|
8
8
|
`### Decisions`, then `## Insights` newest-last (a later ruling supersedes an earlier
|
|
@@ -24,7 +24,7 @@ delivering a specific outcome.
|
|
|
24
24
|
|
|
25
25
|
One bullet per goal, each a concrete, observable outcome the delivery must reach. Encode every
|
|
26
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
|
|
27
|
+
vague goal. A single-line collapsed Goals section is complete if it names every
|
|
28
28
|
outcome; do not pad it with restated Problem text.
|
|
29
29
|
|
|
30
30
|
## 3. Non-Goals
|
|
@@ -22,8 +22,7 @@ these.
|
|
|
22
22
|
5. **No template placeholder text remains.** No literal `<intent name>`, `<alternative>`, `...`,
|
|
23
23
|
sample bracket text, or other template filler from `templates/spec.md` survives anywhere in
|
|
24
24
|
the artifact.
|
|
25
|
-
6. **
|
|
26
|
-
`# Spec:` heading, not folded into a section body.
|
|
25
|
+
6. **No header line.** The file starts at the `# Spec:` heading; there is no `Tier:` line (removed in 2.0, intent 304).
|
|
27
26
|
7. **All 8 sections present, in template order.** Problem, Goals, Non-Goals, Approach,
|
|
28
27
|
Alternatives Considered, Decisions, Acceptance Criteria, Open Questions, each present once, in
|
|
29
28
|
that order, none merged into another.
|
|
@@ -77,7 +77,7 @@ writes `INDEX.md` and `project.yml` only if missing. It is idempotent, so it is
|
|
|
77
77
|
safe even when the tactical mirror in step 5 already created the store directory.
|
|
78
78
|
Do not create the store with an inline `mkdir`; the provisioner is the only place
|
|
79
79
|
a store is made. For a project that is already registered but store-less, use the
|
|
80
|
-
`plastic-
|
|
80
|
+
`plastic-doctor` skill's provisioning section instead.
|
|
81
81
|
|
|
82
82
|
### 8. Mark Global Intent(s) Completed
|
|
83
83
|
|
|
@@ -250,16 +250,15 @@ This is the release branch of `plastic-intent-ending`'s Step 5 disarm (`merge: t
|
|
|
250
250
|
separate concern: a release is the merge-then-remove path for the intent's worktree (intent
|
|
251
251
|
73c3), so the intent's code branch is merged back into the default branch BEFORE the worktree
|
|
252
252
|
is removed. Drive it through `Worktree.finish` with `merge: true`, which merges the code
|
|
253
|
-
branch, then removes the worktree, prunes the repo
|
|
254
|
-
bridge:
|
|
253
|
+
branch, then removes the worktree, and prunes the repo:
|
|
255
254
|
|
|
256
255
|
```bash
|
|
257
|
-
ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/
|
|
258
|
-
'
|
|
256
|
+
ruby -r ~/.plastic/scripts/lib/worktree -r ~/.plastic/scripts/lib/arm -e \
|
|
257
|
+
'Worktree.finish(Arm.bridge_hash(intent_dir: "<STORE>/<dir>"), merge: true)'
|
|
259
258
|
```
|
|
260
259
|
|
|
261
|
-
(
|
|
262
|
-
|
|
260
|
+
(The worktree block is derived from `projects.yml` and the intent id, so the one-liner needs
|
|
261
|
+
only the intent directory; the `/tmp` bridge it once discovered was removed in 2.0, intent 307.)
|
|
263
262
|
|
|
264
263
|
Honor the worktree-cleanup rule: never leave an orphaned worktree, and run `git worktree
|
|
265
264
|
prune` in the affected repo if you hit a stale reference. For why this is the one place the
|
|
@@ -279,14 +278,14 @@ A release IS a delivery. The active intent that drove this work must be complete
|
|
|
279
278
|
ruby ~/.plastic/scripts/end-intent --store <store_path> --id <ID> --disposition delivered \
|
|
280
279
|
--session "$CLAUDE_CODE_SESSION_ID" \
|
|
281
280
|
--outcome-summary "delivered in <tag-name>: <one-line summary>" \
|
|
282
|
-
--index-note "<tag-name>, <mode
|
|
281
|
+
--index-note "<tag-name>, <mode>; <what shipped>; <suite result>"
|
|
283
282
|
```
|
|
284
283
|
A non-zero exit needs attention: 4 means a live foreign session holds the lock (back
|
|
285
284
|
off), 5 means the code worktree is still dirty (should not happen here, since step 8
|
|
286
285
|
already removed it; investigate before overriding with `--discard-worktree-changes`),
|
|
287
286
|
3 means disarm ran but the lock is still present (run `/plastic-doctor check the lock
|
|
288
287
|
status`).
|
|
289
|
-
d. Update clusters to show `_(completed)_
|
|
288
|
+
d. Update clusters to show `_(completed)_`.
|
|
290
289
|
|
|
291
290
|
**If no active intent exists for this release**, that itself is a problem - work happened outside the intent system. Log it and move on, but flag it.
|
|
292
291
|
|
package/skills/tutorial/SKILL.md
CHANGED
|
@@ -21,7 +21,7 @@ reference. Every checkpoint inside a track is prose, never another menu.
|
|
|
21
21
|
|
|
22
22
|
1. **Guided**: deliver a first intent, stage by stage, approving each step yourself. Routes to
|
|
23
23
|
`references/track-1-guided.md`.
|
|
24
|
-
2. **Auto**: hand delivery to the agent and watch the
|
|
24
|
+
2. **Auto**: hand delivery to the agent and watch the record and reports as it works. Routes to
|
|
25
25
|
`references/track-2-auto.md`.
|
|
26
26
|
3. **Projects and roadmaps**: grow a founding intent into a small real project, add more
|
|
27
27
|
intents, and plan a delivery batch with a roadmap. Routes to
|
|
@@ -35,7 +35,7 @@ showing the menu again.
|
|
|
35
35
|
|
|
36
36
|
Narrate one step at a time: say what the next station does, then hand control back so the
|
|
37
37
|
user types the real command themselves. After they run it, look at what appeared (a file, a
|
|
38
|
-
|
|
38
|
+
ledger line, a report) and debrief in plain words before moving to the next station. Never
|
|
39
39
|
run a station's command on the user's behalf; the tutorial teaches the shape of the work, it
|
|
40
40
|
does not do the work.
|
|
41
41
|
|
|
@@ -35,19 +35,19 @@ tool, never written by hand.
|
|
|
35
35
|
|
|
36
36
|
### 2. Board the intent
|
|
37
37
|
|
|
38
|
-
Type `/plastic-intent-
|
|
38
|
+
Type `/plastic-intent-continuing` 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
|
|
42
|
-
|
|
42
|
+
resumes at the last delivered station and asks nothing.
|
|
43
43
|
|
|
44
|
-
Checkpoint:
|
|
44
|
+
Checkpoint: explain in one sentence why the lock matters: it stops two
|
|
45
45
|
sessions from editing the same intent at the same time.
|
|
46
46
|
|
|
47
47
|
### 3. Why, rulings one at a time
|
|
48
48
|
|
|
49
|
-
Type `/plastic-intent-
|
|
50
|
-
|
|
49
|
+
Type `/plastic-intent-speccing` (say "grill me" for a harder, interview-style pass over
|
|
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
|
|
@@ -62,21 +62,19 @@ is already sitting in `### Decisions` and in `## Insights`, in writing.
|
|
|
62
62
|
|
|
63
63
|
Type `/plastic-intent-speccing`.
|
|
64
64
|
|
|
65
|
-
Artifact: `spec.md`,
|
|
66
|
-
sections filled from the rulings recorded in station 3.
|
|
65
|
+
Artifact: `spec.md`, its eight sections filled from the rulings recorded in station 3.
|
|
67
66
|
|
|
68
|
-
Checkpoint:
|
|
69
|
-
|
|
67
|
+
Checkpoint: point at one sentence in `spec.md` that traces back to an answer given in
|
|
68
|
+
station 3.
|
|
70
69
|
|
|
71
70
|
### 5. Plan
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
Ask the same conversation to write the action files and the plan.
|
|
74
73
|
|
|
75
|
-
Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
|
|
74
|
+
Artifact: `plan.md`, `checklist.md`, and at least one real `actions/ACTION_N.md`. A small
|
|
75
|
+
delivery like this one consolidates the whole delivery into a single `actions/ACTION_1.md`
|
|
76
|
+
(the ordered steps plus the exact changes); many independent tasks, dispatched in parallel,
|
|
77
|
+
instead get one `actions/ACTION_N.md` file per task. `checklist.md` follows a fixed form: tasks start under `## In Progress`, move to
|
|
80
78
|
`## Completed` as they land, and a `## Session Log` table records what happened each session.
|
|
81
79
|
A task that depends on an owner decision landing first (a destructive step, a structural
|
|
82
80
|
ruling) gets an `[ORCHESTRATOR]` prefix and blocks every other item until that decision is
|
|
@@ -86,7 +84,7 @@ Checkpoint: open `checklist.md`. Every task in `plan.md` has a matching checkbox
|
|
|
86
84
|
`## In Progress`; that checklist, not `plan.md` itself, is what gets ticked off and moved to
|
|
87
85
|
`## Completed` during Exec.
|
|
88
86
|
|
|
89
|
-
### 6. Exec, verify before
|
|
87
|
+
### 6. Exec, verify before you report
|
|
90
88
|
|
|
91
89
|
Type `/plastic-intent-executing`.
|
|
92
90
|
|
|
@@ -121,5 +119,5 @@ two, exactly the README section (or note) just delivered.
|
|
|
121
119
|
|
|
122
120
|
That is the full cycle once: create, board, decide, spec, plan, build, done. Read
|
|
123
121
|
[`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
|
|
124
|
-
read, and [`
|
|
125
|
-
|
|
122
|
+
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
|
+
work down.
|
|
@@ -51,16 +51,15 @@ mixed up in what it tells you.
|
|
|
51
51
|
|
|
52
52
|
Checkpoint: name one thing auto will always stop and ask about, rather than decide alone.
|
|
53
53
|
|
|
54
|
-
### 3. Walking the
|
|
54
|
+
### 3. Walking the record
|
|
55
55
|
|
|
56
|
-
No new command. Auto
|
|
57
|
-
lock (one owner at a time
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
No new command. Auto keeps one delivery in one place and writes down every move: the delivery
|
|
57
|
+
lock (one owner at a time, a `delivery.lock` file in the intent directory), the worktree (code
|
|
58
|
+
edits land on the intent's own branch), the savepoint ledger (one line per lifecycle file the
|
|
59
|
+
team writes), and the day ledger (the request that started this run moves from pending to open
|
|
60
|
+
when the first project file lands). Nothing blocks the team; the record is how you follow it.
|
|
61
61
|
|
|
62
|
-
Checkpoint:
|
|
63
|
-
came from.
|
|
62
|
+
Checkpoint: open the intent's `savepoint.md` and name the stage its last line records.
|
|
64
63
|
|
|
65
64
|
### 4. Reading the per-stage reports
|
|
66
65
|
|
|
@@ -75,7 +74,7 @@ line.
|
|
|
75
74
|
|
|
76
75
|
### 5. Continue and where-was-I after time away
|
|
77
76
|
|
|
78
|
-
Type `/plastic-continuing`.
|
|
77
|
+
Type `/plastic-intent-continuing`.
|
|
79
78
|
|
|
80
79
|
Artifact: the current state, presented and then the session stops. If a specific intent is
|
|
81
80
|
named, the agent reads its stage and savepoint and resumes exactly there, rather than
|
|
@@ -86,11 +85,11 @@ at and how that matched what was actually on disk.
|
|
|
86
85
|
|
|
87
86
|
## Wrap and where to go next
|
|
88
87
|
|
|
89
|
-
Auto keeps the same stages and the same
|
|
90
|
-
Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between
|
|
88
|
+
Auto keeps the same stages and the same record as thinking; the only difference is who steers.
|
|
89
|
+
Read [`pick-your-mode.md`](https://github.com/zalom/plastic/blob/main/docs/guides/pick-your-mode.md) for the honest trade-off between the three modes, and
|
|
91
90
|
[`using-plastic-with-claude-code.md`](https://github.com/zalom/plastic/blob/main/docs/guides/using-plastic-with-claude-code.md) for how that choice feels day to day and how
|
|
92
|
-
it connects to roadmap-driven delivery. For
|
|
93
|
-
[`
|
|
91
|
+
it connects to roadmap-driven delivery. For where the team wrote its work down, read
|
|
92
|
+
[`reading-the-ledgers.md`](https://github.com/zalom/plastic/blob/main/docs/guides/reading-the-ledgers.md).
|
|
94
93
|
|
|
95
94
|
Note on terms: "guided" means the user starts each stage with a command and the agent
|
|
96
95
|
narrows the thinking inside it, the same shape track 1 walked. "Manual", editing project
|
|
@@ -21,10 +21,10 @@ one this tutorial keeps or ships.
|
|
|
21
21
|
### 1. Start from a founding implementation intent
|
|
22
22
|
|
|
23
23
|
Create and board an intent the same way as track 1, stations 1 and 2: `/plastic-intent-creating`,
|
|
24
|
-
then `/plastic-intent-
|
|
24
|
+
then `/plastic-intent-continuing`. Describe something meant to grow into a small real project,
|
|
25
25
|
for example "build a personal todo app."
|
|
26
26
|
|
|
27
|
-
Then type `/plastic-intent-
|
|
27
|
+
Then type `/plastic-intent-speccing` and record a couple of real rulings on this founding
|
|
28
28
|
intent, for example the language or how tasks get stored. Keep it short: this intent only
|
|
29
29
|
needs enough decisions for the new project to inherit, not a full design.
|
|
30
30
|
|
package/templates/agents.md
CHANGED
|
@@ -45,8 +45,8 @@ Active/Future/Completed placement is managed in INDEX.md, not in frontmatter.
|
|
|
45
45
|
Create through the `plastic-intent-creating` skill, which scaffolds with one call:
|
|
46
46
|
`ruby ~/.plastic/scripts/new-intent --store .plastic/store --intent "<one-line>" --slug <slug> [--sources <governing-id>]`.
|
|
47
47
|
It allocates the Folgezettel ID, creates `.plastic/store/ID--slug/ID--slug.md` born
|
|
48
|
-
complete, and wires the links. Never hand-author the files:
|
|
49
|
-
|
|
48
|
+
complete, and wires the links. Never hand-author the files: `new-intent` validates the
|
|
49
|
+
intent file it writes, and `end-intent` checks it again at close.
|
|
50
50
|
|
|
51
51
|
## Lifecycle Skills
|
|
52
52
|
|
|
@@ -55,11 +55,8 @@ Plastic has its own lifecycle skills. When a Plastic skill exists for the curren
|
|
|
55
55
|
| Phase | Skill | Produces |
|
|
56
56
|
|-------|-------|----------|
|
|
57
57
|
| What | `plastic-intent-creating` | Intent file |
|
|
58
|
-
| Why | `plastic-intent-
|
|
59
|
-
|
|
|
60
|
-
| Why | `plastic-intent-researching` | `resources/*.md` |
|
|
61
|
-
| Why | `plastic-intent-grilling` | Deep interrogation |
|
|
62
|
-
| How | `plastic-intent-planning` | `plan.md`, `checklist.md`, `actions/` |
|
|
58
|
+
| Why | `plastic-intent-speccing` | Rulings as insights, `resources/*.md`, `spec.md` |
|
|
59
|
+
| How | `plastic-intent-speccing` | `actions/`, `plan.md`, `checklist.md` |
|
|
63
60
|
| Exec | `plastic-intent-executing` | Code + `outcome.md` |
|
|
64
61
|
| Done | `plastic-intent-ending` | Lifecycle transition |
|
|
65
62
|
|
package/templates/project.yml
CHANGED
|
@@ -3,3 +3,10 @@ governing_docs:
|
|
|
3
3
|
|
|
4
4
|
release:
|
|
5
5
|
on_complete: commit
|
|
6
|
+
|
|
7
|
+
# flow:
|
|
8
|
+
# mode: direct # direct | pull_request
|
|
9
|
+
# base: main # defaults to origin/HEAD, then main, then master
|
|
10
|
+
# branch_template: "session/{{day}}" # {{day}}, {{ticket}}, {{slug}} tokens
|
|
11
|
+
# ticket_source: intent_id # intent_id (the session pointer's intent id, else the day id)
|
|
12
|
+
# workspace: checkout # checkout | worktree (worktree applies to direct mode only)
|
package/templates/roadmap.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Roadmap: <name>
|
|
2
2
|
|
|
3
|
-
(one-line meta: what this roadmap delivers, and
|
|
3
|
+
(one-line meta: what this roadmap delivers, and whether it is a project or the global roadmap. `roadmaps/` is a sibling
|
|
4
4
|
of `INDEX.md` — a project's root or the global `~/.plastic/`, never inside `store/`. When this
|
|
5
5
|
roadmap's goal is reached, move this file from `roadmaps/{slug}.md` to
|
|
6
6
|
`roadmaps/archived/{slug}.md`; `roadmaps/` itself lists only live roadmaps.)
|
package/templates/savepoint.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Deterministic cycle-step ledger, written automatically by the
|
|
1
|
+
# Deterministic cycle-step ledger, written automatically by the record hook.
|
|
2
2
|
# One line per lifecycle milestone, append-only, newest at the bottom:
|
|
3
3
|
#
|
|
4
4
|
# {UTC-iso8601} {Stage} {milestone}
|
|
@@ -11,4 +11,4 @@
|
|
|
11
11
|
# 2026-06-16T16:40:00Z Exec outcome.md created
|
|
12
12
|
#
|
|
13
13
|
# This file is sugar on top of the conventions, not a source of truth. It is
|
|
14
|
-
# rebuildable from files-on-disk via
|
|
14
|
+
# rebuildable from files-on-disk via Savepoint.rebuild_savepoint. Do not hand-edit.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "{{DAY}}"
|
|
3
|
+
intent: "Session ledger for {{DATE}}"
|
|
4
|
+
sources: []
|
|
5
|
+
chain: []
|
|
6
|
+
created: {{CREATED}}
|
|
7
|
+
author: {{AUTHOR}}
|
|
8
|
+
tags: ["session"]
|
|
9
|
+
mode: direct
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Intent
|
|
13
|
+
Carry every session's activity for {{DATE}} in one shared, append-only day ledger.
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
This day ledger holds the checklist and savepoint lines that every session touching
|
|
17
|
+
{{DATE}} appends, tagged by session and project. It is not a project intent: it has
|
|
18
|
+
no plan, no actions, and no id that participates in a store's Folgezettel graph.
|
|
19
|
+
|
|
20
|
+
## Outcome
|
|
21
|
+
`checklist.md` and `savepoint.md` appear inside this day's directory on first append,
|
|
22
|
+
each written under an exclusive file lock so concurrent sessions never lose or
|
|
23
|
+
interleave a line.
|
|
24
|
+
|
|
25
|
+
## Insights
|
|
26
|
+
(observations captured throughout the day, appended by later sessions)
|
|
27
|
+
|
|
28
|
+
## Links
|
|
29
|
+
<!-- No sources or chain; this intent has no graph edges to project. -->
|