specweave 1.0.552 → 1.0.554

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "1.0.552",
3
+ "version": "1.0.554",
4
4
  "description": "100+ domain-expert AI skills — PM, Architect, Frontend, QA, Security and more. Skills learn your team's patterns permanently. Spec-first planning, autonomous execution, multi-agent teams, synced to GitHub/JIRA. Claude Code, Cursor, Copilot & more.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -65,8 +65,8 @@ fi
65
65
 
66
66
  | Command | Flow | Use Case |
67
67
  |---------|------|----------|
68
- | `sw-release:npm` | Auto-commit → **PUSH** → Bump → Build → **Publish** → Push tag → **GH Release** | **DEFAULT: FULL RELEASE** |
69
- | `sw-release:npm --quick` | Auto-commit → **PUSH** → Bump → Build → **Publish locally** → NO GH release | **QUICK: Save + Local Release** |
68
+ | `sw-release:npm` | Auto-commit → **PUSH** → Bump → Build → **Publish** → Push tag → **GH Release** → **Deploy all** | **DEFAULT: FULL RELEASE + Deploy** |
69
+ | `sw-release:npm --quick` | Auto-commit → **PUSH** → Bump → Build → **Publish locally** → **Deploy all** → NO GH release | **QUICK: Save + Release + Deploy** |
70
70
  | `sw-release:npm --ci` | Bump → Push → **CI publishes + GH Release** | Let GitHub Actions handle everything |
71
71
  | `sw-release:npm --only` | Bump → Build → **Publish locally** → NO push | Quick local release, push later |
72
72
  | `sw-release:npm --only --local` | **Bump ONLY** → NO build, NO publish, NO git | FASTEST: Local testing only |
@@ -421,6 +421,7 @@ gh release view "v$NEW_VERSION" --json tagName,url
421
421
  ✅ Published to npmjs.org (explicit registry!)
422
422
  ✅ Version commit + tag pushed to GitHub
423
423
  ✅ **GitHub Release created with release notes**
424
+ ✅ **Deployment**: all deployable repos deployed (docs sites, platforms)
424
425
 
425
426
  ---
426
427
 
@@ -550,6 +551,7 @@ git push origin $BRANCH
550
551
  ✅ Published to npmjs.org (explicit registry!)
551
552
  ✅ Version commit pushed to GitHub
552
553
  ⏭️ Tag NOT pushed (no GitHub Actions)
554
+ ✅ **Deployment**: all deployable repos deployed (docs sites, platforms)
553
555
 
554
556
  ---
555
557
 
@@ -822,6 +824,145 @@ Skip this step entirely — there's only one repo and it was already pushed.
822
824
 
823
825
  ---
824
826
 
