cratis-release-notes
Draft or review developer-facing release notes and migration guidance from verified changes for a specific Cratis product version. Use for GitHub releases, upgrade guides, and release announcements; not for deciding release authority, publishing, or selecting a version label.
- License 许可
- MIT
- 最近更新
- 2026-11-14
- Stars
- ★ 1
- Forks
- 1
01 前言 Front Matter
- name
- cratis-release-notes
- license
- MIT
- description
- Draft or review developer-facing release notes and migration guidance from verified changes for a specific Cratis product version. Use for GitHub releases, upgrade guides, and release announcements; not for deciding release authority, publishing, or selecting a version label.
02 资源文件 1
- 许可证LICENSE199 B
03 SKILL.md 正文
<!-- cratis-ai-managed: skills/cratis-release-notes/SKILL.md -->
Release notes for the person upgrading
An upgrader wants to know whether their application changes, what will break,
and what to do before installing. A feature list and a list of pull request
titles cannot answer that. This skill writes the communication, not the
release decision. The repository's release workflow owns version intent,
gates, publication and recovery; drafting never authorizes publishing or
editing a release. If the task also includes release planning, select the
separate cratis/methodology/governed-releases profile as needed; that is not
required to draft notes.
Establish the exact subject
Before writing, identify product, tag or candidate version, previous version, artifact/package names, supported platforms, and the audience. Inventory observable changes from the diff, specs, linked issues/PRs, and authoritative product source at that revision. A PR description is published verbatim as release notes in a Cratis repository; follow its current template and the pull-request contract, and confirm that behavior before drafting. Do not turn a draft into a claim about shipped behavior.
For each change, ask: who uses this path, what happened before, what happens now, is action required, and how would they notice? Check changed defaults, serialization/schema/data migrations, runtime and dependency compatibility, deploy ordering, deprecations/removals, and upgrade/rollback limits. Report what was not verified to the requester or in a PR comment; the published note states only verified facts and never says 'not verified'.
Cratis products move together at their seams: the Chronicle kernel and its clients, Arc and Chronicle, Components and Arc. When a change touches a seam, state supported pairings as facts the reader can act on ('Requires Chronicle kernel 19.25 or later'). Which pairings were tested, and against which branch or commit, is evidence for the PR comment. There is no central compatibility matrix to defer to, so the release note may be the only place a reader learns the supported pairings. Where a measurement drove the change, such as how many deployments hit a failure, give the number; never estimate one to add weight.
Write for the right channel
- Exact-version release note (GitHub/PR): in a Cratis repository this is
the merged PR description, published verbatim, so it follows the contract in
pull-requests.md, which holds the full
rules. The ones most often broken: no development write-up (no Overview,
Verification or Test plan headings, no review or provenance notes; those go
in a PR comment);
(#n)at the end of the bullet that delivers an issue and(part of #n)for anything that stays open (in repositories released bycratis/release-action,(#n)is what closes the issue), neverCloses,FixesorRefsbefore a number (also in bold or a link), and no issue reference inside an HTML comment (release-action removes comments before publishing, so the issue is silently not closed; a body that is only a comment counts as empty and GitHub generates the notes); and absolutehttps://links only. Sections are in a fixed order (Added, Changed, Fixed, Removed, Security, Deprecated); within a section, put changes requiring action first, then new capabilities and fixes. State impact and the user's next action in plain language: state an upgrade action in its## Changedor## Removedbullet (a first## Summarysection or an unheaded lead paragraph, not both, may mention it too). Do not list internal refactors or specs that change nothing users observe. For a user-visible fix, a sentence of root cause and of what now guards against a regression, stated as observable behavior rather than a list of specs, is user-facing: it tells the reader whether to trust the fix. Credit an external contributor by name or handle and say what they did, unless they asked not to be named. - Migration guide (durable product docs): a compact old behavior → new behavior → required action table for each affected upgrade path, followed by source-verified before/after code or commands. Distinguish required migration from optional cleanup, name sequencing for schema/data changes, and explain escape hatches with their cost or expiry. If no action is needed, state why and for whom, rather than implying it for everyone. State the table's scope and its known exclusions, so a reader who does not find their API knows whether it was assessed. Do not infer backward compatibility for APIs or configurations that were not assessed.
- Announcement or blog post: explain the motivation and show a small realistic success, then link to the exact-version note and migration guide. It is not a second independent changelog. Do not claim personal experience on behalf of a named author without their review.
Keep the release note concise enough to scan, but do not compress away the boundary that makes a change safe to adopt. One item can follow this shape:
Applications that run [workflow] on [affected versions] may observe [symptom]. In [new version], [new behavior]. [Action] before upgrading; [unaffected path] does not need to change. [Migration guide].
That is a checklist for facts, not a template to repeat word-for-word across items. Use descriptive headings, meaningful links, and natural sentence rhythm.
Repair an already-published release
Only when asked to fix a release that violates the contract:
- Read the published body (
gh release view TAG --json body) and the merged PR. Keep the facts; remove headings, review and verification lines, internal status and closing keywords, and turn relative links intohttps://URLs. Do not invent changes, versions or issue numbers. - Publish the corrected text with
gh release edit TAG --notes-file FILE, only when the request authorizes editing that release. Read back the body withgh release view TAG --json bodyand compare it with the corrected text. If it differs, correct and repeat the authorized edit and readback, or report the blocker rather than claiming the repair succeeded. - In a repository released by
cratis/release-action, editing a release does not re-run release-action, so an issue that a(#n)would have closed stays open. For each one, confirm the release actually delivered it. Close it by hand with a comment naming the release only when the request covers closing issues; otherwise list the issues as a proposal. Leave an issue open when the release only partly delivered it.
Verify before handing over
- Reconcile every version, affected range, capability and API against the release tag or exact candidate and published artifact when available; verify each reference and link. A blog post or release summary is a pointer to source, not proof that a compatibility issue is resolved.
- Have a reader of the affected integration check that the instructions are actionable. Exercise upgrade commands and compile before/after examples with stated versions when feasible; use cratis-technical-examples for the example workflow.
- Recheck the evergreen migration guide after release. Remove 'upcoming',
prerelease pins and obsolete workaround language only after verifying the
final tag. Separate live guidance from a historically accurate note for an
older release. Preserve the owning site's machine-consumed guide format:
Cratis's upgrade picker reads
upgrading/major-versions.mdheadings such as### 18 to 19, linked at-a-glance rows,**Title** — released YYYY-MM-DDmetadata, and explicit**You do:**actions. Checksync-upgrade-paths.mjsand an existing guide before changing that structure, then verify the generated picker as well as the page. - Name the checks actually run and the combinations not checked to the requester or in a PR comment, never in the published note. Do not imply that a green docs build proved an upgrade safe.
The pattern is informed by Wolverine's migration guide and Marten's migration guide, which separate concrete upgrade actions from version-specific release notes. Their current wording is not authority for Cratis versions or APIs.
04 同仓库更多 Skills
vectorization
Designs, implements, optimizes, and reviews SIMD code in .NET: vectorizing scalar loops with TensorPrimitives, Vector64, Vector128, Vector256, Vector512, or hardware intrinsics, and reviewing existing SIMD code, including the generic Vector type, for contract equivalence, tail handling, memory safety, portability, fallbacks, and measured performance. Use when a .NET loop or SIMD routine is being written or reviewed. Not for performance work unrelated to SIMD.
target-authoring
Canonical patterns for writing custom MSBuild targets: DependsOnTargets versus BeforeTargets and AfterTargets, the Build-to-CoreBuild three-level pattern, and the XxxDependsOn chain-extension pattern. Use when diagnosing or fixing custom-target anti-patterns: Directory.Build.targets redefining SDK targets, targets that replace CompileDependsOn instead of extending it, Outputs versus Returns misuse that returns stale results, missing Inputs/Outputs causing needless rebuilds, or missing FileWrites registration. Not for incremental build tuning or general anti-pattern review (use the msbuild skill), or non-MSBuild build systems.
run-tests
Chooses and runs the repository-compatible .NET test command: classic, VSTest, bridged MTP, or native MTP syntax for MSTest, xUnit, NUnit, and TUnit. Use before running .NET tests or answering with a test command or flags: run the tests, one test, class, category, trait or target framework, combined filters, --filter-query, --no-build, --diag, TRX, coverage collection, crash or hang dumps, filter errors, or unrecognized options. Not for platform identification alone (use platform-detection), writing or debugging test code, interpreting a coverage report (use coverage-analysis), CI investigation, migration, or a persistent hot-reload loop.
profiling
Uses the free official .NET diagnostics CLI tools for profiling and runtime investigation in a repository: CPU, GC pressure, allocation growth, exception storms, lock contention, and slow code. Use when a .NET application needs performance or runtime profiling. Not for replacing realistic performance or load tests with ad-hoc tracing, production heap collection without a pause-risk plan, crash dumps (use dump-collect), or benchmark design (use microbenchmarking).
platform-detection
Identifies a .NET project's test platform, framework, command mode, and SDK-style versus classic project system, resolving global.json, project, packages.config, Directory.Build.props, and Directory.Packages.props precedence for MSTest, xUnit, NUnit, and TUnit. Use when asking "which test platform or framework?", "VSTest or MTP?", or "what runner does this project use?", including bridge settings, UseVSTest opt-outs, and conflicting VSTest/MTP configuration. Not for running or filtering tests, commands, flags, TRX, dumps, or test-command errors (use run-tests), or for hot-reload or migration requests.
orleans
Designs Microsoft Orleans systems from each primitive's purpose and failure model: grains, digital twins, state versus databases, transactions, messaging, streams, timers, reminders, Durable Jobs, stateless workers, grain services, startup, and hosting. Use when a task needs an Orleans design decision: inspect version and topology, choose the primitive, implement, and validate. Not for other actor stacks, batch processing, relational-only CRUD, or advice without an Orleans decision.