Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/auto-tag-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,35 @@ jobs:
- name: Check Capacium manifests are synced
run: python3 scripts/sync-capacium-manifests.py --check

- name: Hard gate release version matches capability manifests
run: |
python3 - <<'PY'
from pathlib import Path
import re
import sys
import yaml

pyproject = open("pyproject.toml", encoding="utf-8").read()
match = re.search(r'^version\s*=\s*["\']([^"\']+)["\']', pyproject, re.MULTILINE)
release_version = match.group(1) if match else ""
manifests = [Path("capability.yaml"), *sorted(Path("skills").glob("skillweave-*/capability.yaml"))]
mismatches = []
for path in manifests:
capability = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
capability_version = str(capability.get("version", ""))
if capability_version != release_version:
mismatches.append((str(path), capability_version or "missing"))

if mismatches:
print("HARD GATE REJECTED: pyproject.toml and capability manifest versions differ.")
print(f"pyproject.toml: {release_version or 'missing'}")
for path, version in mismatches:
print(f"{path}: {version}")
sys.exit(1)

print(f"Release version matches {len(manifests)} capability manifest(s): {release_version}")
PY

- name: Analyze version
id: analyze
run: |
Expand Down Expand Up @@ -144,6 +173,34 @@ jobs:
fi
echo "Release name follows convention: $RELEASE_NAME"

- name: Hard gate tag version matches capability manifests
run: |
TAG="${{ needs.create-tag.outputs.tag }}"
TAG_VERSION="${TAG#v}"
python3 - <<PY
from pathlib import Path
import sys
import yaml

tag_version = "$TAG_VERSION"
manifests = [Path("capability.yaml"), *sorted(Path("skills").glob("skillweave-*/capability.yaml"))]
mismatches = []
for path in manifests:
capability = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
capability_version = str(capability.get("version", ""))
if capability_version != tag_version:
mismatches.append((str(path), capability_version or "missing"))

print(f"Tag version: {tag_version}")
if mismatches:
print("HARD GATE REJECTED — tag version differs from capability manifest(s).")
for path, version in mismatches:
print(f"{path}: {version}")
sys.exit(1)

print(f"Tag version matches {len(manifests)} capability manifest(s).")
PY

- name: Create Release
uses: softprops/action-gh-release@v2
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-readiness-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ jobs:
RELEASE_VERSION: ${{ steps.versions.outputs.version }}
RELEASE_LATEST_TAG: ${{ steps.versions.outputs.latest_tag }}
run: |
cd src && python3 -c "from skillweave.github_integration.release_gate import run_cli; run_cli()"
PYTHONPATH=src python3 -c "from skillweave.github_integration.release_gate import run_cli; run_cli()"

- name: Upload gate report
uses: actions/upload-artifact@v4
Expand Down
48 changes: 48 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,44 @@ jobs:

echo "Release naming convention check PASSED."

- name: HARD GATE — Release version must match capability manifests
run: |
RELEASE_NAME="${{ github.event.release.name }}"
TAG_NAME="${{ github.event.release.tag_name }}"
RELEASE_VERSION="${RELEASE_NAME#SkillWeave v}"
TAG_VERSION="${TAG_NAME#v}"
python3 - <<PY
from pathlib import Path
import re
import sys

release_version = "$RELEASE_VERSION"
tag_version = "$TAG_VERSION"
manifests = [Path("capability.yaml"), *sorted(Path("skills").glob("skillweave-*/capability.yaml"))]
mismatches = []
for path in manifests:
match = re.search(r'^version:\s*["\\']?([^"\\'\\n]+)["\\']?\s*$', path.read_text(encoding="utf-8"), re.MULTILINE)
capability_version = match.group(1).strip() if match else ""
if capability_version != release_version or capability_version != tag_version:
mismatches.append((str(path), capability_version or "missing"))

print(f"Release version: {release_version}")
print(f"Tag version: {tag_version}")
if mismatches:
print("")
print("============================================================")
print(" HARD GATE REJECTED — capability manifest mismatch")
print("============================================================")
print("")
print("Release and tag versions must match every capability manifest exactly.")
for path, version in mismatches:
print(f"{path}: {version}")
print("")
sys.exit(1)

print(f"Release version matches {len(manifests)} capability manifest(s).")
PY

publish-pypi:
name: Publish to PyPI
needs: [validate-naming]
Expand Down Expand Up @@ -99,3 +137,13 @@ jobs:
}
const version = releaseName.replace('SkillWeave v', '');
core.notice(`Ready for Homebrew update: ${repo} v${version}`);

publish-capacium:
name: Publish to Capacium Exchange
needs: [validate-naming]
if: github.event.action == 'published'
runs-on: ubuntu-latest
steps:
- uses: Capacium/capacium-action-publish@v1
with:
github_url: ${{ github.event.repository.html_url }}
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## 1.0.2

- **FIX**: Capacium manifests now stay synchronized across the root bundle and all individual SkillWeave skill manifests.
- **FEATURE**: Release gates now block releases when the requested release/tag version differs from any `capability.yaml` version.
- **FEATURE**: Published GitHub releases trigger the Capacium Exchange publish workflow.

## 1.0.1