827
+ ## DEPLOYMENT STEP (Post-Release) — RUNS AFTER UMBRELLA SYNC
828
+
829
+ **Skip this step for `--only --local` and `--only` modes.** For DEFAULT, QUICK, and CI modes, this runs after umbrella sync to deploy all services and docs that received changes.
830
+
831
+ **Why**: A release should ship everything — not just npm. If docs changed, deploy the docs site. If the platform changed, deploy it. One command = fully shipped.
832
+
833
+ ### Deployment Detection
834
+
835
+ During umbrella sync, track which repos were pushed (had dirty files or unpushed commits). Only deploy repos that had actual changes pushed.
836
+
837
+ ```bash
838
+ # PUSHED_REPOS array was populated during umbrella sync
839
+ # Each entry: "repo_dir|repo_name"
840
+ ```
841
+
842
+ ### SpecWeave Public Docs (spec-weave.com)
843
+
844
+ Docs deploy via GitHub Actions on push to `develop`, or via `workflow_dispatch` on any branch.
845
+
846
+ ```bash
847
+ SPECWEAVE_DIR="$UMBRELLA_ROOT/repositories/anton-abyzov/specweave"
848
+ if [ -d "$SPECWEAVE_DIR" ]; then
849
+ cd "$SPECWEAVE_DIR"
850
+ SW_BRANCH=$(git rev-parse --abbrev-ref HEAD)
851
+
852
+ # Check if docs-related files changed in recent commits
853
+ DOCS_CHANGED=$(git diff HEAD~5 --name-only 2>/dev/null | grep -E '^(docs-site/|\.specweave/docs/public/|README\.md|CHANGELOG\.md)' || true)
854
+
855
+ if [ -n "$DOCS_CHANGED" ]; then
856
+ if [ "$SW_BRANCH" = "develop" ]; then
857
+ echo "Docs changes pushed to develop — GitHub Actions will auto-deploy to spec-weave.com"
858
+ else
859
+ # Trigger workflow_dispatch for docs deployment from non-develop branch
860
+ SW_GH_REPO=$(node -p "try { const r = require('./package.json').repository; typeof r === 'string' ? r : r?.url?.replace(/\\.git$/, '') || '' } catch(e) { '' }" | sed 's|https://github.com/||')
861
+ if [ -n "$SW_GH_REPO" ]; then
862
+ echo "Triggering docs deployment via workflow_dispatch..."
863
+ gh workflow run deploy-docs.yml --repo "$SW_GH_REPO" --ref "$SW_BRANCH" 2>/dev/null && \
864
+ echo "Docs deployment triggered for spec-weave.com" || \
865
+ echo "WARNING: Could not trigger docs deploy — may need manual trigger from GitHub Actions tab"
866
+ fi
867
+ fi
868
+ else
869
+ echo "No docs changes detected — skipping spec-weave.com deploy"
870
+ fi
871
+ cd "$UMBRELLA_ROOT"
872
+ fi
873
+ ```
874
+
875
+ ### Verified-Skill Platform (verified-skill.com)
876
+
877
+ The vskill-platform deploys to Cloudflare Workers. Only deploy from `main` branch.
878
+
879
+ ```bash
880
+ VSKILL_DIR="$UMBRELLA_ROOT/repositories/anton-abyzov/vskill-platform"
881
+ if [ -d "$VSKILL_DIR" ]; then
882
+ cd "$VSKILL_DIR"
883
+ VS_BRANCH=$(git rev-parse --abbrev-ref HEAD)
884
+
885
+ if [ "$VS_BRANCH" = "main" ]; then
886
+ # Check if this repo had changes (was pushed during umbrella sync or had recent changes)
887
+ VS_DIRTY=$(git diff HEAD~3 --name-only 2>/dev/null | grep -E '^(src/|app/|pages/|lib/|prisma/|public/)' || true)
888
+ VS_AHEAD_OF_DEPLOY=$(git log --oneline -3 --no-merges 2>/dev/null | head -3)
889
+
890
+ if [ -n "$VS_DIRTY" ] || [ -n "$VS_AHEAD_OF_DEPLOY" ]; then
891
+ echo "Deploying vskill-platform to Cloudflare Workers..."
892
+ npm run db:generate
893
+ npm run db:migrate
894
+ npm run build
895
+ npm run build:worker
896
+ npm run deploy
897
+
898
+ echo "Deploy complete. Warming caches..."
899
+ sleep 3
900
+
901
+ # Cache warming
902
+ INTERNAL_KEY=""
903
+ if [ -f ".dev.vars" ]; then
904
+ INTERNAL_KEY=$(grep 'INTERNAL_BROADCAST_KEY=' .dev.vars 2>/dev/null | cut -d'=' -f2 || true)
905
+ fi
906
+
907
+ if [ -n "$INTERNAL_KEY" ]; then
908
+ curl -s -X POST https://verified-skill.com/api/v1/internal/cache-warm \
909
+ -H "X-Internal-Key: $INTERNAL_KEY" \
910
+ -H "Content-Type: application/json" || true
911
+ echo "Cache warmed via internal API"
912
+ else
913
+ curl -s https://verified-skill.com/api/v1/stats > /dev/null || true
914
+ echo "Cache warmed via stats endpoint"
915
+ fi
916
+
917
+ echo "vskill-platform deployed to verified-skill.com"
918
+ else
919
+ echo "No platform changes detected — skipping verified-skill.com deploy"
920
+ fi
921
+ else
922
+ echo "vskill-platform not on main ($VS_BRANCH) — skipping deploy"
923
+ fi
924
+ cd "$UMBRELLA_ROOT"
925
+ fi
926
+ ```
927
+
928
+ ### Generic Deployment Detection
929
+
930
+ For other repos with deployment scripts, auto-detect and run:
931
+
932
+ ```bash
933
+ for repo_dir in repositories/*/*/; do
934
+ [ -d "$repo_dir/.git" ] || continue
935
+
936
+ # Skip already-handled repos
937
+ case "$(cd "$repo_dir" && pwd)" in
938
+ *specweave|*vskill-platform) continue ;;
939
+ esac
940
+
941
+ # Check for push-deploy.sh script
942
+ if [ -f "$repo_dir/scripts/push-deploy.sh" ]; then
943
+ cd "$repo_dir"
944
+ REPO_NAME=$(basename "$repo_dir")
945
+ REPO_BRANCH=$(git rev-parse --abbrev-ref HEAD)
946
+ echo "Found deploy script in $REPO_NAME — running..."
947
+ bash scripts/push-deploy.sh origin "$REPO_BRANCH" || echo "WARNING: Deploy failed for $REPO_NAME"
948
+ cd "$UMBRELLA_ROOT"
949
+ fi
950
+ done
951
+ ```
952
+
953
+ ### Report Deployment Results
954
+
955
+ Append to the release report:
956
+
957
+ ```markdown
958
+ **Deployments**:
959
+ - spec-weave.com: [deployed via GH Actions | triggered workflow_dispatch | no docs changes | skipped]
960
+ - verified-skill.com: [deployed to Cloudflare Workers | no changes | skipped (not on main)]
961
+ - [other-repo]: [deployed via push-deploy.sh | skipped]
962
+ ```
963
+
964
+ ---
965
+
825
966
  ## Quick Reference
