@cratis/pi 7.89.0 → 7.90.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -90,10 +90,9 @@ Cratis behavior. The `engineering-` prefix identifies the maintainer audience;
90
90
  it does not imply confidential package contents or a private registry.
91
91
 
92
92
  The consuming repository owns its project facts, confidential behavior, local
93
- skills, and minimal host bootstraps. Use repository-owned documentation as canonical
94
- project context when that migration is active, `.agents/skills/` for private or
95
- repository-specific local workflows, and repository-owned documentation only as the
96
- documented legacy context fallback. Never merge, overwrite, or remove these
93
+ skills, and minimal host bootstraps. Project-specific context is the repository's own
94
+ documentation plus `.cratis/ai/rules/project.md`; `.agents/skills/` holds private or
95
+ repository-specific local workflows. Never merge, overwrite, or remove these
97
96
  local files as a side effect of installing, updating, rolling back, or
98
97
  uninstalling shared AI capabilities.
99
98
 
@@ -85,7 +85,9 @@ When changing a description, run trigger evaluations before and after when autho
85
85
 
86
86
  ## 11. Always-on content
87
87
 
88
- Keep `general.md` to facts needed in every session, at most 200 lines. Warn above 24,000 bytes and above 91,000 combined bytes for rules without `paths`; line length alone can hide context bloat. Review globally applied Copilot instructions above 4,000 characters. These budgets leave room for source and task context, rather than promising a token count.
88
+ Keep `general.md` to facts needed in every session, at most 200 lines. Warn above 24,000 bytes and above 91,000 combined bytes for rules without `paths`; line length alone can hide context bloat. Review globally applied Copilot instructions above 4,000 characters. These budgets leave room for source and task context, rather than promising a token count. The corpus verification caps the rule bytes each harness loads at session start and fails above a cap: displace or demote text to an on-demand skill, or raise the cap in a reviewed change.
89
+
90
+ Every proposed rule names its enforcement: analyzer-enforceable, CI-enforceable or judgment-shaped. The first two ship as the analyzer, lint or CI check, with at most a one-line pointer in prose; only judgment-shaped rules are written out, because prose does not enforce itself and costs context in every session that loads it.
89
91
 
90
92
  Use path-scoped rules for file-specific invariants and skills for particular operations. Hooks and CI enforce mechanical constraints; natural-language rules do not replace permission controls.
91
93
 
@@ -7,7 +7,7 @@ applyTo: "**/*"
7
7
 
8
8
  ## The description is the release note
9
9
 
10
- **The PR description is published verbatim as the GitHub release. In repositories released by `cratis/release-action`, it also closes every issue written as `(#n)`; elsewhere, follow the repository's own release and issue-closing process.** Write the note the person upgrading should read, not a development write-up. The same contract applies to release notes typed into a manual workflow run or written straight into a release. Where it is installed, the `verify-release-notes` check enforces it on release-bound PRs into the default branch carrying `major`/`minor`/`patch` (it re-runs when the label is added); it warns on `no-release` and unlabelled PRs, which must still be written this way because any of them may become releasable. `release-action` does not run for a `no-release` PR, so `(#n)` closes nothing there. Editing the description re-runs the check. HTML comments are not shown on the release page and the check ignores them for headings, keywords and placeholders, and `release-action` removes them before publishing, so a `(#n)` only inside a comment closes nothing; the check fails it, so never put an issue reference in a comment. The template's own comment can stay: its `(#123)` examples are inline code, and the comment is not published.
10
+ **The PR description is published verbatim as the GitHub release. In repositories released by `cratis/release-action`, it also closes every issue written as `(#n)`; elsewhere, follow the repository's own release and issue-closing process.** Write the note the person upgrading should read, not a development write-up. The same contract applies to release notes typed into a manual workflow run or written straight into a release. Where it is installed, the `policy / verify` check enforces it on release-bound PRs into the default branch carrying `major`/`minor`/`patch` (it re-runs when the label is added); its release-note step warns on `no-release` and unlabelled PRs, which must still be written this way because any of them may become releasable. `release-action` does not run for a `no-release` PR, so `(#n)` closes nothing there. Editing the description re-runs the check. HTML comments are not shown on the release page and the check ignores them for headings, keywords and placeholders, and `release-action` removes them before publishing, so a `(#n)` only inside a comment closes nothing; the check fails it, so never put an issue reference in a comment. The template's own comment can stay: its `(#123)` examples are inline code, and the comment is not published.
11
11
 
