@erclx/canon 5.31.0 → 5.32.0
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/README.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/references/adopted.md +1 -1
- package/claude/skills/auto-ship/REQUIREMENT.md +4 -16
- package/claude/skills/auto-ship/SKILL.md +13 -58
- package/claude/skills/auto-ship/references/draft-mark.md +2 -2
- package/claude/skills/auto-ship/references/failure-recovery.md +1 -5
- package/claude/skills/auto-ship/references/tier-failures.md +1 -1
- package/claude/skills/auto-ship/references/ui-checklist.md +2 -2
- package/claude/skills/auto-ship/references/verb-absent.md +3 -27
- package/claude/skills/backlog-triage/SKILL.md +1 -1
- package/claude/skills/canon-cli/REQUIREMENT.md +4 -6
- package/claude/skills/canon-cli/SKILL.md +2 -2
- package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback/SKILL.md +10 -13
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +13 -14
- package/claude/skills/canon-feedback-triage/SKILL.md +49 -30
- package/claude/skills/canvas/REQUIREMENT.md +3 -4
- package/claude/skills/canvas/SKILL.md +5 -5
- package/{standards → claude/skills/canvas/references}/canvas.md +12 -1
- package/claude/skills/ci-workflow/REQUIREMENT.md +0 -1
- package/claude/skills/context-fold/REQUIREMENT.md +8 -20
- package/claude/skills/context-fold/SKILL.md +20 -44
- package/claude/skills/context-fold/references/classify.md +7 -8
- package/claude/skills/context-fold/references/completion-report.md +2 -6
- package/claude/skills/context-fold/references/context-refresh.md +5 -15
- package/claude/skills/context-fold/references/promoted-pages.md +3 -3
- package/claude/skills/context-fold/references/receipt-sweep.md +6 -17
- package/claude/skills/context-fold/references/unusable-baseline.md +4 -6
- package/claude/skills/create-rule/REQUIREMENT.md +0 -1
- package/claude/skills/create-skill/REQUIREMENT.md +6 -4
- package/claude/skills/create-skill/SKILL.md +8 -7
- package/{standards → claude/skills/create-skill/references}/skill-paths.md +1 -0
- package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
- package/claude/skills/decision-escalate/SKILL.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +0 -2
- package/claude/skills/design-taste/SKILL.md +1 -3
- package/claude/skills/design-taste/references/vocabulary.md +1 -1
- package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
- package/claude/skills/document-health/REQUIREMENT.md +2 -2
- package/claude/skills/document-health/SKILL.md +4 -5
- package/claude/skills/document-health/references/axes.md +4 -6
- package/claude/skills/draft-and-pick/REQUIREMENT.md +16 -14
- package/claude/skills/draft-and-pick/SKILL.md +40 -32
- package/claude/skills/draft-and-pick/references/live-arms.md +9 -9
- package/claude/skills/draft-doc/REQUIREMENT.md +5 -5
- package/claude/skills/draft-doc/SKILL.md +9 -10
- package/claude/skills/draft-doc/references/requirements.md +61 -0
- package/claude/skills/draft-doc/references/wiki-kind.md +53 -0
- package/claude/skills/draft-doc/references/wiki.md +50 -30
- package/claude/skills/draft-figure/REQUIREMENT.md +2 -2
- package/claude/skills/draft-figure/SKILL.md +4 -4
- package/claude/skills/draft-figure/references/architecture-set.md +4 -4
- package/claude/skills/draft-figure/references/hand-drawn.md +1 -1
- package/claude/skills/draft-figure/references/mermaid-path.md +55 -0
- package/claude/skills/draft-figure/references/mermaid.md +43 -34
- package/claude/skills/draft-identity/REQUIREMENT.md +1 -1
- package/claude/skills/draft-identity/SKILL.md +9 -7
- package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
- package/claude/skills/draft-ready/SKILL.md +6 -6
- package/claude/skills/draft-ready/references/assembly.md +1 -1
- package/{standards → claude/skills/draft-ready/references}/ready.md +13 -5
- package/claude/skills/git-issue/references/issue.md +3 -3
- package/claude/skills/git-ship/REQUIREMENT.md +0 -2
- package/claude/skills/git-ship/SKILL.md +16 -24
- package/claude/skills/plan-feature/SKILL.md +2 -6
- package/{standards → claude/skills/plan-feature/references}/plan.md +9 -10
- package/claude/skills/plan-groundwork/SKILL.md +5 -6
- package/{standards → claude/skills/plan-groundwork/references}/groundwork.md +17 -4
- package/claude/skills/plan-intake/SKILL.md +2 -3
- package/{standards → claude/skills/plan-intake/references}/intake.md +17 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
- package/claude/skills/plan-intake-answer/SKILL.md +1 -1
- package/claude/skills/review-address/SKILL.md +1 -1
- package/claude/skills/review-craft/REQUIREMENT.md +3 -3
- package/claude/skills/review-craft/SKILL.md +2 -2
- package/claude/skills/review-craft/references/ui.md +4 -4
- package/claude/skills/review-pr/REQUIREMENT.md +1 -1
- package/claude/skills/review-pr/SKILL.md +5 -7
- package/claude/skills/review-ui/REQUIREMENT.md +0 -1
- package/claude/skills/review-ui/SKILL.md +1 -1
- package/claude/skills/role-orchestrator/REQUIREMENT.md +0 -3
- package/claude/skills/role-orchestrator/SKILL.md +8 -8
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +3 -3
- package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +7 -10
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +0 -3
- package/claude/skills/role-orchestrator/references/orchestrator-resume.md +1 -1
- package/claude/skills/role-planner/SKILL.md +2 -2
- package/claude/skills/role-reviewer/SKILL.md +1 -1
- package/claude/skills/role-worker/SKILL.md +2 -2
- package/claude/skills/session-compact/REQUIREMENT.md +1 -4
- package/claude/skills/session-compact/SKILL.md +3 -13
- package/claude/skills/session-compact/references/handoff-note.md +2 -2
- package/claude/skills/session-map/REQUIREMENT.md +1 -9
- package/claude/skills/session-map/SKILL.md +8 -16
- package/{standards → claude/skills/session-map/references}/session.md +17 -11
- package/claude/skills/session-relay/REQUIREMENT.md +1 -1
- package/claude/skills/session-resume/REQUIREMENT.md +4 -6
- package/claude/skills/session-resume/SKILL.md +3 -9
- package/claude/skills/session-worktree/SKILL.md +1 -1
- package/claude/skills/session-worktree/references/main-root-writes.md +2 -2
- package/claude/skills/systematic-debugging/REQUIREMENT.md +0 -1
- package/claude/skills/target-check/REQUIREMENT.md +3 -3
- package/claude/skills/target-check/SKILL.md +1 -1
- package/claude/skills/target-check/references/domains.md +1 -1
- package/claude/skills/target-setup/REQUIREMENT.md +4 -4
- package/claude/skills/target-setup/SKILL.md +3 -3
- package/claude/skills/target-setup/references/detect.md +1 -1
- package/claude/skills/task-board/SKILL.md +4 -4
- package/claude/skills/task-board/references/archive.md +1 -1
- package/{standards → claude/skills/task-board/references}/board.md +9 -0
- package/claude/skills/task-board/references/decline.md +1 -1
- package/{standards → claude/skills/task-board/references}/tasks.md +13 -8
- package/claude/skills/teach-workspace/SKILL.md +1 -1
- package/claude/skills/teach-workspace/references/revisit.md +1 -1
- package/{standards → claude/skills/teach-workspace/references}/teach.md +17 -5
- package/claude/skills/ux-audit/REQUIREMENT.md +2 -2
- package/claude/skills/ux-audit/SKILL.md +2 -3
- package/claude/skills/write-human/REQUIREMENT.md +0 -1
- package/claude/skills/write-human/SKILL.md +1 -1
- package/docs/agents/audits.md +1 -1
- package/docs/agents/canvas.md +1 -1
- package/docs/agents/commands.md +1 -6
- package/docs/agents/context-audit-checks.md +9 -23
- package/docs/agents/context-audit.md +7 -15
- package/docs/agents/context-classify.md +5 -5
- package/docs/agents/counts.md +5 -5
- package/docs/agents/drift-surfaces.md +2 -2
- package/docs/agents/index.md +3 -5
- package/docs/agents/install-and-sync.md +6 -6
- package/docs/agents/intake.md +1 -1
- package/docs/agents/records-stale.md +5 -5
- package/docs/agents/records-validate.md +1 -1
- package/docs/agents/records.md +2 -2
- package/docs/agents/restated.md +1 -1
- package/docs/agents/rule-citations.md +1 -1
- package/docs/agents/skills-audit.md +2 -2
- package/docs/agents/state-scoped-risk.md +2 -2
- package/docs/agents/superseded.md +2 -2
- package/docs/agents/tasks-plans.md +1 -1
- package/docs/agents/tasks-validate.md +1 -1
- package/docs/agents/tasks.md +1 -1
- package/docs/agents/teach.md +1 -1
- package/docs/agents/upstream.md +26 -2
- package/docs/target/migrations.md +24 -0
- package/docs/target/projects.md +5 -7
- package/docs/target/scenarios.md +2 -2
- package/docs/target/sync.md +3 -3
- package/docs/workflow/ai-workflow.md +7 -38
- package/docs/workflow/index.md +1 -1
- package/docs/workflow/operating-model.md +8 -8
- package/docs/workflow/parallel-features.md +7 -7
- package/docs/workflow/skill-map-on-request.md +12 -15
- package/docs/workflow/skill-map.md +20 -32
- package/docs/workflow/visual-design-workflow.md +11 -14
- package/governance/renames.toml +0 -19
- package/governance/rules/canon/605-worktrees.md +1 -1
- package/governance/rules/{standards → canon}/plan.md +4 -5
- package/governance/rules/canon/tasks.md +18 -0
- package/governance/stacks/base.toml +1 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/scripts/core/regen-web-previews.ts +1 -1
- package/src/audits/catalog.ts +5 -97
- package/src/claude/cases/authoring.ts +0 -18
- package/src/claude/cases/misc.ts +0 -13
- package/src/claude/cases/setup.ts +3 -20
- package/src/claude/cases/workflow.ts +0 -33
- package/src/claude/seeds.ts +1 -7
- package/src/claude/skills-audit.ts +1 -1
- package/src/cli/help.ts +1 -4
- package/src/cli.ts +0 -4
- package/src/commands/claude.ts +8 -14
- package/src/commands/context.ts +18 -280
- package/src/commands/feedback.ts +22 -91
- package/src/commands/records.ts +5 -5
- package/src/commands/sync.ts +5 -3
- package/src/commands/upstream.ts +135 -0
- package/src/context/audit.ts +5 -14
- package/src/context/classify/extract.ts +6 -13
- package/src/context/classify/patterns.ts +2 -41
- package/src/context/classify/prompts.ts +2 -6
- package/src/context/classify/run.ts +3 -3
- package/src/context/folders.ts +7 -12
- package/src/context/gate.ts +11 -91
- package/src/context/requirements.ts +13 -4
- package/src/counts/scan.ts +3 -3
- package/src/design/components.ts +2 -2
- package/src/feedback/body.ts +0 -12
- package/src/gate/measures.ts +6 -57
- package/src/gov/citations.ts +9 -3
- package/src/gov/restated.ts +3 -3
- package/src/markdown/structure.ts +2 -2
- package/src/migrate/record-layout.ts +3 -3
- package/src/records/ordinal.ts +1 -1
- package/src/records/prune.ts +2 -1
- package/src/records/stale-canonical.ts +2 -2
- package/src/roots/record.ts +1 -1
- package/src/sandbox/scenario.ts +115 -11
- package/src/shipped/references.ts +3 -3
- package/src/standards/read.ts +31 -0
- package/src/sync/seeds-report.ts +1 -1
- package/src/tasks/reach.ts +2 -2
- package/src/tasks/validate.ts +1 -1
- package/src/teach/workspace.ts +1 -1
- package/src/upstream/cursor.ts +1 -1
- package/src/upstream/due.ts +128 -0
- package/src/upstream/releases.ts +2 -1
- package/standards/context.md +3 -5
- package/standards/design.md +2 -3
- package/standards/index.md +0 -22
- package/standards/publish.md +1 -1
- package/standards/skill.md +1 -1
- package/tooling/base/reference.md +1 -1
- package/tooling/claude/reference.md +6 -20
- package/tooling/claude/seeds/.claude/hooks/records-index.sh +8 -20
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +3 -3
- package/tooling/claude/seeds/CLAUDE.md +1 -3
- package/tooling/claude/seeds/canon/REQUIREMENTS.md +2 -9
- package/tooling/web/configs/e2e/screenshot.ts +0 -1
- package/claude/skills/auto-ship/references/review-findings.md +0 -20
- package/claude/skills/bash-cli-script/REQUIREMENT.md +0 -43
- package/claude/skills/bash-cli-script/SKILL.md +0 -53
- package/claude/skills/bash-cli-script/references/template.md +0 -19
- package/claude/skills/canon-operator/REQUIREMENT.md +0 -62
- package/claude/skills/canon-operator/SKILL.md +0 -113
- package/claude/skills/canon-rollout/REQUIREMENT.md +0 -59
- package/claude/skills/canon-rollout/SKILL.md +0 -140
- package/claude/skills/canon-rollout/references/failure-recovery.md +0 -20
- package/claude/skills/context-fold/references/anchor-sweep.md +0 -58
- package/claude/skills/context-fold/references/wireframe-sweep.md +0 -45
- package/claude/skills/create-standard/REQUIREMENT.md +0 -33
- package/claude/skills/create-standard/SKILL.md +0 -31
- package/claude/skills/design-extract/REQUIREMENT.md +0 -42
- package/claude/skills/design-extract/SKILL.md +0 -108
- package/claude/skills/draft-and-pick/references/frame.html +0 -118
- package/claude/skills/draft-doc/references/wireframes.md +0 -48
- package/claude/skills/markdown-propose/REQUIREMENT.md +0 -47
- package/claude/skills/markdown-propose/SKILL.md +0 -122
- package/claude/skills/markdown-propose/references/format.md +0 -118
- package/claude/skills/memory-capture/REQUIREMENT.md +0 -50
- package/claude/skills/memory-capture/SKILL.md +0 -117
- package/claude/skills/memory-review/REQUIREMENT.md +0 -52
- package/claude/skills/memory-review/SKILL.md +0 -129
- package/claude/skills/memory-review/references/later-phases.md +0 -118
- package/claude/skills/memory-review/references/receipt-format.md +0 -64
- package/claude/skills/project-commands/REQUIREMENT.md +0 -42
- package/claude/skills/project-commands/SKILL.md +0 -87
- package/claude/skills/repo-metadata/REQUIREMENT.md +0 -37
- package/claude/skills/repo-metadata/SKILL.md +0 -54
- package/claude/skills/restate-plainly/REQUIREMENT.md +0 -41
- package/claude/skills/restate-plainly/SKILL.md +0 -41
- package/claude/skills/review-branch/REQUIREMENT.md +0 -40
- package/claude/skills/review-branch/SKILL.md +0 -137
- package/claude/skills/seed-sync/REQUIREMENT.md +0 -45
- package/claude/skills/seed-sync/SKILL.md +0 -158
- package/claude/skills/sketch-design/REQUIREMENT.md +0 -38
- package/claude/skills/sketch-design/SKILL.md +0 -94
- package/claude/skills/ux-walkthrough/REQUIREMENT.md +0 -56
- package/claude/skills/ux-walkthrough/SKILL.md +0 -53
- package/claude/skills/ux-walkthrough/references/builds.md +0 -15
- package/claude/skills/ux-walkthrough/references/candidate-pages.md +0 -11
- package/claude/skills/ux-walkthrough/references/measuring.md +0 -22
- package/claude/skills/ux-walkthrough/references/record.md +0 -36
- package/claude/skills/ux-walkthrough/references/relay.md +0 -25
- package/docs/agents/architecture-record.md +0 -36
- package/docs/agents/review-classification.md +0 -76
- package/governance/rules/canon/603-memory.md +0 -11
- package/governance/rules/lang/120-bash.md +0 -18
- package/governance/rules/standards/architecture.md +0 -13
- package/governance/rules/standards/groundwork.md +0 -13
- package/governance/rules/standards/intake.md +0 -12
- package/governance/rules/standards/memory.md +0 -12
- package/governance/rules/standards/ready.md +0 -13
- package/governance/rules/standards/requirements.md +0 -12
- package/governance/rules/standards/session.md +0 -13
- package/governance/rules/standards/tasks.md +0 -15
- package/governance/rules/standards/teach.md +0 -14
- package/governance/rules/standards/wiki.md +0 -13
- package/governance/rules/standards/wireframes.md +0 -13
- package/src/autoship/classify.ts +0 -75
- package/src/autoship/paths.ts +0 -50
- package/src/commands/autoship.ts +0 -129
- package/src/commands/repo.ts +0 -393
- package/src/context/architecture.ts +0 -654
- package/src/context/wireframe-states.ts +0 -238
- package/src/repo/metadata.ts +0 -206
- package/standards/architecture.md +0 -127
- package/standards/memory.md +0 -158
- package/standards/mermaid.md +0 -64
- package/standards/requirements.md +0 -79
- package/standards/wiki.md +0 -77
- package/standards/wireframes.md +0 -143
- package/tooling/claude/seeds/.claude/memory/index.md +0 -8
- package/tooling/claude/seeds/canon/ARCHITECTURE.md +0 -23
- package/tooling/claude/seeds/canon/wireframes/index.md +0 -8
- /package/{standards → claude/skills/create-skill/references}/skill-practice.md +0 -0
- /package/{standards → claude/skills/create-skill/references}/skill-requirement.md +0 -0
- /package/{standards → claude/skills/plan-feature/references}/plan-lifecycle.md +0 -0
- /package/{standards → claude/skills/plan-groundwork/references}/groundwork-spikes.md +0 -0
- /package/{standards → claude/skills/task-board/references}/tasks-decline.md +0 -0
- /package/{standards → claude/skills/teach-workspace/references}/glossary.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: session-compact
|
|
3
|
-
description:
|
|
3
|
+
description: Writes one handoff note to .canon/compact/ so the session after a compaction picks up where this one stopped. Use before running /compact, when asked to "write a handoff", "prepare for compaction", "save where we got to", or before moving a session to another machine, or when a PreCompact hook blocks and names this skill. Do NOT use for a session holding the orchestrator role, whose board handoff is `session-map`. Do NOT use to record a decision a groundwork track owns, which is `plan-groundwork`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: parallel
|
|
6
6
|
---
|
|
@@ -17,15 +17,7 @@ Write only what a compaction destroys. Everything a later session can read from
|
|
|
17
17
|
- Decline where the session holds no reasoning a reader could not get faster from git or from a record already written. Say so in one line and write nothing. A padded note is worse than an absent one, because a reader who finds a note trusts it.
|
|
18
18
|
- Resolve `.canon/` at the main worktree root and send the write out as a heredoc, both the way `session-worktree` states.
|
|
19
19
|
|
|
20
|
-
## Step 1:
|
|
21
|
-
|
|
22
|
-
Invoke `canon:memory-capture` and let it return before writing. The note then cites what was written rather than restating the same lesson in prose.
|
|
23
|
-
|
|
24
|
-
State the caveat the caller gives about committing. A caller that does not commit says so, and capture skips routing and writes memory files alone.
|
|
25
|
-
|
|
26
|
-
Carry through the line capture returns when a fact routed, so the session knows a fold is still owed. Report nothing else about what it wrote.
|
|
27
|
-
|
|
28
|
-
## Step 2: write the note
|
|
20
|
+
## Step 1: write the note
|
|
29
21
|
|
|
30
22
|
Write one file to `.canon/compact/<slug>.md`. Name `<slug>` for the work as a short kebab-case phrase, taken from what the session did rather than from the branch, so a session that ran on `main` still gets a name a reader recognizes. Use `latest` when nothing in the session names the work.
|
|
31
23
|
|
|
@@ -33,11 +25,10 @@ Follow `${CLAUDE_SKILL_DIR}/references/handoff-note.md` for what each section ca
|
|
|
33
25
|
|
|
34
26
|
Overwrite a note of the same name. One session's work has one note, and a second file for the same work splits the handoff.
|
|
35
27
|
|
|
36
|
-
## Step
|
|
28
|
+
## Step 2: report
|
|
37
29
|
|
|
38
30
|
```plaintext
|
|
39
31
|
✅ Handoff written: .canon/compact/<slug>.md
|
|
40
|
-
<the line memory-capture returned, where a fact routed>
|
|
41
32
|
Move: canon records push, then canon sessions export <id>
|
|
42
33
|
```
|
|
43
34
|
|
|
@@ -59,7 +50,6 @@ A decline reports itself so a caller can tell it from a failure:
|
|
|
59
50
|
|
|
60
51
|
## What this delegates
|
|
61
52
|
|
|
62
|
-
- The memory pass, its routing, and the pen's shape: `canon:memory-capture`
|
|
63
53
|
- The orchestrator's handoff, which carries a drift check and writes a task row: `canon:session-map`
|
|
64
54
|
- Reading a handoff back at the start of the next session: `canon:session-resume`
|
|
65
55
|
- Packing the session for another machine: `canon sessions export`, with `canon sessions import` and then `/canon:session-resume` on the arriving side
|
|
@@ -63,6 +63,6 @@ Not general advice. A caution a reader could have guessed is noise around the tw
|
|
|
63
63
|
|
|
64
64
|
- A `## State` section. A session that committed nothing has no state, and one that did has it in the log.
|
|
65
65
|
- The tree, the file counts, and the folder listing. All survive a compaction.
|
|
66
|
-
- The session's narrative. What was tried and abandoned belongs in the record the track keeps, or
|
|
67
|
-
- A lesson
|
|
66
|
+
- The session's narrative. What was tried and abandoned belongs in the record the track keeps, or nowhere.
|
|
67
|
+
- A lesson stated as a lesson. Put it in `## Where to pick up` as the context edit or the task that carries it, since nothing else reads a note once the next session is past it.
|
|
68
68
|
- Anything the reader would have to take on trust. Every claim carries a file, a commit, or a record.
|
|
@@ -11,13 +11,9 @@ Without this skill, the standard governing the pre-compaction handoff carries a
|
|
|
11
11
|
|
|
12
12
|
The only routed writer belongs to the orchestrator role. It disables model invocation, asserts that role on invocation, and adds a section for decisions taken under delegated authority, so a plain feature session that reaches it receives a section it cannot fill and a review poll it does not run.
|
|
13
13
|
|
|
14
|
-
The nearest description by wording writes a different artifact. Capture routes facts to a context entry and writes memory files, and a request naming the session and the moment matches it, so the map goes unwritten while a session believes it has handed off.
|
|
15
|
-
|
|
16
14
|
The drift step is the one most specific to session length and the easiest to skip. It reads the commit the session started from, nothing on the machine records that commit, and a route that names the step without naming how to recover the ref ships an instruction nobody can follow.
|
|
17
15
|
|
|
18
|
-
A step that reads a surface a project may not carry gets skipped on the reasoning that it has nothing to act on. A cold session run against a project with no `.claude/` tree skipped
|
|
19
|
-
|
|
20
|
-
A capture fired the same way for every caller breaks the one caller the split leaves. An orchestrating session may write no tracked file, so its capture has to skip routing, and a route offering no way to say so leaves that reader running capture twice or routing facts the role forbids it to fold.
|
|
16
|
+
A step that reads a surface a project may not carry gets skipped on the reasoning that it has nothing to act on. A cold session run against a project with no `.claude/` tree skipped the drift step and wrote its own rationale into the map, so the step the route exists to carry did not run on the first test from outside. The skip is worst where it looks most defensible, and a session that takes it quietly leaves a map indistinguishable from a conforming one.
|
|
21
17
|
|
|
22
18
|
A body that restates the sections, the frontmatter, or the numbered steps becomes a second source that drifts from the standard, which is the failure the split between the role writer and the core was made to remove rather than move.
|
|
23
19
|
|
|
@@ -30,15 +26,12 @@ A body that restates the sections, the frontmatter, or the numbered steps become
|
|
|
30
26
|
- Resolve the folder at the main worktree root, and write the file whole from the shell where the editing tools refuse that root
|
|
31
27
|
- Fall back to the branchless filename on an empty slug rather than stopping
|
|
32
28
|
- Leave model invocation enabled, so a session that has dropped its routing still reaches this by description
|
|
33
|
-
- Take a caller's statement that the session does not commit and pass it to capture, so no fact this route fires is routed into a tracked file
|
|
34
|
-
- Report the map alone, plus the line capture returns when a fact routed, since a fold left unreported is a fold nobody runs
|
|
35
29
|
|
|
36
30
|
## Must not
|
|
37
31
|
|
|
38
32
|
- Restate the standard's sections, frontmatter, or numbered steps
|
|
39
33
|
- Skip a step by predicting what its skill or verb would have answered, rather than running it and recording what came back
|
|
40
34
|
- Assert a role, or add a role's section to a map written by a session holding no such role
|
|
41
|
-
- Fold the capture step's output into this skill's report
|
|
42
35
|
- Take the worktree-local copy the editing tools offer in place of the main-root path
|
|
43
36
|
- Summarize the board, the task files, or the work that shipped, each of which is carried by an artifact a compaction leaves standing
|
|
44
37
|
|
|
@@ -52,7 +45,6 @@ A body that restates the sections, the frontmatter, or the numbered steps become
|
|
|
52
45
|
|
|
53
46
|
- The handoff a plain session writes before a compaction, which is a note outside the board with no drift step and no `## State`: `session-compact`. Both skills once claimed the phrases "write the handoff" and "about to compact", so this description narrows to the orchestrator and to a request naming the map or the board, and a plain session belongs to `session-compact`.
|
|
54
47
|
- Reading a handoff back at the start of the next session: `session-resume`
|
|
55
|
-
- Routing a session fact to the context entry that owns it, and writing what no entry owns to the memory folder: `memory-capture`
|
|
56
48
|
- The sections a role adds over the core three, which belong to that role's own surface. `role-orchestrator` owns the orchestrator's and cites this route for the generic half.
|
|
57
49
|
- Validating a written map against the standard, which no record kind covers, so a conforming shape rests on the standard being followed
|
|
58
50
|
- Firing the write without being asked, which is a question about what the harness supports and is measured on its own track
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: session-map
|
|
3
|
-
description: Writes the session map, the board-side handoff at `.canon/tasks/session-<slug>.md`, for an orchestrating session or on a request naming the session map or the task board, running the skill-drift step the write procedure opens with. Use when asked to "write the session map", "write the board handoff", or when a session holding `canon:role-orchestrator` hands off before a compaction. Do NOT use for a plain session about to compact, which is `session-compact` and writes a note outside the board. Do NOT use to
|
|
3
|
+
description: Writes the session map, the board-side handoff at `.canon/tasks/session-<slug>.md`, for an orchestrating session or on a request naming the session map or the task board, running the skill-drift step the write procedure opens with. Use when asked to "write the session map", "write the board handoff", or when a session holding `canon:role-orchestrator` hands off before a compaction. Do NOT use for a plain session about to compact, which is `session-compact` and writes a note outside the board. Do NOT use to read a handoff back, which is `session-resume`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: parallel
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Session map
|
|
9
9
|
|
|
10
|
-
Write the pre-compaction handoff for the current session. `${CLAUDE_SKILL_DIR}
|
|
10
|
+
Write the pre-compaction handoff for the current session. `${CLAUDE_SKILL_DIR}/references/session.md` fixes the filename, the frontmatter, the three core sections, the numbered write procedure, and the citation rule. Follow that document rather than this body, which states when the procedure runs and what it runs against and leaves the shape where it already lives.
|
|
11
11
|
|
|
12
12
|
Any session writes one. Do not assert a role on invocation, and do not add a role's sections to a map written by a session holding no such role.
|
|
13
13
|
|
|
14
|
-
Run every step rather than judging in advance that one has nothing to act on. The
|
|
14
|
+
Run every step rather than judging in advance that one has nothing to act on. The drift verb answers for itself, refusal included, and a refusal recorded is a result where a prediction of one is not. A project carrying none of the scaffolding the step reads is the case this fires on, and it is the case where skipping looks most defensible.
|
|
15
15
|
|
|
16
16
|
## What fires this
|
|
17
17
|
|
|
@@ -25,17 +25,9 @@ Decline where the session holds no reasoning a reader could not get faster from
|
|
|
25
25
|
- Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. An empty result falls back to `latest` rather than stopping, since a handoff is scratch and a stop loses the reasoning the file exists to save.
|
|
26
26
|
- Resolve the containing folder at the main worktree root with `git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`. The guard above already stopped where that read has no repository to answer from, so it takes no fallback.
|
|
27
27
|
|
|
28
|
-
## Step 1:
|
|
28
|
+
## Step 1: recover the commit the drift step reads
|
|
29
29
|
|
|
30
|
-
Item 1 of `## Writing one`
|
|
31
|
-
|
|
32
|
-
Pass on the caveat a caller states about committing. A caller that does not commit says so, and capture then skips routing and writes memory files alone, since a routed fact lands in a context entry and that is a tracked file. A caller stating nothing leaves capture to decide for itself, which is the ordinary run.
|
|
33
|
-
|
|
34
|
-
Carry through the line capture returns when a fact routed, so the session knows a fold is still owed. Report nothing else about what it wrote. The map is this skill's output.
|
|
35
|
-
|
|
36
|
-
## Step 2: recover the commit the drift step reads
|
|
37
|
-
|
|
38
|
-
Item 2 runs `canon claude skills drift <ref>` against the commit this session started from, and nothing on the machine records that commit. Estimate how long the session has run, round the duration up, and read the ref item 3 recovers:
|
|
30
|
+
Item 1 of `## Writing one` runs `canon claude skills drift <ref>` against the commit this session started from, and nothing on the machine records that commit. Estimate how long the session has run, round the duration up, and read the ref item 2 recovers:
|
|
39
31
|
|
|
40
32
|
```bash
|
|
41
33
|
git log -1 --format=%H --before='<duration> ago'
|
|
@@ -45,13 +37,13 @@ Round up rather than down. A ref older than the oldest load over-reports, and co
|
|
|
45
37
|
|
|
46
38
|
Record what the verb names under `## Standing cautions`. A refusal is the boundary of what the verb can read rather than a fault, since it answers where the working directory carries `claude/skills/` with history behind it and refuses in a project consuming the plugin from a cache. Record the boundary the verb reported and keep writing, rather than the one it looked likely to report.
|
|
47
39
|
|
|
48
|
-
## Step
|
|
40
|
+
## Step 2: write the map
|
|
49
41
|
|
|
50
|
-
Follow items
|
|
42
|
+
Follow items 3 through 5. Write only what a compaction destroys and no other artifact already carries, and cite a commit, a task, or a file and line for every claim.
|
|
51
43
|
|
|
52
44
|
The file sits at the main worktree root and is written whole every time, so send it out as a heredoc, routed the way `session-worktree` states.
|
|
53
45
|
|
|
54
|
-
## Step
|
|
46
|
+
## Step 3: extend it only where a role is held
|
|
55
47
|
|
|
56
48
|
`## Extending it` governs a section added over the core three. Add one only when this session holds the role and the surface owning that role states the section, since a section the writer cannot fill teaches its reader to skip the file. A session holding no role writes the core three and stops.
|
|
57
49
|
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Session map reference
|
|
3
3
|
description: Filename and location, the sections a handoff carries, the write and read procedures, and how a role extends it
|
|
4
|
-
paths:
|
|
5
|
-
- '.canon/tasks/session-*.md'
|
|
6
|
-
rule:
|
|
7
|
-
- 'Follow this rule rather than the tasks rule for a `session-` file. A handoff is not a task and carries neither `## Outcomes` nor `## Findings`.'
|
|
8
4
|
---
|
|
9
5
|
|
|
10
6
|
# Session map reference
|
|
@@ -13,6 +9,18 @@ Applies to `.canon/tasks/session-<slug>.md`. A session writes one before a compa
|
|
|
13
9
|
|
|
14
10
|
Any session writes one. The role a session holds decides which sections it adds on top of the core, never whether it may write at all.
|
|
15
11
|
|
|
12
|
+
## Contents
|
|
13
|
+
|
|
14
|
+
- [Scope](#scope)
|
|
15
|
+
- [What a working session map looks like](#what-a-working-session-map-looks-like)
|
|
16
|
+
- [Filename and location](#filename-and-location)
|
|
17
|
+
- [Frontmatter](#frontmatter)
|
|
18
|
+
- [Sections](#sections)
|
|
19
|
+
- [Writing one](#writing-one)
|
|
20
|
+
- [Reading one back](#reading-one-back)
|
|
21
|
+
- [Extending it](#extending-it)
|
|
22
|
+
- [Template](#template)
|
|
23
|
+
|
|
16
24
|
## Scope
|
|
17
25
|
|
|
18
26
|
Governs the pre-compaction handoff at `.canon/tasks/session-<slug>.md`: its filename, its sections, what a writer puts in each, and how a reader picks one up.
|
|
@@ -23,7 +31,6 @@ Does not govern:
|
|
|
23
31
|
- The transform from a branch name to the slug in the filename: `slug.md`
|
|
24
32
|
- The role-specific sections a caller adds over the core, which belong to that caller
|
|
25
33
|
- The note a plain session writes at `.canon/compact/<slug>.md`, whose shape lives in the `session-compact` skill's own reference
|
|
26
|
-
- Which memories a session captures before writing, which is the capture surface's own subject
|
|
27
34
|
|
|
28
35
|
## What a working session map looks like
|
|
29
36
|
|
|
@@ -63,12 +70,11 @@ Add a section only for content that fits none of the three and would otherwise b
|
|
|
63
70
|
|
|
64
71
|
The `session-map` skill is the invocable route onto this procedure and holds no role, so a session reaching for a handoff without knowing this document exists still lands here. A session that arrives at this document directly follows the steps below unchanged.
|
|
65
72
|
|
|
66
|
-
1.
|
|
67
|
-
2.
|
|
68
|
-
3.
|
|
69
|
-
4.
|
|
70
|
-
5.
|
|
71
|
-
6. Fill a section from reasoning the session actually holds. A session with no cross-feature picture that fills `## State` from what is already in git has written a summary of the tree, which the reader can produce faster than they can read it.
|
|
73
|
+
1. Run `canon claude skills drift <the commit this session started from>` and record what it names under `## Standing cautions`. A skill body enters a session once and re-invoking the skill does not re-read the file, so the drift is worst at exactly this moment and a name here is a body the session has been following out of date. Recording a name is not acting on it, and the verb misses a body this session edited and has not committed. This step belongs to session length rather than to any role, so every writer runs it, and a refusal names the boundary of what the verb can read rather than a fault.
|
|
74
|
+
2. Recover that commit from how long the session has been running with `git log -1 --format=%H --before='<duration> ago'`, rounding the duration up rather than down. Nothing on the machine records it. A ref older than the oldest load over-reports, and confirming a name costs one read of the body, so the generous end is the safe one and a guess at the exact commit is not worth making. An empty result means no commit predates the window, so take the oldest commit the history holds and say which of the two the ref came from.
|
|
75
|
+
3. Write only what a compaction destroys and no other artifact already carries. The board holds the ordering and what each task waits on, a task file holds its own findings, and a measurement folder holds its track.
|
|
76
|
+
4. Cite a commit, a task, or a file and line for every claim, so the next session can tell a read from a recall.
|
|
77
|
+
5. Fill a section from reasoning the session actually holds. A session with no cross-feature picture that fills `## State` from what is already in git has written a summary of the tree, which the reader can produce faster than they can read it.
|
|
72
78
|
|
|
73
79
|
Do not restate the board, and do not summarize the work that shipped, since version control already carries it.
|
|
74
80
|
|
|
@@ -24,7 +24,7 @@ makes the firing survive.
|
|
|
24
24
|
The first draft of this plan closed the gap with a paragraph drafted inline,
|
|
25
25
|
once inside `role-worker` and once inside `role-planner`. The operator overrode
|
|
26
26
|
that call: two bodies carrying identical protocol text is the shared-surface
|
|
27
|
-
case
|
|
27
|
+
case, since a later
|
|
28
28
|
fix reaching one copy and not the other diverges silently.
|
|
29
29
|
|
|
30
30
|
Neither attempt named who the relay is from. A message an operator relays by
|
|
@@ -9,22 +9,21 @@ description: Why resuming reads the handoff before the board, reads an index bef
|
|
|
9
9
|
|
|
10
10
|
Without this skill, a session picking up old work reconstructs state from the git log, which records what shipped and not what is queued, so finished work reads as pending and the actual next item goes unmentioned. The alternative failure is worse for a different reason. A session that reads every task file and every plan to be thorough spends the context the work needs before the work starts, and the summary arrives in a session with no room left to act on it.
|
|
11
11
|
|
|
12
|
-
A compaction keeps conclusions and drops the reasoning that produced them, and the previous session can write that reasoning to a handoff before it goes. A resume that reads the board
|
|
12
|
+
A compaction keeps conclusions and drops the reasoning that produced them, and the previous session can write that reasoning to a handoff before it goes. A resume that reads the board and the plans alone walks past that file, so the one artifact written to survive the compaction reaches nobody and the next session re-derives what it holds.
|
|
13
13
|
|
|
14
14
|
The task index is a folder catalog rather than a task filter, so it carries a row for the ordering file and one for every handoff on the board. A session reporting each row as a backlog item queues work nobody filed, and the count grows with every session that ever wrote a handoff.
|
|
15
15
|
|
|
16
16
|
From a linked worktree the shared scratch folders resolve against the worktree rather than the main root, where they are empty. That reports no tracked work on a repository carrying a full backlog, and the report is indistinguishable from the true empty case.
|
|
17
17
|
|
|
18
|
-
A resume is a read, and a session that treats it as a cleanup pass offers to archive finished entries or
|
|
18
|
+
A resume is a read, and a session that treats it as a cleanup pass offers to archive finished entries or rewrite a plan it decided was stale. Both change tracked state on the strength of a summary the user has not confirmed yet.
|
|
19
19
|
|
|
20
20
|
## Must
|
|
21
21
|
|
|
22
22
|
- Read the newest handoff before the board, and report what it carries attributed to its writer
|
|
23
|
-
- Resolve the handoff, plans,
|
|
23
|
+
- Resolve the handoff, plans, and tasks folders at the main worktree root
|
|
24
24
|
- Read the task index before any individual task file, and open only the task files the summary needs
|
|
25
25
|
- Drop the board siblings from the index before reporting it as the backlog, since the catalog filters nothing and carries a row per handoff
|
|
26
26
|
- Preserve the index's order in the report, since the order is the priority
|
|
27
|
-
- Surface only the memory entries that inform the top item
|
|
28
27
|
- Close with one recommendation naming the first item and whether a plan backs it
|
|
29
28
|
|
|
30
29
|
## Must not
|
|
@@ -33,11 +32,10 @@ A resume is a read, and a session that treats it as a cleanup pass offers to arc
|
|
|
33
32
|
- Report the absence of a handoff, which is the common case and would train a reader to skip the line on the run where one exists
|
|
34
33
|
- Restate a handoff's counts, sizes, or costs as current. Each was true when written.
|
|
35
34
|
- Offer to remove, archive, or reorder an entry. Resume reports and does not mutate.
|
|
36
|
-
- Update memory, which changes when a recorded fact becomes wrong rather than on a resume
|
|
37
35
|
|
|
38
36
|
## Guards
|
|
39
37
|
|
|
40
|
-
-
|
|
38
|
+
- Every surface absent or empty reports no tracked work and stops, rather than inventing a next step from the repository
|
|
41
39
|
- A handoff found beside an empty board recommends what the handoff leaves open, since the guard passes on the handoff alone and the recommendation has no backlog item to name
|
|
42
40
|
|
|
43
41
|
## Out of scope
|
|
@@ -9,18 +9,16 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
## Step 1: read tracked work
|
|
11
11
|
|
|
12
|
-
Resolve `.canon/plans/`, `.canon/
|
|
12
|
+
Resolve `.canon/plans/`, `.canon/compact/`, and `.canon/tasks/` at the main worktree root the way `session-worktree` does.
|
|
13
13
|
|
|
14
14
|
Read these in parallel, skipping any that do not exist:
|
|
15
15
|
|
|
16
|
-
- the newest `.canon/compact/*.md`, then the newest `.canon/tasks/session-*.md`: the handoff a previous session wrote before a compaction. The first is the note `session-compact` writes, and the second is the board-side map per `${CLAUDE_SKILL_DIR}
|
|
16
|
+
- the newest `.canon/compact/*.md`, then the newest `.canon/tasks/session-*.md`: the handoff a previous session wrote before a compaction. The first is the note `session-compact` writes, and the second is the board-side map per `${CLAUDE_SKILL_DIR}/../session-map/references/session.md`, which stays readable. Whichever exists leads the report rather than the reads, and both lead it when both exist.
|
|
17
17
|
- `.canon/tasks/index.md`: the folder catalog. Read this before any individual task file, and take the task list from it by dropping the `index`, `priority`, `backlog`, and `session-` rows, which are siblings rather than tasks.
|
|
18
18
|
- `.canon/plans/*.md`: execution detail for in-progress tasks
|
|
19
19
|
|
|
20
20
|
Then read only the task files the summary needs, typically the top one. Do not read the whole folder.
|
|
21
21
|
|
|
22
|
-
Once the top task is known, grep `.canon/memory/index.md` for two or three terms from its title and read at most three of the entries whose rows match. Never read the index whole, since a grown pen's index runs to hundreds of rows and the report shows three at most. With no top task, or no row matching, read no memory entry and say nothing about it.
|
|
23
|
-
|
|
24
22
|
Most projects carry no handoff. Say nothing about its absence, since a line reporting it every run trains a reader to skip the line on the run where a handoff exists.
|
|
25
23
|
|
|
26
24
|
If the handoff, task, and plan surfaces are all absent or empty, stop: `✅ No tracked work found. Start a new task.`
|
|
@@ -35,17 +33,13 @@ Output these sections, omitting the first when no handoff was found:
|
|
|
35
33
|
|
|
36
34
|
**Active plans:** one line per file in `.canon/plans/`, linking each to its task file in `.canon/tasks/`. Say "None" if empty.
|
|
37
35
|
|
|
38
|
-
**Relevant context:** the memory entries Step 1 matched to the top backlog item, three at most. Skip if none matched.
|
|
39
|
-
|
|
40
36
|
## Step 3: recommend
|
|
41
37
|
|
|
42
38
|
End with one line: `Start with: <first Up next item>` and note whether it has a linked plan.
|
|
43
39
|
|
|
44
40
|
When the board is empty and a handoff was found, name what the handoff leaves open instead: `Start with: <the open thread the handoff names>`. A recommendation slot filled with nothing reads as a failed run, and a handoff on an empty board is the shape a session leaves when it was reasoning rather than shipping.
|
|
45
41
|
|
|
46
|
-
Do not offer to remove entries. A completed task is archived out of `.canon/tasks/` when work ships. The git log is the authoritative record of shipped work. Plan files are archived per the lifecycle rule in `${CLAUDE_SKILL_DIR}
|
|
47
|
-
|
|
48
|
-
Memory is updated only when a recorded fact becomes wrong, never on resume. A domain fact reaches a session through `canon/context/`, which `memory-capture` routes to and the three-tier model loads on demand, so the memory folder read here is the residue no context entry owns.
|
|
42
|
+
Do not offer to remove entries. A completed task is archived out of `.canon/tasks/` when work ships. The git log is the authoritative record of shipped work. Plan files are archived per the lifecycle rule in `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan-lifecycle.md`.
|
|
49
43
|
|
|
50
44
|
## Writing the next one
|
|
51
45
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: session-worktree
|
|
3
|
-
description: Enters a Claude Code worktree at `.claude/worktrees/<name>/` with a name derived from the active plan or branch. Use when asked to "enter a worktree", "start a worktree", "work in a worktree", or at the plan-to-execute boundary after `/plan-feature`. Also use when an `Edit` or `Write` to a main-root file such as a plan, a task, or a
|
|
3
|
+
description: Enters a Claude Code worktree at `.claude/worktrees/<name>/` with a name derived from the active plan or branch. Use when asked to "enter a worktree", "start a worktree", "work in a worktree", or at the plan-to-execute boundary after `/plan-feature`. Also use when an `Edit` or `Write` to a main-root file such as a plan, a task, or a review report was refused for session isolation. Do NOT use to list, clean up, or rotate worktrees (use `git-worktree`).
|
|
4
4
|
metadata:
|
|
5
5
|
family: build
|
|
6
6
|
---
|
|
@@ -3,7 +3,7 @@ title: Main-root write routing
|
|
|
3
3
|
description: Which tools the isolation refusal covers, the route each kind of main-root write takes, the fallback when a heredoc is refused, and the index cost a shell write carries
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Shared session scratch, being `.canon/plans/`, `.canon/review/`,
|
|
6
|
+
Shared session scratch, being `.canon/plans/`, `.canon/review/`, and `.canon/tasks/`, lives at the main worktree root. Resolve that root with the first `worktree` entry of `git worktree list --porcelain`, falling back to `pwd` outside a git repository.
|
|
7
7
|
|
|
8
8
|
## The refusal
|
|
9
9
|
|
|
@@ -21,4 +21,4 @@ Shared session scratch, being `.canon/plans/`, `.canon/review/`, `.canon/memory/
|
|
|
21
21
|
|
|
22
22
|
## The index cost
|
|
23
23
|
|
|
24
|
-
A shell write skips every `PostToolUse` hook, since those match `Write|Edit|MultiEdit` and never fire on `Bash`. That costs nothing on `.canon/plans/` and `.canon/review/`, which no hook indexes, and costs the generated `index.md` on `.canon/tasks
|
|
24
|
+
A shell write skips every `PostToolUse` hook, since those match `Write|Edit|MultiEdit` and never fire on `Bash`. That costs nothing on `.canon/plans/` and `.canon/review/`, which no hook indexes, and costs the generated `index.md` on `.canon/tasks/`. Regenerate positionally after a shell write there, by an explicit `canon indexes regen` call, unless the verb that made the write already calls it, as `canon tasks archive` does.
|
|
@@ -51,5 +51,4 @@ A stated phase is also one a session can talk itself out of. The reasons it give
|
|
|
51
51
|
## Out of scope
|
|
52
52
|
|
|
53
53
|
- A typo fix and a cause already agreed on, where the phases cost more than they return
|
|
54
|
-
- Reviewing a change for defects it has not yet exhibited: `review-branch`
|
|
55
54
|
- Deciding whether the architecture should change, which the three-attempt stop hands to the user rather than answering
|
|
@@ -7,7 +7,7 @@ description: What the target check is for, the gap it closes, and the repairing
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a session landing in a target project decides for itself what to look at.
|
|
10
|
+
Without this skill, a session landing in a target project decides for itself what to look at. An orchestrator dispatches a worker into each target and gets a pull request out, and nothing told that worker what a target holds against what the toolkit ships, so a wave is only as good as whatever each session happened to examine. Four hand-driven repairs across two waves examined four different sets of surfaces and none of them read the same domain twice.
|
|
11
11
|
|
|
12
12
|
The second half of the gap is silence. A session that runs a verb the target's binary does not carry, or reads a report key that is absent, has no instruction telling it apart from a clean answer, so an unexamined domain reaches the reader as a domain that passed.
|
|
13
13
|
|
|
@@ -32,11 +32,11 @@ The second half of the gap is silence. A session that runs a verb the target's b
|
|
|
32
32
|
|
|
33
33
|
- `canon` absent from the path: stop, since no domain can be read
|
|
34
34
|
- No `.claude/` at the working root: stop and name the scaffold command, since nothing is installed to check
|
|
35
|
-
- The working root is the toolkit itself: stop and
|
|
35
|
+
- The working root is the toolkit itself: stop and ask the orchestrator for a worker per repository, since this skill reads what the toolkit installed into rather than the source
|
|
36
36
|
|
|
37
37
|
## Out of scope
|
|
38
38
|
|
|
39
39
|
- Document health, which asks a content question rather than a structural one and takes its own surface
|
|
40
40
|
- Repairing anything a section names. Each routes to the command or skill that owns it.
|
|
41
41
|
- A target's own routes, which `canon inventory` reports as a listing rather than a verdict and which is a fact about the project rather than about what the toolkit ships
|
|
42
|
-
- First-time scaffold, which is `target-setup
|
|
42
|
+
- First-time scaffold, which is `target-setup`
|
|
@@ -15,7 +15,7 @@ Six domains carry the report. Five answer from a verb that already exists and th
|
|
|
15
15
|
|
|
16
16
|
- `canon` absent from the path: stop. `❌ canon is not on PATH, so no domain can be read.`
|
|
17
17
|
- No `.claude/` directory at the working root: stop. `❌ No .claude/ here, so nothing is installed to check. Run canon init first.`
|
|
18
|
-
- A `claude/skills/` folder at the working root, with no leading dot: stop. `❌ This is the toolkit itself rather than a target.
|
|
18
|
+
- A `claude/skills/` folder at the working root, with no leading dot: stop. `❌ This is the toolkit itself rather than a target. Ask the orchestrator for a worker per repository to take a change out to the targets.` A target receives skills at `.claude/skills/` and authors none, so the spelling without the dot separates the source from what it installs into.
|
|
19
19
|
- Run every command under `CANON_NON_INTERACTIVE=1` and prompt at no point. Every caller in the near term is a worker a wave dispatched, with nobody present to answer, so the non-interactive path is the only path rather than a flag a caller remembers.
|
|
20
20
|
- Branch on each record's own fields rather than on an exit status. An operator's shell profile may wrap `canon` in a function whose status comes from a trailing command, which reports every refusal as success.
|
|
21
21
|
|
|
@@ -77,7 +77,7 @@ Read `seeds.entries` off the report. Each entry is `matching`, `stale`, `drifted
|
|
|
77
77
|
- Behind: anything else. Report `stale` and `missing` separately from `drifted`, which means the content matches no version the toolkit ever published, so the project wrote it.
|
|
78
78
|
- Unread: `historyUnavailable` set on `seeds`, which leaves every difference unattributed. Say so rather than reporting a file as untouched.
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Report a `stale` seed as safe to take whole and a `drifted` one as a hand merge against the toolkit copy, since a sync command would overwrite the project's edits.
|
|
81
81
|
|
|
82
82
|
A seed entry matching says the file's bytes match the shipped seed. It says nothing about whether the harness those files configure is wired, which is the next domain.
|
|
83
83
|
|
|
@@ -36,12 +36,12 @@ two copies could disagree with nothing comparing them.
|
|
|
36
36
|
|
|
37
37
|
## Must not
|
|
38
38
|
|
|
39
|
-
- Guard against clobbering an existing project's configs, which
|
|
39
|
+
- Guard against clobbering an existing project's configs, which `canon sync` covers on an existing project and `target-check` reports on
|
|
40
40
|
- Author a rule or a stack in the target project on the fly
|
|
41
41
|
- Generate a config the tooling stack ships as a golden file
|
|
42
42
|
- Install Claude Code plugins, which provision a machine rather than a project
|
|
43
43
|
- Fail an unattended scaffold on a server start, which is flaky enough to be a depth the operator asks for
|
|
44
|
-
- Survive as a skill nothing invokes but a person typing its name.
|
|
44
|
+
- Survive as a skill nothing invokes but a person typing its name. The target projects page names it as the scaffold step, so a later read finding no caller but the author has found a body that should have stayed a verb
|
|
45
45
|
|
|
46
46
|
## Guards
|
|
47
47
|
|
|
@@ -51,6 +51,6 @@ two copies could disagree with nothing comparing them.
|
|
|
51
51
|
|
|
52
52
|
## Out of scope
|
|
53
53
|
|
|
54
|
-
- An existing project's per-domain drift, which `
|
|
55
|
-
- Reaching
|
|
54
|
+
- An existing project's per-domain drift, which `target-check` reports
|
|
55
|
+
- Reaching the project's history, which `git-commit` owns
|
|
56
56
|
- Provisioning Claude Code plugins on a machine, which the `claude plugin` CLI does directly
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: target-setup
|
|
3
|
-
description: Gets a project onto the toolkit. Detects the stack, resolves per-domain arguments, previews the chain, runs `canon init`, then verifies at a stated depth and bootstraps the `index.md` system. Use when asked to "set up this project", "init this project", "bootstrap the toolkit", "install governance", "install gov rules", "set up indexes", "verify the scaffold", "run the smoke tests", or "one-shot install". Assumes the `canon` CLI is on PATH. Do NOT use on a project that already carries the toolkit,
|
|
3
|
+
description: Gets a project onto the toolkit. Detects the stack, resolves per-domain arguments, previews the chain, runs `canon init`, then verifies at a stated depth and bootstraps the `index.md` system. Use when asked to "set up this project", "init this project", "bootstrap the toolkit", "install governance", "install gov rules", "set up indexes", "verify the scaffold", "run the smoke tests", or "one-shot install". Assumes the `canon` CLI is on PATH. Do NOT use on a project that already carries the toolkit, or to report per-domain drift without repairing it, which is `target-check`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: setup
|
|
6
6
|
---
|
|
@@ -50,14 +50,14 @@ else. Do not pause for a separate confirmation.
|
|
|
50
50
|
## Scope
|
|
51
51
|
|
|
52
52
|
- This skill and `canon init` run once on a fresh scaffold, never on an existing project. They do not guard against clobbering existing configs. When tempted to add guards, mode switches, or an existing-project branch, stop. Extend the per-domain `canon <domain> install` or `canon sync` paths instead.
|
|
53
|
-
- The chain stops at the project edge. `
|
|
53
|
+
- The chain stops at the project edge. `git-commit` also ships, reaching the project's history, and does not run here.
|
|
54
54
|
- Claude Code plugins are a machine concern rather than a project one, so no phase here installs them. Install them with `claude plugin install <name> --scope user`, which applies in every project on the machine and is copied into none.
|
|
55
55
|
|
|
56
56
|
## Declined states
|
|
57
57
|
|
|
58
58
|
Three states reach this skill that the chain does not serve. Name the destination for each, so the refusal routes rather than ends. The first two stop the chain outright and the third runs it on a default the person may not want.
|
|
59
59
|
|
|
60
|
-
- **An existing project.** Stop and hand off to `
|
|
60
|
+
- **An existing project.** Stop and hand off to `target-check`, which reports what the target already carries before anything is repaired. This chain never reads that, so any per-domain install picked here is a guess against configs nobody read. The Scope bullet above names the same commands as the authoring alternative, and this is the destination a person takes.
|
|
61
61
|
- **An install wanting the `.claude/` folder alone.** Stop. Run `canon claude init` for the seed docs, then run the `indexes` phase over the project's own documentation folders. Neither needs the tooling sync the `install` phase runs.
|
|
62
62
|
- **A language the toolkit carries no stack for.** The chain still runs, on `base`, with the fallback marked in the preview. A project that wants none of what `base` carries declines there and takes the `gov` phase, which is language-neutral and installs rules without the `base` development dependencies the tooling layer would drop on it. Say so at the preview rather than resolving it here, since the fallback is a working default and only the person can say whether it fits.
|
|
63
63
|
|
|
@@ -67,7 +67,7 @@ folder is a Go or PHP root rather than a JavaScript one.
|
|
|
67
67
|
|
|
68
68
|
Read these once, from the repository root:
|
|
69
69
|
|
|
70
|
-
- `canon/REQUIREMENTS.md`
|
|
70
|
+
- `canon/REQUIREMENTS.md` if present
|
|
71
71
|
- Directory structure via `ls -1` of the project root and `src/` if present
|
|
72
72
|
|
|
73
73
|
## Resolve arguments
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
Owns the two operations that bring a task file into existence and take it out of the folder. `context-fold` edits the contents of a task that already exists, marking outcomes `[x]`. Do not mark outcomes here, and do not move a plan by hand: the archive carries it.
|
|
11
11
|
|
|
12
|
-
Read `${CLAUDE_SKILL_DIR}
|
|
12
|
+
Read `${CLAUDE_SKILL_DIR}/references/tasks.md` before writing any file. It holds the filename convention, the frontmatter contract, and the file format. Do not work them from memory.
|
|
13
13
|
|
|
14
14
|
## Guards
|
|
15
15
|
|
|
@@ -43,7 +43,7 @@ Do not derive the label from a version file. `${CLAUDE_SKILL_DIR}/../../standard
|
|
|
43
43
|
|
|
44
44
|
### Step 3: write the file
|
|
45
45
|
|
|
46
|
-
Write `.canon/tasks/vXX.Y-<slug>.md` under the claimed label, reading the file first if a session ever stubbed it, following the format in `${CLAUDE_SKILL_DIR}
|
|
46
|
+
Write `.canon/tasks/vXX.Y-<slug>.md` under the claimed label, reading the file first if a session ever stubbed it, following the format in `${CLAUDE_SKILL_DIR}/references/tasks.md`. Include a link line only when the file or folder it names exists. A link to a plan nobody has written yet is the broken pointer the archive rules exist to prevent.
|
|
47
47
|
|
|
48
48
|
Write `Plan:`, `Groundwork:`, and `Intake:` as markdown links relative to `.canon/tasks/`, as in `Plan: [feature-<slug>](../plans/feature-<slug>.md)`. Leave `Issue:` a bare `#NNN`. A task written in the older bare-path form still parses, so it costs the board a clickable line rather than an archive, but it leaves the board in two shapes for every reader after.
|
|
49
49
|
|
|
@@ -55,7 +55,7 @@ Write it immediately. Claude Code's tool permission dialog is the confirmation g
|
|
|
55
55
|
|
|
56
56
|
A task file with no row is a dropped task, so name the surface it lands on in the same pass that creates it. A task that would plausibly be planned within the next few waves takes a row under `## Needs a plan` in `.canon/tasks/priority.md`, positioned by where it sits against the rows already there, with the reason for that position in its `Waiting on` cell. Anything else takes a line in `.canon/tasks/backlog.md`, which is unordered and where in the file it goes means nothing.
|
|
57
57
|
|
|
58
|
-
The test and both file shapes are in `${CLAUDE_SKILL_DIR}
|
|
58
|
+
The test and both file shapes are in `${CLAUDE_SKILL_DIR}/references/board.md`.
|
|
59
59
|
|
|
60
60
|
Check the roster for a live orchestrator before writing either file. Read `canon sessions list --self --json` for this session's own `sessionId` and `name`, then read `canon sessions list --json` and match a row whose `repository` matches this session's own, whose `sessionId` differs from it, and whose `name` starts with `orchestrator-`. That is the convention every hand-launched controller on this machine currently uses, and it excludes every `worker-` and `planner-` session cleanly. Treat a refusal from either call the same as a roster read that failed.
|
|
61
61
|
|
|
@@ -71,7 +71,7 @@ Scan for work that has been decided and would otherwise be forgotten. Three orig
|
|
|
71
71
|
|
|
72
72
|
List `.canon/groundwork/` and run `gh issue list --state open` when a remote is configured, then grep the board for each track name and issue number. Report any with no task, one line each.
|
|
73
73
|
|
|
74
|
-
Read the dumps through `canon intake list --json`, which reports items, open, unread, and malformed per folder and owns the parse of the answer contract `${CLAUDE_SKILL_DIR}
|
|
74
|
+
Read the dumps through `canon intake list --json`, which reports items, open, unread, and malformed per folder and owns the parse of the answer contract `${CLAUDE_SKILL_DIR}/../plan-intake/references/intake.md` fixes. Then grep `.canon/tasks/`, `.canon/tasks/archive/`, and `.canon/tasks/declined/` for each folder slug. A dump with no live task is the ordinary shape of one already promoted and either shipped or declined, so a check reading the board by itself reports every settled folder as abandoned.
|
|
75
75
|
|
|
76
76
|
A dump is the stronger case for this scan rather than the weaker one. A track holds one question and stays visible, while a dump holds dozens of items whose verdicts were reached and then left with nothing carrying them forward.
|
|
77
77
|
|
|
@@ -40,7 +40,7 @@ On success the record carries `from`, `to`, `priorityRowRemoved`, and `indexRege
|
|
|
40
40
|
Each reason has one resolution and none of them is to archive around it:
|
|
41
41
|
|
|
42
42
|
- `open-outcomes`: the named outcomes are unmarked or genuinely open. Run `context-fold` when the work shipped and nothing marked it. Leave the task on the board when the outcome is real. When the work is being abandoned, cut it by striking the body, `- ~~<outcome>~~ <why>`, whatever the checkbox holds, so the board records what was dropped rather than meeting this refusal a second time.
|
|
43
|
-
- `ambiguous`: two tasks name one pull request, which is the misfile `${CLAUDE_SKILL_DIR}
|
|
43
|
+
- `ambiguous`: two tasks name one pull request, which is the misfile `${CLAUDE_SKILL_DIR}/references/tasks.md` rules out. Resolve the citation by hand, since no sweep repairs it.
|
|
44
44
|
- `earlier-slice`: the number is listed on the task but is not the last, so a later slice is still to merge. Leave the task on the board. Its last slice's merge archives it.
|
|
45
45
|
- `pending-branch`: a branch named in `detail` ticked an outcome before its own pull request number was recorded. Leave the task live, since that branch's merge archives it once `git-pr` records the number. When the operator decides a named branch was abandoned, archive by stem, which is the one case for it.
|
|
46
46
|
- `no-match`: the stem or number names nothing on the board. Check the name against the listed stems.
|
|
@@ -7,6 +7,15 @@ description: Readiness groups, row cells, and ordering for priority.md, the unor
|
|
|
7
7
|
|
|
8
8
|
Applies to `.canon/tasks/priority.md`, `.canon/tasks/backlog.md`, and `.canon/tasks/index.md`, the three files beside the tasks that say which one runs next. Update `priority.md` when a task is filed, planned, dispatched, or blocked, and `backlog.md` whenever the board is swept.
|
|
9
9
|
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [Scope](#scope)
|
|
13
|
+
- [What a working board looks like](#what-a-working-board-looks-like)
|
|
14
|
+
- [The files](#the-files)
|
|
15
|
+
- [Ordering](#ordering)
|
|
16
|
+
- [The backlog](#the-backlog)
|
|
17
|
+
- [Validation](#validation)
|
|
18
|
+
|
|
10
19
|
## Scope
|
|
11
20
|
|
|
12
21
|
Governs the board files under `.canon/tasks/`: the readiness groups and their columns in `priority.md`, row order and the reason each row states, the backlog beside it, and the generated index.
|
|
@@ -7,7 +7,7 @@ description: How task-board gathers the reason a task is decided against, runs c
|
|
|
7
7
|
|
|
8
8
|
The Decline mode of `task-board`. The session reads this file when the request names a task decided against.
|
|
9
9
|
|
|
10
|
-
Read `${CLAUDE_SKILL_DIR}
|
|
10
|
+
Read `${CLAUDE_SKILL_DIR}/references/tasks-decline.md` first. It holds the declined folder, the `Declined:` line, and what the move does to a plan and a board row.
|
|
11
11
|
|
|
12
12
|
A task decided against carries no `post-merge` hook of its own, so every decline request arrives here directly rather than through work the hook already did.
|
|
13
13
|
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Tasks reference
|
|
3
3
|
description: Folder layout, filename convention, file format, origin lines, and archiving for task files under .canon/tasks/
|
|
4
|
-
paths:
|
|
5
|
-
- '.canon/tasks/**'
|
|
6
|
-
rule:
|
|
7
|
-
- 'Follow the board standard for `priority.md` and `backlog.md`, their readiness groups, and row order. Read it with `canon standards board`.'
|
|
8
|
-
- 'Never hand-edit `.canon/tasks/index.md`. A hook regenerates it from sibling frontmatter.'
|
|
9
|
-
- 'Follow the task decline standard for a task decided against. Read it with `canon standards tasks-decline`.'
|
|
10
4
|
---
|
|
11
5
|
|
|
12
6
|
# Tasks reference
|
|
@@ -17,6 +11,18 @@ Update when a task starts, completes, or changes scope. When to open a task at a
|
|
|
17
11
|
|
|
18
12
|
The folder is gitignored. Board state changes when work ships rather than when a branch is written, so committing it would put a claim about the future into the diff of an unrelated pull request. The git log records what shipped.
|
|
19
13
|
|
|
14
|
+
## Contents
|
|
15
|
+
|
|
16
|
+
- [Scope](#scope)
|
|
17
|
+
- [Layout](#layout)
|
|
18
|
+
- [Filenames](#filenames)
|
|
19
|
+
- [Frontmatter](#frontmatter)
|
|
20
|
+
- [File format](#file-format)
|
|
21
|
+
- [Origin](#origin)
|
|
22
|
+
- [What goes in](#what-goes-in)
|
|
23
|
+
- [What does not go in](#what-does-not-go-in)
|
|
24
|
+
- [Archiving](#archiving)
|
|
25
|
+
|
|
20
26
|
## Scope
|
|
21
27
|
|
|
22
28
|
Governs the task files under `.canon/tasks/`: folder layout, filenames, frontmatter, file format, origin lines, and archiving.
|
|
@@ -27,7 +33,6 @@ Does not govern:
|
|
|
27
33
|
- Execution order, readiness groups, the backlog, and the generated index beside the tasks: `board.md`
|
|
28
34
|
- The plan file a task cites, its sections, and its answer contract: `plan.md`
|
|
29
35
|
- Phase-label format and which surfaces a label may appear on: `versioning.md`
|
|
30
|
-
- Architectural reasoning that outlives a task: `architecture.md`
|
|
31
36
|
- The pre-compaction handoff sitting in the folder, its filename and its sections: `session.md`
|
|
32
37
|
- When a project opens a task at all, which is project policy rather than a shape rule
|
|
33
38
|
|
|
@@ -154,7 +159,7 @@ The line is what lets a merge close its own task. `canon tasks archive --pull-re
|
|
|
154
159
|
|
|
155
160
|
- Class names, file paths, function names, or prop names in any entry or title
|
|
156
161
|
- Code-level steps or implementation detail. Behavioral specifics are fine.
|
|
157
|
-
- Architectural reasoning that outlives the task. A finding explains why this task is shaped as it is. A decision the system keeps after the task closes belongs in
|
|
162
|
+
- Architectural reasoning that outlives the task. A finding explains why this task is shaped as it is. A decision the system keeps after the task closes belongs in the context entry of the domain it constrains.
|
|
158
163
|
- Narrative of the session that produced the task. A finding states what constrains the task, so what was probed, what it cost, and who decided belongs in the groundwork folder the `Groundwork:` line names. A task with no groundwork folder cuts the narrative rather than relocating it, since the board is not the fallback destination for it.
|
|
159
164
|
- "In progress" or "Blocked" headings. Note status inline on the outcome instead.
|
|
160
165
|
- Sequencing rationale or which version is active. Why this task is planned before its neighbors goes on its row in `priority.md`, in the cell that already carries what it is waiting on. Rationale wider than one row has no home at all, so cut it rather than filing it here.
|