826
967
 
827
968
  ```bash
@@ -844,14 +985,14 @@ sw-release:npm --only --local
844
985
  sw-release:npm --stable
845
986
  ```
846
987
 
847
- | Scenario | Command | Prerelease Handling | Git Pushed | Tag Pushed | GH Release | Umbrella Sync |
848
- |----------|---------|---------------------|------------|------------|------------|---------------|
849
- | **FULL RELEASE** | (no flags) | `rc.1`→`rc.2` (smart) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
850
- | **QUICK RELEASE** | `--quick` | `rc.1`→`rc.2` (smart) | ✅ Yes | ❌ No | ❌ No | ✅ Yes |
851
- | CI release | `--ci` | `rc.1`→`rc.2` (smart) | ✅ Yes | ✅ Yes | ✅ (via CI) | ✅ Yes |
852
- | Local publish | `--only` | `rc.1`→`rc.2` (smart) | ❌ No | ❌ No | ❌ No | ✅ Yes |
853
- | Local bump | `--only --local` | `rc.1`→`rc.2` (smart) | ❌ No | ❌ No | ❌ No | ❌ No |
854
- | **PROMOTE** | `--stable` | `rc.X`→`X.Y.Z+1` | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
988
+ | Scenario | Command | Prerelease Handling | Git Pushed | Tag Pushed | GH Release | Umbrella Sync | Deployed |
989
+ |----------|---------|---------------------|------------|------------|------------|---------------|----------|
990
+ | **FULL RELEASE** | (no flags) | `rc.1`→`rc.2` (smart) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
991
+ | **QUICK RELEASE** | `--quick` | `rc.1`→`rc.2` (smart) | ✅ Yes | ❌ No | ❌ No | ✅ Yes | ✅ Yes |
992
+ | CI release | `--ci` | `rc.1`→`rc.2` (smart) | ✅ Yes | ✅ Yes | ✅ (via CI) | ✅ Yes | ✅ Yes |
993
+ | Local publish | `--only` | `rc.1`→`rc.2` (smart) | ❌ No | ❌ No | ❌ No | ✅ Yes | ❌ No |
994
+ | Local bump | `--only --local` | `rc.1`→`rc.2` (smart) | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No |
995
+ | **PROMOTE** | `--stable` | `rc.X`→`X.Y.Z+1` | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
855
996
 