- **FEATURE**: Git Flow Convention — skills enforce minimum branching discipline (feature/fix/chore branches, dev → main merge path, preflight detection)
Expand Down
28 changes: 14 additions & 14 deletions capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: bundle
name: skillweave
version: 0.8.5
version: 1.0.2
description: A complete 7-phase AI-assisted development lifecycle ecosystem.
author: SkillWeave Team
license: Apache-2.0
Expand All @@ -22,40 +22,40 @@ keywords:
capabilities:
- name: skillweave-blueprint
source: ./skills/skillweave-blueprint
version: 0.8.5
version: 1.0.2
- name: skillweave-council
source: ./skills/skillweave-council
version: 0.8.5
version: 1.0.2
- name: skillweave-design
source: ./skills/skillweave-design
version: 0.8.5
version: 1.0.2
- name: skillweave-discovery
source: ./skills/skillweave-discovery
version: 0.8.5
version: 1.0.2
- name: skillweave-launch
source: ./skills/skillweave-launch
version: 0.8.5
version: 1.0.2
- name: skillweave-lifecycle
source: ./skills/skillweave-lifecycle
version: 0.8.5
version: 1.0.2
- name: skillweave-observe
source: ./skills/skillweave-observe
version: 0.8.5
version: 1.0.2
- name: skillweave-post-release
source: ./skills/skillweave-post-release
version: 0.8.5
version: 1.0.2
- name: skillweave-promptchain-execute
source: ./skills/skillweave-promptchain-execute
version: 0.8.5
version: 1.0.2
- name: skillweave-promptchain-generate
source: ./skills/skillweave-promptchain-generate
version: 0.8.5
version: 1.0.2
- name: skillweave-promptchain-validate
source: ./skills/skillweave-promptchain-validate
version: 0.8.5
version: 1.0.2
- name: skillweave-releasechain
source: ./skills/skillweave-releasechain
version: 0.8.5
version: 1.0.2
- name: skillweave-repo-health
source: ./skills/skillweave-repo-health
version: 0.8.5
version: 1.0.2
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "skillweave"
version = "1.0.1"
version = "1.0.2"
description = "Multi-agent AI skill orchestration with Next Level features"
readme = "README.md"
authors = [
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-blueprint/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-blueprint
version: 0.8.5
version: 1.0.2
description: Create structured PRD through guided interview — adapts Ralph Loop concepts for multi-agent AI development
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-council/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-council
version: 0.8.5
version: 1.0.2
description: Multi-Model LLM Council — Deliberation, Peer Review, and Chairman Synthesis with Web Search and Faigate Routing
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-design/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-design
version: 0.8.5
version: 1.0.2
description: 'Design-Thinking-Lens: Briefanalyse, UX-Prinzipien, Token-Extraktion, Evaluation'
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-discovery/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-discovery
version: 0.8.5
version: 1.0.2
description: Problemdefinition, User Research, Empathy Mapping, Opportunity Validation
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-launch/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-launch
version: 0.8.5
version: 1.0.2
description: Pre-Launch-Check, Deployment, Announce, Verify, Metrics
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-lifecycle/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-lifecycle
version: 0.8.5
version: 1.0.2
description: Bundle-Navigator, Phasen-Status und Workflow-Empfehlung
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-observe/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-observe
version: 0.8.5
version: 1.0.2
description: Execution Reports, Timing, Events, Memory, Summary, Health — Read-Only Observability
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-post-release/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-post-release
version: 0.8.5
version: 1.0.2
description: Retrospektive, Feedback, Monitoring, Iterationsplanung
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-promptchain-execute/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-promptchain-execute
version: 0.8.5
version: 1.0.2
description: Execute SkillWeave prompt sequences with dependency-aware batching, Ralph Loop execution, binary gates, and safe parallel subagent orchestration
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-promptchain-generate/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-promptchain-generate
version: 0.8.5
version: 1.0.2
description: Generate standardized SkillWeave prompt sequences from PRD or topic — creates execution plans optimized for REX or Ralph Loop workflows
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-promptchain-validate/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-promptchain-validate
version: 0.8.5
version: 1.0.2
description: Validate and improve SkillWeave prompt sequences — detects sequence type and adapts output format
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-releasechain/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-releasechain
version: 0.8.5
version: 1.0.2
description: Ralph Loop-powered development pipeline — handles review, testing, iteration with completion promises, memory systems, and multi-agent execution
author: SkillWeave Team
license: Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion skills/skillweave-repo-health/capability.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
kind: skill
name: skillweave-repo-health
version: 0.8.5
version: 1.0.2
description: 'Repo Assessment & Cleanup: Inventory-Scan, Klassifikation, Archive, Duplikate, Report'
author: SkillWeave Team
license: Apache-2.0
Expand Down
7 changes: 3 additions & 4 deletions src/skillweave/github_integration/capability_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@

DEFAULT_LICENSE = "Apache-2.0"
DEFAULT_AUTHOR = "SkillWeave Team"
DEFAULT_OWNER = "typelicious"
DEFAULT_REPOSITORY = "https://github.com/typelicious/SkillWeave"
DEFAULT_OWNER = "LangeVC"
DEFAULT_REPOSITORY = "https://github.com/LangeVC/skillweave"
DEFAULT_HOMEPAGE = DEFAULT_REPOSITORY
DEFAULT_BUNDLE_DESCRIPTION = "A complete 7-phase AI-assisted development lifecycle ecosystem."
DEFAULT_BUNDLE_KEYWORDS = [
Expand Down Expand Up @@ -84,12 +84,11 @@ def build_bundle_capabilities(self, version: str) -> list[dict[str, str]]:
for path in self.skill_manifest_paths():
manifest = self.load_manifest(path)
name = manifest.get("name") or path.parent.name
own_version = manifest.get("version", version)
capabilities.append(
{
"name": name,
"source": f"./skills/{path.parent.name}",
"version": own_version,
"version": version,
}
)
return capabilities
Expand Down
Loading
Loading