12
12
  ### Allowed shape
13
13
 
@@ -82,12 +82,12 @@ Arc can now construct Chronicle reactors and reducers through its own dependency
82
82
 
83
83
  ### Before you create or edit a PR
84
84
 
85
- 1. Run `node .cratis/ai/hooks/scripts/cratis-check-pr.mjs --body-file <file> --label <intent>`. It runs the exact `verify-release-notes` rules plus the label and diff checks, and the Bash hook runs it on `gh pr create` and `gh pr edit`.
85
+ 1. Run `node .cratis/ai/hooks/scripts/cratis-check-pr.mjs --body-file <file> --label <intent>`. It runs the exact `policy / verify` release-note rules plus the label and diff checks, and the Bash hook runs it on `gh pr create` and `gh pr edit`.
86
86
  2. Read the body against the forbidden list and the issue table above; delete every hit and verify every issue number.
87
87
  3. Sections in order, none empty, at most one summary form; every bullet user-facing.
88
88
  4. Test plan, verification and review notes are in a PR comment.
89
89
 
90
- If `verify-release-notes` fails, fix it by editing the description, not by pushing code.
90
+ If the release-note rules fail, fix the description, not the code.
91
91
 
92
92
  ## Commits
93
93
 
@@ -51,7 +51,7 @@ The description is published verbatim as the release notes, so it follows the co
51
51
  - Post reviewer notes (checks run, what was not verified, review provenance, stacking, merge or
52
52
  deploy order) right after creating the PR with `gh pr comment <n> --body-file .ai-work/pr-notes.md`.
53
53
  Never put them in the description, even for `no-release`.
54
- - After pushing, if `verify-release-notes` fails, fix it by editing the description; it re-runs on edit.
54
+ - After pushing, if `policy / verify` fails on the release notes, fix it by editing the description; it re-runs on edit.
55
55
 
56
56
  ## Cleanup — the last step, never skipped
57
57
 
@@ -89,10 +89,9 @@ Cratis behavior. The `engineering-` prefix identifies the maintainer audience;
89
89
  it does not imply confidential package contents or a private registry.
90
90
 
91
91
  The consuming repository owns its project facts, confidential behavior, local
92
- skills, and minimal host bootstraps. Use repository-owned documentation as canonical
93
- project context when that migration is active, `.agents/skills/` for private or
94
- repository-specific local workflows, and repository-owned documentation only as the
95
- documented legacy context fallback. Never merge, overwrite, or remove these
92
+ skills, and minimal host bootstraps. Project-specific context is the repository's own
93
+ documentation plus `.cratis/ai/rules/project.md`; `.agents/skills/` holds private or
94
+ repository-specific local workflows. Never merge, overwrite, or remove these
96
95
  local files as a side effect of installing, updating, rolling back, or
97
96
  uninstalling shared AI capabilities.
98
97
 
@@ -84,7 +84,9 @@ When changing a description, run trigger evaluations before and after when autho
84
84
 
85
85
  ## 11. Always-on content
86
86
 
87
- Keep `general.md` to facts needed in every session, at most 200 lines. Warn above 24,000 bytes and above 91,000 combined bytes for rules without `paths`; line length alone can hide context bloat. Review globally applied Copilot instructions above 4,000 characters. These budgets leave room for source and task context, rather than promising a token count.
87
+ Keep `general.md` to facts needed in every session, at most 200 lines. Warn above 24,000 bytes and above 91,000 combined bytes for rules without `paths`; line length alone can hide context bloat. Review globally applied Copilot instructions above 4,000 characters. These budgets leave room for source and task context, rather than promising a token count. The corpus verification caps the rule bytes each harness loads at session start and fails above a cap: displace or demote text to an on-demand skill, or raise the cap in a reviewed change.
88
+
89
+ Every proposed rule names its enforcement: analyzer-enforceable, CI-enforceable or judgment-shaped. The first two ship as the analyzer, lint or CI check, with at most a one-line pointer in prose; only judgment-shaped rules are written out, because prose does not enforce itself and costs context in every session that loads it.
88
90
 
89
91
  Use path-scoped rules for file-specific invariants and skills for particular operations. Hooks and CI enforce mechanical constraints; natural-language rules do not replace permission controls.
90
92
 
@@ -47,10 +47,8 @@ repository. Individual projects need extra context that does not belong here,
47
47
  such as product composition, approved environment names, directions for