856
997
  ---
857
998
 
@@ -66,8 +66,8 @@ fi
66
66
 
67
67
  | Command | Flow | Use Case |
68
68
  |---------|------|----------|
69
- | `sw:npm` | Auto-commit -> **PUSH** -> Bump -> Build -> **Publish** -> Push tag -> **GH Release** | **DEFAULT: FULL RELEASE** |
70
- | `sw:npm --quick` | Auto-commit -> **PUSH** -> Bump -> Build -> **Publish locally** -> NO GH release | **QUICK: Save + Local Release** |
69
+ | `sw:npm` | Auto-commit -> **PUSH** -> Bump -> Build -> **Publish** -> Push tag -> **GH Release** -> **Deploy all** | **DEFAULT: FULL RELEASE + Deploy** |
70
+ | `sw:npm --quick` | Auto-commit -> **PUSH** -> Bump -> Build -> **Publish locally** -> **Deploy all** -> NO GH release | **QUICK: Save + Release + Deploy** |
71
71
  | `sw:npm --ci` | Bump -> Push -> **CI publishes + GH Release** | Let GitHub Actions handle everything |
72
72
  | `sw:npm --only` | Bump -> Build -> **Publish locally** -> NO push | Quick local release, push later |
73
73
  | `sw:npm --only --local` | **Bump ONLY** -> NO build, NO publish, NO git | FASTEST: Local testing only |
@@ -455,6 +455,7 @@ gh release view "v$NEW_VERSION" --json tagName,url
455
455
  - Version commit + tag pushed to GitHub
456
456
  - **GitHub Release created with release notes**
457
457
  - **Umbrella sync**: all sibling repos committed+pushed, umbrella repo committed+pushed
458
+ - **Deployment**: all deployable repos deployed (docs sites, platforms)
458
459
 
459
460
  ---
460
461
 
@@ -576,6 +577,7 @@ git push origin $BRANCH
576
577
  - Version commit pushed to GitHub
577
578
  - Tag NOT pushed (no GitHub Actions)
578
579
  - **Umbrella sync**: all sibling repos committed+pushed, umbrella repo committed+pushed
580
+ - **Deployment**: all deployable repos deployed (docs sites, platforms)
579
581
 
580
582
  ---
581
583
 
@@ -905,6 +907,145 @@ Skip this step entirely — there's only one repo and it was already pushed.
905
907
 
906
908
  ---
907
909
 
