@erclx/canon 4.33.0 → 4.34.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "canon",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "4.33.0",
4
+ "version": "4.34.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -41,6 +41,7 @@ Run `canon tooling sync <stack> <target> --check` for the list resolved against
41
41
 
42
42
  - `.editorconfig`
43
43
  - `.github/pull_request_template.md`
44
+ - `.github/workflows/phase-label-gate.yml`
44
45
  - `.github/workflows/verify.yml`
45
46
  - `.husky/commit-msg`
46
47
  - `.husky/post-merge`
@@ -228,7 +228,7 @@ The `What is right` section is optional, capped at three bullets, and included o
228
228
 
229
229
  Close the body with `🤖 Reviewed by Claude Code` on its own line so the review reads as an independent machine pass, not a human sign-off.
230
230
 
231
- Before posting, run the scan in `${CLAUDE_SKILL_DIR}/../../standards/publish.md` against the body. The hook skips `.canon/tmp/`, so this scan is the only gate ahead of the post. A finding phrased against an internal phase label is what the label half of the scan catches here. This repository reads the same text again once posted, on `phase-label-gate.yml`'s `pull_request_review` trigger, which is what closes the gap this scan leaves open for a review a person writes and posts by hand with no scripted step in front of it. That workflow is not seeded to any target this skill ships to, so a target's coverage stops at this pre-post scan, even though the `canon labels scan` verb behind it already reads a review payload once triggered.
231
+ Before posting, run the scan in `${CLAUDE_SKILL_DIR}/../../standards/publish.md` against the body. The hook skips `.canon/tmp/`, so this scan is the only gate ahead of the post. A finding phrased against an internal phase label is what the label half of the scan catches here. This repository reads the same text again once posted, on `phase-label-gate.yml`'s `pull_request_review` trigger, which is what closes the gap this scan leaves open for a review a person writes and posts by hand with no scripted step in front of it. That workflow now reaches every target on the `base` stack, seeded at `tooling/base/configs/.github/workflows/phase-label-gate.yml` invoking the published CLI rather than this checkout's own source tree, so a target's coverage extends past this pre-post scan to the same post-trigger re-read this repository gets.
232
232
 
233
233
  Do not run the command below when `<prior-heading>` from Step 2 reads `## Review closed` and this pass carries nothing owed. That pass replaces the standing comment rather than adding one, under `### A close-out that repeats the standing one` at the end of this step. Posting first and reaching that section afterward leaves two close-outs both naming the new head, which is worse than the pair the guard exists against.
234
234
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/canon",
3
3
  "type": "module",
4
- "version": "4.33.0",
4
+ "version": "4.34.0",
5
5
  "description": "Infrastructure and quality tooling for developer workflows",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -0,0 +1,29 @@
1
+ name: Phase Label Gate
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, edited, reopened, synchronize]
6
+ branches:
7
+ - main
8
+ # pull_request_review carries no branches filter GitHub Actions reads, so the
9
+ # base ref is checked in the job's own `if:` below instead.
10
+ pull_request_review:
11
+ types: [submitted, edited]
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ phase-label-gate:
16
+ name: 🏷️ Phase Label Gate
17
+ runs-on: ubuntu-latest
18
+ if: github.event_name == 'workflow_dispatch' || github.event.pull_request.base.ref == 'main'
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Setup Bun
24
+ uses: oven-sh/setup-bun@v2
25
+ with:
26
+ bun-version: latest
27
+
28
+ - name: Scan the pull request or review for a phase label, a board identifier, or a session link
29
+ run: bunx -y @erclx/canon labels scan --event "$GITHUB_EVENT_PATH"
@@ -4,6 +4,7 @@ bunx
4
4
  commitlint
5
5
  dbaeumer
6
6
  dotfolders
7
+ erclx
7
8
  esbenp
8
9
  frontmatter
9
10
  lintstagedrc