48
48
  obtaining credentials, and other local conventions ("Product policy" above).
49
49
 
50
- - Read repository-owned documentation as the canonical project-specific context when it
51
- exists.
52
- - Read repository-owned documentation only as the documented legacy fallback when
53
- repository-owned documentation does not exist; never merge both contexts.
50
+ - Project-specific context is the repository's own documentation plus
51
+ `.cratis/ai/rules/project.md`.
54
52
  - Project context may explain which approved secret mechanism or local setup to
55
53
  use, but it must never contain credential values, tokens, keys, passwords, or
56
54
  other secrets.
@@ -6,7 +6,7 @@ applyTo: "**/*"
6
6
 
7
7
  ## The description is the release note
8
8
 
9
- **The PR description is published verbatim as the GitHub release. In repositories released by `cratis/release-action`, it also closes every issue written as `(#n)`; elsewhere, follow the repository's own release and issue-closing process.** Write the note the person upgrading should read, not a development write-up. The same contract applies to release notes typed into a manual workflow run or written straight into a release. Where it is installed, the `verify-release-notes` check enforces it on release-bound PRs into the default branch carrying `major`/`minor`/`patch` (it re-runs when the label is added); it warns on `no-release` and unlabelled PRs, which must still be written this way because any of them may become releasable. `release-action` does not run for a `no-release` PR, so `(#n)` closes nothing there. Editing the description re-runs the check. HTML comments are not shown on the release page and the check ignores them for headings, keywords and placeholders, and `release-action` removes them before publishing, so a `(#n)` only inside a comment closes nothing; the check fails it, so never put an issue reference in a comment. The template's own comment can stay: its `(#123)` examples are inline code, and the comment is not published.
9
+ **The PR description is published verbatim as the GitHub release. In repositories released by `cratis/release-action`, it also closes every issue written as `(#n)`; elsewhere, follow the repository's own release and issue-closing process.** Write the note the person upgrading should read, not a development write-up. The same contract applies to release notes typed into a manual workflow run or written straight into a release. Where it is installed, the `policy / verify` check enforces it on release-bound PRs into the default branch carrying `major`/`minor`/`patch` (it re-runs when the label is added); its release-note step warns on `no-release` and unlabelled PRs, which must still be written this way because any of them may become releasable. `release-action` does not run for a `no-release` PR, so `(#n)` closes nothing there. Editing the description re-runs the check. HTML comments are not shown on the release page and the check ignores them for headings, keywords and placeholders, and `release-action` removes them before publishing, so a `(#n)` only inside a comment closes nothing; the check fails it, so never put an issue reference in a comment. The template's own comment can stay: its `(#123)` examples are inline code, and the comment is not published.
10
10
 
11
11
  ### Allowed shape
12
12
 
@@ -81,12 +81,12 @@ Arc can now construct Chronicle reactors and reducers through its own dependency
81
81
 
82
82
  ### Before you create or edit a PR
83
83
 
84
- 1. Run `node .cratis/ai/hooks/scripts/cratis-check-pr.mjs --body-file <file> --label <intent>`. It runs the exact `verify-release-notes` rules plus the label and diff checks, and the Bash hook runs it on `gh pr create` and `gh pr edit`.
84
+ 1. Run `node .cratis/ai/hooks/scripts/cratis-check-pr.mjs --body-file <file> --label <intent>`. It runs the exact `policy / verify` release-note rules plus the label and diff checks, and the Bash hook runs it on `gh pr create` and `gh pr edit`.
85
85
  2. Read the body against the forbidden list and the issue table above; delete every hit and verify every issue number.
86
86
  3. Sections in order, none empty, at most one summary form; every bullet user-facing.
87
87
  4. Test plan, verification and review notes are in a PR comment.
88
88
 
89
- If `verify-release-notes` fails, fix it by editing the description, not by pushing code.
89
+ If the release-note rules fail, fix the description, not the code.
90
90
 
91
91
  ## Commits
92
92
 
