release-skill 0.1.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/.agents/plugins/marketplace.json +23 -0
- package/.claude-plugin/marketplace.json +16 -0
- package/.claude-plugin/plugin.json +10 -0
- package/.codex-plugin/plugin.json +26 -0
- package/CHANGELOG.md +68 -0
- package/CODE_OF_CONDUCT.md +76 -0
- package/CONTRIBUTING.md +49 -0
- package/INSTALL.md +182 -0
- package/LICENSE +21 -0
- package/NOTICE +25 -0
- package/README.md +501 -0
- package/README.zh-CN.md +463 -0
- package/SECURITY.md +48 -0
- package/adapters/claude/.claude-plugin/marketplace.json +16 -0
- package/adapters/claude/.claude-plugin/plugin.json +10 -0
- package/adapters/claude/skills/release-assess/SKILL.md +52 -0
- package/adapters/claude/skills/release-help/SKILL.md +60 -0
- package/adapters/claude/skills/release-prepare/SKILL.md +71 -0
- package/adapters/claude/skills/release-publish/SKILL.md +55 -0
- package/adapters/claude/skills/release-reconcile/SKILL.md +73 -0
- package/adapters/claude/skills/release-verify/SKILL.md +70 -0
- package/adapters/codex/.codex-plugin/plugin.json +26 -0
- package/adapters/codex/skills/release-assess/SKILL.md +52 -0
- package/adapters/codex/skills/release-help/SKILL.md +60 -0
- package/adapters/codex/skills/release-prepare/SKILL.md +71 -0
- package/adapters/codex/skills/release-publish/SKILL.md +55 -0
- package/adapters/codex/skills/release-reconcile/SKILL.md +73 -0
- package/adapters/codex/skills/release-verify/SKILL.md +70 -0
- package/bin/release-skill.mjs +743 -0
- package/native/safe-write/binding.gyp +40 -0
- package/native/safe-write/prebuilds.json +4 -0
- package/native/safe-write/src/safe_write.cc +2023 -0
- package/package.json +75 -0
- package/references/.render-manifest.json +33 -0
- package/references/00-target-state.md +124 -0
- package/references/01-state-machine.md +155 -0
- package/references/02-project-config.md +217 -0
- package/references/03-readme-quality.md +136 -0
- package/references/04-supply-chain.md +147 -0
- package/references/05-evidence-and-errors.md +164 -0
- package/references/06-adapter-contract.md +178 -0
- package/schemas/.render-manifest.json +37 -0
- package/schemas/approval-record.schema.json +115 -0
- package/schemas/artifact-lock.schema.json +111 -0
- package/schemas/artifact-plan.schema.json +52 -0
- package/schemas/artifact-policy.schema.json +76 -0
- package/schemas/evidence-event.schema.json +89 -0
- package/schemas/release-plan.schema.json +369 -0
- package/schemas/release-project.schema.json +359 -0
- package/schemas/release-run.schema.json +195 -0
- package/skills/release-assess/SKILL.md +52 -0
- package/skills/release-help/SKILL.md +60 -0
- package/skills/release-prepare/SKILL.md +71 -0
- package/skills/release-publish/SKILL.md +55 -0
- package/skills/release-reconcile/SKILL.md +73 -0
- package/skills/release-verify/SKILL.md +70 -0
- package/skills-src/release-assess/SKILL.md +52 -0
- package/skills-src/release-help/SKILL.md +60 -0
- package/skills-src/release-prepare/SKILL.md +71 -0
- package/skills-src/release-publish/SKILL.md +55 -0
- package/skills-src/release-reconcile/SKILL.md +73 -0
- package/skills-src/release-verify/SKILL.md +70 -0
- package/src/adapters/contract.mjs +214 -0
- package/src/adapters/git-github.mjs +214 -0
- package/src/adapters/npm.mjs +947 -0
- package/src/adapters/plugin-marketplace.mjs +1365 -0
- package/src/adapters/push-snapshot.mjs +216 -0
- package/src/artifacts/adoption.mjs +743 -0
- package/src/artifacts/artifact-plan.mjs +162 -0
- package/src/artifacts/entry.mjs +240 -0
- package/src/artifacts/git-authority.mjs +637 -0
- package/src/artifacts/graph.mjs +189 -0
- package/src/artifacts/inspect.mjs +520 -0
- package/src/artifacts/inventory.mjs +192 -0
- package/src/artifacts/merge/binary.mjs +77 -0
- package/src/artifacts/merge/entry-merge.mjs +228 -0
- package/src/artifacts/merge/json.mjs +641 -0
- package/src/artifacts/merge/markdown.mjs +246 -0
- package/src/artifacts/merge/regions.mjs +156 -0
- package/src/artifacts/merge/text.mjs +432 -0
- package/src/artifacts/merge/tree.mjs +202 -0
- package/src/artifacts/merge/yaml.mjs +669 -0
- package/src/artifacts/path-key.mjs +94 -0
- package/src/artifacts/policy.mjs +319 -0
- package/src/artifacts/producer-registry.mjs +439 -0
- package/src/artifacts/project-lock.mjs +732 -0
- package/src/artifacts/resolution.mjs +658 -0
- package/src/artifacts/safe-fs-backend-internal.mjs +680 -0
- package/src/artifacts/safe-fs.mjs +72 -0
- package/src/artifacts/state.mjs +495 -0
- package/src/artifacts/transaction-journal.mjs +983 -0
- package/src/artifacts/transaction.mjs +1361 -0
- package/src/commands/approve.mjs +280 -0
- package/src/commands/artifacts.mjs +627 -0
- package/src/commands/assess.mjs +838 -0
- package/src/commands/prepare.mjs +1377 -0
- package/src/commands/publish.mjs +883 -0
- package/src/commands/reconcile.mjs +1255 -0
- package/src/commands/verify.mjs +915 -0
- package/src/core/approval.mjs +332 -0
- package/src/core/baseline.mjs +272 -0
- package/src/core/blackbox-hard-gates.mjs +142 -0
- package/src/core/config.mjs +448 -0
- package/src/core/digest.mjs +90 -0
- package/src/core/errors.mjs +113 -0
- package/src/core/evidence.mjs +167 -0
- package/src/core/hooks.mjs +241 -0
- package/src/core/node-version.mjs +64 -0
- package/src/core/plan.mjs +735 -0
- package/src/core/previous-public-baseline.mjs +204 -0
- package/src/core/run.mjs +681 -0
- package/src/core/state-machine.mjs +76 -0
- package/src/core/version-consistency.mjs +111 -0
- package/src/producers/build-adapters.mjs +231 -0
- package/src/producers/render-public-assets.mjs +152 -0
- package/src/producers/sync-skills.mjs +96 -0
- package/src/readme/contract.mjs +297 -0
- package/src/readme/examples.mjs +288 -0
- package/src/readme/parity.mjs +122 -0
- package/src/snapshot/export.mjs +99 -0
- package/src/snapshot/frozen.mjs +401 -0
- package/src/snapshot/manifest.mjs +207 -0
- package/src/snapshot/public-map.mjs +1459 -0
- package/src/snapshot/public-path.mjs +110 -0
- package/src/snapshot/scan.mjs +419 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-skill",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "Release Skill",
|
|
5
|
+
"shortDescription": "Safe preparation and frozen GitHub/npm production publishing",
|
|
6
|
+
"category": "DevOps"
|
|
7
|
+
},
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "release-skill",
|
|
11
|
+
"source": {
|
|
12
|
+
"source": "local",
|
|
13
|
+
"path": "./"
|
|
14
|
+
},
|
|
15
|
+
"policy": {
|
|
16
|
+
"installation": "AVAILABLE",
|
|
17
|
+
"authentication": "ON_INSTALL"
|
|
18
|
+
},
|
|
19
|
+
"category": "DevOps",
|
|
20
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-skill",
|
|
3
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "mzdbxqh",
|
|
6
|
+
"url": "https://github.com/mzdbxqh"
|
|
7
|
+
},
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "release-skill",
|
|
11
|
+
"source": "./",
|
|
12
|
+
"version": "0.1.1",
|
|
13
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-skill",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "release-skill contributors"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"skills": "./skills/"
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-skill",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "release-skill contributors"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"skills": "./skills/",
|
|
10
|
+
"interface": {
|
|
11
|
+
"displayName": "Release Skill",
|
|
12
|
+
"shortDescription": "Safe preparation and frozen GitHub/npm publishing",
|
|
13
|
+
"longDescription": "Prepares byte-faithful public snapshots without rewriting project source files and publishes approved frozen GitHub/npm artifacts. Full happy end verification confirms consumer installation from frozen Git ref.",
|
|
14
|
+
"developerName": "release-skill",
|
|
15
|
+
"category": "DevOps",
|
|
16
|
+
"capabilities": [
|
|
17
|
+
"Write",
|
|
18
|
+
"Interactive"
|
|
19
|
+
],
|
|
20
|
+
"defaultPrompt": [
|
|
21
|
+
"Assess this project for release readiness.",
|
|
22
|
+
"Prepare a release plan for version 0.1.1.",
|
|
23
|
+
"Help me understand the release workflow."
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `release-skill` plugin will be documented in this
|
|
4
|
+
file. The format is based on [Keep a Changelog](https://keepachangelog.com/).
|
|
5
|
+
|
|
6
|
+
## [0.1.1] - 2026-07-18
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- **Stable npm byte handoff on macOS and Linux**: production publishing no
|
|
11
|
+
longer passes `/dev/fd/*` or a mutable named path to npm. The adapter opens
|
|
12
|
+
the frozen tarball with `O_NOFOLLOW`, verifies file identity, SHA-256,
|
|
13
|
+
SHA-512 SRI, and embedded package name/version, then gives the same in-memory
|
|
14
|
+
`Buffer` to `libnpmpublish`.
|
|
15
|
+
- **Registry and publisher authority**: plans freeze an explicit HTTPS npm
|
|
16
|
+
registry and publisher. Preflight, token-specific `whoami`, publish,
|
|
17
|
+
observation, and consumer install all use that registry; bearer credentials
|
|
18
|
+
are sent with `forceAuth` and never fall back to ambient identity.
|
|
19
|
+
- **Pre-write tarball identity gate**: prepare and publish global preflight
|
|
20
|
+
reject a tarball whose manifest name/version or independently computed
|
|
21
|
+
integrity differs from the frozen unit and distribution, before any Git or
|
|
22
|
+
npm external action executes.
|
|
23
|
+
- **Digest-addressed plan and approval history**: production commands consume
|
|
24
|
+
`plans/<planDigest>.json` and
|
|
25
|
+
`approvals/<planDigest>/<approvalDigest>.json`. Renewing an expired approval
|
|
26
|
+
preserves prior approval bytes, so a long-lived PARTIAL recovery remains
|
|
27
|
+
auditable without reusing expired authority.
|
|
28
|
+
- **Reconcile succeeded checkpoint fail-closed**: when re-observing a
|
|
29
|
+
succeeded checkpoint, if the remote returns empty/error/uncertain state,
|
|
30
|
+
reconcile now fails closed with REMOTE_CONFLICT instead of adding to the
|
|
31
|
+
retry list. This prevents blind re-execution of already-succeeded actions.
|
|
32
|
+
- **Production README blocking findings**: missing required markers and
|
|
33
|
+
readability requirements (install command, minimal example, failure
|
|
34
|
+
diagnosis) in production prepare are now blocking findings (GATE_FAILED),
|
|
35
|
+
not warnings.
|
|
36
|
+
|
|
37
|
+
## [0.1.0] - 2026-07-15
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **release-help** skill: discoverable entry point with environment checks,
|
|
42
|
+
capability overview, minimal examples, read-only diagnosis, dry-run
|
|
43
|
+
guidance, and failure triage.
|
|
44
|
+
- **release-assess** skill: read-only project topology identification and
|
|
45
|
+
gap evaluation for documentation, configuration, supply chain, and
|
|
46
|
+
release workflow.
|
|
47
|
+
- **release-prepare** skill: gate execution and release plan freezing
|
|
48
|
+
without any external writes.
|
|
49
|
+
- **release-publish** skill: external release checkpoint execution from
|
|
50
|
+
an approved, non-expired release plan.
|
|
51
|
+
- **release-reconcile** skill: remote state querying, partial success
|
|
52
|
+
handling, safe retries, and post-publish verification.
|
|
53
|
+
- Deterministic release state machine:
|
|
54
|
+
DISCOVERED -> ASSESSED -> PREPARED -> APPROVED -> PUBLISHING -> PUBLISHED -> VERIFIED.
|
|
55
|
+
- Exception states: NEEDS_INPUT, BLOCKED, PARTIAL.
|
|
56
|
+
- Adapter layer for Git/GitHub, npm, Claude Code marketplace, and Codex
|
|
57
|
+
marketplace.
|
|
58
|
+
- Project declaration via `.release-skill/project.yaml` configuration.
|
|
59
|
+
- Hook execution model with executable/argument arrays, relative cwd,
|
|
60
|
+
timeout, and environment allowlist.
|
|
61
|
+
- Structured evidence output in JSON/JSONL format with per-step
|
|
62
|
+
checkpointing.
|
|
63
|
+
- Read-only assess and prepare phases; publish requires explicit approval
|
|
64
|
+
bound to a frozen release plan digest.
|
|
65
|
+
- 24-hour approval expiry with automatic invalidation on plan, tree hash,
|
|
66
|
+
target version, or remote conflict changes.
|
|
67
|
+
- Reconcile with idempotent skip of already-consistent steps and safe
|
|
68
|
+
retry of incomplete actions.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in
|
|
6
|
+
our community a harassment-free experience for everyone, regardless of age,
|
|
7
|
+
body size, visible or invisible disability, ethnicity, sex characteristics,
|
|
8
|
+
gender identity and expression, level of experience, education,
|
|
9
|
+
socio-economic status, nationality, personal appearance, race, caste, color,
|
|
10
|
+
religion, or sexual identity and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment:
|
|
18
|
+
|
|
19
|
+
- Using welcoming and inclusive language
|
|
20
|
+
- Being respectful of differing viewpoints and experiences
|
|
21
|
+
- Giving and gracefully accepting constructive feedback
|
|
22
|
+
- Accepting responsibility and apologizing to those affected by our
|
|
23
|
+
mistakes, and learning from the experience
|
|
24
|
+
- Focusing on what is best not just for us as individuals, but for the
|
|
25
|
+
overall community
|
|
26
|
+
|
|
27
|
+
Examples of unacceptable behavior:
|
|
28
|
+
|
|
29
|
+
- The use of sexualized language or imagery, and sexual attention or
|
|
30
|
+
advances of any kind
|
|
31
|
+
- Trolling, insulting or derogatory comments, and personal or political
|
|
32
|
+
attacks
|
|
33
|
+
- Public or private harassment
|
|
34
|
+
- Publishing others' private information, such as a physical or email
|
|
35
|
+
address, without their explicit permission
|
|
36
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
37
|
+
professional setting
|
|
38
|
+
|
|
39
|
+
## Enforcement Responsibilities
|
|
40
|
+
|
|
41
|
+
Community leaders are responsible for clarifying and enforcing our standards
|
|
42
|
+
of acceptable behavior and will take appropriate and fair corrective action
|
|
43
|
+
in response to any behavior that they deem inappropriate, threatening,
|
|
44
|
+
offensive, or harmful.
|
|
45
|
+
|
|
46
|
+
Community leaders have the right and responsibility to remove, edit, or
|
|
47
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
48
|
+
that are not aligned to this Code of Conduct, and will communicate reasons
|
|
49
|
+
for moderation decisions when appropriate.
|
|
50
|
+
|
|
51
|
+
## Scope
|
|
52
|
+
|
|
53
|
+
This Code of Conduct applies within all community spaces, and also applies
|
|
54
|
+
when an individual is officially representing the community in public
|
|
55
|
+
spaces.
|
|
56
|
+
|
|
57
|
+
## Enforcement
|
|
58
|
+
|
|
59
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
60
|
+
reported to the community leaders responsible for enforcement at the
|
|
61
|
+
project's GitHub repository.
|
|
62
|
+
|
|
63
|
+
All complaints will be reviewed and investigated promptly and fairly.
|
|
64
|
+
|
|
65
|
+
## Attribution
|
|
66
|
+
|
|
67
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
68
|
+
version 2.1, available at
|
|
69
|
+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
|
70
|
+
|
|
71
|
+
Community Impact Guidelines were inspired by
|
|
72
|
+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
|
73
|
+
|
|
74
|
+
[homepage]: https://www.contributor-covenant.org
|
|
75
|
+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
|
76
|
+
[Mozilla CoC]: https://github.com/mozilla/diversity
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Contributing to release-skill
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to release-skill.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
1. Fork and clone the repository.
|
|
8
|
+
2. Install dependencies: `pnpm install`.
|
|
9
|
+
3. Run tests: `pnpm test`.
|
|
10
|
+
4. Run syntax validation: `pnpm build`.
|
|
11
|
+
|
|
12
|
+
## Project Structure
|
|
13
|
+
|
|
14
|
+
- `skills-src/` - Skill definition source files (SKILL.md for each skill).
|
|
15
|
+
- `src/core/` - Deterministic release kernel (baseline, errors, evidence, hooks).
|
|
16
|
+
- `src/adapters/` - Registry adapters (Git/GitHub, npm, plugin marketplace).
|
|
17
|
+
- `bin/` - CLI entry point.
|
|
18
|
+
- `schemas/` - JSON Schema definitions for configuration and plans.
|
|
19
|
+
- `references/` - Rendered reference documentation.
|
|
20
|
+
- `test/` - Test suite.
|
|
21
|
+
|
|
22
|
+
## Development Guidelines
|
|
23
|
+
|
|
24
|
+
- All code uses ESM (`.mjs` extension) on Node.js 22+.
|
|
25
|
+
- All `.mjs` files must pass `node --check` (syntax validation).
|
|
26
|
+
- Hooks must use executable/argument arrays, not shell strings.
|
|
27
|
+
- Never include absolute paths like `/Users/...` in code or documentation.
|
|
28
|
+
- Test your changes before submitting a pull request.
|
|
29
|
+
|
|
30
|
+
## Pull Request Process
|
|
31
|
+
|
|
32
|
+
1. Create a feature branch from `main`.
|
|
33
|
+
2. Make your changes and ensure all tests pass.
|
|
34
|
+
3. Write clear commit messages describing what changed and why.
|
|
35
|
+
4. Open a pull request with a description of the change and any related
|
|
36
|
+
issue numbers.
|
|
37
|
+
|
|
38
|
+
## Code of Conduct
|
|
39
|
+
|
|
40
|
+
Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
41
|
+
|
|
42
|
+
## Reporting Issues
|
|
43
|
+
|
|
44
|
+
For non-security issues, please open a GitHub issue with:
|
|
45
|
+
|
|
46
|
+
- A clear description of the problem.
|
|
47
|
+
- Steps to reproduce.
|
|
48
|
+
- Expected vs. actual behavior.
|
|
49
|
+
- Your environment (Node.js version, OS).
|
package/INSTALL.md
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Installation Guide
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- Node.js 22.0.0 or later
|
|
6
|
+
- Git 2.30+
|
|
7
|
+
|
|
8
|
+
## Install from npm (recommended)
|
|
9
|
+
|
|
10
|
+
This repository is currently preparing the v0.1.1 release. Use the npm path
|
|
11
|
+
only after `npm view release-skill version` returns `0.1.1` (or newer). Before
|
|
12
|
+
that publication is verified, use the source checkout instructions below.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g release-skill
|
|
16
|
+
CLI=(release-skill)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or run directly without installing:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx release-skill help
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Verify:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
release-skill --version
|
|
29
|
+
release-skill help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
You should see the version number and the list of available commands.
|
|
33
|
+
|
|
34
|
+
## Development Install (Local Checkout)
|
|
35
|
+
|
|
36
|
+
For development or when working from source:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
export RELEASE_SKILL_HOME=/absolute/path/to/release-skill
|
|
40
|
+
cd "$RELEASE_SKILL_HOME"
|
|
41
|
+
npm exec --yes pnpm@10.17.1 -- install --frozen-lockfile
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Then use the CLI via:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
CLI=(node "$RELEASE_SKILL_HOME/packages/release-skill/bin/release-skill.mjs")
|
|
48
|
+
"${CLI[@]}" help
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
After `npm view release-skill version` confirms the supported version is
|
|
52
|
+
published and installed, the equivalent npm entry is `CLI=(release-skill)`.
|
|
53
|
+
|
|
54
|
+
## First Run
|
|
55
|
+
|
|
56
|
+
The safest first command is always `help`. It runs entirely locally and
|
|
57
|
+
performs no writes. Use the `CLI` array selected by the npm or source-checkout
|
|
58
|
+
instructions above; do not mix the two entry paths in one run.
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
"${CLI[@]}" help
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
To check if your project is ready for release governance:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
"${CLI[@]}" assess --root /path/to/your/project --offline --json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This command is read-only. It examines your project structure, configuration,
|
|
71
|
+
documentation, and supply chain, then outputs a gap report. Without an explicit
|
|
72
|
+
`--output`, `assess` writes no report file and never runs project hooks.
|
|
73
|
+
|
|
74
|
+
`prepare` is different: it writes release artifacts under the target project's
|
|
75
|
+
`.release-skill/` directory and may run configured hooks. Hooks are unsandboxed
|
|
76
|
+
arbitrary processes. They may write outside the project, access credentials,
|
|
77
|
+
use the network, or perform remote writes. Review the displayed executable,
|
|
78
|
+
arguments, and working directory before granting
|
|
79
|
+
`--acknowledge-hook-side-effects`.
|
|
80
|
+
|
|
81
|
+
For a Git repository, keep the human-owned project configuration while ignoring
|
|
82
|
+
generated authority and evidence:
|
|
83
|
+
|
|
84
|
+
```gitignore
|
|
85
|
+
.release-skill/*
|
|
86
|
+
!.release-skill/project.yaml
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Project Configuration
|
|
90
|
+
|
|
91
|
+
Create `.release-skill/project.yaml` in your project root. Here is a minimal
|
|
92
|
+
example for a single-package project:
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
apiVersion: release-skill/v1
|
|
96
|
+
kind: ReleaseProject
|
|
97
|
+
|
|
98
|
+
project:
|
|
99
|
+
name: my-project
|
|
100
|
+
defaultBranch: main
|
|
101
|
+
|
|
102
|
+
releaseUnits:
|
|
103
|
+
- id: my-project
|
|
104
|
+
source: .
|
|
105
|
+
publicRepo: owner/my-project
|
|
106
|
+
version:
|
|
107
|
+
source: package.json
|
|
108
|
+
tagTemplate: v{version}
|
|
109
|
+
distributions:
|
|
110
|
+
- type: npm
|
|
111
|
+
package: my-project
|
|
112
|
+
access: public
|
|
113
|
+
provenance: false
|
|
114
|
+
tag: latest
|
|
115
|
+
registry: https://registry.npmjs.org
|
|
116
|
+
publisher: my-npm-username
|
|
117
|
+
publicFiles:
|
|
118
|
+
- from: README.md
|
|
119
|
+
to: README.md
|
|
120
|
+
mode: preserve
|
|
121
|
+
- from: package.json
|
|
122
|
+
to: package.json
|
|
123
|
+
mode: preserve
|
|
124
|
+
- from: LICENSE
|
|
125
|
+
to: LICENSE
|
|
126
|
+
mode: preserve
|
|
127
|
+
requiredPublicFiles: [README.md, package.json, LICENSE]
|
|
128
|
+
previousPublicBaseline:
|
|
129
|
+
mode: none # only after confirming that no previous public version exists
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Advanced: hooks (optional)
|
|
133
|
+
|
|
134
|
+
Hooks are optional and run arbitrary local processes. They require explicit
|
|
135
|
+
`--acknowledge-hook-side-effects` authorization when used with `prepare`.
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
hooks:
|
|
139
|
+
build:
|
|
140
|
+
command: [npm, run, build]
|
|
141
|
+
test:
|
|
142
|
+
command: [npm, test]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
See the [full README](README.md) for hook parameter constraints and safety
|
|
146
|
+
requirements.
|
|
147
|
+
|
|
148
|
+
## Protect Human-Owned Content
|
|
149
|
+
|
|
150
|
+
README text, slogans, examples, layout, and other manually curated source files
|
|
151
|
+
remain authoritative. release-skill snapshots them according to each
|
|
152
|
+
`publicFiles` mapping; it does not regenerate or overwrite the source README.
|
|
153
|
+
After any manual edit, run `prepare` again and approve the new immutable plan.
|
|
154
|
+
Never edit a frozen snapshot or reuse an old approval to make later steps pass.
|
|
155
|
+
|
|
156
|
+
When an existing public copy has drifted, choose explicitly:
|
|
157
|
+
|
|
158
|
+
- **merge** — compare the actual remote content, merge accepted changes back
|
|
159
|
+
into the human-owned source, then bind `previousPublicBaseline` to that exact
|
|
160
|
+
immutable `repo`/`ref`/`commit` and prepare again;
|
|
161
|
+
- **adopt** — accept the remote copy as the new source of truth, first bring it
|
|
162
|
+
into the human-owned source, then update the same immutable baseline binding
|
|
163
|
+
and prepare again;
|
|
164
|
+
- **reject** — stop and investigate. Do not switch to `mode: none` to bypass a
|
|
165
|
+
drift or uniqueness check.
|
|
166
|
+
|
|
167
|
+
## Next Steps
|
|
168
|
+
|
|
169
|
+
- Read the [full README](README.md) for the complete workflow guide.
|
|
170
|
+
- Run `"${CLI[@]}" assess --root <your-project> --offline` to evaluate your project's release readiness.
|
|
171
|
+
- Run `"${CLI[@]}" prepare --root <your-project> --offline` (release-skill pipeline writes
|
|
172
|
+
locally only; user-configured hooks may perform remote operations) to generate
|
|
173
|
+
a release plan.
|
|
174
|
+
- Before production, configure every unit's `previousPublicBaseline`. Use
|
|
175
|
+
`mode: bound` with the exact `repo`, `ref`, and `commit` for an existing
|
|
176
|
+
public version, then run `"${CLI[@]}" prepare --root <your-project> --online --production`.
|
|
177
|
+
The default observer proves only the ref-to-commit mapping; remote content is
|
|
178
|
+
not downloaded. Target branch/tag/Release/npm uniqueness is checked by the
|
|
179
|
+
publish global preflight before any execute.
|
|
180
|
+
- For production commands, use only the immutable `planPath` returned by
|
|
181
|
+
`prepare --json` and immutable `approvalPath` returned by `approve --json`.
|
|
182
|
+
Mutable latest aliases are for convenience and are not production authority.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 release-skill contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Notice
|
|
2
|
+
|
|
3
|
+
release-skill is an open-source project released under the MIT License.
|
|
4
|
+
|
|
5
|
+
## Third-Party Dependencies
|
|
6
|
+
|
|
7
|
+
This project is built on Node.js and the npm ecosystem. See `package.json`
|
|
8
|
+
for the full list of dependencies.
|
|
9
|
+
|
|
10
|
+
## Acknowledgments
|
|
11
|
+
|
|
12
|
+
The release governance patterns in this project draw on ideas from the
|
|
13
|
+
following open-source projects:
|
|
14
|
+
|
|
15
|
+
- [changesets/changesets](https://github.com/changesets/changesets) -
|
|
16
|
+
Change intent records and prepare/publish separation
|
|
17
|
+
- [googleapis/release-please](https://github.com/googleapis/release-please) -
|
|
18
|
+
Reviewable release plans
|
|
19
|
+
- [semantic-release/semantic-release](https://github.com/semantic-release/semantic-release) -
|
|
20
|
+
Idempotent publishing concepts
|
|
21
|
+
- [vercel-labs/skills](https://github.com/vercel-labs/skills) -
|
|
22
|
+
Explicit triggers, provenance, and post-publish releases
|
|
23
|
+
|
|
24
|
+
No code from these projects is copied or redistributed. Only design
|
|
25
|
+
inspiration is acknowledged.
|