diff --git a/docs/labels-and-capabilities.md b/docs/labels-and-capabilities.md index 9aca740aa..68ae0127c 100644 --- a/docs/labels-and-capabilities.md +++ b/docs/labels-and-capabilities.md @@ -370,10 +370,10 @@ or a contract-free mix of substrates (e.g. `tools/spec-inventory` is | [`tools/vendor-neutrality-score`](../tools/vendor-neutrality-score/) | `substrate:framework-dev` + `substrate:analytics` | Deterministic vendor-neutrality score — reads each contract tool's `**Kind:**` / `**Vendor:**` metadata and scores per-contract + per-skill neutrality (`analytics`); backs the score block in [`docs/vendor-neutrality.md`](vendor-neutrality.md) | | [`tools/spec-validator`](../tools/spec-validator/) | `substrate:framework-dev` | Spec-frontmatter and body-section validator — counterpart to `skill-and-tool-validator` for `tools/spec-loop/specs/` | | [`tools/release-config`](../tools/release-config/) | `substrate:release` | `release-config` — loads the release-management config (`` layered lookup, defaults, derived values) and runs each `release-*` skill's deterministic Step 0 pre-flight checks as JSON; used by every `release-*` skill's Step 0 and the Step 1 metadata of `rc-cut`, `vote-draft`, `announce-draft`, `promote` and `verify-rc` | -| [`tools/release-management`](../tools/release-management/) | `substrate:release` | `release-management` — renders what the `release-*` skills hand the release manager (paste-ready command blocks, drafts, planning-issue comments) from `release-config load`, refusing a `dist/release/` staging target or an MD5 / SHA-1 digest in code; runs nothing. Used by `rc-cut` Steps 0 and 2–4, `verify-rc` Steps 1–10, `vote-draft` Steps 0, 2 and 3 (verify-rc gate, `[VOTE]` body, planning-issue comment), `vote-tally` Steps 0–3 (pre-classification, the tally, the `[RESULT] [VOTE]` body), `promote` Steps 0 and 2, `announce-draft` Steps 0, 2 and 3, and `prepare` Steps 0, 1, 2, 14 and A (train coverage, the planning issue, the changelog and its coverage, the 2e archive review, the prep and post-release PRs, the automated-signing gate and workflow) | +| [`tools/release-management`](../tools/release-management/) | `substrate:release` | `release-management` — renders what the `release-*` skills hand the release manager (paste-ready command blocks, drafts, planning-issue comments) from `release-config load`, refusing a `dist/release/` staging target or an MD5 / SHA-1 digest in code; runs nothing. Used by `rc-cut` Steps 0 and 2–4, `verify-rc` Steps 1–10, `vote-draft` Steps 0, 2 and 3 (verify-rc gate, `[VOTE]` body, planning-issue comment), `vote-tally` Steps 0–3 (pre-classification, the tally, the `[RESULT] [VOTE]` body), `promote` Steps 0 and 2, `announce-draft` Steps 0, 2 and 3, `archive-sweep` Steps 0–2 (the listing command, `trains.json`, the retention rule, the backend-shaped archive commands), `audit-report` Steps 0–3 (the planning-issue URL, the mail-archive search plan, voter handles, the record, the PR proposal) `keys-sync` Steps 0–2 (the KEYS lookup and UID comparison over `release-verify list-keys` output, the strength floor, the KEYS block and the svn / git commands), and `prepare` Steps 0, 1, 2, 14 and A (train coverage, the planning issue, the changelog and its coverage, the 2e archive review, the prep and post-release PRs, the automated-signing gate and workflow) | | [`tools/reproducible-archive`](../tools/reproducible-archive/) | `substrate:release` | `repro-archive` — build, lint and compare reproducible source archives from a git ref (`git archive` + `.gitattributes` `export-ignore`, every reproducible-builds.org archive rule applied); used by `release-rc-cut` Step 2/2b and `release-verify-rc` Step 9 | | [`tools/maven-artifact-verify`](../tools/maven-artifact-verify/) | `substrate:release` | `maven-artifact-verify` — verify locally staged JVM RC artefacts: POM ALv2 licence / developers / scm (with parent-POM inheritance resolution), podling incubation disclaimer in ``, companion `-sources.jar` / `-javadoc.jar` presence with their own signatures and checksums; used by `release-verify-rc` Step 6b | -| [`tools/release-verify`](../tools/release-verify/) | `substrate:release` | `release-verify` — deterministic, read-only checks of a staged RC (inventory, signatures against the project KEYS only, checksums, NOTICE/LICENSE, prohibited binaries, dangling symlinks, version strings) and the verdict roll-up, each as JSON; used by `release-verify-rc` Steps 1–3, 5–8 and 10 | +| [`tools/release-verify`](../tools/release-verify/) | `substrate:release` | `release-verify` — deterministic, read-only checks of a staged RC (inventory, signatures against the project KEYS only, checksums, NOTICE/LICENSE, prohibited binaries, dangling symlinks, version strings) and the verdict roll-up, each as JSON; used by `release-verify-rc` Steps 1–3, 5–8 and 10; and `list-keys`, the fingerprints and UIDs of a KEYS file or fetched key, for `release-keys-sync` Steps 0–1 | | [`tools/symlink-lint`](../tools/symlink-lint/) | `substrate:framework-dev` | Self-adoption symlink hygiene — rejects cyclic symlinks, misdirected skill relays (canonical/relay target-correctness), and incomplete self-adoption symlink sets | | [`tools/pilot-report-validator`](../tools/pilot-report-validator/) | `substrate:framework-dev` | Adopter pilot-report validator — required frontmatter keys, no unfilled placeholders, valid profile, and required body sections; counterpart to `spec-validator` for `docs/pilot-report-template.md` | | [`tools/skill-reconciler-diff`](../tools/skill-reconciler-diff/) | `substrate:framework-dev` | Deterministic structural diff between two skill trees — parses frontmatter, section headings, step inventory, placeholders, support files, and safety-baseline clauses into a JSON diff object for the `skill-reconciler` skill | diff --git a/docs/vendor-neutrality.md b/docs/vendor-neutrality.md index 58f326226..03f0cae35 100644 --- a/docs/vendor-neutrality.md +++ b/docs/vendor-neutrality.md @@ -606,8 +606,8 @@ generated block below. | Skill neutrality | Count | |---|---| -| capability-pure (names no backend) | 28 | -| portable (named backends are swappable) | 51 | +| capability-pure (names no backend) | 29 | +| portable (named backends are swappable) | 50 | | vendor-coupled (sole-backend dependency) | 0 | Organization scope (declared, orthogonal to vendor): ASF = 16, agnostic = 63. diff --git a/plugins/magpie-release-management/skills/archive-sweep/SKILL.md b/plugins/magpie-release-management/skills/archive-sweep/SKILL.md index 47f53bbf7..376d1f7e6 100644 --- a/plugins/magpie-release-management/skills/archive-sweep/SKILL.md +++ b/plugins/magpie-release-management/skills/archive-sweep/SKILL.md @@ -26,7 +26,7 @@ capability: - capability:triage surface_hash: sha256:1665af8aae9c2b58 license: Apache-2.0 -measured_tokens: 4573 +measured_tokens: 4165 --- + +# Archive backend — `atr` + +**Listing.** The project's release list in ATR, which is also the authoritative record of what has already been archived. +The distribution area itself is still `dist/release//`, since ATR's Finish commits there. + +**Archive.** There is no command to emit. +Archiving happens in ATR, which updates the release catalog and removes the files from `dist/release` in the background — +so the RM performs it in the ATR UI, not in a shell, and the usual "paste-ready command set" output is replaced by the instruction to archive each past-retention version there. +`render` prints that instruction as `commands` and `archive_count` is the number of versions to archive in ATR. + +Two consequences worth stating in the proposal: + +- **Do not also run `svn mv` or `svn rm`.** ATR removes the files itself; a manual removal on top races with it. +- **The prior release may already be handled.** If the project enables *Auto archive prior release* in its ATR settings, + the previous release is archived in the same cycle when the new one is announced — so it may not be past-retention by the time this sweep runs. + Check ATR's record before proposing anything. + +Releases committed to `dist/release` are copied to `archive.apache.org` automatically, so archiving removes the distribution copy rather than moving it. +See [Promoting to release](https://releases.apache.org/docs/promoting-to-release). diff --git a/plugins/magpie-release-management/skills/archive-sweep/backends/github-releases.md b/plugins/magpie-release-management/skills/archive-sweep/backends/github-releases.md new file mode 100644 index 000000000..a732bae38 --- /dev/null +++ b/plugins/magpie-release-management/skills/archive-sweep/backends/github-releases.md @@ -0,0 +1,13 @@ + + +# Archive backend — `github-releases` + +**Listing.** `gh release list --repo --exclude-drafts` — each published (non-draft) release tag is a candidate. + +**Archive.** One `gh release delete --repo --yes` per past-retention version, oldest first. + +`gh release delete` removes the release page and optionally the tag. +Include a reminder that GitHub releases have no archive equivalent; deletion is permanent. +The RM should confirm this is intentional. +`render` returns that reminder as `deletion_warning`: show it with the commands. diff --git a/plugins/magpie-release-management/skills/archive-sweep/backends/s3.md b/plugins/magpie-release-management/skills/archive-sweep/backends/s3.md new file mode 100644 index 000000000..ee0819986 --- /dev/null +++ b/plugins/magpie-release-management/skills/archive-sweep/backends/s3.md @@ -0,0 +1,18 @@ + + +# Archive backend — `s3` + +**Listing.** `aws s3 ls s3:////` — each key prefix is a candidate. + +**Archive.** One move per past-retention version, oldest first: + +```text +aws s3 mv \ + s3:///// \ + s3:///// \ + --recursive +``` + +The source is `release_dist_url_template` and the destination `archive_url_template` (required for `s3`), +each an `s3:///…` URL or an `amazonaws.com` URL the bucket is read from; a template it cannot be read from is refused. diff --git a/plugins/magpie-release-management/skills/archive-sweep/backends/self-hosted.md b/plugins/magpie-release-management/skills/archive-sweep/backends/self-hosted.md new file mode 100644 index 000000000..9c0587058 --- /dev/null +++ b/plugins/magpie-release-management/skills/archive-sweep/backends/self-hosted.md @@ -0,0 +1,10 @@ + + +# Archive backend — `self-hosted` + +**Listing.** Run the adopter-supplied listing command from `/release-management-config.md`; `listing` prints no command. + +**Archive.** Use the adopter-supplied archival command template from `/release-management-config.md`, substituting `` and the archive destination: +pass it to `render --command-template '