@cratis/pi 7.115.0 → 7.116.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/github-actions.instructions.md +9 -0
- package/package/corpus/harnesses/copilot/instructions/specs.csharp.instructions.md +4 -0
- package/package/corpus/rules/github-actions.md +9 -0
- package/package/corpus/rules/specs.csharp.md +4 -0
- package/package/corpus/skills/cratis-ci-pipeline-performance/references/build-once-and-shard.md +2 -1
- package/package/corpus/skills/cratis-engineering-ci-gates/SKILL.md +8 -2
- package/package/corpus/skills/cratis-release-notes/SKILL.md +16 -0
- package/package.json +1 -1
|
@@ -115,6 +115,9 @@ capacity numbers into workflows or guidance.
|
|
|
115
115
|
content the source repository's CI verified before the rollout, may carry
|
|
116
116
|
`[skip ci]` once the same wrapper content has landed with CI running in one canary
|
|
117
117
|
repository. Package-update bots, and any commit touching another file, keep normal CI.
|
|
118
|
+
- Never put a skip token in a pull request title or an ordinary commit message: a
|
|
119
|
+
merge commit inherits the pull request title, so GitHub then runs nothing on the
|
|
120
|
+
default branch. See `cratis-engineering-release-trains`.
|
|
118
121
|
- Comment-triggered agent workflows must gate on the trigger phrase in the job's `if:`
|
|
119
122
|
(for example `contains(github.event.comment.body, '@claude')`) so a runner only
|
|
120
123
|
starts when the agent is actually addressed.
|
|
@@ -127,3 +130,9 @@ capacity numbers into workflows or guidance.
|
|
|
127
130
|
four unintended releases on 2026-08-25.
|
|
128
131
|
- Every repository's release-intent gate must accept `no-release`; a gate that only
|
|
129
132
|
accepts `major`/`minor`/`patch` forces exactly that mistake.
|
|
133
|
+
- Do not merge a pull request that changes `.github/workflows/` while a release Publish
|
|
134
|
+
run in the same repository has not created its tag yet. `GITHUB_TOKEN` cannot tag a
|
|
135
|
+
commit whose workflows differ from the default branch, and rerunning fails the same
|
|
136
|
+
way. Recover with the Publish `workflow_dispatch` from current main.
|
|
137
|
+
- A release-verify job asserts that the GitHub release `v<version>` exists. A watch
|
|
138
|
+
picks the exact run by head SHA, never by a time window.
|
|
@@ -86,6 +86,10 @@ _service.DidNotReceive().DoSomethingElse(Arg.Any<int>());
|
|
|
86
86
|
_handler.Handle(Arg.Any<CommandContext>()).Throws(new Exception("fail"));
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
A change to a widely substituted interface runs the whole affected spec project,
|
|
90
|
+
not one spec. Grep for `Substitute.For<IThatInterface>` to find every substitute
|
|
91
|
+
that needs updating.
|
|
92
|
+
|
|
89
93
|
Catch exceptions for a unit under test with `Catch.Exception`:
|
|
90
94
|
|
|
91
95
|
```csharp
|
|
@@ -114,6 +114,9 @@ capacity numbers into workflows or guidance.
|
|
|
114
114
|
content the source repository's CI verified before the rollout, may carry
|
|
115
115
|
`[skip ci]` once the same wrapper content has landed with CI running in one canary
|
|
116
116
|
repository. Package-update bots, and any commit touching another file, keep normal CI.
|
|
117
|
+
- Never put a skip token in a pull request title or an ordinary commit message: a
|
|
118
|
+
merge commit inherits the pull request title, so GitHub then runs nothing on the
|
|
119
|
+
default branch. See `cratis-engineering-release-trains`.
|
|
117
120
|
- Comment-triggered agent workflows must gate on the trigger phrase in the job's `if:`
|
|
118
121
|
(for example `contains(github.event.comment.body, '@claude')`) so a runner only
|
|
119
122
|
starts when the agent is actually addressed.
|
|
@@ -126,3 +129,9 @@ capacity numbers into workflows or guidance.
|
|
|
126
129
|
four unintended releases on 2026-08-25.
|
|
127
130
|
- Every repository's release-intent gate must accept `no-release`; a gate that only
|
|
128
131
|
accepts `major`/`minor`/`patch` forces exactly that mistake.
|
|
132
|
+
- Do not merge a pull request that changes `.github/workflows/` while a release Publish
|
|
133
|
+
run in the same repository has not created its tag yet. `GITHUB_TOKEN` cannot tag a
|
|
134
|
+
commit whose workflows differ from the default branch, and rerunning fails the same
|
|
135
|
+
way. Recover with the Publish `workflow_dispatch` from current main.
|
|
136
|
+
- A release-verify job asserts that the GitHub release `v<version>` exists. A watch
|
|
137
|
+
picks the exact run by head SHA, never by a time window.
|
|
@@ -85,6 +85,10 @@ _service.DidNotReceive().DoSomethingElse(Arg.Any<int>());
|
|
|
85
85
|
_handler.Handle(Arg.Any<CommandContext>()).Throws(new Exception("fail"));
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
A change to a widely substituted interface runs the whole affected spec project,
|
|
89
|
+
not one spec. Grep for `Substitute.For<IThatInterface>` to find every substitute
|
|
90
|
+
that needs updating.
|
|
91
|
+
|
|
88
92
|
Catch exceptions for a unit under test with `Catch.Exception`:
|
|
89
93
|
|
|
90
94
|
```csharp
|
package/package/corpus/skills/cratis-ci-pipeline-performance/references/build-once-and-shard.md
CHANGED
|
@@ -115,7 +115,8 @@ adding a project cannot leave it unassigned; review the list when a project is a
|
|
|
115
115
|
|
|
116
116
|
To balance, read each shard job's median duration from the slowest-jobs table of
|
|
117
117
|
`ci-timings.sh`, move a project from the longest shard to the shortest, and
|
|
118
|
-
re-measure; stop when the spread is within the job start cost.
|
|
118
|
+
re-measure; stop when the spread is within the job start cost. Balance by
|
|
119
|
+
measured wall time, and confirm the new split on one real CI run before merging it.
|
|
119
120
|
|
|
120
121
|
## Decisions
|
|
121
122
|
|
|
@@ -42,10 +42,13 @@ before an external effect. A request to verify does not authorize a push.
|
|
|
42
42
|
not a universal framework-specific scanner in this corpus.
|
|
43
43
|
3. Prefer the repository's existing gate script. If none exists, keep a small
|
|
44
44
|
local runner under `.ai-work/`, with each phase's real exit status preserved.
|
|
45
|
-
Do not substitute only the touched projects for the final gate.
|
|
45
|
+
Do not substitute only the touched projects for the final gate. The done gate
|
|
46
|
+
runs its tier's CI shards unfiltered; filters are for iterating only.
|
|
46
47
|
4. **Tier 1** is the whole-solution build with CI's configuration and warning
|
|
47
48
|
settings, lint/format, and every non-integration test project. For example,
|
|
48
|
-
use Release with warnings as errors when that is what CI uses.
|
|
49
|
+
use Release with warnings as errors when that is what CI uses. For a
|
|
50
|
+
dependency or analyzer bump, that exact CI Release build is the gate; a Debug
|
|
51
|
+
build is not evidence.
|
|
49
52
|
5. **Tier 2** adds integration tests. The repository's tier policy decides
|
|
50
53
|
whether they run locally. The default is CI-backed integration only if CI
|
|
51
54
|
runs that coverage, it passes before merge, and reviewer notes say it was
|
|
@@ -53,6 +56,9 @@ before an external effect. A request to verify does not authorize a push.
|
|
|
53
56
|
6. Name anything CI runs that cannot run locally: services, platforms, secrets
|
|
54
57
|
or hosted checks. Say what ran instead and what remains unverified before
|
|
55
58
|
pushing. Missing coverage is not a local pass.
|
|
59
|
+
7. A change to a command, read model or query shape runs the repository's proxy
|
|
60
|
+
and API regeneration checks; never hand-edit generated files. A package bump
|
|
61
|
+
regenerates the checked-in snapshots that pin versions, in the same commit.
|
|
56
62
|
|
|
57
63
|
Use affected-project checks while coding and writing specifications. Build once
|
|
58
64
|
at the end: run the full local gate when the work is believed complete, not after
|
|
@@ -93,6 +93,14 @@ boundary that makes a change safe to adopt. One item can follow this shape:
|
|
|
93
93
|
That is a checklist for facts, not a template to repeat word-for-word across
|
|
94
94
|
items. Use descriptive headings, meaningful links, and natural sentence rhythm.
|
|
95
95
|
|
|
96
|
+
A `no-release` PR body still follows this contract. Its `(#n)` closes nothing
|
|
97
|
+
because no release runs, so the issue is closed separately, and only when the
|
|
98
|
+
request includes that effect; never imply automatic closing (see the issue
|
|
99
|
+
section of [pull-requests.md](../../rules/pull-requests.md)).
|
|
100
|
+
|
|
101
|
+
For every pull request, write the body file in a step of its own before
|
|
102
|
+
`gh pr create --body-file`.
|
|
103
|
+
|
|
96
104
|
## Repair an already-published release
|
|
97
105
|
|
|
98
106
|
Only when asked to fix a release that violates the contract:
|
|
@@ -134,6 +142,14 @@ dispatch the publish workflow from the current default branch with the PR's
|
|
|
134
142
|
release notes. Re-running the stale commit does not fix this. Other 403s keep
|
|
135
143
|
their original cause; do not treat every permission failure as workflow drift.
|
|
136
144
|
|
|
145
|
+
Before re-running a cancelled publish, check
|
|
146
|
+
`git merge-base --is-ancestor <merge-commit> <latest-release-tag>`. If it is an
|
|
147
|
+
ancestor, a release already contains the change, so do not cut another version.
|
|
148
|
+
The tag alone does not prove it shipped: a release can be created before its
|
|
149
|
+
publishing jobs run. Confirm that the containing release's publish run completed
|
|
150
|
+
every publishing job and its packages exist before reporting it shipped;
|
|
151
|
+
otherwise recover that version's publishing rather than releasing again.
|
|
152
|
+
|
|
137
153
|
## Verify before handing over
|
|
138
154
|
|
|
139
155
|
1. Reconcile every version, affected range, capability and API against the
|