diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b658de7..f261d16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ name: CI on: push: - branches: [main] + branches: [dev] pull_request: concurrency: @@ -38,6 +38,16 @@ jobs: - name: Assert no derived data is tracked run: npm run check-data-tracking + # `npm ci` above ran the postinstall linker, so this asserts the projection actually happened + # rather than re-doing it: both skill surfaces point at the installed package, and no skill + # byte is tracked here. An `--ignore-scripts` install resolves the dependency without linking + # anything, and this is what makes that state red instead of silently fine. + # + # No path filter, and no workflow of its own: a path-filtered workflow reports *pending* on + # PRs that miss the filter, which can never satisfy a required check. + - name: Assert the skill substrate is projected, not copied + run: npx --no-install neo-agent-skills-materialize --check + # `--project=unit` excludes `unit-profiling`. Those two specs read the real `users.jsonl`, which # is gitignored and whose fetch skips under CI, and they assert wall-clock budgets that a shared # runner can double — a regression report for something that did not regress. diff --git a/.gitignore b/.gitignore index a938d02..08099d8 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,9 @@ chroma-neo-memory-core/ # Playwright test results test/playwright/test-results/ # Single-file Playwright runs via npx -test-results/ \ No newline at end of file +test-results/ +# Skill substrate arrives as the neo-agent-skills npm dependency and is materialized by its +# postinstall linker as symlinks into node_modules. Both paths are projection, never committed +# bytes (neomjs/neo#17798). +.agents/skills +.claude/skills/ diff --git a/package-lock.json b/package-lock.json index 2252d17..695261c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "marked": "^18.0.5", "mermaid": "^11.16.0", "monaco-editor": "0.50.0", + "neo-agent-skills": "^0.1.1", "parse5": "^8.0.1", "postcss": "^8.5.16", "sass": "^1.101.0", @@ -6130,6 +6131,19 @@ "node": ">= 0.6" } }, + "node_modules/neo-agent-skills": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/neo-agent-skills/-/neo-agent-skills-0.1.1.tgz", + "integrity": "sha512-y6cgogGzPwdhxj32FyjLae3Ld/qeiX48UZeIgEazLGSH2YQLwS6YoZV236Wu9hWhPrcAFP9AmA+rB4YMKBummA==", + "dev": true, + "license": "MIT", + "bin": { + "neo-agent-skills-materialize": "scripts/materialize-harness-skills.mjs" + }, + "engines": { + "node": ">=24.0.0" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", diff --git a/package.json b/package.json index 6d21984..4475e3c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "postinstall" : "node ./buildScripts/linkMarkedForWorkerScope.mjs && node ./buildScripts/pullDevIndexData.mjs", + "postinstall" : "node ./buildScripts/linkMarkedForWorkerScope.mjs && node ./buildScripts/pullDevIndexData.mjs && neo-agent-skills-materialize", "add-config" : "node ./node_modules/neo.mjs/buildScripts/create/addConfig.mjs", "build-all" : "node ./node_modules/neo.mjs/buildScripts/build/all.mjs -f -n", "build-all-questions" : "node ./node_modules/neo.mjs/buildScripts/build/all.mjs -f", @@ -59,6 +59,7 @@ "marked" : "^18.0.5", "mermaid" : "^11.16.0", "monaco-editor" : "0.50.0", + "neo-agent-skills" : "^0.1.1", "parse5" : "^8.0.1", "postcss" : "^8.5.16", "sass" : "^1.101.0",