Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7cdf832
feat(release): add deterministic release-facts and release-changelog …
martintmk Aug 12, 2026
8bdffd7
feat(release): add AI-agentic release skill with multi-model consensus
martintmk Aug 12, 2026
844e19f
fix(release): address multi-model review of the release skill
martintmk Aug 12, 2026
6280cc0
fix(release): scope determinism claim to fact-determined scenarios
martintmk Aug 12, 2026
30809f1
docs(release): make change-spec optional and report consensus ambiguity
martintmk Aug 13, 2026
7a984dd
refactor(release): retire the script-heavy plan engine for the prompt
martintmk Aug 13, 2026
7631363
merge: integrate origin/main into PR branch (auto-resolved conflicts)
martintmk Aug 13, 2026
09b4b87
feat(release): package release workflow as skill
martintmk Aug 13, 2026
74d4c63
chore(ci): avoid workflow-only comment update
martintmk Aug 13, 2026
2efd9b5
fix(release): harden historical release validation
martintmk Aug 13, 2026
c57ecb8
fix(release): clarify changed-package classification
martintmk Aug 13, 2026
ce2fa05
merge: integrate origin/main into release skill
martintmk Aug 13, 2026
29a6d8a
fix(release): make exposure tests portable
martintmk Aug 13, 2026
88f734c
fix(release): make proc macro cascades contract aware
martintmk Aug 14, 2026
d6ad62d
docs(release): correct skill script paths
martintmk Aug 14, 2026
b029d1d
fix(release): make package selection deterministic
martintmk Aug 14, 2026
a1cda27
fix(release): harden release evidence
martintmk Aug 14, 2026
de2e83d
fix(release): classify manifest changes deterministically
martintmk Aug 14, 2026
2e0f890
fix(release): make macro, behavior, and dependency verdicts determini…
martintmk Aug 17, 2026
932d512
fix(release): normalize decline reason and macro review scope
martintmk Aug 17, 2026
b58d192
fix(release): pin doc-only selection with a positive doc-comment fact
martintmk Aug 17, 2026
9000d18
refactor(release): deduplicate resolver and facts helpers
martintmk Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .github/skills/release-packages/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
Comment thread
martintmk marked this conversation as resolved.
name: release-packages
description: Plan and apply deterministic Oxidizer workspace package releases. Use for targeted, changed, or all-package releases; version bumps; dependency cascades; proc-macro review; changelogs; and release validation.
license: MIT
---

# Release Oxidizer packages

Create an exact release plan, verify it across independent reasoning models, and
apply it atomically.

## Required reading

1. Read `docs/releasing.md` for repository terminology and compatibility rules.
2. Read `references/planning.md` for classification, elevation, consensus, and
apply rules.
3. Read `references/version-rules.md` before reviewing a plan.

## Deterministic helpers

Run these from the repository root:

- `.github/skills/release-packages/scripts/release-facts.ps1` gathers the
workspace graph, release baselines,
modification state, public type exposure, macro publication, implementation
closures, and generated-runtime relationships.
- `.github/skills/release-packages/scripts/resolve-plan.ps1` performs token
parsing, version arithmetic, pins, type- and macro-contract-aware cascades,
ambiguity reporting, and topological ordering.
- `.github/skills/release-packages/scripts/apply-plan.ps1` performs version
writes, changelog and README generation, validation, and rollback.
- `.github/skills/release-packages/scripts/release-changelog.ps1` writes one
deterministic changelog.

Never reproduce their work by hand.

## Workflow

1. **Preflight**
- Require PowerShell 7, Cargo, `cargo semver-checks`, and a clean baseline.
- Record `git rev-parse HEAD` and `git status --porcelain`.

2. **Gather facts**
- Run `.github/skills/release-packages/scripts/release-facts.ps1` and save its
JSON.
- Determine targeted, changed, or all mode.

3. **Classify**
- For every ordinary, previously released library that may enter the plan,
run `cargo semver-checks` against its `baselineSha`.
- Review each affected proc-macro contract across its
`macroImplementationClosure` and `macroRuntimePartners`.
- Record a `macroContracts` attestation covering exported macros, accepted
syntax, compile behavior, generated API, runtime paths, and hygiene.
- Measure every fixture the facts list in `macroCompileFixtureChanges` by
compiling it at `baselineRev` and at the current revision, and record each
result in `macroContracts.<package>.compileEvidence`. The resolver derives
the verdict floor from those measurements and blocks a weaker verdict.
- Retain `manualReview: true`.
- Review every candidate according to the deterministic selection table in
`references/planning.md`. Record an evidenced `selectionDecisions` entry
for every candidate; never omit a package because its changes look
mechanical.
- For a `behavior-fix` reason, measure a consumer-runtime, consumer-compile,
or packaged-artifact probe at the release baseline and at the current
revision, and record both runs in
`selectionDecisions.<package>.regressionEvidence`. Only a baseline failure
that now passes demonstrates the fix; a preserved-behavior refactor is
`internal-only`.
- Check `externalDepChanges` against `externalExposedDeps`. A breaking
external requirement change on a publicly exposed dependency forces a
`breaking` classification and a `breaking` selection reason; the resolver
blocks anything weaker. Private external dependencies and proc-macro-only
packages are unaffected.
- Classify implemented source and verified consumer behavior. TODOs, design
notes, and roadmap text are not compatibility evidence.
- If resolution reports missing classifications, classify the complete
dependent closure it names and rerun with the same frozen facts.
- Invoke the resolver with the complete decision map even when every
candidate is declined; the canonical result is an empty resolved plan.

4. **Resolve mechanically**
- Write request JSON containing `mode`, accepted `tokens`,
`selectionDecisions`, `classifications`, required `macroContracts`, and
optional `force`.
- Run `.github/skills/release-packages/scripts/resolve-plan.ps1 -FactsPath
<facts.json> -RequestPath <request.json>`.
- Treat its release set, versions, cascade reasons, and ordering as canonical.
- If it returns `status: blocked`, review every package named in
`ambiguities` and rerun with the same frozen facts. Never convert an
unresolved macro contract into a conservative breaking guess.
- In changed or all mode, do not apply an empty resolved plan.

5. **Consensus**
- Freeze the facts, classifications, reviewed evidence, request, and resolved
plan.
- Ask at least two additional model families to review the classifications
and verify that the resolved plan follows from them.
- Do not ask models to independently redo version arithmetic or cascade
resolution.
- Stop with the structured ambiguity report from `references/planning.md` if
classifications or rules diverge.

6. **Apply atomically**
- Run `.github/skills/release-packages/scripts/apply-plan.ps1 -PlanPath
<plan.json>`.
- Never reproduce its writes or rollback behavior by hand.

7. **Report**
- Emit the canonical JSON plan and a concise table.
- Include manual-review flags, warnings, and consensus status.
- Copy normalized release fields and resolver warnings directly from
`plan.json`; keep environment or methodology notes separate.

Do not publish packages unless the user explicitly requests publication.
Loading