@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.
- package/package/corpus/harnesses/copilot/instructions/ai-distribution.instructions.md +3 -4
- package/package/corpus/harnesses/copilot/instructions/authoring-skills.instructions.md +3 -1
- package/package/corpus/harnesses/copilot/instructions/pull-requests.instructions.md +3 -3
- package/package/corpus/prompts/ship-changes.prompt.md +1 -1
- package/package/corpus/rules/ai-distribution.md +3 -4
- package/package/corpus/rules/authoring-skills.md +3 -1
- package/package/corpus/rules/general.md +2 -4
- package/package/corpus/rules/pull-requests.md +3 -3
- package/package/corpus/skills/cratis-engineering-regression-cluster/LICENSE +2 -0
- package/package/corpus/skills/cratis-engineering-regression-cluster/SKILL.md +73 -0
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
|
@@ -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.
|
|
94
|
-
|
|
95
|
-
repository-specific local workflows
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
93
|
-
|
|
94
|
-
repository-specific local workflows
|
|
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
|
-
-
|
|
51
|
-
|
|
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
|
|
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
|
|
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
|
|
89
|
+
If the release-note rules fail, fix the description, not the code.
|
|
90
90
|
|
|
91
91
|
## Commits
|
|
92
92
|
|
|
@@ -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.
|