@erclx/canon 5.35.0 → 5.37.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 +11 -11
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/SKILL.md +6 -0
- package/claude/skills/backlog-triage/SKILL.md +7 -7
- package/claude/skills/build-in-slices/SKILL.md +6 -0
- package/claude/skills/build-in-slices/references/adopted.md +3 -0
- package/claude/skills/canon-cli/REQUIREMENT.md +2 -2
- package/claude/skills/canon-cli/SKILL.md +5 -1
- package/claude/skills/canon-feedback/SKILL.md +5 -0
- package/claude/skills/canon-feedback-triage/SKILL.md +3 -0
- package/claude/skills/canvas-board/REQUIREMENT.md +1 -1
- package/claude/skills/canvas-board/SKILL.md +5 -2
- package/claude/skills/canvas-board/references/canvas.md +12 -0
- package/claude/skills/canvas-board/references/design.md +53 -36
- package/claude/skills/ci-workflow/SKILL.md +5 -0
- package/claude/skills/code-craft/SKILL.md +6 -0
- package/claude/skills/codebase-layout/REQUIREMENT.md +1 -1
- package/claude/skills/codebase-layout/SKILL.md +2 -2
- package/claude/skills/context-fold/references/context.md +48 -34
- package/claude/skills/create-rule/REQUIREMENT.md +6 -8
- package/claude/skills/create-rule/SKILL.md +19 -17
- package/claude/skills/create-rule/references/rule.md +17 -23
- package/claude/skills/create-skill/SKILL.md +11 -2
- package/claude/skills/create-skill/references/skill-disclosure.md +26 -0
- package/claude/skills/create-skill/references/skill-paths.md +3 -0
- package/claude/skills/create-skill/references/skill-reference.md +12 -0
- package/claude/skills/create-skill/references/skill.md +26 -25
- package/claude/skills/deprecation-migration/SKILL.md +6 -0
- package/claude/skills/deprecation-migration/references/adopted.md +3 -0
- package/claude/skills/design-taste/REQUIREMENT.md +6 -6
- package/claude/skills/design-taste/SKILL.md +8 -2
- package/claude/skills/design-taste/references/craft.md +4 -1
- package/claude/skills/design-taste/references/preflight.md +18 -2
- package/claude/skills/design-taste/references/tells.md +1 -1
- package/claude/skills/docs-sync/references/docs.md +6 -0
- package/claude/skills/docs-sync/references/readme.md +15 -0
- package/claude/skills/draft-and-pick/SKILL.md +12 -0
- package/claude/skills/draft-doc/references/context.md +1 -1
- package/claude/skills/draft-doc/references/readme.md +3 -0
- package/claude/skills/draft-figure/references/mermaid.md +6 -0
- package/claude/skills/draft-identity/SKILL.md +3 -2
- package/claude/skills/draft-slides/SKILL.md +3 -0
- package/claude/skills/git-branch/references/branch.md +16 -11
- package/claude/skills/git-commit/references/commit.md +19 -11
- package/claude/skills/git-commit/references/versioning.md +9 -0
- package/claude/skills/git-issue/references/issue.md +12 -9
- package/claude/skills/git-pr/SKILL.md +5 -0
- package/claude/skills/git-pr/references/pr.md +24 -6
- package/claude/skills/git-ship/SKILL.md +3 -0
- package/claude/skills/git-split/SKILL.md +6 -0
- package/claude/skills/git-stage/SKILL.md +3 -0
- package/claude/skills/git-worktree/SKILL.md +6 -6
- package/claude/skills/markdown-craft/references/markdown.md +27 -8
- package/claude/skills/plan-feature/SKILL.md +10 -1
- package/claude/skills/plan-feature/references/plan.md +20 -8
- package/claude/skills/plan-groundwork/SKILL.md +6 -0
- package/claude/skills/plan-groundwork/references/groundwork.md +10 -7
- package/claude/skills/plan-intake/references/intake.md +6 -6
- package/claude/skills/read-frames/SKILL.md +3 -0
- package/claude/skills/review-craft/SKILL.md +3 -0
- package/claude/skills/review-craft/references/ui.md +1 -1
- package/claude/skills/review-ui/SKILL.md +6 -3
- package/claude/skills/role-orchestrator/SKILL.md +3 -0
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +7 -4
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +3 -0
- package/claude/skills/role-planner/SKILL.md +3 -0
- package/claude/skills/role-worker/SKILL.md +12 -0
- package/claude/skills/search-craft/SKILL.md +3 -0
- package/claude/skills/systematic-debugging/SKILL.md +6 -0
- package/claude/skills/target-check/references/domains.md +5 -0
- package/claude/skills/target-setup/SKILL.md +5 -0
- package/claude/skills/task-board/references/tasks.md +9 -6
- package/claude/skills/task-complete/references/archive.md +3 -0
- package/claude/skills/teach-workspace/SKILL.md +3 -0
- package/claude/skills/teach-workspace/references/glossary.md +3 -0
- package/claude/skills/teach-workspace/references/lesson-build.md +3 -0
- package/claude/skills/teach-workspace/references/lesson-craft.md +3 -0
- package/claude/skills/teach-workspace/references/teach.md +8 -8
- package/claude/skills/test-craft/SKILL.md +7 -2
- package/claude/skills/ux-audit/REQUIREMENT.md +1 -1
- package/claude/skills/ux-audit/SKILL.md +2 -2
- package/claude/skills/ux-measure/REQUIREMENT.md +1 -1
- package/claude/skills/video-craft/SKILL.md +6 -0
- package/claude/skills/write-human/SKILL.md +9 -0
- package/claude/skills/write-human/references/machine-tells.md +12 -0
- package/docs/agents/capture.md +2 -0
- package/docs/agents/commands.md +59 -56
- package/docs/agents/comments.md +1 -1
- package/docs/agents/context-audit-checks.md +6 -0
- package/docs/agents/context-audit.md +8 -8
- package/docs/agents/context-classify.md +2 -0
- package/docs/agents/drift-surfaces.md +5 -5
- package/docs/agents/gate.md +6 -7
- package/docs/agents/gov-detect.md +1 -1
- package/docs/agents/index.md +2 -2
- package/docs/agents/install-and-sync.md +6 -6
- package/docs/agents/markdown-audit-weight.md +11 -3
- package/docs/agents/markdown-audit.md +14 -2
- package/docs/agents/output-shape.md +1 -1
- package/docs/agents/overview.md +2 -2
- package/docs/agents/pr-frames.md +17 -3
- package/docs/agents/rule-citations.md +5 -10
- package/docs/agents/scripting.md +1 -1
- package/docs/agents/sessions-transfer.md +8 -6
- package/docs/agents/skills-audit.md +9 -1
- package/docs/target/projects.md +2 -2
- package/docs/target/scenarios.md +5 -5
- package/docs/target/standards-moved.md +20 -18
- package/docs/workflow/ai-workflow.md +4 -1
- package/docs/workflow/visual-design-workflow.md +8 -3
- package/governance/detect.toml +32 -32
- package/governance/renames.toml +44 -0
- package/governance/rules/lib/{305-e2e-reliability.md → e2e-reliability.md} +1 -1
- package/governance/rules/lib/{306-test-scope.md → test-scope.md} +2 -2
- package/governance/rules/ui/{410-a11y.md → a11y.md} +1 -1
- package/governance/rules/ui/{440-surface-capture.md → surface-capture.md} +3 -3
- package/governance/stacks/base.toml +6 -6
- package/governance/stacks/go.toml +1 -1
- package/governance/stacks/node.toml +1 -1
- package/governance/stacks/php.toml +1 -1
- package/governance/stacks/python.toml +1 -1
- package/package.json +2 -2
- package/scripts/core/install-check.sh +2 -7
- package/src/capture/frame-values.ts +3 -6
- package/src/cli/help-all.ts +96 -0
- package/src/cli/help.ts +28 -27
- package/src/cli.ts +8 -1
- package/src/commands/claude.ts +29 -0
- package/src/commands/context.ts +29 -4
- package/src/commands/design.ts +22 -1
- package/src/commands/gate.ts +1 -8
- package/src/commands/gov.ts +25 -3
- package/src/commands/init.ts +10 -1
- package/src/commands/markdown.ts +148 -3
- package/src/commands/pr.ts +17 -10
- package/src/commands/records.ts +1 -1
- package/src/commands/sync.ts +11 -0
- package/src/commands/tooling.ts +8 -0
- package/src/context/audit.ts +83 -0
- package/src/context/classify/prompts.ts +6 -1
- package/src/context/gate.ts +6 -3
- package/src/design/budget.ts +14 -10
- package/src/design/document.ts +5 -5
- package/src/design/parse.ts +21 -4
- package/src/design/render.ts +3 -3
- package/src/gate/measures.ts +187 -2
- package/src/gate/sequencer.ts +0 -4
- package/src/gate/stages.ts +32 -27
- package/src/git/files.ts +30 -0
- package/src/gov/adapter.ts +2 -2
- package/src/gov/citations.ts +10 -33
- package/src/gov/install.ts +2 -2
- package/src/gov/list.ts +1 -1
- package/src/gov/payload.ts +1 -1
- package/src/gov/stacks.ts +4 -4
- package/src/inventory/subjects.ts +1 -1
- package/src/markdown/ceiling.ts +6 -1
- package/src/markdown/colons.ts +86 -0
- package/src/markdown/gate.ts +25 -0
- package/src/markdown/growth.ts +43 -0
- package/src/markdown/heading-case.ts +74 -0
- package/src/markdown/stacks.ts +74 -0
- package/src/markdown/structure.ts +72 -4
- package/src/migrate/rule-layout.ts +12 -12
- package/src/pr/frames.ts +66 -1
- package/src/shipped/references.ts +14 -14
- package/src/sync/check.ts +23 -23
- package/src/sync/copy.ts +4 -5
- package/tooling/astro/configs/tsconfig.json +1 -1
- package/tooling/astro/manifest.toml +0 -1
- package/tooling/astro/reference.md +2 -10
- package/tooling/base/configs/scripts/verify.json +1 -1
- package/tooling/base/configs/scripts/verify.ts +23 -13
- package/tooling/base/manifest.toml +6 -5
- package/tooling/base/reference.md +15 -22
- package/tooling/base/seeds/.github/workflows/verify.yml +0 -6
- package/tooling/base/seeds/.lintstagedrc +1 -2
- package/tooling/base/seeds/canon/context/ci.md +7 -8
- package/tooling/base/seeds/canon/context/development.md +10 -10
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +9 -1
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +27 -2
- package/tooling/claude/seeds/CLAUDE.md +1 -1
- package/tooling/claude/seeds/canon/DESIGN.md +24 -37
- package/tooling/shell/configs/.github/workflows/shell.yml +30 -0
- package/tooling/shell/manifest.toml +12 -0
- package/tooling/shell/reference.md +46 -0
- package/tooling/vite-react/configs/tsconfig.json +1 -1
- package/tooling/vite-react/configs/vitest.config.ts +1 -1
- package/tooling/vite-react/manifest.toml +0 -1
- package/tooling/vite-react/reference.md +2 -10
- package/tooling/web/configs/.github/workflows/readme-screenshot.yml +3 -5
- package/tooling/web/configs/.github/workflows/verify.yml +0 -6
- package/tooling/web/configs/src/test/setup.ts +1 -1
- package/tooling/web/manifest.toml +4 -4
- package/tooling/web/reference.md +4 -4
- package/tooling/base/configs/scripts/verify.sh +0 -2
- /package/governance/rules/canon/{606-git.md → git.md} +0 -0
- /package/governance/rules/canon/{611-indexes.md → indexes.md} +0 -0
- /package/governance/rules/canon/{604-scratch.md → scratch.md} +0 -0
- /package/governance/rules/canon/{602-tasks.md → task-scope.md} +0 -0
- /package/governance/rules/canon/{605-worktrees.md → worktrees.md} +0 -0
- /package/governance/rules/claude/{566-output.md → output.md} +0 -0
- /package/governance/rules/code/{000-code.md → routing.md} +0 -0
- /package/governance/rules/code/{010-testing.md → testing.md} +0 -0
- /package/governance/rules/framework/{210-astro.md → astro.md} +0 -0
- /package/governance/rules/framework/{220-fastapi.md → fastapi.md} +0 -0
- /package/governance/rules/framework/{230-nextjs.md → nextjs.md} +0 -0
- /package/governance/rules/framework/{200-react.md → react.md} +0 -0
- /package/governance/rules/framework/{260-shadcn.md → shadcn.md} +0 -0
- /package/governance/rules/framework/{250-tailwind.md → tailwind.md} +0 -0
- /package/governance/rules/lang/{130-go.md → go.md} +0 -0
- /package/governance/rules/lang/{140-php.md → php.md} +0 -0
- /package/governance/rules/lang/{110-python.md → python.md} +0 -0
- /package/governance/rules/lang/{100-typescript.md → typescript.md} +0 -0
- /package/governance/rules/lib/{370-database.md → database.md} +0 -0
- /package/governance/rules/lib/{340-pydantic.md → pydantic.md} +0 -0
- /package/governance/rules/lib/{360-security-server.md → security-server.md} +0 -0
- /package/governance/rules/lib/{350-security-web.md → security-web.md} +0 -0
- /package/governance/rules/lib/{320-tanstack-query.md → tanstack-query.md} +0 -0
- /package/governance/rules/lib/{335-testing-go.md → testing-go.md} +0 -0
- /package/governance/rules/lib/{336-testing-php.md → testing-php.md} +0 -0
- /package/governance/rules/lib/{330-testing-py.md → testing-py.md} +0 -0
- /package/governance/rules/lib/{300-testing-ts.md → testing-ts.md} +0 -0
- /package/governance/rules/lib/{310-zod.md → zod.md} +0 -0
- /package/governance/rules/tooling/{700-ci-workflow.md → ci-workflow.md} +0 -0
- /package/governance/rules/tooling/{790-code-comments.md → code-comments.md} +0 -0
- /package/governance/rules/tooling/{780-config-comments.md → config-comments.md} +0 -0
- /package/governance/rules/tooling/{775-dependencies.md → dependencies.md} +0 -0
- /package/governance/rules/ui/{480-canvas.md → canvas.md} +0 -0
- /package/governance/rules/ui/{400-ui.md → copy.md} +0 -0
- /package/governance/rules/ui/{460-design-taste.md → design-taste.md} +0 -0
- /package/governance/rules/ui/{420-forms.md → forms.md} +0 -0
- /package/governance/rules/ui/{465-interface-casing.md → interface-casing.md} +0 -0
- /package/governance/rules/ui/{450-link-behavior.md → link-behavior.md} +0 -0
- /package/governance/rules/ui/{470-motion.md → motion.md} +0 -0
- /package/governance/rules/ui/{430-ux-completeness.md → ux-completeness.md} +0 -0
- /package/tooling/{base → shell}/configs/.editorconfig +0 -0
- /package/tooling/{base → shell}/configs/.shellcheckrc +0 -0
|
@@ -55,13 +55,23 @@ A relative link's destination resolves against the filesystem, over the same cor
|
|
|
55
55
|
|
|
56
56
|
The placeholder exemption is the one live case the corpus needs. Every current instance is a genuine illustration rather than a literal path, and a marker-based override is available for the day a real one needs an exception instead.
|
|
57
57
|
|
|
58
|
+
### Colons and heading case
|
|
59
|
+
|
|
60
|
+
Two advisory measures report beside the bans and never fail a run.
|
|
61
|
+
|
|
62
|
+
The colon measure reports a colon followed by more text in a prose line, outside the label position. A list item's first colon, a bold or code span label, a line-final colon, a time, a URL, and anything inside a code span or a link are left alone. A heading, a table row, and a fenced line are skipped. Each finding carries the line, the column, the line's text, and the word before the colon as `lead` under `colons` in the `--json` entry.
|
|
63
|
+
|
|
64
|
+
The heading-case measure reports a heading or a frontmatter `title` with a capitalized word after its first, outside code spans and all-caps tokens, under `headingCase`. A proper noun reports as well and is left as it is.
|
|
65
|
+
|
|
66
|
+
`CHANGELOG.md` is exempt from both, since the release tool writes its headings.
|
|
67
|
+
|
|
58
68
|
### Weight, cadence, and length
|
|
59
69
|
|
|
60
|
-
Bullet and paragraph weight, run depth, the two cadence numbers, and the document length ceiling are each a judgment a reader settles rather than a fact a scan settles. What each measures, the samples behind its checkpoint, and why none of them gates are in `markdown-audit-weight.md`.
|
|
70
|
+
Bullet and paragraph weight, bullet stacks, run depth, the two cadence numbers, and the document length ceiling are each a judgment a reader settles rather than a fact a scan settles. What each measures, the samples behind its checkpoint, and why none of them gates are in `markdown-audit-weight.md`.
|
|
61
71
|
|
|
62
72
|
## Exit codes
|
|
63
73
|
|
|
64
|
-
Exit codes are `0` for a completed run with no gating finding, `1` for a refusal, `2` for a ban hit or a dead relative link, and `3` for a shipped ban set that arrived empty. A banned character and a relative link resolving to nothing on disk each fail the run, both facts a scan settles rather than a reader judging. Bullet, paragraph, and depth weight are judgments a reader settles, and cadence is a distribution whose healthy range moves with the surface, so all four report under every code. Length reports the same way, since the audit also runs on a plan kept out of version control, and the Document ceiling stage in `canon gate run` owns that verdict instead.
|
|
74
|
+
Exit codes are `0` for a completed run with no gating finding, `1` for a refusal, `2` for a ban hit or a dead relative link, and `3` for a shipped ban set that arrived empty. A banned character and a relative link resolving to nothing on disk each fail the run, both facts a scan settles rather than a reader judging. Bullet, paragraph, and depth weight are judgments a reader settles, and cadence is a distribution whose healthy range moves with the surface, so all four report under every code. A bullet stack, a run of more than 5 plain bullets, reports the same way, and the `bullet-stacks` stage in `canon gate run` owns its verdict. Length reports the same way, since the audit also runs on a plan kept out of version control, and the Document ceiling stage in `canon gate run` owns that verdict instead.
|
|
65
75
|
|
|
66
76
|
`3` is separate from `1` because the two want different responses from a caller. A refusal means no corpus was built, and the `Markdown bans` stage in `canon gate run` is right to report it as unmeasured rather than as a pass. An empty set means the corpus was walked and nothing was looked for, so that stage fails the push on `3` rather than skipping.
|
|
67
77
|
|
|
@@ -95,6 +105,8 @@ The target push stage excludes `CHANGELOG.md`, unlike every other surface here.
|
|
|
95
105
|
|
|
96
106
|
The hook prefers a checkout's own `src/cli.ts` over a globally installed binary, so it and the push stage read one build. A published binary lags a branch by whatever has not been released, which would put a ban kind added on the branch into the push and not into the edit. It reads its findings out of the `--json` record rather than off the exit code, so an older binary still reports where the fallback applies. It reads `bans.emptySets` out of the same record, so a set the verb shipped empty reaches the author as a check narrowed to what it could measure rather than as a clean pass.
|
|
97
107
|
|
|
108
|
+
It also relays the two advisory measures from the same record. A heading finding reports for the whole file, and a colon finding reports only where the word before the colon and the colon appear in the text the write carried, so an edit is never asked to answer for a colon it left untouched.
|
|
109
|
+
|
|
98
110
|
That field replaced `bans.missingStandards`, which answered a standard resolving under none of three roots. The set ships with the package now, so the state it named cannot occur and the narrowed check has one cause left, a defect in the build. The hook keeps reading a field either way, since a reader cannot tell a narrowed check from a clean one without it.
|
|
99
111
|
|
|
100
112
|
Both hooks answer an absent record as well. A completed run always writes the record and a refusal writes none, so an empty one means the verb declined to measure rather than measured and found nothing. The verb needs a git repository to build its corpus and refuses without one, which is a project the seeded hook can be installed into, and reading the findings alone reported that as a clean file.
|
|
@@ -40,7 +40,7 @@ Rules:
|
|
|
40
40
|
└
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
Help skips the banner. The `Usage:` line sits directly on `├`. Help writes to stdout because `--help` is documentation, not runtime UI.
|
|
43
|
+
Help skips the banner. The `Usage:` line sits directly on `├`. Help writes to stdout because `--help` is documentation, not runtime UI. `--help --all` on a command prints each block unframed, one after another, and a help request naming an unknown subcommand, under a group that takes no operand of its own, writes its refusal to stderr and exits 1.
|
|
44
44
|
|
|
45
45
|
## JSON and `--names` modes
|
|
46
46
|
|
package/docs/agents/overview.md
CHANGED
|
@@ -11,7 +11,7 @@ This folder is an index of what an agent can run and how to run it cleanly from
|
|
|
11
11
|
|
|
12
12
|
## Invocation rules
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
`output-shape.md` holds the stream and exit contract. It applies to every command in this folder.
|
|
15
15
|
|
|
16
16
|
## Where to start
|
|
17
17
|
|
|
@@ -21,6 +21,6 @@ See `CLAUDE.md` design principles. They apply to every command in this folder.
|
|
|
21
21
|
|
|
22
22
|
## Related
|
|
23
23
|
|
|
24
|
-
- `CLAUDE.md`: project behaviors
|
|
24
|
+
- `CLAUDE.md`: project behaviors
|
|
25
25
|
- `.claude/skills/internal-*`: domain-scoped guidance for editing work, in the toolkit checkout only
|
|
26
26
|
- `docs/index.md`: full docs directory
|
package/docs/agents/pr-frames.md
CHANGED
|
@@ -8,7 +8,7 @@ description: How canon pr frames pushes a UI review frame to a never-merged bran
|
|
|
8
8
|
`canon pr frames` gives a review comment an image it can embed. `review-ui`
|
|
9
9
|
drives a pull request's checklist and captures a frame per box, and a frame
|
|
10
10
|
on the reviewer's disk resolves for nobody else. The verb pushes one frame to
|
|
11
|
-
the `canon
|
|
11
|
+
the `canon/frames` branch and returns a link to its path there.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
canon pr frames 1341 --add frames/3.png --box 3 --head <sha> --pass 20261002T154450Z --json
|
|
@@ -19,7 +19,7 @@ canon pr frames --prune 30 --json
|
|
|
19
19
|
|
|
20
20
|
## What it writes
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
An add writes `refs/heads/canon/frames` and no other ref. Every call goes
|
|
23
23
|
through the GitHub git data API, being blobs, trees, commits, and that one ref,
|
|
24
24
|
so nothing is checked out, no worktree is entered, and neither `main` nor any
|
|
25
25
|
branch a pull request holds is touched. The branch never merges.
|
|
@@ -36,7 +36,7 @@ box therefore writes a new file rather than replacing the image an earlier
|
|
|
36
36
|
comment shows, which matters when a preview is minted again at one head.
|
|
37
37
|
|
|
38
38
|
`link` uses the same `blob/<ref>/<path>?raw=true` form as the evidence comment,
|
|
39
|
-
naming the `canon
|
|
39
|
+
naming the `canon/frames` branch rather than a commit. Every drop rewrites the
|
|
40
40
|
branch, and a link pinned to a commit would stop resolving for every other pull
|
|
41
41
|
request's frames once GitHub collects the commit it names. A path link lives
|
|
42
42
|
exactly as long as its file, so it survives every rewrite that drops another
|
|
@@ -97,6 +97,20 @@ than that many days ago, in a single rewrite. It keeps one still open, one
|
|
|
97
97
|
reopened after closing, one closed exactly the given days ago, and one whose
|
|
98
98
|
state could not be read, listing that last kind under `unread`.
|
|
99
99
|
|
|
100
|
+
## The legacy branch
|
|
101
|
+
|
|
102
|
+
Frames lived on `canon-frames` before the rename to `canon/frames`. An add
|
|
103
|
+
never writes it. `--drop` and `--prune` also run against it after the
|
|
104
|
+
current branch, remove only, and delete it once empty. `--prune` drains it
|
|
105
|
+
as its pull requests expire, and `--drop` clears one pull request at once.
|
|
106
|
+
The record carries `legacy: true` when that
|
|
107
|
+
pass changed the ref, and its `removed` list folds both branches in, naming
|
|
108
|
+
a pull request once. A missing or unreadable legacy ref never fails a run
|
|
109
|
+
the current branch finished.
|
|
110
|
+
|
|
111
|
+
A link minted before the rename points at `blob/canon-frames/...` and keeps
|
|
112
|
+
resolving until its pull request has been closed 30 days or `--drop` runs.
|
|
113
|
+
|
|
100
114
|
This repository runs `--prune 30` daily from
|
|
101
115
|
`.github/workflows/pr-frames-cleanup.yml`. A frame's file stays on the branch
|
|
102
116
|
until its own pull request has been closed for 30 days, so a link in a review
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Rule citations
|
|
3
|
-
description: Resolving every path a governance rule cites and every frontmatter glob the internal corpus declares, the
|
|
3
|
+
description: Resolving every path a governance rule cites and every frontmatter glob the internal corpus declares, the one form a citation is written in, the shapes that look like citations and are not, the two classes where an absent path is correct, why the glob half reads one corpus, and why this one gates
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Rule citations
|
|
@@ -28,14 +28,9 @@ Under `--json` the record holds stdout alone and the frame still renders on stde
|
|
|
28
28
|
|
|
29
29
|
Two files agreeing is what a drift check measures. Whether either one is right about the tree is a different question, and this is the stage that asks it.
|
|
30
30
|
|
|
31
|
-
## The
|
|
31
|
+
## The one form
|
|
32
32
|
|
|
33
|
-
A citation reaches a reader
|
|
34
|
-
|
|
35
|
-
| Form | Shape | Resolves against |
|
|
36
|
-
| --------- | ------------------------ | ---------------------------------- |
|
|
37
|
-
| `path` | a backticked path | the root |
|
|
38
|
-
| `sibling` | a bare `<nnn>-<slug>.md` | the folder the citing rule sits in |
|
|
33
|
+
A citation reaches a reader as a backticked path, reported under the form `path`, and it resolves against the root. A bare filename is never a citation, since with no folder around it nothing tells a rule from a convention such as `index.md`. A rule pointing at another rule writes its repository path.
|
|
39
34
|
|
|
40
35
|
A call to the retired standards verb is no form here. A rule holding one fails the shipped-references stage of `canon gate run`, which reads every shipped file for it.
|
|
41
36
|
|
|
@@ -46,7 +41,7 @@ A `path` is anchored on the whole backticked span rather than on a trailing patt
|
|
|
46
41
|
A rule body is full of backticked spans carrying a slash, and almost none of them names a file in this tree. The stage declines four shapes outright.
|
|
47
42
|
|
|
48
43
|
- A placeholder or glob segment describes a shape rather than naming a file: `canon/context/<domain>.md`, `app/**/route.ts`, `${CLAUDE_SKILL_DIR}/../references/<name>.md`.
|
|
49
|
-
- A bare filename names a convention: `route.ts`, `manifest.toml`, `components.json`, `playwright.config.ts`.
|
|
44
|
+
- A bare filename names a convention: `route.ts`, `manifest.toml`, `components.json`, `playwright.config.ts`.
|
|
50
45
|
- A span carrying no file extension is a folder or a module specifier: `src/pages/`, `next/font`, `try/except`, `react-hooks/set-state-in-effect`, `oven-sh/setup-bun@v2`, `@/lib/utils`.
|
|
51
46
|
- A fenced block displays a path rather than pointing at one.
|
|
52
47
|
|
|
@@ -70,7 +65,7 @@ A rule under `governance/rules/` installs into a target, and its `paths:` entrie
|
|
|
70
65
|
|
|
71
66
|
`internal/rules/` ships nowhere. The tree it governs is the tree present, which makes the question answerable, and all 14 of its globs across 7 rules match at the commit this shipped on.
|
|
72
67
|
|
|
73
|
-
What that leaves unreached is a glob that matches real files and still reaches none of the work it was scoped at. `governance/rules/lib/
|
|
68
|
+
What that leaves unreached is a glob that matches real files and still reaches none of the work it was scoped at. `governance/rules/lib/e2e-reliability.md` scoped itself at `e2e/*.ts` and `e2e/**/*.ts` and now reads `**/e2e/**/*.ts`. No probe in this repository is written under `e2e/`, so the rule asking a session to watch a new guard fail never fired for the session writing guards. Resolution is mechanical and reach is a judgment about where the work happens, so only the first is here.
|
|
74
69
|
|
|
75
70
|
## The exemption marker
|
|
76
71
|
|
package/docs/agents/scripting.md
CHANGED
|
@@ -79,7 +79,7 @@ CANON_NON_INTERACTIVE=1 canon tooling diff astro /path/to/project
|
|
|
79
79
|
CANON_NON_INTERACTIVE=1 canon tooling sync astro /path/to/project --write
|
|
80
80
|
|
|
81
81
|
# Install a governance stack (the stack argument is required headlessly)
|
|
82
|
-
CANON_NON_INTERACTIVE=1 canon gov install node --add
|
|
82
|
+
CANON_NON_INTERACTIVE=1 canon gov install node --add astro,shadcn /path/to/project
|
|
83
83
|
|
|
84
84
|
# Update installed governance rules, dropping a retired .claude/GOV.md
|
|
85
85
|
CANON_NON_INTERACTIVE=1 canon gov sync /path/to/project
|
|
@@ -67,12 +67,14 @@ The transcript and side folder land under `projects/<encoding>/`, where the enco
|
|
|
67
67
|
|
|
68
68
|
Exit codes: `0` the session was placed, `1` refused. The refusal carries one of these reasons:
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
| Reason | Meaning |
|
|
71
|
+
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `not-a-bundle` | the file is no gzip tarball, carries no manifest at format `1`, or names a path outside its own session, such as one climbing out with `..` or an absolute one |
|
|
73
|
+
| `other-repository` | the local `origin` differs from the one the bundle recorded |
|
|
74
|
+
| `exists` | the target transcript or side folder is already there, or any other project folder already holds a transcript for the id, which `--resume <id>` could reach first |
|
|
75
|
+
| `live-here` | the id is live in the local roster, so a second copy would fork it |
|
|
76
|
+
| `write-failed` | a write failed partway for a reason other than a copy appearing, such as a bundle carrying a file where it also needs a folder |
|
|
77
|
+
| `no-archive` | the running Bun predates `Bun.Archive` |
|
|
76
78
|
|
|
77
79
|
A write that fails partway removes every file this run placed and every folder it created before refusing, so a retry of the same bundle does not refuse on its own leftovers. Any path it could not remove is named in the message. A copy that appears between the existence check and the write refuses as `exists` on the same terms.
|
|
78
80
|
|
|
@@ -28,14 +28,22 @@ The audit reads the directory it is pointed at, defaulting to the cwd. `canon cl
|
|
|
28
28
|
|
|
29
29
|
Each check traces to a line in the standard.
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
### Folder and frontmatter
|
|
32
|
+
|
|
32
33
|
- Frontmatter `name` matching the folder name
|
|
33
34
|
- Frontmatter `description` present
|
|
34
35
|
- `description` under 1024 characters
|
|
35
36
|
- No `README.md` inside a skill folder
|
|
36
37
|
- Folder name in kebab-case
|
|
38
|
+
|
|
39
|
+
### Requirement and content
|
|
40
|
+
|
|
41
|
+
- `REQUIREMENT.md` present in every skill folder
|
|
37
42
|
- Each `REQUIREMENT.md` declaring `Gap` and `Must`, matched at any heading level
|
|
38
43
|
- No ISO date in `SKILL.md` or any file under `references/`, reported as `datedProvenance` in the JSON record's `findings`
|
|
44
|
+
|
|
45
|
+
### Practice, references, and family
|
|
46
|
+
|
|
39
47
|
- Each listed practice skill closing with `## Excuses and rebuttals`, `## Red flags`, and `## Before handing over`, and each skill on the wider ledger list carrying `references/adopted.md`, reported together as `practiceShape`
|
|
40
48
|
- Each file under `references/` running over 100 lines opening with a `## Contents` H2, reported as `referenceContents`
|
|
41
49
|
- Each skill under `claude/skills/` declaring a `metadata.family` that names a key in `checkpoints.families`, reported as `family`
|
package/docs/target/projects.md
CHANGED
|
@@ -72,7 +72,7 @@ Keep the `## Scripts` table in `canon/context/development.md` current as scripts
|
|
|
72
72
|
Scaffold installs tooling and seeds. It does not fill the planning docs or the design system. Complete those before the first feature session:
|
|
73
73
|
|
|
74
74
|
1. Fill `canon/REQUIREMENTS.md`. The seed asks for the problem in one line, then goals and non-goals, and the scope is yours to write. The seed states its own cap of 600 words, and `canon context audit` gates on it. Edit the number in the record to loosen it. A decision about how the project is built goes in the `canon/context/` entry of the domain it constrains.
|
|
75
|
-
2. For a UI project, write `canon/DESIGN.md` from the seed template, or work the direction out with `canon:canvas-board` and carry the pick in. Skip for non-UI projects.
|
|
75
|
+
2. For a UI project, write `canon/DESIGN.md` from the seed template and name the project's stylesheet in its lead, or work the direction out with `canon:canvas-board` and carry the pick in. Skip for non-UI projects.
|
|
76
76
|
3. Optionally invoke `canon:draft-figure` naming an architecture view, such as system context or components, and the document it belongs in. It draws the view from the context index, the folder layout, and the requirements and renders it to verify the layout, which downloads the Mermaid CLI on first use and takes about 15 seconds.
|
|
77
77
|
4. Start the feature loop. See [AI workflow](../workflow/ai-workflow.md) for the per-feature sequence.
|
|
78
78
|
|
|
@@ -88,7 +88,7 @@ Escalate for a project writing code. The `target-setup` skill reads `package.jso
|
|
|
88
88
|
|
|
89
89
|
In a monorepo the skill reads each folder holding a `package.json`, `pyproject.toml`, `go.mod`, `composer.json`, or `Cargo.toml` to depth two, skipping what git ignores. Each of those folders gets its own tooling stack and a `canon tooling sync <stack> <folder> --skip base` in the preview. Governance still installs once at the root, since a rule's `paths:` globs reach every subfolder, so a subfolder's language rules join the root install through `--add`.
|
|
90
90
|
|
|
91
|
-
The server-side security and persistence rules belong to no stack. `canon gov detect` proposes both from a server framework or database client in the manifest, which you confirm in the preview, or add them by hand with `--add
|
|
91
|
+
The server-side security and persistence rules belong to no stack. `canon gov detect` proposes both from a server framework or database client in the manifest, which you confirm in the preview, or add them by hand with `--add security-server,database`.
|
|
92
92
|
|
|
93
93
|
Markdown-heavy projects, CLI tools, docs sites, research notebooks, and scripting repos stay on `base`. Escalation is a ceiling move, not a default.
|
|
94
94
|
|
package/docs/target/scenarios.md
CHANGED
|
@@ -26,7 +26,7 @@ bun create vite my-app && cd my-app
|
|
|
26
26
|
claude
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Invoke `canon:target-setup`. The skill reads `package.json` and the Vite config, resolves tooling to `vite-react` and governance to `node`, proposes `
|
|
29
|
+
Invoke `canon:target-setup`. The skill reads `package.json` and the Vite config, resolves tooling to `vite-react` and governance to `node`, proposes `react` and the other rules its manifest matches as extras, and runs `canon init` with the resolved flags.
|
|
30
30
|
|
|
31
31
|
Ongoing maintenance:
|
|
32
32
|
|
|
@@ -34,22 +34,22 @@ Ongoing maintenance:
|
|
|
34
34
|
- Seed drift: merge by hand against the toolkit copy
|
|
35
35
|
- Catch-all sync: `canon sync .`
|
|
36
36
|
- Governance rule refresh only: `canon gov sync .`
|
|
37
|
-
- Layer a new rule on top, for example `
|
|
37
|
+
- Layer a new rule on top, for example `shadcn` after adopting shadcn: `canon gov install node --add shadcn .`
|
|
38
38
|
|
|
39
39
|
## Monorepo with multiple language roots
|
|
40
40
|
|
|
41
41
|
The repo root owns the shared `base` layer, and each language lives in its own subfolder.
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
canon init --stack node --add
|
|
44
|
+
canon init --stack node --add react .
|
|
45
45
|
canon tooling sync vite-react ./frontend --skip base --write
|
|
46
46
|
canon tooling sync python ./backend --skip base --write
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
`--skip base` drops the `base` layer from each subtree sync, so husky, prettier, commitlint, and CI stay single at the repo root. The one exception is base's verify runner, `scripts/verify.
|
|
49
|
+
`--skip base` drops the `base` layer from each subtree sync, so husky, prettier, commitlint, and CI stay single at the repo root. The one exception is base's verify runner, `scripts/verify.ts` and `scripts/verify.json`, which every subtree still receives so it can verify on its own. Without it, every subtree re-drops husky, and since git honors only one `core.hooksPath` the extra hook dirs silently break. Each subtree still gets its own framework configs (eslint, vitest, tsconfig, vite), and its own stack reference reads through `canon tooling reference <stack>`.
|
|
50
50
|
|
|
51
51
|
A sync whose target sits below the git root knows it is writing into a subfolder:
|
|
52
52
|
|
|
53
53
|
- It withholds `.github/`, since GitHub reads workflows only at the repository root, and names each withheld file. Run the subtree from a job in the root workflow instead, with `working-directory` set to the subtree path the sync prints, such as `working-directory: frontend`.
|
|
54
54
|
- It installs no dependencies and adds no scripts to a subtree without a `package.json`. It names what it skipped and ends on `run 'bun init' in <path>, then sync again`.
|
|
55
|
-
- The subtree carries no `check` script, since that lives in the root's base layer, so run
|
|
55
|
+
- The subtree carries no `check` script, since that lives in the root's base layer, so run `bun scripts/verify.ts` there. It skips the format phase a subtree does not declare, since the root runs them, and still fails on a missing lint, typecheck, or test script, the phases its stack's `scripts/verify.json` requires.
|
|
@@ -10,23 +10,25 @@ category: Agent surface
|
|
|
10
10
|
|
|
11
11
|
Each standard now lives at `references/<name>.md` in the skill that owns it. Load that skill and read the reference it names:
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
13
|
+
| Skill | Standards |
|
|
14
|
+
| ----------------- | ------------------------------------------------------------- |
|
|
15
|
+
| `task-board` | `board`, `tasks`, `tasks-decline` |
|
|
16
|
+
| `context-fold` | `context` |
|
|
17
|
+
| `canvas-board` | `canvas`, `design` |
|
|
18
|
+
| `docs-sync` | `docs`, `readme` |
|
|
19
|
+
| `draft-figure` | `figures`, `mermaid` |
|
|
20
|
+
| `create-rule` | `rule` |
|
|
21
|
+
| `create-skill` | `skill`, `skill-paths`, `skill-practice`, `skill-requirement` |
|
|
22
|
+
| `git-branch` | `branch`, `slug` |
|
|
23
|
+
| `git-commit` | `commit`, `versioning` |
|
|
24
|
+
| `git-pr` | `pr`, `publish` |
|
|
25
|
+
| `markdown-craft` | `markdown` |
|
|
26
|
+
| `teach-workspace` | `glossary`, `teach` |
|
|
27
|
+
| `plan-groundwork` | `groundwork`, `groundwork-spikes` |
|
|
28
|
+
| `plan-intake` | `intake` |
|
|
29
|
+
| `plan-feature` | `plan`, `plan-lifecycle` |
|
|
30
|
+
| `draft-ready` | `ready` |
|
|
31
|
+
| `draft-doc` | `requirements`, `wiki` |
|
|
32
|
+
| `session-map` | `session` |
|
|
31
33
|
|
|
32
34
|
One name moved under a new filename. `standard`, the shape of a standard itself, became `skill-reference.md` in `create-skill`, since the toolkit no longer ships a standards folder to hold one.
|
|
@@ -17,7 +17,7 @@ Project docs split across three roots at the project root. What the project auth
|
|
|
17
17
|
```plaintext
|
|
18
18
|
canon/
|
|
19
19
|
├── REQUIREMENTS.md ← problem, goals, non-goals
|
|
20
|
-
├── DESIGN.md ← visual intent
|
|
20
|
+
├── DESIGN.md ← visual intent, pointing at the stylesheet (UI projects)
|
|
21
21
|
└── context/ ← per-domain narrative loaded on demand via index.md
|
|
22
22
|
|
|
23
23
|
.claude/
|
|
@@ -52,6 +52,9 @@ Work in Claude Code directly. It reads `CLAUDE.md` automatically and has full fi
|
|
|
52
52
|
- When the input is a pile of findings rather than one feature, invoke `canon:plan-intake` first. It files the dump into `.canon/intake/<nn>-<slug>/`, one item per finding carrying a problem measured against the tree, a proposed fix, and a verdict, then names which items are plan-ready, which need measuring, and which are already settled.
|
|
53
53
|
- When the backlog has grown past what anyone rereads, invoke `canon:backlog-triage`. It files one item per backlog row into an intake folder, suggesting decline, archive, keep, or promote and leaning toward decline, and once `canon:plan-intake-answer` has taken your answers, a second run applies the approved verdicts through the task verbs.
|
|
54
54
|
- When the current state is unmeasured and more than one approach is live, invoke `canon:plan-groundwork` first. It opens a track folder under `.canon/groundwork/<nn>-<slug>/` and ends in a decision, which may be to do nothing. Skip it when the approach is already settled.
|
|
55
|
+
|
|
56
|
+
Then plan and build:
|
|
57
|
+
|
|
55
58
|
- Invoke `canon:plan-feature` to scan for code-level conflicts and ambiguities, confirm approach before proceeding
|
|
56
59
|
- Implement the feature, then Claude Code runs the commands defined in `CLAUDE.md`, fixes failures, and iterates until all pass
|
|
57
60
|
- For UI changes, invoke `canon:ui-checklist` to write what a reviewer has to look at and name any behavior shipping without a test
|
|
@@ -14,19 +14,19 @@ The tier framework sits alongside [Claude Design](../../wiki/claude/design.md),
|
|
|
14
14
|
|
|
15
15
|
## Tier 0: prose only
|
|
16
16
|
|
|
17
|
-
The default. `canon/DESIGN.md` holds visual intent
|
|
17
|
+
The default. `canon/DESIGN.md` holds visual intent, being one Overview paragraph, at most three one-line rules a section, and a table naming what each color and shape role is for. Its lead names the stylesheet the values live in, since a hand-typed copy of them drifts from the CSS.
|
|
18
18
|
|
|
19
19
|
Claude Code reads it and writes the implementation. Works for CLI tools, internal dashboards, admin panels, and backend-focused projects.
|
|
20
20
|
|
|
21
21
|
### Seed shape
|
|
22
22
|
|
|
23
|
-
The toolkit seed in `tooling/claude/seeds/canon/DESIGN.md` ships
|
|
23
|
+
The toolkit seed in `tooling/claude/seeds/canon/DESIGN.md` ships an intent template with a starting set of roles, each naming its custom property, and `claude/skills/canvas-board/references/design.md` carries the same tables under `## Template` with placeholder rows. The column headers are what the parser reads, so they stay verbatim in either, while the rows are the project's own. The seed's lead asks for the project's own stylesheet, such as `src/styles/tokens.css` or a Tailwind `@theme` block, and falls back to `.claude/design/project/` only when the project has none.
|
|
24
24
|
|
|
25
25
|
`canon design render` writes an HTML plus CSS preview to `.canon/tmp/render/design/` for eyeballing the current system without leaving Claude Code. See `canon/context/design/index.md`.
|
|
26
26
|
|
|
27
27
|
A project wanting a neutral starting point to override runs `canon design install`, which copies one stylesheet to `.claude/design/base.css` carrying an achromatic token set as custom properties and two components built on them. Greys run from near-black to near-white and the accent is monochrome, so the only palette the project renders is one it writes itself. That file is toolkit-owned and `canon design sync` refreshes it, so a project overrides a value in `.claude/design/project/` instead, which sync never touches. Nothing arrives without that install, and the two channels are independent: a record the project wrote is its own, and the installed stylesheet is the toolkit's.
|
|
28
28
|
|
|
29
|
-
A cell no source anchors ends in `? verify`, and the preview shows that marker beside the value rather than folding it in, so a swatch and a font sample stay built from the value alone. A confidence line above the sections names how many cells are anchored against how many are tagged, which is what tells a reader whether they are looking at a record of the code or a proposal about it. It reads the columns a source could anchor and leaves out the row names, so the ratio is not diluted by cells no tag could ever reach. The proposal path tags nearly all of them, so that count reads low on day one by design.
|
|
29
|
+
A record generated from a token source carries the values in tables instead, which is the shape this toolkit's own record takes. There a cell no source anchors ends in `? verify`, and the preview shows that marker beside the value rather than folding it in, so a swatch and a font sample stay built from the value alone. A confidence line above the sections names how many cells are anchored against how many are tagged, which is what tells a reader whether they are looking at a record of the code or a proposal about it. It reads the columns a source could anchor and leaves out the row names, so the ratio is not diluted by cells no tag could ever reach. The proposal path tags nearly all of them, so that count reads low on day one by design.
|
|
30
30
|
|
|
31
31
|
### Tools
|
|
32
32
|
|
|
@@ -35,9 +35,14 @@ A cell no source anchors ends in `? verify`, and the preview shows that marker b
|
|
|
35
35
|
|
|
36
36
|
### Skills
|
|
37
37
|
|
|
38
|
+
#### Reviewing and measuring
|
|
39
|
+
|
|
38
40
|
- `canon:ui-checklist` for what a reviewer has to look at after UI changes, and what ships without a test
|
|
39
41
|
- `canon:ux-audit` for UX gap detection on existing surfaces
|
|
40
42
|
- `canon:ux-measure` for what a running surface costs to paint, read against published thresholds
|
|
43
|
+
|
|
44
|
+
#### Drafting
|
|
45
|
+
|
|
41
46
|
- `canon:draft-and-pick` for a call settled by looking, drafting several candidates as frames on the canvas and taking your pick
|
|
42
47
|
- `canon:canvas-board` for a direction worked out over several turns, drawn as HTML frames you drag, select, and restyle in the browser while the session reads your changes back. Only the pick moves into `canon/DESIGN.md`, since the canvas folder is gitignored
|
|
43
48
|
- `canon:draft-identity` to draft a project's logo mark and compose it into an icon sequence and a social card, through `draft-and-pick`'s own render-and-pick loop. On an Astro project holding the card route scaffold, the card lands as a route the project keeps and is captured through a running server, so it reads the project's real stylesheet rather than typed copies of every color. Everywhere else it ships as a PNG and the run says so.
|
package/governance/detect.toml
CHANGED
|
@@ -21,67 +21,67 @@
|
|
|
21
21
|
deps = []
|
|
22
22
|
files = [".claude/skills", "claude/skills"]
|
|
23
23
|
|
|
24
|
-
["
|
|
24
|
+
["ci-workflow"]
|
|
25
25
|
deps = []
|
|
26
26
|
files = [".github/workflows"]
|
|
27
27
|
|
|
28
|
-
["
|
|
28
|
+
["dependencies"]
|
|
29
29
|
deps = []
|
|
30
30
|
files = ["**/package.json", "**/pyproject.toml", "**/go.mod", "**/composer.json"]
|
|
31
31
|
|
|
32
|
-
["
|
|
32
|
+
["config-comments"]
|
|
33
33
|
deps = []
|
|
34
34
|
files = [".editorconfig", "**/Dockerfile*", "**/*.config.*", "**/.env.example"]
|
|
35
35
|
|
|
36
|
-
["
|
|
36
|
+
["code-comments"]
|
|
37
37
|
deps = []
|
|
38
38
|
files = ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.sh", "**/*.py"]
|
|
39
39
|
|
|
40
|
-
["
|
|
40
|
+
["go"]
|
|
41
41
|
deps = []
|
|
42
42
|
files = ["**/go.mod"]
|
|
43
43
|
|
|
44
|
-
["
|
|
44
|
+
["php"]
|
|
45
45
|
deps = []
|
|
46
46
|
files = ["**/composer.json"]
|
|
47
47
|
|
|
48
|
-
["
|
|
48
|
+
["react"]
|
|
49
49
|
deps = ["react"]
|
|
50
50
|
files = []
|
|
51
51
|
|
|
52
|
-
["
|
|
52
|
+
["astro"]
|
|
53
53
|
deps = ["astro"]
|
|
54
54
|
files = ["**/astro.config.*"]
|
|
55
55
|
|
|
56
|
-
["
|
|
56
|
+
["fastapi"]
|
|
57
57
|
deps = ["fastapi"]
|
|
58
58
|
files = []
|
|
59
59
|
|
|
60
|
-
["
|
|
60
|
+
["nextjs"]
|
|
61
61
|
deps = ["next"]
|
|
62
62
|
files = ["**/next.config.*"]
|
|
63
63
|
|
|
64
|
-
["
|
|
64
|
+
["tailwind"]
|
|
65
65
|
deps = ["tailwindcss", "@tailwindcss/vite", "@tailwindcss/postcss"]
|
|
66
66
|
files = ["**/tailwind.config.*"]
|
|
67
67
|
|
|
68
|
-
["
|
|
68
|
+
["shadcn"]
|
|
69
69
|
deps = []
|
|
70
70
|
files = ["**/components.json"]
|
|
71
71
|
|
|
72
|
-
["
|
|
72
|
+
["e2e-reliability"]
|
|
73
73
|
deps = ["@playwright/test", "playwright", "cypress"]
|
|
74
74
|
files = ["**/e2e"]
|
|
75
75
|
|
|
76
|
-
["
|
|
76
|
+
["test-scope"]
|
|
77
77
|
deps = ["@playwright/test", "playwright", "cypress"]
|
|
78
78
|
files = ["**/e2e"]
|
|
79
79
|
|
|
80
|
-
["
|
|
80
|
+
["zod"]
|
|
81
81
|
deps = ["zod"]
|
|
82
82
|
files = []
|
|
83
83
|
|
|
84
|
-
["
|
|
84
|
+
["tanstack-query"]
|
|
85
85
|
deps = [
|
|
86
86
|
"@tanstack/react-query",
|
|
87
87
|
"@tanstack/vue-query",
|
|
@@ -91,23 +91,23 @@ deps = [
|
|
|
91
91
|
]
|
|
92
92
|
files = []
|
|
93
93
|
|
|
94
|
-
["
|
|
94
|
+
["testing-go"]
|
|
95
95
|
deps = []
|
|
96
96
|
files = ["**/go.mod"]
|
|
97
97
|
|
|
98
|
-
["
|
|
98
|
+
["testing-php"]
|
|
99
99
|
deps = ["phpunit/phpunit", "pestphp/pest"]
|
|
100
100
|
files = ["**/phpunit.xml", "**/phpunit.xml.dist"]
|
|
101
101
|
|
|
102
|
-
["
|
|
102
|
+
["pydantic"]
|
|
103
103
|
deps = ["pydantic"]
|
|
104
104
|
files = []
|
|
105
105
|
|
|
106
|
-
["
|
|
106
|
+
["security-web"]
|
|
107
107
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
108
108
|
files = ["index.html", "*/index.html"]
|
|
109
109
|
|
|
110
|
-
["
|
|
110
|
+
["security-server"]
|
|
111
111
|
deps = [
|
|
112
112
|
"express",
|
|
113
113
|
"fastify",
|
|
@@ -129,7 +129,7 @@ deps = [
|
|
|
129
129
|
]
|
|
130
130
|
files = []
|
|
131
131
|
|
|
132
|
-
["
|
|
132
|
+
["database"]
|
|
133
133
|
deps = [
|
|
134
134
|
"prisma",
|
|
135
135
|
"@prisma/client",
|
|
@@ -156,42 +156,42 @@ deps = [
|
|
|
156
156
|
]
|
|
157
157
|
files = ["**/migrations", "**/schema.prisma", "**/*.sql"]
|
|
158
158
|
|
|
159
|
-
["
|
|
159
|
+
["copy"]
|
|
160
160
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
161
161
|
files = ["index.html", "*/index.html"]
|
|
162
162
|
|
|
163
|
-
["
|
|
163
|
+
["a11y"]
|
|
164
164
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
165
165
|
files = ["index.html", "*/index.html"]
|
|
166
166
|
|
|
167
|
-
["
|
|
167
|
+
["forms"]
|
|
168
168
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
169
169
|
files = ["index.html", "*/index.html"]
|
|
170
170
|
|
|
171
|
-
["
|
|
171
|
+
["ux-completeness"]
|
|
172
172
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
173
173
|
files = ["index.html", "*/index.html"]
|
|
174
174
|
|
|
175
|
-
["
|
|
175
|
+
["surface-capture"]
|
|
176
176
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
177
177
|
files = ["index.html", "*/index.html"]
|
|
178
178
|
|
|
179
|
-
["
|
|
179
|
+
["link-behavior"]
|
|
180
180
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
181
181
|
files = ["index.html", "*/index.html"]
|
|
182
182
|
|
|
183
|
-
["
|
|
183
|
+
["design-taste"]
|
|
184
184
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
185
185
|
files = ["canon/DESIGN.md", "index.html", "*/index.html"]
|
|
186
186
|
|
|
187
|
-
["
|
|
187
|
+
["interface-casing"]
|
|
188
188
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
189
189
|
files = ["index.html", "*/index.html"]
|
|
190
190
|
|
|
191
|
-
["
|
|
191
|
+
["motion"]
|
|
192
192
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
193
193
|
files = ["index.html", "*/index.html"]
|
|
194
194
|
|
|
195
|
-
["
|
|
195
|
+
["canvas"]
|
|
196
196
|
deps = []
|
|
197
197
|
files = [".canon/canvas"]
|
package/governance/renames.toml
CHANGED
|
@@ -32,3 +32,47 @@
|
|
|
32
32
|
"655-tasks" = "tasks"
|
|
33
33
|
"570-skill" = "skill"
|
|
34
34
|
"801-markdown" = "markdown"
|
|
35
|
+
"602-tasks" = "task-scope"
|
|
36
|
+
"604-scratch" = "scratch"
|
|
37
|
+
"605-worktrees" = "worktrees"
|
|
38
|
+
"606-git" = "git"
|
|
39
|
+
"611-indexes" = "indexes"
|
|
40
|
+
"566-output" = "output"
|
|
41
|
+
"000-code" = "routing"
|
|
42
|
+
"010-testing" = "testing"
|
|
43
|
+
"200-react" = "react"
|
|
44
|
+
"210-astro" = "astro"
|
|
45
|
+
"220-fastapi" = "fastapi"
|
|
46
|
+
"230-nextjs" = "nextjs"
|
|
47
|
+
"250-tailwind" = "tailwind"
|
|
48
|
+
"260-shadcn" = "shadcn"
|
|
49
|
+
"100-typescript" = "typescript"
|
|
50
|
+
"110-python" = "python"
|
|
51
|
+
"130-go" = "go"
|
|
52
|
+
"140-php" = "php"
|
|
53
|
+
"300-testing-ts" = "testing-ts"
|
|
54
|
+
"305-e2e-reliability" = "e2e-reliability"
|
|
55
|
+
"306-test-scope" = "test-scope"
|
|
56
|
+
"310-zod" = "zod"
|
|
57
|
+
"320-tanstack-query" = "tanstack-query"
|
|
58
|
+
"330-testing-py" = "testing-py"
|
|
59
|
+
"335-testing-go" = "testing-go"
|
|
60
|
+
"336-testing-php" = "testing-php"
|
|
61
|
+
"340-pydantic" = "pydantic"
|
|
62
|
+
"350-security-web" = "security-web"
|
|
63
|
+
"360-security-server" = "security-server"
|
|
64
|
+
"370-database" = "database"
|
|
65
|
+
"700-ci-workflow" = "ci-workflow"
|
|
66
|
+
"775-dependencies" = "dependencies"
|
|
67
|
+
"780-config-comments" = "config-comments"
|
|
68
|
+
"790-code-comments" = "code-comments"
|
|
69
|
+
"400-ui" = "copy"
|
|
70
|
+
"410-a11y" = "a11y"
|
|
71
|
+
"420-forms" = "forms"
|
|
72
|
+
"430-ux-completeness" = "ux-completeness"
|
|
73
|
+
"440-surface-capture" = "surface-capture"
|
|
74
|
+
"450-link-behavior" = "link-behavior"
|
|
75
|
+
"460-design-taste" = "design-taste"
|
|
76
|
+
"465-interface-casing" = "interface-casing"
|
|
77
|
+
"470-motion" = "motion"
|
|
78
|
+
"480-canvas" = "canvas"
|