xtrm-tools 0.7.16 → 0.7.18
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/.xtrm/config/hooks.json +2 -0
- package/.xtrm/config/instructions/agents-top.md +2 -1
- package/.xtrm/registry.json +432 -707
- package/.xtrm/skills/default/creating-service-skills/scripts/bootstrap.py +82 -156
- package/.xtrm/skills/default/creating-service-skills/scripts/scaffolder.py +73 -121
- package/.xtrm/skills/default/hook-development/references/patterns.md +1 -1
- package/.xtrm/skills/default/last30days/scripts/test-v1-vs-v2.sh +2 -2
- package/.xtrm/skills/default/planning/SKILL.md +75 -29
- package/.xtrm/skills/default/releasing/SKILL.md +163 -57
- package/.xtrm/skills/default/security-pipeline/SKILL.md +192 -0
- package/.xtrm/skills/default/security-pipeline/scripts/security-bootstrap.sh +294 -0
- package/.xtrm/skills/default/security-pipeline/templates/.githooks/pre-push.template +39 -0
- package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/gitleaks.yml +33 -0
- package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/osv-scanner.yml +33 -0
- package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/semgrep.yml +41 -0
- package/.xtrm/skills/default/security-pipeline/templates/.gitleaks.toml +44 -0
- package/.xtrm/skills/default/security-pipeline/templates/.pre-commit-config.yaml +67 -0
- package/.xtrm/skills/default/security-pipeline/templates/.semgrepignore +46 -0
- package/.xtrm/skills/default/security-pipeline/templates/scripts/security-scan.sh +57 -0
- package/.xtrm/skills/default/security-pipeline/templates/scripts/semgrep-diff.sh +68 -0
- package/.xtrm/skills/default/session-close-report/SKILL.md +167 -6
- package/.xtrm/skills/default/sync-docs/SKILL.md +1 -1
- package/.xtrm/skills/default/update-specialists/SKILL.md +204 -77
- package/.xtrm/skills/default/update-xt/SKILL.md +270 -4
- package/.xtrm/skills/default/updating-service-skills/scripts/drift_detector.py +22 -0
- package/.xtrm/skills/default/using-kpi/SKILL.md +47 -5
- package/.xtrm/skills/default/using-script-specialists/SKILL.md +7 -5
- package/.xtrm/skills/default/using-specialists/SKILL.md +13 -12
- package/.xtrm/skills/default/using-specialists-auto/SKILL.md +137 -0
- package/.xtrm/skills/default/using-specialists-v2/SKILL.md +15 -22
- package/.xtrm/skills/default/using-specialists-v3/SKILL.md +1074 -0
- package/.xtrm/skills/default/vaultctl/SKILL.md +2 -2
- package/CHANGELOG.md +91 -3
- package/cli/dist/index.cjs +12425 -3770
- package/cli/dist/index.cjs.map +1 -1
- package/cli/package.json +9 -3
- package/package.json +27 -7
- package/packages/pi-extensions/extensions/xtrm-ui/index.ts +76 -1
- package/packages/pi-extensions/package.json +1 -1
- package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.combined.log +0 -7
- package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stderr.log +0 -0
- package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stdout.log +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/LICENSE +0 -22
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/README.md +0 -29
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts +0 -3
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js +0 -27
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts +0 -11
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js +0 -100
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts +0 -25
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js +0 -104
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts +0 -10
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js +0 -293
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts +0 -10
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js +0 -26
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js +0 -51
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js +0 -60
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js +0 -38
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts +0 -5
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js +0 -33
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts +0 -24
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js +0 -30
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts +0 -11
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js +0 -43
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js +0 -41
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js +0 -53
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js +0 -27
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js +0 -53
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js +0 -60
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js +0 -38
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts +0 -6
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js +0 -257
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js +0 -71
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts +0 -6
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js +0 -173
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts +0 -26
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js +0 -195
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts +0 -121
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js +0 -18
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js +0 -110
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js +0 -32
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js +0 -13
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js +0 -7
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts +0 -5
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js +0 -58
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js +0 -27
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts +0 -2
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js +0 -8
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js.map +0 -1
- package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/package.json +0 -40
- package/.xtrm/skills/default/planning/evals/evals.json +0 -19
- package/.xtrm/skills/default/quality-gates/evals/evals.json +0 -181
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/FINAL-EVAL-SUMMARY.md +0 -75
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-auto-fix-verification/with_skill/outputs/response.md +0 -59
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-mixed-language-project/with_skill/outputs/response.md +0 -60
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/eval-summary.md +0 -105
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/partial-install-python-only/with_skill/outputs/response.md +0 -93
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/python-refactor-request/with_skill/outputs/response.md +0 -104
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/quality-gate-error-fix/with_skill/outputs/response.md +0 -74
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-general-chat/with_skill/outputs/response.md +0 -18
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-math-question/with_skill/outputs/response.md +0 -18
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-unrelated-coding/with_skill/outputs/response.md +0 -56
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/tdd-guard-blocking-confusion/with_skill/outputs/response.md +0 -67
- package/.xtrm/skills/default/quality-gates/workspace/iteration-1/typescript-feature-with-tests/with_skill/outputs/response.md +0 -97
- package/.xtrm/skills/default/sync-docs/evals/evals.json +0 -89
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.json +0 -293
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.md +0 -13
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/outputs/result.md +0 -210
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/outputs/result.md +0 -101
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/outputs/result.md +0 -198
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/outputs/result.md +0 -94
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/outputs/result.md +0 -237
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/outputs/result.md +0 -134
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/grading.json +0 -28
- package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.json +0 -297
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.md +0 -13
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/outputs/result.md +0 -137
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/grading.json +0 -92
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/outputs/result.md +0 -134
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/grading.json +0 -86
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/outputs/result.md +0 -193
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/grading.json +0 -72
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/outputs/result.md +0 -211
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/grading.json +0 -91
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/outputs/result.md +0 -182
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/grading.json +0 -95
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/timing.json +0 -1
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/outputs/result.md +0 -222
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/grading.json +0 -88
- package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.json +0 -298
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.md +0 -13
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/outputs/result.md +0 -125
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/grading.json +0 -97
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/outputs/result.md +0 -144
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/grading.json +0 -78
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/outputs/result.md +0 -104
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/grading.json +0 -91
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/outputs/result.md +0 -79
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/grading.json +0 -82
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/eval_metadata.json +0 -27
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase1_context.json +0 -302
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase2_drift.txt +0 -33
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase3_analysis.json +0 -114
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase4_fix.txt +0 -118
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase5_validate.txt +0 -38
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/result.md +0 -158
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/grading.json +0 -95
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/outputs/result.md +0 -71
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/grading.json +0 -90
- package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/timing.json +0 -5
- package/.xtrm/skills/default/test-planning/evals/evals.json +0 -23
- package/.xtrm/skills/default/using-specialists/SKILL.safe.md +0 -1082
- package/.xtrm/skills/default/using-specialists/SKILL.ultra.md +0 -1082
- package/.xtrm/skills/default/using-specialists/evals/evals.json +0 -68
- package/packages/pi-extensions/.serena/project.yml +0 -130
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Run semgrep against the diff between HEAD and origin/main.
|
|
3
|
+
# Used by pre-push hook so pre-existing debt doesn't block unrelated pushes.
|
|
4
|
+
# CI's full scan remains the source of truth for absolute findings.
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
if ! command -v semgrep >/dev/null; then
|
|
9
|
+
echo "semgrep not installed — skipping (CI covers it)"
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Derive base ref dynamically. Order:
|
|
14
|
+
# 1. branch's tracked upstream ('@{u}') — most reliable
|
|
15
|
+
# 2. common default branches if their *remote* version exists (origin/*)
|
|
16
|
+
# 3. local default branches IF different from current branch
|
|
17
|
+
# We refuse to use the current branch as its own baseline because then
|
|
18
|
+
# merge-base resolves to HEAD and --baseline-commit=HEAD silently scans
|
|
19
|
+
# nothing on every push.
|
|
20
|
+
HEAD_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)
|
|
21
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
22
|
+
|
|
23
|
+
upstream=$(git rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null || true)
|
|
24
|
+
BASE_REF=""
|
|
25
|
+
if [ -n "$upstream" ]; then
|
|
26
|
+
BASE_REF="$upstream"
|
|
27
|
+
else
|
|
28
|
+
for cand in origin/main origin/master main master; do
|
|
29
|
+
git rev-parse --verify "$cand" >/dev/null 2>&1 || continue
|
|
30
|
+
# Skip a local-branch candidate that IS the current branch
|
|
31
|
+
[ "$cand" = "$HEAD_BRANCH" ] && continue
|
|
32
|
+
BASE_REF="$cand"
|
|
33
|
+
break
|
|
34
|
+
done
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
[ -n "$BASE_REF" ] && git fetch "${BASE_REF%%/*}" "${BASE_REF#*/}" --quiet 2>/dev/null || true
|
|
38
|
+
|
|
39
|
+
SEMGREP_BASELINE_ARGS=()
|
|
40
|
+
if [ -n "$BASE_REF" ]; then
|
|
41
|
+
BASE=$(git merge-base HEAD "$BASE_REF" 2>/dev/null || true)
|
|
42
|
+
# merge-base==HEAD here means branch is at upstream tip — legitimate empty
|
|
43
|
+
# diff. Pass --baseline-commit so semgrep produces an empty result rather
|
|
44
|
+
# than falling back to a full scan.
|
|
45
|
+
[ -n "$BASE" ] && SEMGREP_BASELINE_ARGS=(--baseline-commit="$BASE")
|
|
46
|
+
fi
|
|
47
|
+
# Last-resort: no upstream resolved at all. rev-list can equal HEAD on single
|
|
48
|
+
# -commit histories; reject and full-scan in that case.
|
|
49
|
+
if [ ${#SEMGREP_BASELINE_ARGS[@]} -eq 0 ]; then
|
|
50
|
+
BASE=$(git rev-list HEAD --max-count=50 | tail -1)
|
|
51
|
+
if [ -n "$BASE" ] && [ "$BASE" != "$HEAD_SHA" ]; then
|
|
52
|
+
SEMGREP_BASELINE_ARGS=(--baseline-commit="$BASE")
|
|
53
|
+
else
|
|
54
|
+
echo "[semgrep-diff] no usable baseline (no upstream, single-commit branch, or pushing default branch directly) — running full scan"
|
|
55
|
+
fi
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
exec semgrep scan \
|
|
59
|
+
--config=p/default \
|
|
60
|
+
--config=p/security-audit \
|
|
61
|
+
--config=p/secrets \
|
|
62
|
+
--config=p/python \
|
|
63
|
+
--config=p/dockerfile \
|
|
64
|
+
--config=p/github-actions \
|
|
65
|
+
"${SEMGREP_BASELINE_ARGS[@]}" \
|
|
66
|
+
--error \
|
|
67
|
+
--quiet \
|
|
68
|
+
--skip-unknown-extensions
|
|
@@ -41,6 +41,52 @@ are factually superseded.
|
|
|
41
41
|
|
|
42
42
|
## Workflow
|
|
43
43
|
|
|
44
|
+
### 0. Cleanup before reporting (MANDATORY)
|
|
45
|
+
|
|
46
|
+
A report on a dirty session is misleading. Before selecting or generating any
|
|
47
|
+
report, verify and clean up everything this session opened. The report must
|
|
48
|
+
reflect a clean terminal state.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# 0a. Worktrees opened during the session
|
|
52
|
+
git worktree list # any feature/fix/chore worktrees still here?
|
|
53
|
+
# Remove every worktree this session created (or that a stopped specialist left):
|
|
54
|
+
git worktree remove <path> # for each stale entry
|
|
55
|
+
git branch -D <branch> # only after confirming merged or abandoned
|
|
56
|
+
git worktree prune # drop stale metadata
|
|
57
|
+
|
|
58
|
+
# 0b. Specialist jobs still running or waiting
|
|
59
|
+
sp ps # MUST be empty (or only intentionally kept-alive jobs)
|
|
60
|
+
sp stop <job-id> # for any leftover running/waiting job
|
|
61
|
+
# After every sp stop, re-check sp ps and git worktree list — sp stop should
|
|
62
|
+
# clean its worktree, but verify.
|
|
63
|
+
|
|
64
|
+
# 0c. Stale background processes from the session
|
|
65
|
+
ps -ef | grep -E '(serena|gitnexus|specialists|sp-serve|sp-script|pi[ -]|claude)' | grep -v grep
|
|
66
|
+
# Kill anything you launched that is still running and no longer needed.
|
|
67
|
+
# Be especially careful with:
|
|
68
|
+
# - serena MCP servers (often leak when an MCP host crashes)
|
|
69
|
+
# - gitnexus index processes (`npx gitnexus analyze` can outlive its terminal)
|
|
70
|
+
# - sp-serve / sp-script tmux sessions
|
|
71
|
+
# - orphaned `pi` or `claude` processes from interactive sessions
|
|
72
|
+
|
|
73
|
+
tmux ls 2>/dev/null # any sp-* or xt-* tmux sessions left?
|
|
74
|
+
tmux kill-session -t <name> # for each stale session
|
|
75
|
+
|
|
76
|
+
# 0d. Tmp dirs the session created (only if large or sensitive)
|
|
77
|
+
ls -la /tmp/sp-serve-* /tmp/sp-script-* 2>/dev/null
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Do not skip any sub-step. If a process refuses to stop cleanly, document it in
|
|
81
|
+
the **Problems Encountered** section of the report so the next agent knows.
|
|
82
|
+
|
|
83
|
+
A clean session ends with:
|
|
84
|
+
- `git worktree list` showing only the main worktree (plus any intentional ones)
|
|
85
|
+
- `sp ps` showing 0 jobs (or only intentional keep-alive)
|
|
86
|
+
- no leaked `serena` / `gitnexus` / `specialists` / `sp-serve` / `sp-script`
|
|
87
|
+
processes from this session
|
|
88
|
+
- no orphaned tmux sessions matching `sp-*` or `xt-*`
|
|
89
|
+
|
|
44
90
|
### 1. Select report: update existing or generate new
|
|
45
91
|
|
|
46
92
|
For same-day update:
|
|
@@ -115,8 +161,8 @@ delete this section. If prior dispatches exist, keep and extend them.
|
|
|
115
161
|
#### Problems Encountered
|
|
116
162
|
Every problem hit during the session. Root Cause and Resolution columns are
|
|
117
163
|
mandatory. Include: bugs discovered, wrong approaches tried, blockers hit,
|
|
118
|
-
tooling failures
|
|
119
|
-
this section entirely.
|
|
164
|
+
tooling failures, and any cleanup-step failures from Step 0 above. If no
|
|
165
|
+
problems exist anywhere in the same-day report, delete this section entirely.
|
|
120
166
|
|
|
121
167
|
#### Code Changes
|
|
122
168
|
The skeleton lists files. Add narrative:
|
|
@@ -127,7 +173,8 @@ The skeleton lists files. Add narrative:
|
|
|
127
173
|
to the final pushed stack
|
|
128
174
|
|
|
129
175
|
#### Documentation Updates
|
|
130
|
-
List doc changes, skill updates, memory saves, CHANGELOG entries
|
|
176
|
+
List doc changes, skill updates, memory saves, CHANGELOG entries
|
|
177
|
+
(see Step 5 — due-diligence sweep — and Step 6 — CHANGELOG sync).
|
|
131
178
|
Delete if no doc work happened.
|
|
132
179
|
|
|
133
180
|
#### Open Issues with Context
|
|
@@ -162,12 +209,108 @@ Ensure all frontmatter counts are accurate after filling/updating:
|
|
|
162
209
|
- `issues_closed` — actual closed issue count represented in the report
|
|
163
210
|
- `commits` — commit count represented in the report, if known
|
|
164
211
|
|
|
165
|
-
### 5.
|
|
212
|
+
### 5. Due-diligence sweep (paranoid mode — assume you forgot something)
|
|
213
|
+
|
|
214
|
+
Step 0 cleaned the *process* state. This step audits the *content* state.
|
|
215
|
+
Cleanup work the orchestrator usually forgets at session close, ranked by
|
|
216
|
+
how often it gets missed:
|
|
217
|
+
|
|
218
|
+
- **Service skills**: did this session touch any code under a service
|
|
219
|
+
registered in `.claude/skills/service-registry.json` (or equivalent
|
|
220
|
+
registry)? If yes, the service skill's SKILL.md or diagnostic scripts
|
|
221
|
+
are likely drifted. Run `/updating-service-skills` (or
|
|
222
|
+
`service-skills-sync` specialist) and let it scan. If no registry exists,
|
|
223
|
+
skip — but check whether the project keeps service skills under
|
|
224
|
+
`.xtrm/skills/user/packs/<service>/` and treat them the same.
|
|
225
|
+
- **Docs SSOT**: did the session change architecture, migrations, public
|
|
226
|
+
APIs, or service ownership? If yes, run `/sync-docs` (or the
|
|
227
|
+
`sync-docs` specialist) for any drifted doc. Skip if changes are
|
|
228
|
+
pure-internal (refactors with no observable surface change).
|
|
229
|
+
- **Memories**: every `bd close` should have triggered a memory-gate ack.
|
|
230
|
+
Run `bd memories <topic>` to confirm anything genuinely novel landed.
|
|
231
|
+
If you saw a real surprise but acked "nothing novel" out of haste,
|
|
232
|
+
go back and `bd remember` it now.
|
|
233
|
+
- **CLAUDE.md / project guide**: did this session add or remove a
|
|
234
|
+
service, change a key port, change a top-level workflow command, or
|
|
235
|
+
change how tools are wired? If yes, append/correct in CLAUDE.md before
|
|
236
|
+
commit — the file is loaded automatically by every future session.
|
|
237
|
+
- **Evidence artifacts**: did the session generate reports, dashboards,
|
|
238
|
+
CSVs, or figures intended to be persisted (`scripts/outputs/`,
|
|
239
|
+
`docs/review/`, etc.)? Confirm they are committed; otherwise either
|
|
240
|
+
commit them or document in the report why they were not kept.
|
|
241
|
+
- **Decisions**: did the session make a non-obvious architectural call
|
|
242
|
+
(deprecating a service, schema choice, dependency swap)? Record via
|
|
243
|
+
`bd decision` if the project uses it, otherwise note in the report.
|
|
244
|
+
- **Tests**: did new behavior land without tests? If yes, file a test
|
|
245
|
+
follow-up bead (`discovered-from:<impl-id>`) before closing — do not
|
|
246
|
+
let untested behavior leave the session silent.
|
|
247
|
+
- **Skill packs (`.xtrm/skills/`)**: did you edit a skill in this
|
|
248
|
+
project? If the canonical version lives in xtrm-tools, mirror the edit
|
|
249
|
+
there too (or note that `xt update` will overwrite the local mirror on
|
|
250
|
+
next sync, which makes the local edit ephemeral).
|
|
251
|
+
- **Open beads created mid-session**: every bead filed this session
|
|
252
|
+
should be either closed, scheduled with a parent, or marked with clear
|
|
253
|
+
context. Run `bd list --status=open --created-by=me` (or equivalent)
|
|
254
|
+
and confirm none are floating without a parent or follow-up note.
|
|
255
|
+
|
|
256
|
+
If any item above turns up real work, do it now or file a follow-up bead
|
|
257
|
+
linked `discovered-from:<this-session-root>` so the next agent picks it up.
|
|
258
|
+
A clean session means none of these were forgotten — the report should be
|
|
259
|
+
able to honestly claim "due-diligence sweep clean."
|
|
260
|
+
|
|
261
|
+
### 6. Sync CHANGELOG.md (MANDATORY when user-facing changes shipped)
|
|
262
|
+
|
|
263
|
+
The session report is for the next *agent*; CHANGELOG.md is for downstream
|
|
264
|
+
*consumers*. Both must stay in sync — the report alone is not enough.
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
ls CHANGELOG.md 2>/dev/null # confirm the project keeps one
|
|
268
|
+
git tag --sort=-v:refname | head -3 # last release tag
|
|
269
|
+
git log <last-tag>..HEAD --oneline # what is missing
|
|
270
|
+
```
|
|
166
271
|
|
|
167
|
-
|
|
272
|
+
Decision tree:
|
|
273
|
+
|
|
274
|
+
- **A release was cut this session** (new tag, e.g. via `/releasing` or
|
|
275
|
+
`changelog-keeper`): the new version section already exists. Verify it
|
|
276
|
+
contains every user-facing change from the session and that
|
|
277
|
+
`[Unreleased]` is empty. Stop — release flow owns CHANGELOG.
|
|
278
|
+
- **No release was cut**: append every user-facing change from the session
|
|
279
|
+
to the existing `[Unreleased]` block at the top of CHANGELOG.md. Use
|
|
280
|
+
Keep a Changelog categories: `### Added` / `### Changed` / `### Deprecated`
|
|
281
|
+
/ `### Removed` / `### Fixed` / `### Security`. One bullet per change,
|
|
282
|
+
lead with the affected subsystem or symbol, include the bead ID(s) when
|
|
283
|
+
available — same prose density as prior `[Unreleased]` entries.
|
|
284
|
+
- **No user-facing change shipped** (pure orchestration, doc-only edits to
|
|
285
|
+
internal-handoff files like reports/skills, refactors with no observable
|
|
286
|
+
effect): skip — do not pollute `[Unreleased]` with internal noise. Note
|
|
287
|
+
the skip in the Documentation Updates section so it is auditable.
|
|
288
|
+
|
|
289
|
+
What counts as user-facing for `[Unreleased]`:
|
|
290
|
+
- new or removed CLI flags, commands, env vars, config keys
|
|
291
|
+
- new or removed services / containers / jobs an operator deploys
|
|
292
|
+
- schema migrations that downstream consumers see
|
|
293
|
+
- new or removed API/MCP/REST endpoints, tools, or response fields
|
|
294
|
+
- bug fixes that change observable behavior
|
|
295
|
+
- security-relevant changes
|
|
296
|
+
|
|
297
|
+
What does NOT belong in `[Unreleased]`:
|
|
298
|
+
- session reports themselves
|
|
299
|
+
- skill or memory edits that only affect agents
|
|
300
|
+
- refactors with byte-identical observable behavior
|
|
301
|
+
- per-issue notes that already live in beads
|
|
302
|
+
|
|
303
|
+
If the project has no CHANGELOG.md, skip silently — do not create one
|
|
304
|
+
without operator direction.
|
|
305
|
+
|
|
306
|
+
### 7. Commit the report (and CHANGELOG if updated)
|
|
307
|
+
|
|
308
|
+
Reports are versioned handoff artifacts and should be tracked. If Step 5
|
|
309
|
+
modified `CHANGELOG.md`, fold it into the same commit so the report and
|
|
310
|
+
changelog ship together.
|
|
168
311
|
|
|
169
312
|
```bash
|
|
170
|
-
git add .xtrm/reports/
|
|
313
|
+
git add .xtrm/reports/ CHANGELOG.md # CHANGELOG.md only if changed
|
|
171
314
|
git commit -m "session report: <date>"
|
|
172
315
|
```
|
|
173
316
|
|
|
@@ -175,11 +318,29 @@ If you updated an existing same-day report after an earlier report commit, commi
|
|
|
175
318
|
that update with the same message style or fold it into the current final commit
|
|
176
319
|
before push.
|
|
177
320
|
|
|
321
|
+
### 8. Final cleanup verification (MANDATORY)
|
|
322
|
+
|
|
323
|
+
After committing, re-run the Step 0 checks one more time:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
git worktree list
|
|
327
|
+
sp ps
|
|
328
|
+
ps -ef | grep -E '(serena|gitnexus|specialists|sp-serve|sp-script)' | grep -v grep
|
|
329
|
+
tmux ls 2>/dev/null
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
If any of these show session-leaked artifacts, stop them now or document them
|
|
333
|
+
in the report. Do not consider the session "closed" until this verification is
|
|
334
|
+
clean.
|
|
335
|
+
|
|
178
336
|
## Quality bar
|
|
179
337
|
|
|
180
338
|
The reference is `~/projects/specialists/.xtrm/reports/2026-03-30-orchestration-session.md`.
|
|
181
339
|
Every report must match that level of detail. Specifically:
|
|
182
340
|
|
|
341
|
+
- Step 0 cleanup performed before report generation; Step 8 verification clean.
|
|
342
|
+
- Step 5 due-diligence sweep performed; service skills, docs, memories, CLAUDE.md, evidence, decisions, tests, and skill mirrors checked (or skipped with reason).
|
|
343
|
+
- Step 6 CHANGELOG sync performed when user-facing changes shipped (or skip noted).
|
|
183
344
|
- No empty `<!-- FILL -->` markers left in the final output
|
|
184
345
|
- No duplicate same-day reports unless explicitly requested by the operator
|
|
185
346
|
- Every closed issue has context, not just an ID
|
|
@@ -78,7 +78,7 @@ and stop.
|
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
80
|
python3 .xtrm/skills/default/sync-docs/scripts/drift_detector.py scan --json \
|
|
81
|
-
| jq '[.[] | select(.
|
|
81
|
+
| jq '[.stale[]? | select(.doc == "<YOUR_DOC>")]'
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
If your doc reports stale, capture the list of commits since `synced_at` — those are your candidate commits for Phase 3.
|
|
@@ -1,35 +1,121 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: update-specialists
|
|
3
3
|
description: >
|
|
4
|
-
Reconcile
|
|
5
|
-
Use this skill when user says "update specialists", "
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Reconcile specialists runtime drift and xtrm-managed asset drift across one repo or many.
|
|
5
|
+
Use this skill when user says "update specialists", "specialists is out of date",
|
|
6
|
+
"xtrm drift", "skills not updating", "assets out of date", or when operator needs
|
|
7
|
+
guided refresh of specialists/xtrm state.
|
|
8
|
+
version: 2.1
|
|
8
9
|
synced_at: 2026-05-05
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# update-specialists
|
|
12
13
|
|
|
13
|
-
Interactive
|
|
14
|
+
Interactive operator workflow for the two distribution tracks:
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
16
|
+
- **Category A — specialists runtime / npm-live assets**
|
|
17
|
+
- specialist definitions
|
|
18
|
+
- mandatory rules
|
|
19
|
+
- tool catalogs
|
|
20
|
+
- node configs
|
|
21
|
+
- resolved by `sp` from the installed `@jaggerxtrm/specialists` package unless a repo intentionally overrides them
|
|
22
|
+
- **Category B — xtrm-managed filesystem assets**
|
|
23
|
+
- skills under `.xtrm/skills/default/`
|
|
24
|
+
- hooks under `.xtrm/hooks/default/`
|
|
25
|
+
- active `.claude/skills`, `.pi/skills`, hook settings, and related registry-managed files
|
|
26
|
+
- refreshed by `xt update`
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
1. find projects root,
|
|
21
|
-
2. inspect drift,
|
|
22
|
-
3. summarize per-repo state,
|
|
23
|
-
4. ask operator which repos to refresh,
|
|
24
|
-
5. run `xt update --apply`,
|
|
25
|
-
6. re-check,
|
|
26
|
-
7. report final state.
|
|
28
|
+
Do not collapse these flows. Category A is specialists-owned and uses `sp` commands. Category B is xtrm-owned and uses `xt` commands.
|
|
27
29
|
|
|
28
|
-
No automatic execution. Always
|
|
30
|
+
No automatic destructive execution. Always summarize first and ask before applying refresh/prune actions.
|
|
29
31
|
|
|
30
|
-
##
|
|
32
|
+
## Quick Decision Tree
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
1. User says **specialist configs/rules/catalog/node behavior is stale** → run Category A flow.
|
|
35
|
+
2. User says **skills/hooks/Claude/Pi active files are stale** → run Category B flow.
|
|
36
|
+
3. User says **update specialists** with no detail → run both diagnostics, then present a combined plan.
|
|
37
|
+
4. User is in many repos → use root discovery and group results by repo.
|
|
38
|
+
5. `xt` missing → Category A can still run; Category B falls back to install/update guidance.
|
|
39
|
+
6. `sp` missing → tell user to install/upgrade `@jaggerxtrm/specialists`; do not claim runtime drift is fixed.
|
|
40
|
+
|
|
41
|
+
## Category A — Specialists Runtime / npm-live Flow
|
|
42
|
+
|
|
43
|
+
### A1) Verify package and command surface
|
|
44
|
+
|
|
45
|
+
Run in the target repo:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
sp --version
|
|
49
|
+
sp doctor
|
|
50
|
+
sp doctor --check-drift
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Use `specialists` instead of `sp` if the alias is unavailable.
|
|
54
|
+
|
|
55
|
+
Category A canonical source is the installed `@jaggerxtrm/specialists` npm package. To update it, upgrade/pin the package version:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm install -g @jaggerxtrm/specialists@latest
|
|
59
|
+
# or project-local/package-managed pin, depending on repo policy
|
|
60
|
+
npm install -D @jaggerxtrm/specialists@<version>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Report the installed version and whether the repo is intentionally pinned.
|
|
64
|
+
|
|
65
|
+
### A2) Interpret `sp doctor --check-drift`
|
|
66
|
+
|
|
67
|
+
This checks stale `.specialists/default/` snapshots against package-canonical assets.
|
|
68
|
+
|
|
69
|
+
Typical statuses:
|
|
70
|
+
|
|
71
|
+
| Finding | Meaning | Action |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| redundant / byte-identical default | Local default snapshot duplicates package canonical | Safe to prune after review |
|
|
74
|
+
| diverged default | Local default differs from package canonical | Treat as intentional until operator confirms migration |
|
|
75
|
+
| missing package canonical | Installed package or registry is incomplete/stale | Upgrade/reinstall specialists package |
|
|
76
|
+
| user overlay | `.specialists/user/` custom asset | Preserve; never overwrite automatically |
|
|
77
|
+
|
|
78
|
+
### A3) Prune redundant Category A snapshots
|
|
79
|
+
|
|
80
|
+
Dry-run first:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
sp prune-stale-defaults --dry-run
|
|
84
|
+
sp prune-stale-defaults --root <repo>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Only after operator confirmation, prune redundant defaults:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
sp prune-stale-defaults --root <repo>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Rules:
|
|
94
|
+
- Never prune `.specialists/user/`.
|
|
95
|
+
- Never overwrite or delete diverged defaults without explicit operator approval.
|
|
96
|
+
- If a diverged default should become a customization, move/keep it as user-owned policy and document why.
|
|
97
|
+
- If the repo deliberately pins old behavior, leave `.specialists/default/` in place and record the pinned specialists version.
|
|
98
|
+
|
|
99
|
+
### A4) Validate runtime resolution
|
|
100
|
+
|
|
101
|
+
For specialist definitions and tool policy:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
sp list --full
|
|
105
|
+
sp config show <specialist> --resolved
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
For mandatory rules/skills references in custom specialists, verify resolution from package canonical or project override:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
sp config show <specialist> --resolved --from-source
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use `--from-source` only in a specialists source/worktree context where installed dist may lag local source.
|
|
115
|
+
|
|
116
|
+
## Category B — xtrm-managed Filesystem Asset Flow
|
|
117
|
+
|
|
118
|
+
### B1) Discover projects root
|
|
33
119
|
|
|
34
120
|
Ask for root if user did not name one.
|
|
35
121
|
|
|
@@ -41,7 +127,7 @@ Default order:
|
|
|
41
127
|
|
|
42
128
|
If multiple candidate roots exist, ask which one to use.
|
|
43
129
|
|
|
44
|
-
###
|
|
130
|
+
### B2) Run xtrm doctor
|
|
45
131
|
|
|
46
132
|
Use:
|
|
47
133
|
|
|
@@ -49,106 +135,147 @@ Use:
|
|
|
49
135
|
xt doctor --cwd <root> --json
|
|
50
136
|
```
|
|
51
137
|
|
|
52
|
-
If `xt` is unavailable, stop and
|
|
138
|
+
If `xt` is unavailable, stop Category B and use fallback guidance below. Do not invent xtrm bulk commands.
|
|
139
|
+
|
|
140
|
+
### B3) Summarize Category B drift
|
|
53
141
|
|
|
54
|
-
|
|
142
|
+
Render a clean table grouped by repo:
|
|
55
143
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- status
|
|
59
|
-
- drift count
|
|
60
|
-
- missing / extra / mismatched assets
|
|
61
|
-
- suggested action
|
|
144
|
+
| repo | status | drift | missing | mismatched | suggested action |
|
|
145
|
+
|---|---|---:|---:|---:|---|
|
|
62
146
|
|
|
63
147
|
Keep focus on operator action, not internal diagnostics.
|
|
64
148
|
|
|
65
|
-
###
|
|
149
|
+
### B4) Ask for confirmation
|
|
66
150
|
|
|
67
151
|
Offer three paths:
|
|
68
|
-
-
|
|
152
|
+
- dry-run only,
|
|
69
153
|
- refresh specific repos,
|
|
70
|
-
-
|
|
154
|
+
- refresh all repos.
|
|
71
155
|
|
|
72
156
|
If user names one repo, keep flow narrow and confirm only that repo.
|
|
73
157
|
|
|
74
|
-
###
|
|
158
|
+
### B5) Apply xtrm refresh
|
|
75
159
|
|
|
76
|
-
|
|
160
|
+
Dry-run:
|
|
77
161
|
|
|
78
162
|
```bash
|
|
79
|
-
xt update --
|
|
163
|
+
xt update --root <root>
|
|
164
|
+
xt update --repo <repo>
|
|
80
165
|
```
|
|
81
166
|
|
|
82
|
-
|
|
167
|
+
Apply:
|
|
83
168
|
|
|
84
169
|
```bash
|
|
170
|
+
xt update --apply --root <root>
|
|
85
171
|
xt update --apply --repo <repo>
|
|
86
172
|
```
|
|
87
173
|
|
|
88
|
-
|
|
174
|
+
### B6) Re-run doctor
|
|
175
|
+
|
|
176
|
+
Run the same doctor command again after update:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
xt doctor --cwd <root> --json
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Confirm clean state or reduced-to-intentional drift.
|
|
183
|
+
|
|
184
|
+
## Combined Multi-repo Flow
|
|
185
|
+
|
|
186
|
+
When the operator asks broadly to "update specialists" across repos:
|
|
187
|
+
|
|
188
|
+
1. Choose projects root.
|
|
189
|
+
2. For each repo with specialists state:
|
|
190
|
+
- run/record Category A status: `sp --version`, `sp doctor --check-drift` if available.
|
|
191
|
+
3. For each repo with `.xtrm/registry.json`:
|
|
192
|
+
- run/record Category B status: `xt doctor --cwd <repo> --json`.
|
|
193
|
+
4. Present one combined table:
|
|
194
|
+
|
|
195
|
+
| repo | specialists pkg | Category A status | Category B status | recommended action |
|
|
196
|
+
|---|---|---|---|---|
|
|
197
|
+
|
|
198
|
+
Recommended action examples:
|
|
199
|
+
- upgrade `@jaggerxtrm/specialists`, then re-run `sp doctor --check-drift`,
|
|
200
|
+
- prune redundant `.specialists/default/` snapshots,
|
|
201
|
+
- preserve `.specialists/user/` customization,
|
|
202
|
+
- run `xt update --repo <repo> --apply`,
|
|
203
|
+
- no action.
|
|
204
|
+
|
|
205
|
+
## Fallbacks
|
|
206
|
+
|
|
207
|
+
### `sp` missing
|
|
208
|
+
|
|
209
|
+
Say Category A cannot be verified until specialists is installed:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm install -g @jaggerxtrm/specialists@latest
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
If project policy uses local dev dependency, recommend the project-local package manager command instead.
|
|
216
|
+
|
|
217
|
+
### `xt` missing
|
|
89
218
|
|
|
90
|
-
|
|
219
|
+
Category A can still be checked with `sp`. For Category B, tell user:
|
|
91
220
|
|
|
92
|
-
|
|
221
|
+
```bash
|
|
222
|
+
npm install -g xtrm-tools@latest
|
|
223
|
+
xt install
|
|
224
|
+
xt doctor --cwd <repo> --json
|
|
225
|
+
```
|
|
93
226
|
|
|
94
|
-
|
|
227
|
+
Do not claim skills/hooks are synced without `xt` or a valid `.xtrm/registry.json`.
|
|
95
228
|
|
|
96
|
-
|
|
97
|
-
- what drift existed,
|
|
98
|
-
- what refreshed,
|
|
99
|
-
- what stayed untouched,
|
|
100
|
-
- any residual manual fixes.
|
|
229
|
+
### `.xtrm/registry.json` missing
|
|
101
230
|
|
|
102
|
-
|
|
231
|
+
Report that xtrm-managed assets cannot be drift-checked in that repo until registry scaffold exists. Suggested action:
|
|
103
232
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- tell user to run repo-local checks manually,
|
|
108
|
-
- do not invent bulk repair commands.
|
|
233
|
+
```bash
|
|
234
|
+
xt install
|
|
235
|
+
```
|
|
109
236
|
|
|
110
|
-
|
|
111
|
-
- identify likely drifted repos,
|
|
112
|
-
- point user at repo-local `sp doctor` / package-specific checks already available in that repo,
|
|
113
|
-
- say bulk refresh needs `xt` installed.
|
|
237
|
+
or pull a repo revision that tracks `.xtrm/registry.json`.
|
|
114
238
|
|
|
115
|
-
##
|
|
239
|
+
## Safety Rules
|
|
116
240
|
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
241
|
+
- Preserve `.specialists/user/` and any user-authored skill/hook layer.
|
|
242
|
+
- Treat `.specialists/default/` as compatibility/pinning surface, not normal fresh-repo state.
|
|
243
|
+
- Treat `.xtrm/skills/default/` and `.xtrm/hooks/default/` as managed output; do not hand-edit as the repair path.
|
|
244
|
+
- Prefer dry-run first when more than one repo will change.
|
|
245
|
+
- Keep Category A and Category B results separate in the final report.
|
|
122
246
|
|
|
123
247
|
## Output Shape
|
|
124
248
|
|
|
125
249
|
Use this order:
|
|
126
|
-
1. root chosen
|
|
127
|
-
2.
|
|
128
|
-
3.
|
|
129
|
-
4.
|
|
130
|
-
5.
|
|
131
|
-
6.
|
|
132
|
-
7.
|
|
250
|
+
1. root/repo chosen,
|
|
251
|
+
2. specialists package version and Category A summary,
|
|
252
|
+
3. xtrm Category B summary,
|
|
253
|
+
4. combined drift table,
|
|
254
|
+
5. proposed actions,
|
|
255
|
+
6. explicit confirmation request,
|
|
256
|
+
7. commands run,
|
|
257
|
+
8. post-action verification,
|
|
258
|
+
9. residual manual work.
|
|
133
259
|
|
|
134
260
|
## Example Operator Loop
|
|
135
261
|
|
|
136
262
|
```text
|
|
137
263
|
Root: ~/dev
|
|
138
|
-
Doctor: 3 repos checked
|
|
139
264
|
|
|
140
|
-
repo
|
|
141
|
-
repo-a
|
|
142
|
-
repo-b
|
|
143
|
-
repo-c
|
|
265
|
+
repo sp version Category A Category B action
|
|
266
|
+
repo-a 3.13.0 redundant defaults: 4 skills drift: 2 prune A + xt update
|
|
267
|
+
repo-b 3.12.0 package behind latest in-sync upgrade sp only
|
|
268
|
+
repo-c 3.13.0 user overlay only hooks drift: 1 preserve user + xt update
|
|
144
269
|
|
|
145
|
-
|
|
270
|
+
Apply which actions? dry-run / selected repos / all
|
|
146
271
|
```
|
|
147
272
|
|
|
148
|
-
## Verification
|
|
273
|
+
## Verification Checklist
|
|
149
274
|
|
|
150
|
-
After
|
|
275
|
+
After work:
|
|
276
|
+
- `sp doctor --check-drift` clean or reduced to intentional pins/overrides,
|
|
277
|
+
- `sp prune-stale-defaults --dry-run` shows no redundant defaults unless intentionally retained,
|
|
278
|
+
- `sp list --full` and selected `sp config show <name> --resolved` reflect package-live runtime,
|
|
151
279
|
- `xt doctor --cwd <root> --json` clean or reduced to intentional custom drift,
|
|
152
|
-
- repo-specific follow-up actions called out only when needed,
|
|
153
280
|
- single-repo case stays single-repo,
|
|
154
|
-
- missing
|
|
281
|
+
- missing-tool paths fall back cleanly.
|