Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# High-risk paths. Last matching pattern wins.
# Root-anchored so nested copies (e.g. skills/**/scripts/) are not owned here.
/.github/ @jaredwray
/.vscode/ @jaredwray
/.cursor/ @jaredwray
/.devcontainer/ @jaredwray
/.claude/ @jaredwray
/.codex/ @jaredwray
/scripts/ @jaredwray
25 changes: 14 additions & 11 deletions DEFENSE_IN_DEPTH.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@ Profile: npm library · public
- [x] `DEFENSE_IN_DEPTH.md` present (this file) — PR #1698

## 2. CODEOWNERS and cloud bootstrap
- [x] `.github/CODEOWNERS` covers `/.github/`, `/.cursor/`, `/.devcontainer/`, `/scripts/` with owners the maintainer names — PR #1704
- [x] Codespaces and Cursor Cloud Agents bootstrap Aikido Safe Chain via scripts/setup-cloud-environment.sh (--ci shims, frozen lockfile) — PR #1699
- [ ] `.github/CODEOWNERS` covers `/.github/`, `/.vscode/`, `/.cursor/`, `/.devcontainer/`, `/.claude/`, `/.codex/`, `/scripts/` with owners the maintainer names (PR #1734 pending)
- [ ] Codespaces, Cursor Cloud Agents, and Claude Code on the web bootstrap Aikido Safe Chain via scripts/setup-cloud-environment.sh (--ci shims, frozen lockfile); Claude Code runs it from `.claude/hooks/session-start.sh` (web sessions only, install log on stderr, 600s timeout) and `.gitignore` keeps `.claude/settings.json` and `.claude/hooks/` tracked
- [ ] Codex cloud environments use Manual setup with `bash ./scripts/setup-cloud-environment.sh` as the setup and maintenance script (manual)
- [ ] Claude Code on the web environments allow `malware-list.aikido.dev` (Custom network access plus the default package-manager list) (manual)
- [x] Dev Container `image` pinned by digest (`name:<tag>@sha256:<digest>`; not a floating tag) — PR #1718

## 3. Dependencies (pnpm)
- [x] `packageManager: pnpm@11.3+` pinned in `package.json` — verified 2026-08-24
- [x] `packageManager: pnpm@11.3+` pinned in `package.json` — PR #1733
- [x] 7-day cooldown: `minimumReleaseAge: 10080`, `minimumReleaseAgeStrict: true`, `minimumReleaseAgeIgnoreMissingTime: false`; no first-party `minimumReleaseAgeExclude` — PR #1700
- [x] `trustPolicy: no-downgrade`; no first-party `trustPolicyExclude` — PR #1700
- [x] Lifecycle scripts blocked: `strictDepBuilds: true`, `dangerouslyAllowAllBuilds: false`, `allowBuilds: {}` baseline — PR #1700
Expand All @@ -27,18 +30,18 @@ Profile: npm library · public
- [x] Every action pinned to a full commit SHA (`npx actions-up`) — PR #1701
- [x] Every job installs Socket Firewall (`SocketDev/action` SHA-pinned, `firewall-version` pinned); `pnpm install` / `npm install` run as `sfw pnpm install` / `sfw npm install` — PR #1701
- [x] `.github/workflows/check-workflows.yaml` lints workflows with zizmor on every PR — PR #1701
- [x] Workflow `name:` and job `name:` contain no spaces (kebab-case) so they can be set as required status checks; matrix checks are `test-22` / `test-24` / `test-26` plus a `test` gate — PR #1701, PR #1706
- [x] Workflow `name:` and job `name:` contain no spaces (kebab-case) so they can be set as required status checks — PR #1701, PR #1706
- [x] `persist-credentials: false` on checkouts that don't push — PR #1701
- [x] No `pull_request_target` on workflows that run untrusted PR code — verified 2026-08-24
- [x] Artifact-publishing workflows disable `actions/setup-node` default caching (`package-manager-cache: false`) to prevent cache poisoning — PR #1701
- [x] No npm tokens (or other registry credentials) in Actions secrets — verified 2026-08-24

## 5. npm publishing — npm libraries only
- [x] OIDC trusted publishing configured **stage-only** on npmjs.com for the publish workflow — it can stage, never publish live — PR #1706
- [x] OIDC trusted publishing configured **stage-only** on npmjs.com for the publish workflow — it can stage, never publish live (manual) — PR #1706
- [x] `.github/workflows/release.yaml` packs then stages with `pnpm stage publish ./packed/*.tgz --no-git-checks` — PR #1702
- [x] Maintainer promotes staged versions with 2FA — PR #1706
- [x] Drydock connected — staged releases reviewed before promotion — PR #1706
- [x] No direct publish rights: package requires 2FA and disallows tokens — PR #1706
- [x] Maintainer promotes staged versions with 2FA (manual) — PR #1706
- [x] Drydock connected — staged releases reviewed before promotion (manual) — PR #1706
- [x] No direct publish rights: package requires 2FA and disallows tokens (manual) — PR #1706
- [x] `package.json` `repository.url` accurate so provenance maps to this repo — verified 2026-08-24

## 6. Security tooling
Expand All @@ -47,6 +50,6 @@ Profile: npm library · public
- [x] Socket reviews every PR that changes dependencies — verified 2026-08-24

## 7. Repository lockdown
- [x] Phishing-resistant 2FA (passkeys / hardware keys) on the GitHub and npm accounts — PR #1706
- [x] Recovery codes stored offline in a password manager — PR #1706
- [x] `lockdown-repo.sh` applied by a repo admin (never committed to this repo); `--check` with `--required-checks "test,test-22,test-24,test-26,zizmor"` and `--allowed-actions "pnpm/*,codecov/*,cloudflare/*"` passes (PRs required on the default branch, merges blocked unless required status checks pass, tag ruleset, immutable releases, fork-PR approval (public repos), read-only workflow tokens, Actions allowlist, secret scanning, Dependabot disabled, private vulnerability reporting (public repos)) — PR #1705, required checks updated PR #1707
- [x] Phishing-resistant 2FA (passkeys / hardware keys) on the GitHub and npm accounts (manual) — PR #1706
- [x] Recovery codes stored offline in a password manager (manual) — PR #1706
- [x] `lockdown-repo.sh` applied by a repo admin (never committed to this repo); `--check` with `--required-checks` and `--allowed-actions` passes (PRs required on the default branch, merges blocked unless required status checks pass, tag ruleset, immutable releases, fork-PR approval (public repos), read-only workflow tokens, Actions allowlist, secret scanning, Dependabot disabled, private vulnerability reporting (public repos)) — PR #1705, required checks updated PR #1707
Loading