# Security policy

## Dependency audit policy

Release verification must include:

```bash
npm audit --omit=dev
```

The published package has no direct runtime dependencies. Pi APIs are peer dependencies supplied by the host, and development dependencies are not included in the package tarball. A non-zero production audit blocks release.

## Accepted development-only advisory exception

As of 2026-07-28, a clean npm 11.14.0 install of the Pi 0.80.9 development baseline reports six vulnerability records: one high and five moderate dependency effects generated by these two underlying vulnerable packages:

- `brace-expansion` 5.0.6: GHSA-3jxr-9vmj-r5cp and GHSA-mh99-v99m-4gvg (high severity denial of service)
- `protobufjs` 7.6.4: GHSA-j3f2-48v5-ccww (moderate severity denial of service)

The Pi coding-agent package publishes an `npm-shrinkwrap.json`, so root `overrides` appear in `npm explain` and `npm audit fix` reports a fix as available, but neither replaces its nested `brace-expansion` and `protobufjs` copies. Do not accept a lockfile-only change as remediation: npm may audit the edited root lockfile as clean while `node_modules/@earendil-works/pi-coding-agent/node_modules/` still contains the vulnerable versions.

This exception is accepted only for the development graph because:

- neither dependency is imported by this package's extension or scripts;
- all affected dependency paths originate from development-only Pi packages;
- `npm pack` excludes `node_modules`, so these copies are not shipped;
- the production graph must continue to pass `npm audit --omit=dev` with zero findings.

Revisit this exception when `@earendil-works/pi-coding-agent` publishes a compatible release whose shrinkwrap contains `brace-expansion` 5.0.8 or newer and `protobufjs` 7.6.5 or newer. Upgrade the Pi development baseline rather than adding install-time mutation, vendored packages, or a misleading root-lock override.

If package dependencies or the build path begin processing untrusted glob patterns or `.proto` text, this exception is invalid and must be treated as release-blocking immediately.
