diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 73054873c..c33bcbeb9 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -104,10 +104,11 @@ jobs:
with:
subject-path: dist/localsetup-v*.tar.gz
- - name: Publish GitHub release
+ - name: Prepare GitHub release draft
env:
GH_TOKEN: ${{ github.token }}
run: |
+ set -euo pipefail
version="$(cat VERSION)"
tag="v${version}"
if git rev-parse -q --verify "refs/tags/${tag}" >/dev/null; then
@@ -118,18 +119,22 @@ jobs:
exit 1
fi
fi
- if gh release view "${tag}" >/dev/null 2>&1; then
- gh release upload "${tag}" \
- "dist/localsetup-v${version}.tar.gz" \
- "dist/localsetup-v${version}.tar.gz.sha256" \
- "dist/localsetup-v${version}.tar.gz.cdx.json" \
- --clobber
- else
- gh release create "${tag}" \
- "dist/localsetup-v${version}.tar.gz" \
- "dist/localsetup-v${version}.tar.gz.sha256" \
- "dist/localsetup-v${version}.tar.gz.cdx.json" \
- --target "$GITHUB_SHA" \
- --title "LocalSetup ${version}" \
- --notes "Automated release for LocalSetup ${version}."
+ response="$(mktemp)"
+ errors="$(mktemp)"
+ trap 'rm -f "$response" "$errors"' EXIT
+ if gh api --include "repos/${GITHUB_REPOSITORY}/releases/tags/${tag}" >"$response" 2>"$errors"; then
+ echo "Release ${tag} already exists; reconcile its commit and assets before retrying." >&2
+ exit 1
+ elif ! grep -Eq '^HTTP/[0-9.]+ 404([[:space:]]|$)' "$response"; then
+ cat "$errors" >&2
+ echo "Could not establish that release ${tag} is absent; no draft created." >&2
+ exit 1
fi
+ gh release create "${tag}" \
+ "dist/localsetup-v${version}.tar.gz" \
+ "dist/localsetup-v${version}.tar.gz.sha256" \
+ "dist/localsetup-v${version}.tar.gz.cdx.json" \
+ --draft \
+ --target "$GITHUB_SHA" \
+ --title "LocalSetup ${version}" \
+ --notes "Draft awaiting the complete verified artifact set and release notes."
diff --git a/.localsetup-release.json b/.localsetup-release.json
index d05284f83..820e2ff63 100644
--- a/.localsetup-release.json
+++ b/.localsetup-release.json
@@ -1,31 +1,10 @@
{
"schema_version": 1,
"anchor": {
- "commit": "1e03acd5a3bb339709cc8edc2596948674f73542",
- "version": "4.4.0",
- "tag": "v4.4.0"
+ "commit": "4eb7001370b1c49fe09dc3ee7b68b460fef9c82e",
+ "version": "4.22.6",
+ "tag": "v4.22.6"
},
- "overrides": [
- {
- "commit": "99c804b20cc66e42eab25c81d50915951640b6f3",
- "slice": "doctor-recorded-adapters",
- "classification": "patch"
- },
- {
- "commit": "8ee908f664eee3987d26a3bae062bbfc168422f3",
- "slice": "doctor-recorded-adapters",
- "classification": "patch"
- },
- {
- "commit": "f33464ecc2b913a261ada49c0fdfd009c5fb2868",
- "slice": "cryptography-maintenance",
- "classification": "patch"
- },
- {
- "commit": "a97333fefe8147e04dd7e5a8c684a5d64357aa64",
- "slice": "lscli",
- "classification": "minor"
- }
- ],
+ "overrides": [],
"policy": "sequential-logical-slices"
}
diff --git a/README.md b/README.md
index 48423d1bd..a0f636118 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
-**Version:** 4.22.6
+**Version:** 4.22.7
**LocalSetup gives coding agents a repo-local operating layer.**
@@ -71,7 +71,7 @@ Start with the [workflow packages guide](ls/docs/WORKFLOW_PACKAGES.md) for usage
| Fact | Value |
|---|---|
-| Current version | `4.22.6` |
+| Current version | `4.22.7` |
| Supported platforms | `codex, claude-code, cursor, kilo, opencode, openclaw, github-copilot-cli, github-copilot-vscode, cline-cli, cline-vscode, amp-cli, goose-cli, pi-cli, hermes-agent, qwen-code-cli, kimi-cli, factory-droid, antigravity-app, gemini-cli, omp-cli` |
| Shipped skills | `103` |
| Workflow packages | `16` |
diff --git a/VERSION b/VERSION
index 608a8d4ab..2258808d0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.22.6
+4.22.7
diff --git a/ls/README.md b/ls/README.md
index 81191ba89..b76b472b1 100644
--- a/ls/README.md
+++ b/ls/README.md
@@ -1,6 +1,6 @@
# LocalSetup Framework Engine
-**Version:** 4.22.6
+**Version:** 4.22.7
`ls/` is the engine that makes the public LocalSetup promise real. It stores the framework code, shipped skills, workflow packages, platform templates, docs, tests, and install manifests that turn a repository into a portable agent workspace.
diff --git a/ls/config/branding.json b/ls/config/branding.json
index 5ddf3497e..6f9ac2ff0 100644
--- a/ls/config/branding.json
+++ b/ls/config/branding.json
@@ -427,25 +427,25 @@
},
{
"path": ".github/workflows/publish.yml",
- "line_sha256": "2416beb161858dc9dc2b9944f4676a84a65f155fbb95a5259e137de506d346c0",
+ "line_sha256": "f485f655f9a8ce0ac0c0610cb91c3778321b9a62ac5333e4e43da982fb6ff815",
"token": "localsetup",
- "count": 2,
+ "count": 1,
"kind": "compatibility_identifier",
"reason": "Release artifact filename, glob, or workflow artifact identifier; kept stable for downloads and verification."
},
{
"path": ".github/workflows/publish.yml",
- "line_sha256": "a93d4a34f6b8abe906d586bb8c5aa6ab5405949126d75f80dcf9e44cd6b4e7ff",
+ "line_sha256": "ebd60c7aa861470f7d03b905e0fc7d23d8bdbd9eab37d45e6577e6c89fb7506e",
"token": "localsetup",
- "count": 2,
+ "count": 1,
"kind": "compatibility_identifier",
"reason": "Release artifact filename, glob, or workflow artifact identifier; kept stable for downloads and verification."
},
{
"path": ".github/workflows/publish.yml",
- "line_sha256": "23dbbeb4cbf566c79edd08a6445cb7abfb7f94aea3450e1807bca15ae29ca68b",
+ "line_sha256": "370e8a68f71b0a3cf0ceb0e899b5177807461a866eb58b70af1ffa6c0e2cfa84",
"token": "localsetup",
- "count": 2,
+ "count": 1,
"kind": "compatibility_identifier",
"reason": "Release artifact filename, glob, or workflow artifact identifier; kept stable for downloads and verification."
},
diff --git a/ls/docs/FEATURES.md b/ls/docs/FEATURES.md
index 602d4b2f2..4b3702a57 100644
--- a/ls/docs/FEATURES.md
+++ b/ls/docs/FEATURES.md
@@ -11,7 +11,7 @@ This is the full public capability catalog for LocalSetup. The [root README](../
## Generated Facts
-- Current version: `4.22.6`
+- Current version: `4.22.7`
- Supported platforms: `codex, claude-code, cursor, kilo, opencode, openclaw, github-copilot-cli, github-copilot-vscode, cline-cli, cline-vscode, amp-cli, goose-cli, pi-cli, hermes-agent, qwen-code-cli, kimi-cli, factory-droid, antigravity-app, gemini-cli, omp-cli`
- Shipped skills: `103`
- Workflow packages: `16`
diff --git a/ls/docs/README.md b/ls/docs/README.md
index c1d5d5371..a66c4532a 100644
--- a/ls/docs/README.md
+++ b/ls/docs/README.md
@@ -15,7 +15,7 @@ This is the public documentation map for LocalSetup. Start here when you want th
## Generated Facts
-- Current version: `4.22.6`
+- Current version: `4.22.7`
- Supported platforms: `codex, claude-code, cursor, kilo, opencode, openclaw, github-copilot-cli, github-copilot-vscode, cline-cli, cline-vscode, amp-cli, goose-cli, pi-cli, hermes-agent, qwen-code-cli, kimi-cli, factory-droid, antigravity-app, gemini-cli, omp-cli`
- Shipped skills: `103`
- Workflow packages: `16`
diff --git a/ls/docs/REPO_MAINTENANCE.md b/ls/docs/REPO_MAINTENANCE.md
index 7efa319ec..b7aecde1f 100644
--- a/ls/docs/REPO_MAINTENANCE.md
+++ b/ls/docs/REPO_MAINTENANCE.md
@@ -94,9 +94,9 @@ UV_CACHE_DIR=/tmp/localsetup-uv-cache uv run --locked python ls/tools/localsetup
- `pr-validation` is the required PR and merge-queue validation workflow.
- `generated docs and version sync` catches missing version-sync commits and generated-doc drift before merge.
-- `framework validation py3.10` and `framework validation py3.12` cover the supported Python floor and current runtime.
+- `framework validation py3.12` runs the Python 3.12 matrix entry, matching the supported Python floor.
- `shell smoke and framework audit` runs the shell wrapper, framework audit, and whitespace diff check.
-- `publish` remains main-only and release-focused. It should not be a maintainer's first signal that version sync is missing.
+- `publish` remains main-only and prepares a validated release draft. Complete its artifact inventory and notes before publication, following [VERSIONING.md](VERSIONING.md#github-release-workflow). It should not be a maintainer's first signal that version sync is missing.
- `triage` labels issues and PRs from metadata only. It must not check out or run untrusted pull request code.
- `triage` also bootstraps the maintainer label set used by issue forms and Dependabot. Run it manually once with `workflow_dispatch` before enabling Dependabot on a fresh repository.
diff --git a/ls/docs/SKILLS.md b/ls/docs/SKILLS.md
index f9febdd23..35b31cb06 100644
--- a/ls/docs/SKILLS.md
+++ b/ls/docs/SKILLS.md
@@ -4,10 +4,10 @@ version: 4.22
owner_package: generate-docs
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 343858aac153c84fd907f5337bc49a95017ef66f2344a1d902516733549cf7e6
---
# Shipped skills catalog
diff --git a/ls/docs/VERSIONING.md b/ls/docs/VERSIONING.md
index b7ced57b3..1572a15fc 100644
--- a/ls/docs/VERSIONING.md
+++ b/ls/docs/VERSIONING.md
@@ -11,7 +11,7 @@ LocalSetup uses the root `VERSION` file as the source of truth for the framework
## Current Version
- Source of truth: [`../../VERSION`](../../VERSION)
-- Current value: `4.22.6`
+- Current value: `4.22.7`
- Generated facts: [`_generated/facts.json`](_generated/facts.json)
## Policy
@@ -155,7 +155,26 @@ The `version-plan` output includes the selected `policy`, diagnostic `raw_bump`
## GitHub release workflow
-On pushes to `main`, GitHub Actions verifies the computed version plan, confirms all version references and generated docs are committed, runs the framework validation suite, builds the public package artifact, verifies the tarball checksum and embedded artifact metadata, uploads the tarball plus `.sha256` and CycloneDX SBOM sidecars, attests the tarball when GitHub artifact attestation is available, and publishes tag/release `vX.Y.Z`. Existing tags must already point at the current commit or the workflow fails.
+On pushes to `main`, GitHub Actions verifies the computed version plan, confirms all version references and generated docs are committed, runs the framework validation suite, builds the public package artifact, verifies the tarball checksum and embedded artifact metadata, uploads the tarball plus `.sha256` and CycloneDX SBOM sidecars, attests the tarball when GitHub artifact attestation is available, and prepares draft release `vX.Y.Z` at the validated commit. Existing tags must already point at that commit. Existing releases and uncertain API lookups stop preparation for explicit reconciliation; reruns never overwrite assets.
+
+Complete the draft before publication. Attach the verified wheel/sdist and any
+qualified native bundle, provenance, SBOM and corresponding source assets required
+by the release. Verify the complete asset inventory, checksums, licenses, commit
+identity and accurate release notes, then publish the existing draft:
+
+```bash
+gh release edit "v$(cat VERSION)" --notes-file release-notes.md
+gh release edit "v$(cat VERSION)" --draft=false
+```
+
+These commands require existing publication authority and a reviewed payload.
+`release-notes.md` denotes the prepared notes file; do not commit private release
+preparation. Workflow success proves draft preparation, not completed publication.
+Download the published assets and perform the exact-release acceptance checks.
+With [immutable releases](https://docs.github.com/en/code-security/concepts/supply-chain-security/immutable-releases),
+assets and the associated tag are fixed at publication. If required assets were
+omitted, preserve that release and prepare a corrected patch release; do not
+attempt to replace assets or move its tag.
## Verification
diff --git a/ls/docs/WORKFLOW_QUICK_REF.md b/ls/docs/WORKFLOW_QUICK_REF.md
index 8875e41df..a06062e3c 100644
--- a/ls/docs/WORKFLOW_QUICK_REF.md
+++ b/ls/docs/WORKFLOW_QUICK_REF.md
@@ -4,10 +4,10 @@ version: 4.22
owner_package: generate-docs
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: d463f0a8e4b4376945d747b5f5c35bf6cf6f552fee0f4ff6436a0cdd34549784
---
# Workflow quick reference
diff --git a/ls/docs/WORKFLOW_REGISTRY.md b/ls/docs/WORKFLOW_REGISTRY.md
index 91d60cf21..1d38b1db4 100644
--- a/ls/docs/WORKFLOW_REGISTRY.md
+++ b/ls/docs/WORKFLOW_REGISTRY.md
@@ -4,10 +4,10 @@ version: 4.22
owner_package: generate-docs
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 452fca485fafbcf02554a10723389a49513679b5f19b25ee3fe00acfdc3906c4
---
# Workflow and module registry (LocalSetup)
diff --git a/ls/docs/_generated/artifact-registry.json b/ls/docs/_generated/artifact-registry.json
index 0c0f4a1a0..eb8455a94 100644
--- a/ls/docs/_generated/artifact-registry.json
+++ b/ls/docs/_generated/artifact-registry.json
@@ -3,10 +3,10 @@
{
"artifact_sha256": "711e7b5aa4deae0134324afce09bc5fcdeb931ee148295edba86007d1ee80dda",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "assets/README.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -23,12 +23,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "297275c4a5488d14b8027505495ffdfe3243330dac2d9bd80708d8208098dd57",
+ "artifact_sha256": "520d210b627d94fd648f5f684e80ccd9b36ed667cfd633f361c3a4f3d764891f",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/SKILLS.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -45,12 +45,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "1c2dfc10db86f2eaa3a0a487d069f4d2ef39d6a3e12bff2078553c872457b343",
+ "artifact_sha256": "34c213de734f0cee8bc3193098f8b17cfc4879f9d81191c3aa28100ee2459e87",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/WORKFLOW_QUICK_REF.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -67,12 +67,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "111cf0018607c85ae2a7429c609f92093a633b9ad9aa2105fbf83550bee3ca33",
+ "artifact_sha256": "37bde155db16de2495d53638a10dc00c40f4b451ba7a8553bb784918fab4b46a",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/WORKFLOW_REGISTRY.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -89,12 +89,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "44b9dee3a5bb0c86459a0e5b2f192a800b11c17c758654a15a834a1e227e6ea9",
+ "artifact_sha256": "a1f5263bf2276c858ab92fc8f9d512bb04ef4b40890c9d0b154e3f79337a5e1e",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/docs-alignment-summary.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -111,12 +111,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "da8707b4576e4123feb12a57756b2447327ec2969de308ea1ac935be33be9b5e",
+ "artifact_sha256": "30093e6c00164d98d044bda04bd6c64597ec38f6f5d60190db644050635b2da5",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/docs-asset-manifest.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -133,12 +133,12 @@
"type": "json"
},
{
- "artifact_sha256": "a11956b67c6a1d5d726a951ddb98e9dbcff7f7020da878482ceed861623eadbe",
+ "artifact_sha256": "9d145d45f0f4bb2107473ebee29a771524aa3fdc6f5c806b0ed3fe6d197ec4cc",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/docs-audit-result.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -155,12 +155,12 @@
"type": "json"
},
{
- "artifact_sha256": "42131268c7681a9e0f3c750ec96c83b5ac0abd4e8d3c98485ea60ad06506e085",
+ "artifact_sha256": "b80ecfb9af2caa72df8a04a58a77a1f35d273ae920d8113b10dbfbf91758ac22",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/docs-inventory.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -177,12 +177,12 @@
"type": "json"
},
{
- "artifact_sha256": "08a7faedb8a5ff7b69fe6b4627eed1f3d85e2b0715b9d0224b5503108689396d",
+ "artifact_sha256": "09f693de70a643cfb02d10b5c916545655ae33e3439e9f37e9381918a887bfaf",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/docs-truth-map.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -199,12 +199,12 @@
"type": "json"
},
{
- "artifact_sha256": "2a40d142c52e7b6784697071cf8e08c2c4c795617d2ef6c3bb75bf911a40883a",
+ "artifact_sha256": "47d35584eae5b9d1eb59ef834a2c1a087130fdc083057daf8dd5ab25c6734b58",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/facts.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -221,12 +221,12 @@
"type": "json"
},
{
- "artifact_sha256": "9dbc4deeaee1f374036f80b66d545a6bf61a2140b99fa02828ccc20a93bbb76d",
+ "artifact_sha256": "5e746c8a321edbc01f48074457465afaccbadfbc1802b6ebd5d85c4ec30b5291",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/implementation-file-map.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -243,12 +243,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "a803b87ba688de2d2cc1182af47041219bab89e336b3050520046b43be79b2c0",
+ "artifact_sha256": "31c40c50d505f57237f9aae618561efd5b176adcb377e2457412fe59b6aa1464",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/platform-adapters.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -265,12 +265,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "72cec0028280dc731f88cb10c484e1b88694026c5af10ca9ddcee62a076dd8ce",
+ "artifact_sha256": "32c1ce32911c1b3cbc00064d92f8de4d7c0fe86b4e076244192bc00149bdc994",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/plugin-packs.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -287,12 +287,12 @@
"type": "json"
},
{
- "artifact_sha256": "6cd0f699634465479868461048c27d5c003261ab13c7328c0ec1ee2635ddf201",
+ "artifact_sha256": "8c8ccb675a45ede980d3d7c260367b626d3ae62ea88dda732034acea7d6b0634",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/plugin-packs.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -309,12 +309,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "d168517b7b1a61e4be4d57d29a379552e93b83b099ba515e57515b6301e044c8",
+ "artifact_sha256": "0430b34d0a61f7899c0d5d690cffab4fa570a6ff8463863d38700f78acf15e8c",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/skill-packs.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -331,12 +331,12 @@
"type": "markdown"
},
{
- "artifact_sha256": "144bfdd31900740c946648065495ecc16ce517d07d5aaee5455022b9ade9e3e6",
+ "artifact_sha256": "72627df45d499ad088fa1ff7e7ec286cb57e631342d12c6e145e5345626b5a2c",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/skill-taxonomy.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -353,12 +353,12 @@
"type": "json"
},
{
- "artifact_sha256": "80c5e6f91d078e08b765cc2f686997a101953f064868a0c7ba3e621f9d823bfe",
+ "artifact_sha256": "ca50e9e8c6602a7d74f6c2af251696b68a5b39ca3d602a30a528fe7a67fb2046",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/skill_aliases.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -375,12 +375,12 @@
"type": "json"
},
{
- "artifact_sha256": "a3b4cf67f65f49ef6327adda05d248d3728700e0aad96e45aaace39c28f81e3a",
+ "artifact_sha256": "0d2269ed494b1e8a46857677aebf21ece757deed3f8429305628b5ca99e0bea2",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/_generated/workflow-catalog.json",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -397,12 +397,12 @@
"type": "json"
},
{
- "artifact_sha256": "09644efe6e2a0d13aae420d0520b89ce336a8c6ab6cccbae4c02e15601f1ef2d",
+ "artifact_sha256": "4aad4d335f2a981aace714f7de13aac80e1e44536068260eac19711ae1d854dd",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"path": "ls/docs/migration/skill-alias-map.md",
- "provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_inputs": [
"VERSION",
"ls/skills",
@@ -421,16 +421,16 @@
],
"provenance": {
"artifact_path": "ls/docs/_generated/artifact-registry.json",
- "artifact_sha256": "bb2c1a5e7098e54d6024f0286c845c08b306770ed41533b8d0d519935c7bef29",
+ "artifact_sha256": "248656be450c279af7274ba25450b93fb5c2430eb6ccf0313d6d596fc364cc29",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": 1
}
diff --git a/ls/docs/_generated/docs-alignment-summary.md b/ls/docs/_generated/docs-alignment-summary.md
index 6cd67559a..688793898 100644
--- a/ls/docs/_generated/docs-alignment-summary.md
+++ b/ls/docs/_generated/docs-alignment-summary.md
@@ -4,11 +4,11 @@ version: 4.22
owner_package: docs-align
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: docs-align
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
-artifact_sha256: a448c2d7170e79ea6f863fadad51676ff103c15c6c5899c13c4d53089ca01d66
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
+artifact_sha256: b1c4b2e218f5ee78ba981855a6c3adf35333d5e90d79e1925837a0f017a7c564
---
# Documentation Alignment Summary
@@ -16,7 +16,7 @@ This page is generated from repository inventory, source-truth manifests, asset
| Signal | Value |
|---|---:|
-| Version | `4.22.6` |
+| Version | `4.22.7` |
| Documentation files inventoried | 497 |
| Immutable upstream documents | 64 |
| Shipped skills | 103 |
diff --git a/ls/docs/_generated/docs-asset-manifest.json b/ls/docs/_generated/docs-asset-manifest.json
index 58b8648e0..0e766ac50 100644
--- a/ls/docs/_generated/docs-asset-manifest.json
+++ b/ls/docs/_generated/docs-asset-manifest.json
@@ -66,14 +66,14 @@
"artifact_path": "ls/docs/_generated/docs-asset-manifest.json",
"artifact_sha256": "ac0d30f46e4711d5fdfeac55bde4e268784918f7ae7f3703942230e59cd90282",
"emitter": "docs-align",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": "1.0"
}
diff --git a/ls/docs/_generated/docs-audit-result.json b/ls/docs/_generated/docs-audit-result.json
index d5e9bf119..8ecc19935 100644
--- a/ls/docs/_generated/docs-audit-result.json
+++ b/ls/docs/_generated/docs-audit-result.json
@@ -9,14 +9,14 @@
"artifact_path": "ls/docs/_generated/docs-audit-result.json",
"artifact_sha256": "e82619e42f31266261fa11fa954df7778b2d19b7f12d224a71a85ec1a8cf31a8",
"emitter": "docs-align",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": "1.0"
}
diff --git a/ls/docs/_generated/docs-inventory.json b/ls/docs/_generated/docs-inventory.json
index e4901a1ff..43655a324 100644
--- a/ls/docs/_generated/docs-inventory.json
+++ b/ls/docs/_generated/docs-inventory.json
@@ -5562,14 +5562,14 @@
"artifact_path": "ls/docs/_generated/docs-inventory.json",
"artifact_sha256": "ed1ae4308d203c797bf65d49d2feb721520cae8cec15303c5c1802a96a353205",
"emitter": "docs-align",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"repo": ".",
"schema_version": "1.0",
diff --git a/ls/docs/_generated/docs-truth-map.json b/ls/docs/_generated/docs-truth-map.json
index fc5716a11..4336a71f0 100644
--- a/ls/docs/_generated/docs-truth-map.json
+++ b/ls/docs/_generated/docs-truth-map.json
@@ -126,16 +126,16 @@
],
"provenance": {
"artifact_path": "ls/docs/_generated/facts.json",
- "artifact_sha256": "eb869062cb180b39241b3d4b47607f5a78af85d61a398ea69ca315539797e81b",
+ "artifact_sha256": "5603b6c45645b59713880c863c41729955c91b556e610a608c411396fe7924cf",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"skill_count": 103,
"skills": [
@@ -1845,7 +1845,7 @@
"version": "1.0"
}
],
- "version": "4.22.6",
+ "version": "4.22.7",
"workflow_count": 16,
"workflows": [
{
@@ -1961,14 +1961,14 @@
"artifact_path": "ls/docs/_generated/skill-taxonomy.json",
"artifact_sha256": "3d8fb2fccb6f10b0bb39a26f778eabe88ca7c92eafd23341a9d1f296ced6012d",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": 1,
"skills": [
@@ -3475,16 +3475,16 @@
},
"provenance": {
"artifact_path": "ls/docs/_generated/docs-truth-map.json",
- "artifact_sha256": "48829c6a7667684f7a15a93b8497f0fdf1f0e4981ca934438f20eb783bef1009",
+ "artifact_sha256": "7bcc718669639478a17a2d7f1a81eccdef00fd348b6ab28e1bc43c428f24d7c2",
"emitter": "docs-align",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": "1.0",
"truths": {
@@ -5420,14 +5420,14 @@
}
},
"version": {
- "facts_version": "4.22.6",
- "pyproject_version": "4.22.6",
+ "facts_version": "4.22.7",
+ "pyproject_version": "4.22.7",
"sources": [
"VERSION",
"pyproject.toml",
"ls/docs/_generated/facts.json"
],
- "value": "4.22.6"
+ "value": "4.22.7"
},
"workflow_catalog": {
"sources": [
diff --git a/ls/docs/_generated/facts.json b/ls/docs/_generated/facts.json
index 095e44a19..9c372d00f 100644
--- a/ls/docs/_generated/facts.json
+++ b/ls/docs/_generated/facts.json
@@ -125,16 +125,16 @@
],
"provenance": {
"artifact_path": "ls/docs/_generated/facts.json",
- "artifact_sha256": "eb869062cb180b39241b3d4b47607f5a78af85d61a398ea69ca315539797e81b",
+ "artifact_sha256": "5603b6c45645b59713880c863c41729955c91b556e610a608c411396fe7924cf",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"skill_count": 103,
"skills": [
@@ -1844,7 +1844,7 @@
"version": "1.0"
}
],
- "version": "4.22.6",
+ "version": "4.22.7",
"workflow_count": 16,
"workflows": [
{
diff --git a/ls/docs/_generated/implementation-file-map.md b/ls/docs/_generated/implementation-file-map.md
index b00823ad4..bfd70debe 100644
--- a/ls/docs/_generated/implementation-file-map.md
+++ b/ls/docs/_generated/implementation-file-map.md
@@ -1,11 +1,11 @@
---
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
-artifact_sha256: edf6837da2de6a1ef7ee1a8f40a2bd13853f26da55b819c789ddf91ef2206549
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
+artifact_sha256: f00e636bce6e0c17e80a0cef4b5c9ef26aaba4b60457cf9544c9b4f6a55654a1
---
# Implementation File Map
@@ -1231,6 +1231,7 @@ artifact_sha256: edf6837da2de6a1ef7ee1a8f40a2bd13853f26da55b819c789ddf91ef220654
| `keep` | `ls/tests/test_registration_owner.py` |
| `keep` | `ls/tests/test_registration_plan.py` |
| `keep` | `ls/tests/test_registration_refresh.py` |
+| `keep` | `ls/tests/test_release_draft_workflow.py` |
| `keep` | `ls/tests/test_repo_finalizer.py` |
| `keep` | `ls/tests/test_repo_profile_universal_agent_repo.py` |
| `keep` | `ls/tests/test_repository_personal_overlap.py` |
diff --git a/ls/docs/_generated/platform-adapters.md b/ls/docs/_generated/platform-adapters.md
index 7b379586a..69ef3a12c 100644
--- a/ls/docs/_generated/platform-adapters.md
+++ b/ls/docs/_generated/platform-adapters.md
@@ -1,10 +1,10 @@
---
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 5ce4949227d75f75f72c4ce822e3c0e7958e57a16acf1fdc16a050a35da5d212
---
# Platform Adapters
diff --git a/ls/docs/_generated/plugin-packs.json b/ls/docs/_generated/plugin-packs.json
index 844e56cfa..ca8880ae0 100644
--- a/ls/docs/_generated/plugin-packs.json
+++ b/ls/docs/_generated/plugin-packs.json
@@ -378,14 +378,14 @@
"artifact_path": "ls/docs/_generated/plugin-packs.json",
"artifact_sha256": "b69f214b8950772a6d88915da5bb3c844c6d823f00a75b63c1e6084fb0bd08e3",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": 1
}
diff --git a/ls/docs/_generated/plugin-packs.md b/ls/docs/_generated/plugin-packs.md
index a1e17ad06..3c9b9ea5c 100644
--- a/ls/docs/_generated/plugin-packs.md
+++ b/ls/docs/_generated/plugin-packs.md
@@ -1,10 +1,10 @@
---
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 13309ba1a654582320ca1fee1ca909d024044fcacc18ad9b5fccb5a70640fd89
---
# Plugin Packs
diff --git a/ls/docs/_generated/skill-packs.md b/ls/docs/_generated/skill-packs.md
index fd101cd05..592e0a568 100644
--- a/ls/docs/_generated/skill-packs.md
+++ b/ls/docs/_generated/skill-packs.md
@@ -1,10 +1,10 @@
---
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 9c19a1db48f8405359c9bb51e65bc1b3286bae53bc9862f67a747577577485d3
---
# Skill And Workflow Packs
diff --git a/ls/docs/_generated/skill-taxonomy.json b/ls/docs/_generated/skill-taxonomy.json
index 3bf4cb291..44f8ad56d 100644
--- a/ls/docs/_generated/skill-taxonomy.json
+++ b/ls/docs/_generated/skill-taxonomy.json
@@ -13,14 +13,14 @@
"artifact_path": "ls/docs/_generated/skill-taxonomy.json",
"artifact_sha256": "3d8fb2fccb6f10b0bb39a26f778eabe88ca7c92eafd23341a9d1f296ced6012d",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"schema_version": 1,
"skills": [
diff --git a/ls/docs/_generated/skill_aliases.json b/ls/docs/_generated/skill_aliases.json
index 3cdf66f03..0fe56f5ca 100644
--- a/ls/docs/_generated/skill_aliases.json
+++ b/ls/docs/_generated/skill_aliases.json
@@ -106,13 +106,13 @@
"artifact_path": "ls/docs/_generated/skill_aliases.json",
"artifact_sha256": "392bdd9b3fb3790c99d29d9e077876c7c853549b9459049c1dff26c6b08de67c",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
}
}
diff --git a/ls/docs/_generated/workflow-catalog.json b/ls/docs/_generated/workflow-catalog.json
index c891fe13d..cebc054ea 100644
--- a/ls/docs/_generated/workflow-catalog.json
+++ b/ls/docs/_generated/workflow-catalog.json
@@ -4,14 +4,14 @@
"artifact_path": "ls/docs/_generated/workflow-catalog.json",
"artifact_sha256": "f2817f6656376eae5f2505d0733d2e2181fa1fb3a2b7b9fcf49415185de52423",
"emitter": "generate-docs",
- "framework_version": "4.22.6",
+ "framework_version": "4.22.7",
"schema_version": 1,
- "source_commit": "d297ed234baa529c96bad872e51cfc0f31991489",
+ "source_commit": "a8ab3af2d5ad5c30f678e4835340a141fa1c428f",
"source_dirty": false,
- "source_provenance_hash": "aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239",
- "source_root_id": "ffdcc812416a4e204081b40eac6b796f3e371111dfc9785d8a6cf08177e3fb6e",
+ "source_provenance_hash": "7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305",
+ "source_root_id": "353621935588f805cb1f9697a25052e04bea26ffe0ad8460c37a3fc9448c2bdc",
"source_tag": null,
- "source_tree_sha": "462849b52720b01356bcfa46b0ddcf80574440a7"
+ "source_tree_sha": "6ed1385ab67f230ae96ce395a39c96fc2e007b50"
},
"workflows": [
{
diff --git a/ls/docs/migration/skill-alias-map.md b/ls/docs/migration/skill-alias-map.md
index b67562b58..0ce31cbc5 100644
--- a/ls/docs/migration/skill-alias-map.md
+++ b/ls/docs/migration/skill-alias-map.md
@@ -4,10 +4,10 @@ version: 4.22
owner_package: generate-docs
localsetup_provenance:
schema_version: 1
- source_provenance_hash: aa225b3bfba81950501b0866317ec8fcd27daa1837de917ff6f4731edf965239
+ source_provenance_hash: 7606cd5551c8562625ea3e3f00b20c185eca9678cc99d4949a73141239152305
emitter: generate-docs
-framework_version: 4.22.6
-source_commit: d297ed234baa529c96bad872e51cfc0f31991489
+framework_version: 4.22.7
+source_commit: a8ab3af2d5ad5c30f678e4835340a141fa1c428f
artifact_sha256: 41dc60587f42873ada2f212b6c421e3edb2b4bd45dc189150ff9693b16a21813
---
# Skill Alias Map
diff --git a/ls/tests/test_release_draft_workflow.py b/ls/tests/test_release_draft_workflow.py
new file mode 100644
index 000000000..2b9145ad5
--- /dev/null
+++ b/ls/tests/test_release_draft_workflow.py
@@ -0,0 +1,54 @@
+"""Exercise the actual release shell boundary with offline GitHub responses."""
+import json
+import os
+from pathlib import Path
+import subprocess
+import sys
+
+import pytest
+import yaml
+
+
+@pytest.mark.parametrize("response,tag_conflict,created", [
+ ("missing", False, True),
+ ("exists", False, False),
+ ("uncertain", False, False),
+ ("missing", True, False),
+])
+def test_release_is_only_created_as_draft(tmp_path, response, tag_conflict, created):
+ root = Path(__file__).resolve().parents[2]
+ workflow = yaml.safe_load((root / ".github/workflows/publish.yml").read_text())
+ steps = workflow["jobs"]["publish"]["steps"]
+ script = next(s["run"] for s in steps if s["name"] == "Prepare GitHub release draft")
+ (tmp_path / "VERSION").write_text("4.22.7\n")
+ for command in ("git", "gh"):
+ executable = tmp_path / command
+ executable.write_text(f"#!{sys.executable}\n" + '''
+import json, os, pathlib, sys
+args = sys.argv[1:]
+if pathlib.Path(sys.argv[0]).name == 'git':
+ if args[:2] == ['rev-parse', '-q']:
+ sys.exit(0 if os.environ['TAG_CONFLICT'] == '1' else 1)
+ print('prior' if args[0] == 'rev-list' else 'accepted')
+elif args[0] == 'api':
+ mode = os.environ['RELEASE_RESPONSE']
+ print('HTTP/2.0 ' + {'missing': '404 Not Found', 'exists': '200 OK', 'uncertain': '503 Unavailable'}[mode])
+ sys.exit(0 if mode == 'exists' else 1)
+else:
+ pathlib.Path('mutation.json').write_text(json.dumps(args))
+''')
+ executable.chmod(0o700)
+ env = {**os.environ, "PATH": str(tmp_path) + os.pathsep + os.environ["PATH"],
+ "GITHUB_REPOSITORY": "example/project", "GITHUB_SHA": "accepted",
+ "RELEASE_RESPONSE": response, "TAG_CONFLICT": str(int(tag_conflict))}
+ result = subprocess.run(["bash", "-c", script], cwd=tmp_path, env=env,
+ capture_output=True, text=True, timeout=10)
+ assert (result.returncode == 0) is created, result.stderr
+ mutation = tmp_path / "mutation.json"
+ assert mutation.exists() is created
+ if created:
+ args = json.loads(mutation.read_text())
+ assert args[:3] == ["release", "create", "v4.22.7"]
+ assert "--draft" in args and "--clobber" not in args
+ assert args[args.index("--target") + 1] == "accepted"
+ assert len([a for a in args if a.startswith("dist/")]) == 3
diff --git a/pyproject.toml b/pyproject.toml
index 9d9a50939..296f119ca 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "localsetup"
-version = "4.22.6"
+version = "4.22.7"
description = "Global-first LocalSetup skill pack manager"
requires-python = ">=3.12"
dependencies = [
diff --git a/uv.lock b/uv.lock
index 4c8f084ff..ad6941179 100644
--- a/uv.lock
+++ b/uv.lock
@@ -460,7 +460,7 @@ wheels = [
[[package]]
name = "localsetup"
-version = "4.22.6"
+version = "4.22.7"
source = { editable = "." }
dependencies = [
{ name = "anyio" },