feat(pi): curated pi/core skills+prompts profile, CI load test, and 2.2.2 release sync (#3264)

Adds a curated, Pi-native, skills+prompts-only profile at pi/core/ for downstream packagers that mirror GitHub Releases.

- manifests/pi-core.json: explicit include lists, per-item exclusion reasons, curation rules, safety allowlists; every root skill and command must be classified.
- scripts/build-pi-core.js regenerates pi/core deterministically (package.json from VERSION, LICENSE, README.md, CURATION.md, skills/, commands/); --check fails CI on drift. council is renamed ecc-council inside pi/core only.
- Safety checks: no callable endpoints outside the allowlist, no npx/curl|sh/pip install, no secrets, no absolute home paths, no symlinks, valid frontmatter, no duplicate names.
- CI: build + drift check and an offline Pi CLI load test of pi/core.
- Release: VERSION, package.json and pi/core/package.json at 2.2.2, CHANGELOG, tag-triggered release verification, and a two-week cadence in CONTRIBUTING.md.

pi/core: 123 of 293 skills and 24 of 94 commands; 35,006 characters of skill description text.
This commit is contained in:
Affaan Mustafa
2026-09-29 20:24:05 -05:00
committed by GitHub
parent d30588f90a
commit c70874fae9
203 changed files with 55411 additions and 2 deletions
+38
View File
@@ -239,6 +239,44 @@ jobs:
run: node scripts/ci/validate-no-personal-paths.js
continue-on-error: false
pi-core:
name: Pi Core Profile
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '20.x'
# Rebuild runs frontmatter validation and the pi/core safety checks
# (no callable endpoints, no runtime downloads, no secrets, no absolute
# home paths, no symlinks, no duplicate skill names); the diff check
# proves the committed profile is up to date.
- name: Rebuild pi/core and verify it is up to date
run: |
node scripts/build-pi-core.js
git diff --exit-code pi/core
- name: Install Pi coding agent CLI
run: npm install --global --ignore-scripts --no-audit --no-fund @mariozechner/pi-coding-agent@0.73.1
# --extension only loads a package's pi.extensions entries; pi/core is a
# skills+prompts-only package, so the equivalent --skill/--prompt-template
# resource flags are used. The load-test script additionally asserts via
# RPC that every curated command actually loaded.
- name: Offline load test with the Pi CLI
run: |
PI_OFFLINE=1 pi --offline --mode rpc --no-session --no-context-files --no-extensions \
--skill pi/core/skills --prompt-template pi/core/commands </dev/null >/dev/null
node scripts/ci/pi-core-load-test.js
python-tests:
name: Python Lint, Type Check & Test
runs-on: ubuntu-latest
+16
View File
@@ -84,6 +84,22 @@ jobs:
exit 1
fi
- name: Verify VERSION matches tag
env:
TAG_NAME: ${{ github.ref_name }}
run: |
TAG_VERSION="${TAG_NAME#v}"
FILE_VERSION=$(tr -d '[:space:]' < VERSION)
if [ "$TAG_VERSION" != "$FILE_VERSION" ]; then
echo "::error::Tag version ($TAG_VERSION) does not match VERSION ($FILE_VERSION)"
exit 1
fi
# pi/core/package.json derives its version from VERSION, so a current
# profile also proves pi/core is in sync with the tag.
- name: Verify pi/core profile is current
run: node scripts/build-pi-core.js --check
- name: Verify release metadata stays in sync
run: node tests/plugin-manifest.test.js