910
+ ## DEPLOYMENT STEP (Post-Release) — RUNS AFTER UMBRELLA SYNC
911
+
912
+ **Skip this step for `--only --local` and `--only` modes.** For DEFAULT, QUICK, and CI modes, this runs after umbrella sync to deploy all services and docs that received changes.
913
+
914
+ **Why**: A release should ship everything — not just npm. If docs changed, deploy the docs site. If the platform changed, deploy it. One command = fully shipped.
915
+
916
+ ### Deployment Detection
917
+
918
+ During umbrella sync, track which repos were pushed (had dirty files or unpushed commits). Only deploy repos that had actual changes pushed.
919
+
920
+ ```bash
921
+ # PUSHED_REPOS array was populated during umbrella sync
922
+ # Each entry: "repo_dir|repo_name"
923
+ ```
924
+
925
+ ### SpecWeave Public Docs (spec-weave.com)
926
+
927
+ Docs deploy via GitHub Actions on push to `develop`, or via `workflow_dispatch` on any branch.
928
+
929
+ ```bash
930
+ SPECWEAVE_DIR="$UMBRELLA_ROOT/repositories/anton-abyzov/specweave"
931
+ if [ -d "$SPECWEAVE_DIR" ]; then
932
+ cd "$SPECWEAVE_DIR"
933
+ SW_BRANCH=$(git rev-parse --abbrev-ref HEAD)
934
+
935
+ # Check if docs-related files changed in recent commits
936
+ DOCS_CHANGED=$(git diff HEAD~5 --name-only 2>/dev/null | grep -E '^(docs-site/|\.specweave/docs/public/|README\.md|CHANGELOG\.md)' || true)
937
+
938
+ if [ -n "$DOCS_CHANGED" ]; then
939
+ if [ "$SW_BRANCH" = "develop" ]; then
940
+ echo "Docs changes pushed to develop — GitHub Actions will auto-deploy to spec-weave.com"
941
+ else
942
+ # Trigger workflow_dispatch for docs deployment from non-develop branch
943
+ SW_GH_REPO=$(node -p "try { const r = require('./package.json').repository; typeof r === 'string' ? r : r?.url?.replace(/\\.git$/, '') || '' } catch(e) { '' }" | sed 's|https://github.com/||')
944
+ if [ -n "$SW_GH_REPO" ]; then
945
+ echo "Triggering docs deployment via workflow_dispatch..."
946
+ gh workflow run deploy-docs.yml --repo "$SW_GH_REPO" --ref "$SW_BRANCH" 2>/dev/null && \
947
+ echo "Docs deployment triggered for spec-weave.com" || \
948
+ echo "WARNING: Could not trigger docs deploy — may need manual trigger from GitHub Actions tab"
949
+ fi
950
+ fi
951
+ else
952
+ echo "No docs changes detected — skipping spec-weave.com deploy"
953
+ fi
954
+ cd "$UMBRELLA_ROOT"
955
+ fi
956
+ ```
957
+
958
+ ### Verified-Skill Platform (verified-skill.com)
959
+
960
+ The vskill-platform deploys to Cloudflare Workers. Only deploy from `main` branch.
961
+
962
+ ```bash
963
+ VSKILL_DIR="$UMBRELLA_ROOT/repositories/anton-abyzov/vskill-platform"
964
+ if [ -d "$VSKILL_DIR" ]; then
965
+ cd "$VSKILL_DIR"
966
+ VS_BRANCH=$(git rev-parse --abbrev-ref HEAD)
967
+
968
+ if [ "$VS_BRANCH" = "main" ]; then
969
+ # Check if this repo had changes (was pushed during umbrella sync or had recent changes)
970
+ VS_DIRTY=$(git diff HEAD~3 --name-only 2>/dev/null | grep -E '^(src/|app/|pages/|lib/|prisma/|public/)' || true)
971
+ VS_AHEAD_OF_DEPLOY=$(git log --oneline -3 --no-merges 2>/dev/null | head -3)
972
+
973
+ if [ -n "$VS_DIRTY" ] || [ -n "$VS_AHEAD_OF_DEPLOY" ]; then
974
+ echo "Deploying vskill-platform to Cloudflare Workers..."
975
+ npm run db:generate
976
+ npm run db:migrate
977
+ npm run build
978
+ npm run build:worker
979
+ npm run deploy
980
+
981
+ echo "Deploy complete. Warming caches..."
982
+ sleep 3
983
+
984
+ # Cache warming
985
+ INTERNAL_KEY=""
986
+ if [ -f ".dev.vars" ]; then
987
+ INTERNAL_KEY=$(grep 'INTERNAL_BROADCAST_KEY=' .dev.vars 2>/dev/null | cut -d'=' -f2 || true)
988
+ fi
989
+
990
+ if [ -n "$INTERNAL_KEY" ]; then
991
+ curl -s -X POST https://verified-skill.com/api/v1/internal/cache-warm \
992
+ -H "X-Internal-Key: $INTERNAL_KEY" \
993
+ -H "Content-Type: application/json" || true
994
+ echo "Cache warmed via internal API"
995
+ else
996
+ curl -s https://verified-skill.com/api/v1/stats > /dev/null || true
997
+ echo "Cache warmed via stats endpoint"
998
+ fi
999
+
1000
+ echo "vskill-platform deployed to verified-skill.com"
1001
+ else
1002
+ echo "No platform changes detected — skipping verified-skill.com deploy"
1003
+ fi
1004
+ else
1005
+ echo "vskill-platform not on main ($VS_BRANCH) — skipping deploy"
1006
+ fi
1007
+ cd "$UMBRELLA_ROOT"
1008
+ fi
1009
+ ```
1010
+
1011
+ ### Generic Deployment Detection
1012
+
1013
+ For other repos with deployment scripts, auto-detect and run:
1014
+
1015
+ ```bash
1016
+ for repo_dir in repositories/*/*/; do
1017
+ [ -d "$repo_dir/.git" ] || continue
1018
+
1019
+ # Skip already-handled repos
1020
+ case "$(cd "$repo_dir" && pwd)" in
1021
+ *specweave|*vskill-platform) continue ;;
1022
+ esac
1023
+
1024
+ # Check for push-deploy.sh script
1025
+ if [ -f "$repo_dir/scripts/push-deploy.sh" ]; then
1026
+ cd "$repo_dir"
1027
+ REPO_NAME=$(basename "$repo_dir")
1028
+ REPO_BRANCH=$(git rev-parse --abbrev-ref HEAD)
1029
+ echo "Found deploy script in $REPO_NAME — running..."
1030
+ bash scripts/push-deploy.sh origin "$REPO_BRANCH" || echo "WARNING: Deploy failed for $REPO_NAME"
1031
+ cd "$UMBRELLA_ROOT"
1032
+ fi
1033
+ done
1034
+ ```
1035
+
1036
+ ### Report Deployment Results
1037
+
1038
+ Append to the release report:
1039
+
1040
+ ```markdown
1041
+ **Deployments**:
1042
+ - spec-weave.com: [deployed via GH Actions | triggered workflow_dispatch | no docs changes | skipped]
1043
+ - verified-skill.com: [deployed to Cloudflare Workers | no changes | skipped (not on main)]
1044
+ - [other-repo]: [deployed via push-deploy.sh | skipped]
1045
+ ```
1046
+
1047
+ ---
1048
+
908
1049
  ## Quick Reference