@@ -0,0 +1,2 @@
1
+ Copyright (c) Cratis. All rights reserved.
2
+ Licensed under the MIT license. See LICENSE file in the canonical Cratis/AI repository for the full license text.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: cratis-engineering-regression-cluster
3
+ description: Stop fixing instances when one surface keeps breaking - name the failure class, add the gate that owns it, prove the gate fails, then fix the instance. Use when a third bug, regression, revert or review finding lands on the same screen, endpoint, command, workflow or module, when the same kind of fix keeps being reapplied, or when asked why something keeps breaking. Not for a first or isolated bug (fix it with a regression specification), for proving a consolidation dropped nothing (use cratis-engineering-consolidation-guard), or for a boundary that reports success after failing (use cratis-engineering-effect-boundaries).
4
+ license: LICENSE
5
+ ---
6
+
7
+ # The third issue on one surface names a failure class
8
+
9
+ Each bug fixed alone adds one specification for one symptom. When the same
10
+ **surface** (one screen, endpoint, command, query, workflow, module or rule
11
+ area) breaks a third time, the instances share a cause that no specification
12
+ owns yet, and the fourth instance is already on its way. Stop fixing instances:
13
+ name the **failure class**, give it an **owning gate**, then fix the instance.
14
+
15
+ ## Count first
16
+
17
+ Before fixing an issue, count the earlier ones on its surface:
18
+
19
+ ```bash
20
+ gh issue list --state all --search "<surface> in:title,body" --limit 50
21
+ git log --oneline -- <paths of the surface>
22
+ ```
23
+
24
+ Count bugs, regressions, reverts and review findings, open or closed. Fewer
25
+ than three: fix the instance with a regression specification. Three or more:
26
+ follow the steps below before writing the fix.
27
+
28
+ ## Steps
29
+
30
+ 1. **Name the failure class** in one sentence that states the property being
31
+ violated, not the symptom. Each earlier issue must be an instance of it, and
32
+ a reader must be able to recognize the next one by it. "Owner filter shows
33
+ archived items" is a symptom; "list filters are not exercised through the
34
+ rendered list by any test" is a class.
35
+ 2. **Choose the owning gate by enforcement kind**, preferring the earliest that
36
+ can catch the class: an analyzer (compile time), a lint rule, a CI check or
37
+ verification script, or one specification suite that covers every member of
38
+ the class (every filter, every endpoint), not one specification per bug. A
39
+ class that only judgment can catch gets a review checklist entry, and the
40
+ choice is stated as judgment-shaped; see the enforcement rule in
41
+ [authoring-skills.md](../../rules/authoring-skills.md).
42
+ 3. **Prove the gate fails** on the current broken instance, or on the earlier
43
+ instances with their fixes reverted, before fixing anything. A gate that
44
+ passes on the broken code owns nothing; follow
45
+ [guards-and-fuses.md](../../rules/guards-and-fuses.md) so it cannot pass
46
+ vacuously.
47
+ 4. **Register the class.** When the repository keeps a failure-class table or
48
+ gate inventory, add one row: class, owning gate, where it runs. Otherwise
49
+ put the class name in the gate's failure message and the specification or
50
+ check name, so the next failure names its class.
51
+ 5. **Fix the instance**; the gate turns green. Run it with the repository's
52
+ normal gates, and make it a required CI check when it lives in CI.
53
+ 6. **Close the loop.** Link the earlier issues to the class in the pull request
54
+ comment, and leave a prose rule only for the judgment-shaped part.
55
+
56
+ ## Report
57
+
58
+ State the surface and the issues counted, the class sentence, the gate and
59
+ where it runs, that it failed before the fix and passes after, and anything
60
+ left judgment-shaped.
61
+
62
+ ## Pitfalls
63
+
64
+ - **A fourth instance specification.** Copying the third fix's specification
65
+ for the new symptom covers the symptom, not the class.
66
+ - **A prose rule instead of a gate.** Rules nobody enforces were already in
67
+ place for the earlier instances; text costs context and catches nothing.
68
+ - **A class named after the symptom.** If the next instance would not be
69
+ recognized by the sentence, the class is still too narrow.
70
+ - **A gate that never ran red.** Without the failing run, nothing shows it can
71
+ catch the class.
72
+ - **A loose surface.** Three unrelated bugs in one large module are not a
73
+ cluster; narrow the surface until the issues share a cause.
@@ -993,6 +993,7 @@
993
993
  "cratis-engineering-decision-record",
994
994
  "cratis-engineering-docs-authoring",
995
995
  "cratis-engineering-effect-boundaries",
996
+ "cratis-engineering-regression-cluster",
996
997
  "cratis-release-notes",
997
998
  "cratis-technical-examples"
998
999
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/pi",
3
- "version": "7.89.0",
3
+ "version": "7.90.1",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [