@erclx/aitk 3.35.1 โ†’ 3.36.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": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "3.35.1",
4
+ "version": "3.36.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -0,0 +1,44 @@
1
+ ---
2
+ description: Enforce GitHub Actions job naming, granularity, dependency wiring, and bun pinning
3
+ paths:
4
+ - '.github/workflows/**'
5
+ ---
6
+
7
+ # CI workflow standards
8
+
9
+ ## Triggers and pinning
10
+
11
+ - Include `workflow_dispatch` alongside the primary trigger on every workflow.
12
+ - Pin every action to a major version tag. Never `@latest` or `@main`.
13
+ - Run every job on `ubuntu-latest`.
14
+
15
+ ## Job naming
16
+
17
+ - Name every job as an emoji followed by a title, such as `๐Ÿ›ก๏ธ Checks`, `๐Ÿงช Unit Tests`, `๐Ÿ“ฆ Build Check`, `๐ŸŽญ E2E Tests`, or `๐Ÿš€ Deploy`.
18
+
19
+ ## Job granularity
20
+
21
+ - Fold static analysis, unit tests, and build into one job while the gate runs under two minutes end to end.
22
+ - Split them into parallel jobs once a run log puts the gate past two minutes.
23
+ - Give E2E, release, and deploy a job each from the start.
24
+
25
+ ## Job dependencies
26
+
27
+ - Use `needs` for a data dependency, where a job consumes another job's artifact, or for a job whose cost is prohibitive against the gate in front of it. Leave every other job unwired so it runs in parallel.
28
+ - Gate E2E on the job that uploads the build artifact.
29
+ - Gate release and deploy on E2E.
30
+ - Emit a deploy, publish, or release job with a placeholder step and name what the caller fills in. Never guess a deploy command.
31
+
32
+ ## Artifacts
33
+
34
+ - Upload an artifact on `if: failure()` alone, with `retention-days: 7`.
35
+
36
+ ## Bun stack
37
+
38
+ - Use `oven-sh/setup-bun@v2` with `bun-version: latest`.
39
+ - Install with `bun install --frozen-lockfile`.
40
+ - Key the Playwright browser cache on the Playwright version string, never a static key.
41
+
42
+ ## Authority
43
+
44
+ - Load the `aitk:ci-workflow` skill for the workflow template and the per-project adaptation. Report it rather than proceeding silently when the skill does not resolve.
@@ -14,4 +14,5 @@ description: Enforce planning standards before implementation
14
14
  - Write or update tests as part of every implementation plan.
15
15
  - Write the test for a behavior before the code that implements it. Confirm visual output after implementing it, not before.
16
16
  - Run `aitk gov test-order` before shipping a branch. Fix what it names as reaching history ahead of its test.
17
+ - Load the `aitk:systematic-debugging` skill before proposing a fix for a failing test, a surfaced bug, or behavior nobody has explained yet, and report it rather than proceeding silently when the skill does not resolve.
17
18
  - Do not modify code without a confirmed plan.
@@ -1,6 +1,8 @@
1
1
  extends = ""
2
- # All three folders whole. Every rule authored under them ships to a base
2
+ # All four folders whole. Every rule authored under them ships to a base
3
3
  # consumer, so adding one is a single edit rather than a file and a name here.
4
4
  # `snippets` carries the `@`-reference convention rule, which lost its only
5
- # other delivery path when `aitk snippets install` retired.
6
- rules = ["core", "claude", "snippets", "120-bash"]
5
+ # other delivery path when `aitk snippets install` retired. `ci` carries the
6
+ # workflow rule, whose glob is the only inbound route to the `ci-workflow`
7
+ # skill.
8
+ rules = ["core", "claude", "snippets", "ci", "120-bash"]
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/aitk",
3
3
  "type": "module",
4
- "version": "3.35.1",
4
+ "version": "3.36.0",
5
5
  "description": "Infrastructure and quality tooling for developer workflows",
6
6
  "license": "MIT",
7
7
  "bin": {
package/standards/rule.md CHANGED
@@ -32,14 +32,14 @@ Write both when both apply. A rule stating the directive and a skill stating how
32
32
  ## Location
33
33
 
34
34
  - Rules live at `.claude/rules/<subdirectory>/<n>-<slug>.md`
35
- - Subdirectories group by domain: `core/`, `lang/`, `framework/`, `lib/`, `ui/`, `claude/`
35
+ - Subdirectories group by domain: `core/`, `lang/`, `framework/`, `lib/`, `ui/`, `claude/`, `snippets/`, `ci/`
36
36
  - `<n>` is a number from the band reserved for the rule's source and `<slug>` is a one-to-three-word kebab topic
37
37
  - A rule the project authored itself lives at `.claude/rules/project/<subdirectory>/<n>-<slug>.md`, keeping the same subdirectory names
38
38
  - Give every rule a numeric prefix. A bare-word filename reads as a folder name where a stack names its rules, so a rule without one is unreachable from a stack entry.
39
39
 
40
40
  ## Reserved numbers
41
41
 
42
- `000-899` is reserved for a rule set that ships to targets. `000-599` is what the six subdirectories above already divide, at 100 per subdirectory, and `600-899` is held for subdirectories a shipped set has not added yet.
42
+ `000-899` is reserved for a rule set that ships to targets. `000-599` is what the first six subdirectories above already divide, at 100 per subdirectory. `ci/` was the first to draw from the headroom past that, taking `700-799`, and `600-699` with `800-899` is what remains for a subdirectory a shipped set has not added yet.
43
43
 
44
44
  A project-authored rule takes `900-999`, one sequence across every subdirectory under `.claude/rules/project/`. Scanning for a free number instead is what fails, because a shipped set fills its own band release by release, so what reads as free today is what a later release lands on. One target authored `claude/561-self-check.md` on a day nothing shipped at 561, met `claude/561-teach.md` on its next install, and now reads two numbers differently from everywhere else.
45
45