fix: make the installer runtime pass strict supply-chain vetting (#2503)

* fix: make the installer runtime pass strict supply-chain vetting

Remediate the four enterprise supply-chain vetting blockers from
affaan-m/ECC#2502 so the installer runtime (package.json + manifests +
scripts/lib/**) passes strict exact-pin evidence policy:

1. Remove the package.json `postinstall` lifecycle script (it only echoed a
   post-install banner) and move that banner to an explicit opt-in
   `npm run welcome` command. No install-time lifecycle script remains.
2. Exact-pin every dependency in package.json (dependencies + devDependencies)
   to the versions already resolved in package-lock.json; no ^/~ ranges.
3. Replace non-ASCII characters on the installer runtime script/config surface:
   em-dashes (U+2014) in scripts/lib/{path-safety,install-executor,
   install/link-rewrite}.js comments and the two "Itô" (U+00F4) occurrences in
   manifests/{install-components,install-modules}.json descriptions become
   ASCII, so strict-surface Unicode scanners are clean.
4. Drop the bare `require("ajv")` from scripts/lib/install-state.js; the file
   already carries a complete hand-rolled validator enforcing the same
   schemas/install-state.schema.json (ecc.install.v1) constraints, so the
   installer closure is dependency-free (zero non-builtin bare requires).

Refs affaan-m/ECC#2502

* fix: avoid unpinned welcome invocations

Signed-off-by: Samar Tomar <samar_tomar@hotmail.com>

* fix: validate translated skill frontmatter

Signed-off-by: Samar Tomar <samar_tomar@hotmail.com>

* fix: repair skill frontmatter YAML

Signed-off-by: Samar Tomar <samar_tomar@hotmail.com>

* fix: add MIT license to core skill manifests; pin verification-loop tsc invocation

* fix: preserve tsc/pyright exit status in verification-loop type-check (set -o pipefail)

* chore(deps): sync lockfiles with exact-pinned package.json

Regenerate package-lock.json and yarn.lock so the pinned dependency
specs are reflected in both lockfiles. npm ci and Yarn's --immutable
install now pass the sync check. The resolution tree is unchanged
(231 yarn resolutions, byte-identical set; zero npm transitive drift);
only the root descriptor strings move from ranges to the versions
already resolved in the committed lockfiles.

Addresses the Codex P1 on #2503.

---------

Signed-off-by: Samar Tomar <samar_tomar@hotmail.com>
Co-authored-by: Samarjeet Singh Tomar <samartomar@gmail.com>
This commit is contained in:
Samarjeet Singh Tomar 2026-07-17 16:13:49 -05:00 committed by GitHub
parent 5da21c2b66
commit 754b8dd76c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
42 changed files with 144 additions and 99 deletions

View file

@ -410,7 +410,7 @@
"ecc-plan-canvas": "scripts/plan-canvas.js"
},
"scripts": {
"postinstall": "echo '\\n ecc-universal installed!\\n Run: npx ecc typescript\\n Compat: npx ecc-install typescript\\n Docs: https://github.com/affaan-m/ECC\\n'",
"welcome": "echo '\\n ecc-universal installed!\\n Run: ecc typescript\\n Compat: ecc-install typescript\\n Docs: https://github.com/affaan-m/ECC\\n'",
"catalog:check": "node scripts/ci/catalog.js --text",
"catalog:sync": "node scripts/ci/catalog.js --write --text",
"command-registry:generate": "node scripts/ci/generate-command-registry.js",
@ -441,19 +441,19 @@
"dashboard:web": "node scripts/dashboard-web.js"
},
"dependencies": {
"@iarna/toml": "^2.2.5",
"ajv": "^8.20.0",
"sql.js": "^1.14.1"
"@iarna/toml": "2.2.5",
"ajv": "8.20.0",
"sql.js": "1.14.1"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@opencode-ai/plugin": "^1.16.2",
"@eslint/js": "9.39.2",
"@opencode-ai/plugin": "1.17.3",
"@types/node": "25.9.2",
"c8": "^11.0.0",
"eslint": "^10.6.0",
"globals": "^17.4.0",
"markdownlint-cli": "^0.48.0",
"typescript": "^6.0.3"
"c8": "11.0.0",
"eslint": "10.6.0",
"globals": "17.4.0",
"markdownlint-cli": "0.48.0",
"typescript": "6.0.3"
},
"engines": {
"node": ">=18"