909
1050
 
910
1051
  ```bash
@@ -927,14 +1068,14 @@ sw:npm --only --local
927
1068
  sw:npm --stable
928
1069
  ```
929
1070
 
930
- | Scenario | Command | Prerelease Handling | Git Pushed | Tag Pushed | GH Release | Umbrella Sync |
931
- |----------|---------|---------------------|------------|------------|------------|---------------|
932
- | **FULL RELEASE** | (no flags) | `rc.1`->`rc.2` (smart) | Yes | Yes | Yes | Yes |
933
- | **QUICK RELEASE** | `--quick` | `rc.1`->`rc.2` (smart) | Yes | No | No | Yes |
934
- | CI release | `--ci` | `rc.1`->`rc.2` (smart) | Yes | Yes | Yes (via CI) | Yes |
935
- | Local publish | `--only` | `rc.1`->`rc.2` (smart) | No | No | No | Yes |
936
- | Local bump | `--only --local` | `rc.1`->`rc.2` (smart) | No | No | No | No |
937
- | **PROMOTE** | `--stable` | `rc.X`->`X.Y.Z+1` | Yes | Yes | Yes | Yes |
1071
+ | Scenario | Command | Prerelease Handling | Git Pushed | Tag Pushed | GH Release | Umbrella Sync | Deployed |
1072
+ |----------|---------|---------------------|------------|------------|------------|---------------|----------|
1073
+ | **FULL RELEASE** | (no flags) | `rc.1`->`rc.2` (smart) | Yes | Yes | Yes | Yes | Yes |
1074
+ | **QUICK RELEASE** | `--quick` | `rc.1`->`rc.2` (smart) | Yes | No | No | Yes | Yes |
1075
+ | CI release | `--ci` | `rc.1`->`rc.2` (smart) | Yes | Yes | Yes (via CI) | Yes | Yes |
1076
+ | Local publish | `--only` | `rc.1`->`rc.2` (smart) | No | No | No | Yes | No |
1077
+ | Local bump | `--only --local` | `rc.1`->`rc.2` (smart) | No | No | No | No | No |
1078
+ | **PROMOTE** | `--stable` | `rc.X`->`X.Y.Z+1` | Yes | Yes | Yes | Yes | Yes |
938
1079
 
939
1080
  ## Resources
940
1081