release-skill 0.9.37 → 0.10.0
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/.claude-plugin/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.cursor-plugin/plugin.json +1 -1
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +56 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +26 -14
- package/README.zh-CN.md +26 -14
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/claude/schemas/release-plan.schema.json +1 -0
- package/adapters/claude/schemas/test-intake.schema.json +1 -0
- package/adapters/claude/skills/release-help/SKILL.md +36 -41
- package/adapters/claude/skills/release-prepare/SKILL.md +35 -3
- package/adapters/claude/skills/release-publish/SKILL.md +11 -1
- package/adapters/claude/skills/release-reconcile/SKILL.md +14 -0
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/codex/schemas/release-plan.schema.json +1 -0
- package/adapters/codex/schemas/test-intake.schema.json +1 -0
- package/adapters/codex/skills/release-help/SKILL.md +36 -41
- package/adapters/codex/skills/release-prepare/SKILL.md +35 -3
- package/adapters/codex/skills/release-publish/SKILL.md +11 -1
- package/adapters/codex/skills/release-reconcile/SKILL.md +14 -0
- package/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/adapters/cursor/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/cursor/schemas/release-plan.schema.json +1 -0
- package/adapters/cursor/schemas/test-intake.schema.json +1 -0
- package/adapters/cursor/skills/release-help/SKILL.md +36 -41
- package/adapters/cursor/skills/release-prepare/SKILL.md +35 -3
- package/adapters/cursor/skills/release-publish/SKILL.md +11 -1
- package/adapters/cursor/skills/release-reconcile/SKILL.md +14 -0
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/kimi/schemas/release-plan.schema.json +1 -0
- package/adapters/kimi/schemas/test-intake.schema.json +1 -0
- package/adapters/kimi/skills/release-help/SKILL.md +36 -41
- package/adapters/kimi/skills/release-prepare/SKILL.md +35 -3
- package/adapters/kimi/skills/release-publish/SKILL.md +11 -1
- package/adapters/kimi/skills/release-reconcile/SKILL.md +14 -0
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/qoder/schemas/release-plan.schema.json +1 -0
- package/adapters/qoder/schemas/test-intake.schema.json +1 -0
- package/adapters/qoder/skills/release-help/SKILL.md +36 -41
- package/adapters/qoder/skills/release-prepare/SKILL.md +35 -3
- package/adapters/qoder/skills/release-publish/SKILL.md +11 -1
- package/adapters/qoder/skills/release-reconcile/SKILL.md +14 -0
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +1918 -1450
- package/adapters/workbuddy/schemas/release-plan.schema.json +1 -0
- package/adapters/workbuddy/schemas/test-intake.schema.json +1 -0
- package/adapters/workbuddy/skills/release-help/SKILL.md +36 -41
- package/adapters/workbuddy/skills/release-prepare/SKILL.md +35 -3
- package/adapters/workbuddy/skills/release-publish/SKILL.md +11 -1
- package/adapters/workbuddy/skills/release-reconcile/SKILL.md +14 -0
- package/bin/release-skill-cli.mjs +5 -0
- package/bin/release-skill.bundle.mjs +1918 -1450
- package/package.json +3 -2
- package/platform-manifest.json +4 -4
- package/references/01-state-machine.md +26 -0
- package/references/02-project-config.md +20 -0
- package/schemas/release-plan.schema.json +1 -0
- package/schemas/test-intake.schema.json +1 -0
- package/skills/release-help/SKILL.md +36 -41
- package/skills/release-prepare/SKILL.md +35 -3
- package/skills/release-publish/SKILL.md +11 -1
- package/skills/release-reconcile/SKILL.md +14 -0
- package/skills-src/release-help/SKILL.md +36 -41
- package/skills-src/release-prepare/SKILL.md +35 -3
- package/skills-src/release-publish/SKILL.md +11 -1
- package/skills-src/release-reconcile/SKILL.md +14 -0
- package/src/commands/approve.mjs +33 -24
- package/src/commands/post-release-finish.mjs +9 -0
- package/src/commands/prepare.mjs +9 -2
- package/src/commands/publish.mjs +10 -2
- package/src/commands/reconcile.mjs +2 -0
- package/src/commands/route.mjs +2 -159
- package/src/core/plan-replacement.mjs +371 -0
- package/src/core/pre-authority-failure.mjs +242 -0
- package/src/core/test-candidate.mjs +15 -71
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "广州市风荷科技有限公司"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"defaultPrompt": [
|
|
21
21
|
"Assess this project for release readiness.",
|
|
22
|
-
"Prepare a release plan for version 0.
|
|
22
|
+
"Prepare a release plan for version 0.10.0.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|
package/.kimi-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.10.0 locale=en baseline=sha256:dfff93ef727de178ff140fc2de189fdab65205a99cc4c5734bc8c9889ef28e54 -->
|
|
4
|
+
## [0.10.0] - 2026-10-26
|
|
5
|
+
|
|
6
|
+
0.10.0 enables explicit testing provider selection via Agent Method Registry 0.2.0 on codex and claude-code, while maintaining TEST 0.2.0 as the default testing Skill family. Foundation dependencies remain pinned to 0.25.0. This description is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- Method selection does not alter result contracts, domain acceptance, business permissions, or release approval. Foundation dependencies remain pinned to 0.25.0. Full release gates, channel checks, and host verification remain separate requirements; these notes do not confirm their completion. The inherited Skill Family Hub remains the unified marketplace. Binding to observed branch heads is achieved via GitHub Git Data API and compare-and-swap (CAS). Partial publication is never rolled back or force-pushed.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- The preparation Skill resolves and verifies a single testing provider for testing/skill-family/plan and run using existing source selection and v1 overlay. Project Skills and explicitly selected external catalogs are supported on codex and claude-code; other hosts retain their original path. Disabled, missing, ambiguous, or invalid providers halt dependent calls without fallback or waiver of testIntake obligations.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Candidate acceptance now compares both unit.id and targetVersion. Conflicts no longer occur between different units sharing the same version; acceptance remains denied for the same unit and version with differing acceptance bases, including partial overlaps in multi-unit plans. Existing checks for authority, history, replacement, and writer remain unchanged.
|
|
19
|
+
- When no frozen host targets are present, a plugin-qualified setup is skipped only if the current configuration has exactly one matching localHostUpdate.plugin owner and that unit is not selected. Unknown or ambiguous ownership, unqualified setups, or selected owners remain pending; selected hosts require actual loading and setup feedback.
|
|
20
|
+
|
|
21
|
+
### Upgrade Notes
|
|
22
|
+
|
|
23
|
+
Upgrading from writer version 0.9.38 to 0.10.0 requires a fresh prepare, candidate generation, and result file creation. Preserve all prior candidates, results, approvals, and run records; do not modify writerVersion. The documented local-checkout CLI is a development entry point and does not indicate that 0.10.0 is published or loaded by a host. The release-skill standalone marketplace is deprecated; use ifoohoo/skill-family-hub with plugin id release-skill@skill-family-hub instead.
|
|
24
|
+
<!-- release-skill:changelog:end version=0.10.0 locale=en -->
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
<!-- release-skill:changelog:start version=0.9.38 locale=en baseline=sha256:471af07096474e6d8585e3f246e041bf94452bb9ed91019087f759079dc7d13d -->
|
|
28
|
+
## [0.9.38] - 2026-10-25
|
|
29
|
+
|
|
30
|
+
0.9.38 applies to the same project, identical release unit ID set, target version, and external target where the old formal plan is in `PREPARED` state and has not yet generated any release-run authority, enabled only at the `testIntake` entry in production to explicitly replace an unpublished formal plan; three Foundation dependencies remain precisely pinned at Foundation 0.25.0, with no upgrades. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
31
|
+
|
|
32
|
+
### Security
|
|
33
|
+
|
|
34
|
+
- The operation reuses the existing `.release-skill/lock` lock domain: `prepare` holds the lock; `approve`’s replacement review and approval write occur within a single critical section; `publish` performs final verification of the replacement relationship within the same lock and completes the first `appendRunState(PUBLISHING)`, then releases the lock. If the new plan is submitted first, the old release is rejected. If the old release persists its first state first, replacement is rejected—even if all checkpoints remain `pending`. Do not wrap `ship` in another instance of the non-reentrant project lock or hold that lock across manual approval. The protocol ensures coverage of the 0.9.38 entry point, without claiming to restrict arbitrary legacy binaries or manual bypasses.
|
|
35
|
+
- The replacement operation does not relax the exact equality requirement between source submission and remote `main`, `TEST` state, remote conflicts, or approval gate restrictions. The Foundation 0.25.0 mechanism continues to be enforced precisely. Target assignment is determined by Release Skill domain responsibility and must not be inferred from directory names, timestamps, or error text. No product capability was removed or renamed in this round; replacement applies only to qualifying run plans. An unpublished candidate or local test does not constitute a successful release or independent acceptance. All operations are based on the 0.9.38-supported entry point and cannot revoke any legacy software or bypass existing protocols.
|
|
36
|
+
- The Skill Family Hub is inherited as the unified marketplace, with updates performed via GitHub Git Data API using compare-and-swap semantics to bind observed branch head; partial releases are never rolled back or force-pushed, and completed steps are not overwritten. All behaviors are based on 0.9.38’s supported entry points, without claiming to restrict arbitrary legacy binaries or manual bypasses. This release does not claim to introduce new market mechanisms or update behaviors.
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- The replacement operation must be explicitly specified during the first `prepare` phase using `--replace-unpublished-plan <path>`, where `<path>` must point to the immutable prior official plan in the current project’s `.release-skill/plans/<digest>.json`. This parameter accepts only plans that exactly match the current project, unit, version, and external target; it is prohibited for switching repositories, branches, npm packages, or release channels. The first saved candidate will carry an optional field `replacesPlanDigest` at the `prepared` root, with the value being the digest of the prior official plan, and will follow the original `computePlanDigest` mechanism into the object, plan, and approval binding layer. If this field is not set, the original digest and behavior logic are preserved, and no new versioning protocol is initiated for the candidate or plan version. Subsequent use of `--candidate <path>` continues from the frozen predecessor; post-facto updates are not allowed. If the selection parameter is repeated, it must match the frozen predecessor; otherwise, it is rejected.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- The sole condition for replacement to take effect is: successful exclusive atomic write of the valid new official plan into the original `plans/<digest>.json`. If the write fails before completion, the replacement does not take effect. After a successful write, even if the latest plan pointer, `FROZEN` flag, or evidence sealing fails, the prior plan’s publishable state cannot be restored. Failure records must be retained, and verification must continue along the original idempotent path. New approvals bind only to the new plan; old approvals cannot be reused across plans. The `approve`, `publish`, and their `ship` invocations must not process the replaced plan further. The `reconcile` operation must still maintain access to the original `PARTIAL` source and full run lineage; a lack of authority must not be treated as a recovery input.
|
|
45
|
+
|
|
46
|
+
### Upgrade Notes
|
|
47
|
+
|
|
48
|
+
Configure another, distinct fixed `resultFile` before preparing the replacement. The original requirements, criteria, results, candidates, and reference originals must remain in their original paths with their original digests for verification. New results must not overwrite old results, nor may they create circular dependencies via `subjectDigest` naming based on unformed data. If the original reference is missing or has changed, replacement is rejected; old evidence is not reconstructed from new files. Version 0.9.38 must regenerate the candidate for this version and does not waive the `writerVersion` check from 0.9.37. The original acceptor must re-evaluate applicability; byte-for-byte equivalence does not automatically pass.
|
|
49
|
+
|
|
50
|
+
Release zero-external-write diagnosis must be independent of target attribution. A diagnosis may only be based on a single, complete, continuous event sequence with matching closure, full required gate sequence, and no `release-run.json`, any `state` authority, execution, or checkpoint activity—**provided** the producer version is verified as 0.9.3, 0.9.14, 0.9.17, 0.9.33, 0.9.37, or the current version 0.9.38. Under these full conditions, three failure patterns remain valid for diagnosis: source gate failure; 0.9.17 failing directly after read-only `global-preflight` arbitration; 0.9.33 failing after `approval-load` with `DIAGNOSE` and no independent `gate-failed` event. Diagnosis does not establish plan, recovery, replacement, release, or `TEST` authority. It does not infer attribution from directory structure, timestamps, error text, or non-authoritative states.
|
|
51
|
+
For reconcile failures, only two prior records from writers 0.9.22 and 0.9.27 may be used to verify true target attribution, each corresponding to targets 0.22.0 and 0.25.0 respectively. The `sourceRunId` and `sourceRunDigest` must match the original parent run of the current project. The child event stream must follow the full required prefix of the verified writer. Both `source-run-load passed` and `reconcile started` must reference the same parent run, and each `actionId`/`actionType` must map to the original action in the parent plan. Only after full verification may the true target be confirmed and replacement blocking be ruled out. The failure state itself does not constitute zero-external-write, nor does it grant recovery, replacement, or `TEST` authority.
|
|
52
|
+
For verify failures, only two records—0.9.7 and 0.9.12—may be used to confirm true target attribution. The sole parent reference must come from the genuine `source-run-load passed` `sourceRunId`; fabricated `sourceRunDigest` is not accepted. Only fully verified, limited prefix and suffix from the confirmed writer are allowed. Using the original parent file under the current project’s `runs` directory, reuse `loadRun`, the current plan schema, immutable plan path, full lineage, and checkpoint mapping to confirm the parent run is `PUBLISHED`. Then verify the parent plan is `foundation-adoption-review@0.1.0`, distinct from 0.28.0. Each action identity must correspond to the parent plan. Same target, incomplete parent authority, unknown stage, or conflicting relationships still result in rejection. Record 0.9.7 executed isolated consumer installation, including `execute` and local writes. It cannot be described as “zero execute” or “zero local write,” nor can it be used to grant publication external write authority. Verify failures do not constitute proof of publish zero-external-write and do not grant release, recovery, replacement, or `TEST` authority.
|
|
53
|
+
All unknown, corrupted, contradictory, discontinuous, mismatched closure, or relationship-conflicting historical records are invalid. Original records must not be deleted, moved, field-filled, or reconstructed. Self-reference, cycles, multiple valid successors, or invalid successors must not revive old plans.
|
|
54
|
+
|
|
55
|
+
The release-skill standalone marketplace is deprecated; use `ifoohoo/skill-family-hub` as the unified marketplace, with plugin name restricted to `release-skill@skill-family-hub`.
|
|
56
|
+
<!-- release-skill:changelog:end version=0.9.38 locale=en -->
|
|
57
|
+
|
|
58
|
+
|
|
3
59
|
<!-- release-skill:changelog:start version=0.9.37 locale=en baseline=sha256:11b436a4b3d6a642189df7126078f2fa2a2d3cf0922d8031d0c33cb12d9680d3 -->
|
|
4
60
|
## [0.9.37] - 2026-10-23
|
|
5
61
|
|
package/INSTALL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.
|
|
5
|
+
<!-- release-skill:release-version: 0.10.0 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js `>=22.22.2 <23` (22.22.2 or newer, and below 23)
|
|
@@ -125,7 +125,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
125
125
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
126
126
|
|
|
127
127
|
```
|
|
128
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.
|
|
128
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.10.0
|
|
129
129
|
/plugins reload
|
|
130
130
|
```
|
|
131
131
|
|
package/INSTALL.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.
|
|
5
|
+
<!-- release-skill:release-version: 0.10.0 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js `>=22.22.2 <23`(22.22.2 及以上,且低于 23)
|
|
@@ -113,7 +113,7 @@ release-skill 当前只采用并验证 Kimi Code 的交互式 TUI 路径,**无
|
|
|
113
113
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
114
114
|
|
|
115
115
|
```
|
|
116
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.
|
|
116
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.10.0
|
|
117
117
|
/plugins reload
|
|
118
118
|
```
|
|
119
119
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](README.zh-CN.md) · Installation: [English](INSTALL.md) / [简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.
|
|
5
|
+
<!-- release-skill:release-version: 0.10.0 -->
|
|
6
6
|
Release preparation for Claude Code, CodeBuddy, WorkBuddy, Codex, and Kimi Code, with human-edited files kept intact.
|
|
7
7
|
|
|
8
8
|
release-skill helps a maintainer answer three questions: what will be released,
|
|
@@ -13,31 +13,35 @@ it freezes the reviewed artifacts first and publishes those same artifacts later
|
|
|
13
13
|
Setup surfaces only the deterministic `compactSummary` review view; the full
|
|
14
14
|
report stays in a temporary session directory.
|
|
15
15
|
|
|
16
|
+
<a id="release-terms"></a>
|
|
17
|
+
|
|
18
|
+
A release unit is a release object with independently configured version, public files, and distribution targets. A release plan is a record for review before approval, linking target versions, frozen artifacts, and proposed external actions; see the [human review and approval steps](#release-plan-review).
|
|
19
|
+
|
|
16
20
|
<!-- release-skill:managed:start id=latest-release -->
|
|
17
|
-
**0.
|
|
21
|
+
**0.10.0** (2026-10-26)
|
|
18
22
|
|
|
19
|
-
0.
|
|
23
|
+
0.10.0 enables explicit testing provider selection via Agent Method Registry 0.2.0 on codex and claude-code, while maintaining TEST 0.2.0 as the default testing Skill family. Foundation dependencies remain pinned to 0.25.0. This description is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
20
24
|
|
|
21
25
|
**Security**
|
|
22
26
|
|
|
23
|
-
-
|
|
24
|
-
- Skill Family Hub is the unified marketplace. Updates use GitHub Git Data API and compare-and-swap against the observed branch head; partial Hub publication is never rolled back or force-pushed, and completed steps are not overwritten.
|
|
27
|
+
- Method selection does not alter result contracts, domain acceptance, business permissions, or release approval. Foundation dependencies remain pinned to 0.25.0. Full release gates, channel checks, and host verification remain separate requirements; these notes do not confirm their completion. The inherited Skill Family Hub remains the unified marketplace. Binding to observed branch heads is achieved via GitHub Git Data API and compare-and-swap (CAS). Partial publication is never rolled back or force-pushed.
|
|
25
28
|
|
|
26
29
|
**Added**
|
|
27
30
|
|
|
28
|
-
-
|
|
31
|
+
- The preparation Skill resolves and verifies a single testing provider for testing/skill-family/plan and run using existing source selection and v1 overlay. Project Skills and explicitly selected external catalogs are supported on codex and claude-code; other hosts retain their original path. Disabled, missing, ambiguous, or invalid providers halt dependent calls without fallback or waiver of testIntake obligations.
|
|
29
32
|
|
|
30
33
|
**Fixed**
|
|
31
34
|
|
|
32
|
-
-
|
|
35
|
+
- Candidate acceptance now compares both unit.id and targetVersion. Conflicts no longer occur between different units sharing the same version; acceptance remains denied for the same unit and version with differing acceptance bases, including partial overlaps in multi-unit plans. Existing checks for authority, history, replacement, and writer remain unchanged.
|
|
36
|
+
- When no frozen host targets are present, a plugin-qualified setup is skipped only if the current configuration has exactly one matching localHostUpdate.plugin owner and that unit is not selected. Unknown or ambiguous ownership, unqualified setups, or selected owners remain pending; selected hosts require actual loading and setup feedback.
|
|
33
37
|
|
|
34
38
|
**Upgrade Notes**
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
Upgrading from writer version 0.9.38 to 0.10.0 requires a fresh prepare, candidate generation, and result file creation. Preserve all prior candidates, results, approvals, and run records; do not modify writerVersion. The documented local-checkout CLI is a development entry point and does not indicate that 0.10.0 is published or loaded by a host. The release-skill standalone marketplace is deprecated; use ifoohoo/skill-family-hub with plugin id release-skill@skill-family-hub instead.
|
|
37
41
|
<!-- release-skill:managed:end id=latest-release -->
|
|
38
42
|
|
|
39
43
|
<!-- release-skill:capability:external-write-boundary -->
|
|
40
|
-
> **Current boundary:** v0.
|
|
44
|
+
> **Current boundary:** v0.10.0: this README records capabilities and verification boundaries;
|
|
41
45
|
> it is not evidence of
|
|
42
46
|
> publication, consumer-installation verification, or independent acceptance.
|
|
43
47
|
> Release availability must be established from the corresponding release records
|
|
@@ -61,7 +65,7 @@ This applies only to new Skill-led production preparation. Read-only and non-pro
|
|
|
61
65
|
> publish global preflight.
|
|
62
66
|
|
|
63
67
|
<!-- release-skill:capability:safe-first-command -->
|
|
64
|
-
> **Production path verified since the v0.1.1 milestone; for v0.
|
|
68
|
+
> **Production path verified since the v0.1.1 milestone; for v0.10.0,
|
|
65
69
|
> publication, consumer-installation verification, and independent acceptance
|
|
66
70
|
> require version-specific release records and verification results.**
|
|
67
71
|
> The npm-installed CLI is the supported user entry. Source checkout
|
|
@@ -71,10 +75,6 @@ This applies only to new Skill-led production preparation. Read-only and non-pro
|
|
|
71
75
|
> - npm install: `npm install -g release-skill` → `release-skill help`
|
|
72
76
|
> - source checkout: `node "$RELEASE_SKILL_HOME/packages/release-skill/bin/release-skill.mjs" help`
|
|
73
77
|
|
|
74
|
-
<a id="release-terms"></a>
|
|
75
|
-
|
|
76
|
-
A release unit is a release object with independently configured version, public files, and distribution targets. A release plan is a record for review before approval, linking target versions, frozen artifacts, and proposed external actions; see the [human review and approval steps](#release-plan-review).
|
|
77
|
-
|
|
78
78
|
### 0.8.0 scope and verification boundaries
|
|
79
79
|
|
|
80
80
|
For `prepare --workflow config`, public-byte comparison selects the branch:
|
|
@@ -978,3 +978,15 @@ declaration is narrowed to concrete targets.
|
|
|
978
978
|
## License
|
|
979
979
|
|
|
980
980
|
Apache License 2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
981
|
+
|
|
982
|
+
## Replacing an unpublished plan (0.9.38)
|
|
983
|
+
|
|
984
|
+
This feature applies to the same project, identical release unit ID set, target version, and external target, where the prior official plan is in `PREPARED` state and has not yet generated any release-run authority. It is enabled only at the production `testIntake` entry point, for explicit replacement of an unpublished official plan. Plans that already have a first run state, or are in `PARTIAL`, `PUBLISHED`, or `VERIFIED` states, are excluded from this exception. Replacement does not imply successful release or independent acceptance.
|
|
985
|
+
|
|
986
|
+
Configure another, distinct fixed `resultFile` before preparing the replacement. The original requirements, criteria, results, candidates, and reference originals must remain in their original paths with their original digests for verification. New results must not overwrite old results, nor may they create circular dependencies via `subjectDigest` naming based on unformed data. If the original reference is missing or has changed, replacement is rejected; old evidence is not reconstructed from new files. Version 0.9.38 must regenerate the candidate for this version and does not waive the `writerVersion` check from 0.9.37. The original acceptor must re-evaluate applicability; byte-for-byte equivalence does not automatically pass.
|
|
987
|
+
|
|
988
|
+
The replacement operation must be explicitly specified during the first `prepare` phase using `--replace-unpublished-plan <path>`, where `<path>` must point to the immutable prior official plan in the current project’s `.release-skill/plans/<digest>.json`. This parameter accepts only plans that exactly match the current project, unit, version, and external target; it is prohibited for switching repositories, branches, npm packages, or release channels. The first saved candidate will carry an optional field `replacesPlanDigest` at the `prepared` root, with the value being the digest of the prior official plan, and will follow the original `computePlanDigest` mechanism into the object, plan, and approval binding layer. If this field is not set, the original digest and behavior logic are preserved, and no new versioning protocol is initiated for the candidate or plan version. Subsequent use of `--candidate <path>` continues from the frozen predecessor; post-facto updates are not allowed. If the selection parameter is repeated, it must match the frozen predecessor; otherwise, it is rejected.
|
|
989
|
+
|
|
990
|
+
The sole condition for replacement to take effect is: successful exclusive atomic write of the valid new official plan into the original `plans/<digest>.json`. If the write fails before completion, the replacement does not take effect. After a successful write, even if the latest plan pointer, `FROZEN` flag, or evidence sealing fails, the prior plan’s publishable state cannot be restored. Failure records must be retained, and verification must continue along the original idempotent path. New approvals bind only to the new plan; old approvals cannot be reused across plans. The `approve`, `publish`, and their `ship` invocations must not process the replaced plan further. The `reconcile` operation must still maintain access to the original `PARTIAL` source and full run lineage; a lack of authority must not be treated as a recovery input.
|
|
991
|
+
|
|
992
|
+
The replacement operation does not relax the exact equality requirement between source submission and remote `main`, `TEST` state, remote conflicts, or approval gate restrictions. The Foundation 0.25.0 mechanism continues to be enforced precisely. Target assignment is determined by Release Skill domain responsibility and must not be inferred from directory names, timestamps, or error text. No product capability was removed or renamed in this round; replacement applies only to qualifying run plans. An unpublished candidate or local test does not constitute a successful release or independent acceptance. All operations are based on the 0.9.38-supported entry point and cannot revoke any legacy software or bypass existing protocols.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,36 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.
|
|
5
|
+
<!-- release-skill:release-version: 0.10.0 -->
|
|
6
6
|
面向 Claude Code、CodeBuddy、WorkBuddy、Codex 和 Kimi Code 的发布准备工具,完整保留人工维护的文件内容。
|
|
7
7
|
|
|
8
8
|
release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终发布的内容是什么。它不重新生成、也不回写项目源文件。`prepare` 把每个配置的公开文件复制到隔离快照并验证字节——先冻结并供人工审阅,再从同一份冻结产物发布。`setup` 只显示确定性的 `compactSummary` 审阅视图,完整报告保留在临时会话目录中。
|
|
9
9
|
|
|
10
|
+
<a id="release-terms"></a>
|
|
11
|
+
|
|
12
|
+
发布单元是独立配置版本、公开文件和分发目标的发布对象。发布计划是供批准前审阅的记录,将目标版本、冻结产物和拟执行的外部动作关联起来;详见[人工审阅与批准步骤](#release-plan-review)。
|
|
13
|
+
|
|
10
14
|
<!-- release-skill:managed:start id=latest-release -->
|
|
11
|
-
**0.
|
|
15
|
+
**0.10.0** (2026-10-26)
|
|
12
16
|
|
|
13
|
-
0.
|
|
17
|
+
0.10.0 的发布准备支持在 codex 和 claude-code 上通过 Agent Method Registry 0.2.0 显式选择测试提供方,同时保留 TEST 0.2.0 作为默认测试技能族。Foundation 依赖仍严格锁定在 0.25.0。本版本不代表已经发布、完成真实宿主验收、完成消费者安装验证或通过独立验收。
|
|
14
18
|
|
|
15
19
|
**安全**
|
|
16
20
|
|
|
17
|
-
-
|
|
18
|
-
- Skill Family Hub 是统一市场,更新采用 GitHub Git Data API,并以比较后写入绑定已观察的分支头;部分发布不回滚、不覆盖已完成步骤,也不 force-push。
|
|
21
|
+
- 方法选择不影响结果合同、领域接受方、业务权限或发布批准。Foundation 依赖仍严格锁定在 0.25.0。完整的发布门禁、渠道检查与宿主验证仍为独立要求;本说明不证明其已达成。继续使用 Skill Family Hub 作为统一市场。通过 GitHub Git Data API 与比较后写入(compare-and-swap)绑定已观察分支头。部分发布不回滚、不覆盖。
|
|
19
22
|
|
|
20
23
|
**新增**
|
|
21
24
|
|
|
22
|
-
-
|
|
25
|
+
- 准备技能通过现有来源选择与 v1 overlay,针对 testing/skill-family/plan 和 run 解析并验证单一测试提供方。codex 和 claude-code 支持项目自有技能及显式指定的外部 catalog;其他宿主维持原有路径。提供方被禁用、缺失、存在歧义或无效时,将终止依赖调用,不触发回退机制,也不豁免 testIntake 义务。
|
|
23
26
|
|
|
24
27
|
**修复**
|
|
25
28
|
|
|
26
|
-
-
|
|
29
|
+
- 候选接受逻辑现同时比对 unit.id 与 targetVersion。不同单元使用相同版本不再引发冲突;同一单元与版本但接受依据不同,包括多单元计划中仅部分目标重叠的情况,仍被拒绝。原有权威性、历史记录、替代关系及 writer 检查规则保持不变。
|
|
30
|
+
- 当无冻结宿主目标时,仅当当前配置恰好存在一个匹配的 localHostUpdate.plugin 所属单元,且该单元未被选中,才跳过带插件前缀的 setup。归属未知或模糊、未限定插件前缀、或所属单元已被选中时,仍保持待处理状态;已选宿主仍需完成实际加载并返回 setup 反馈。
|
|
27
31
|
|
|
28
32
|
**升级说明**
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
从 0.9.38 升级至 0.10.0 工具版本时,需重新执行 prepare、生成新候选并创建新的结果文件。请保留所有原有候选、结果、批准记录与运行日志,不得修改 writerVersion。文档中提及的本地源码 CLI 仅为开发用途入口,不代表 0.10.0 已发布或被宿主加载。原独立的 `release-skill` 市场已弃用,统一市场为 ifoohoo/skill-family-hub,插件名为 release-skill@skill-family-hub。
|
|
31
35
|
<!-- release-skill:managed:end id=latest-release -->
|
|
32
36
|
|
|
33
37
|
<!-- release-skill:capability:external-write-boundary -->
|
|
34
|
-
> **当前边界:** v0.
|
|
38
|
+
> **当前边界:** v0.10.0 的能力范围与验证边界见本 README,
|
|
35
39
|
> 不代表已经发布、完成消费者安装验证或通过独立验收。
|
|
36
40
|
> 版本可用性以对应发布记录及发布后验证结果为准。
|
|
37
41
|
> v0.4.1 是更早的已发布里程碑(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
@@ -47,17 +51,13 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
47
51
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
48
52
|
|
|
49
53
|
<!-- release-skill:capability:safe-first-command -->
|
|
50
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.
|
|
54
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.10.0 的发布、消费者安装验证和独立验收状态须由该版本的发布记录及验证结果确认。**
|
|
51
55
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
52
56
|
>
|
|
53
57
|
> **第一条命令:**
|
|
54
58
|
> - npm 安装:`npm install -g release-skill` → `release-skill help`
|
|
55
59
|
> - 源码 checkout:`node "$RELEASE_SKILL_HOME/packages/release-skill/bin/release-skill.mjs" help`
|
|
56
60
|
|
|
57
|
-
<a id="release-terms"></a>
|
|
58
|
-
|
|
59
|
-
发布单元是独立配置版本、公开文件和分发目标的发布对象。发布计划是供批准前审阅的记录,将目标版本、冻结产物和拟执行的外部动作关联起来;详见[人工审阅与批准步骤](#release-plan-review)。
|
|
60
|
-
|
|
61
61
|
### 0.8.0 范围与验证边界
|
|
62
62
|
|
|
63
63
|
`prepare --workflow config` 按公开字节是否变化分支:
|
|
@@ -787,3 +787,15 @@ GitHub Release 和受控终端交互,保留三个代理变量;只有仓库 U
|
|
|
787
787
|
## 许可证
|
|
788
788
|
|
|
789
789
|
Apache License 2.0,见 [LICENSE](LICENSE) 与 [NOTICE](NOTICE)。
|
|
790
|
+
|
|
791
|
+
## 0.9.38:替代未发布计划
|
|
792
|
+
|
|
793
|
+
本功能适用于同一项目、相同发布单元ID集合、目标版本及外部目标下,旧正式计划处于 `PREPARED` 状态且未产生任何发布运行权威的场景。仅在生产环境的 `testIntake` 入口启用,用于显式替代尚未发布的正式计划。已有首个运行状态,或处于 `PARTIAL`、`PUBLISHED`、`VERIFIED` 的计划,不属于这一例外。替代不代表发布成功或独立验收。
|
|
794
|
+
|
|
795
|
+
替代操作必须预先配置另一个固定 `resultFile`,保留旧要求、判据、结果、候选及引用原件在原路径、原摘要下可核验;新结果不能覆盖旧结果,也不能根据尚未形成的 `subjectDigest` 命名配置造成循环依赖。旧原件缺失或变化即拒绝,不从新文件重建旧依据。0.9.38 必须重新生成本版候选,不豁免 0.9.37 的 `writerVersion` 检查。原接受方需重新判断适用性;字节相同不自动通过。
|
|
796
|
+
|
|
797
|
+
执行替代需在首次 `prepare` 阶段显式指定 `--replace-unpublished-plan <path>`,其中 `<path>` 必须指向当前项目 `.release-skill/plans/<digest>.json` 中的不可变旧正式计划。该参数仅接受与当前项目、单元、版本和外部目标完全一致的旧计划,禁止用于切换仓库、分支、npm包或发布渠道。首次保存的新候选将在 `prepared` 根部携带可选字段 `replacesPlanDigest`,其值为旧正式计划摘要,并沿用原 `computePlanDigest` 机制进入对象、计划与批准绑定层。若未设置该字段,则保持原有摘要与行为逻辑,候选版本及计划版本不另起协议。后续使用 `--candidate <path>` 续接,前驱已在候选中冻结,不可事后补写;若重复提供选择参数,必须与冻结前驱一致,否则拒绝。
|
|
798
|
+
|
|
799
|
+
替代生效的唯一条件是:有效新正式计划成功排他原子写入原 `plans/<digest>.json`。写入前失败则不生效;写入后,即使最新计划指针、FROZEN 标记或证据封口失败,也不能恢复旧计划的可发布状态,必须保留失败记录并沿原幂等路径续接核对新权威。新批准仅绑定新计划,旧批准不可跨用。`approve`、`publish` 及其 `ship` 调用均不得继续处理已替代计划,`reconcile` 仍需具备原 `PARTIAL` 源和完整运行谱系,不能将无权威诊断视为恢复输入。
|
|
800
|
+
|
|
801
|
+
替代操作不放宽来源提交与远端 main 的精确相等要求、`TEST` 状态、远端冲突或批准门限制。继续精确执行 Foundation 0.25.0 机制,目标归属由 Release Skill 领域责任判断,不依赖目录名、时间或错误文本推断。本轮未删除或重命名产品能力,替代仅作用于符合条件的运行计划。未发布候选或本地自测不代表发布成功,亦不构成独立验收。所有操作均基于 0.9.38 支持入口,不能撤销任意旧软件或绕过现有协议。
|