{
  "schema_version": 1,
  "generated_from": "facts/dependencies.yaml",
  "counts": {
    "reviews": 12,
    "approved": 12,
    "pending": 0,
    "rejected": 0
  },
  "reviews": {
    "npm/@capacitor/cli@6.2.2": {
      "ecosystem": "npm",
      "name": "@capacitor/cli",
      "version": "6.2.2",
      "integrity": "sha512-5wEYSHBzRKJKZnhD2sVJAP0t0kUT7o2/vlgEGzFE3t2w+inL9qMDN7zxg6pvqveJiPNZT2k93ZvJDdRKIn/w1w==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [
          "network",
          "subprocess"
        ],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": "Telemetry POSTs command name, verbatim arguments, verbatim options and the verbatim error message to api.ionicjs.com, plus sha1 of the repo's first commit as a stable fingerprint of a private repo. The consent prompt defaults to YES on Enter. Disabled unconditionally by CI=1 -- see the approval conditions. Subprocess targets are developer-toolchain binaries resolved from PATH only.",
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [
        "Add the iOS platform with `npx cap add ios --packagemanager SPM`. This is what keeps CocoaPods off the machine entirely -- the default template is CocoaPods, whose local install was reviewed and REJECTED (claude-3#877).",
        "Export CI=1 on every invocation. This is the only thing that disables the telemetry POST, which otherwise defaults to on and sends verbatim error strings and arguments.",
        "Keep `npm ci --ignore-scripts`. It protects nothing today -- 0 of 104 packages declare an install script -- so keep it as a guarantee about future lockfiles, never cite it as the control that makes the tree safe.",
        "Commit Package.resolved. `exact:` pins a tag, and tags move.",
        "Never `cap run` -- the only path reaching native-run and the tree's single `new Function`.",
        "Attended operator runs only. This approval does NOT cover unattended agent execution."
      ],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/core@6.2.2": {
      "ecosystem": "npm",
      "name": "@capacitor/core",
      "version": "6.2.2",
      "integrity": "sha512-qEI3DcwJEPzhW+hVGKH8m4jbujtkdUiGkpMLHmpR8epACU7wEsV6NF8pCHzpsMYjc80oK7Cmpcw+MIienv/YRw==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook",
        "rig"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/ios@6.2.2": {
      "ecosystem": "npm",
      "name": "@capacitor/ios",
      "version": "6.2.2",
      "integrity": "sha512-dc9upo3L5wSUVJBJnd7oRGGsiwB2rMe7ZF2bti8hvDVCAZeYMzzw8iqxuUc6cvGBhH2/LsORMBO51/vEQhdmHg==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [
          "network"
        ],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": "The network flag is native-bridge.js monkey-patching window.XMLHttpRequest and window.fetch inside the WebView so requests can be routed through the native HTTP layer. INERT unless the CapacitorHttp plugin is enabled, which our capacitor.config.json does not do. Re-check this if CapacitorHttp is ever turned on -- it changes the WebView's security model. Also ships scripts/pods_helpers.rb, 11 lines, executed by `pod install` on the CocoaPods path only; it raises IPHONEOS_DEPLOYMENT_TARGET to 13.0 and does nothing else. Not executed on the SPM path.",
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [
        "Do not enable the CapacitorHttp plugin without a fresh review -- it activates the XMLHttpRequest/fetch monkey-patching in native-bridge.js."
      ],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/app@6.0.3": {
      "ecosystem": "npm",
      "name": "@capacitor/app",
      "version": "6.0.3",
      "integrity": "sha512-4gFUCbcVz0N/YYN32OBFerocWXslIv3Nc90gDiRsBkJc0plwK6kIUT6PKa5WtW2kfhteUeCVXQbvArH2fH+0Ug==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/device@6.0.3": {
      "ecosystem": "npm",
      "name": "@capacitor/device",
      "version": "6.0.3",
      "integrity": "sha512-AmPtVuWeW31Ui+UMIl5zgCzwMU4fL4hIvYYvbAhXXyKWjxi1nk+CAh9B3k4OYUQLJI5nan0PoJ4GiiJ7x6DT/A==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/push-notifications@6.0.5": {
      "ecosystem": "npm",
      "name": "@capacitor/push-notifications",
      "version": "6.0.5",
      "integrity": "sha512-CsRmb0cnZd9Uwx24ym4My5fNKrQvwI4D51aMEph5pUZy+LAjp6q0y4NJe8DEgwaVdAqVLbb4rqn75AZ4WSiFYg==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/splash-screen@6.0.4": {
      "ecosystem": "npm",
      "name": "@capacitor/splash-screen",
      "version": "6.0.4",
      "integrity": "sha512-uJXR+28cdaie7zIIUBvgkWgHim6Gr1itJym9voIMTmrjXkOaPtejwxYJsdQWPJz9zgGnSbXuC1mNNibLgv3OpQ==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/@capacitor/status-bar@6.0.3": {
      "ecosystem": "npm",
      "name": "@capacitor/status-bar",
      "version": "6.0.3",
      "integrity": "sha512-nFlgSmtx6Zwaw0tEvZgQsWHBeOfWWB/AvEoCApopLT4mHkBVoSrwkLvy2PjZs5wxCbsmqvQczr3XCyTwaDZVQg==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/tslib@2.8.1": {
      "ecosystem": "npm",
      "name": "tslib",
      "version": "2.8.1",
      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "Stig-Johnny/claude-3 docs/ai-tooling-registry/ios-build/2026-09-11-security-review-capacitor-cli-tree.md",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook",
        "rig"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/js-yaml@4.1.1": {
      "ecosystem": "npm",
      "name": "js-yaml",
      "version": "4.1.1",
      "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "audit-npm-tree.py: integrity verified, 0 install scripts, zero capability matches (no network, subprocess, eval or credential-path access). nodeca/js-yaml, MIT, created 2011-11-02, 91 versions. The canonical YAML parser for JS. Sole soft spot is a single maintainer.",
      "notes": "Declared as \"^4.1.1\" -- a RANGE, not a pin, which is the version hole the registry exists to close. Pin it exactly.",
      "approved_scopes": [
        "ci",
        "operator-macbook",
        "rig"
      ],
      "conditions": [
        "Pin exactly in package.json. It is currently declared as the range ^4.1.1."
      ],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/zod@4.3.6": {
      "ecosystem": "npm",
      "name": "zod",
      "version": "4.3.6",
      "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "audit-npm-tree.py: integrity verified, 0 install scripts, zero capability matches. colinhacks/zod, MIT, created 2020-03-07, 1008 versions, actively maintained. Single maintainer.",
      "notes": "PHANTOM DEPENDENCY. zod is imported directly by scripts/lint-capabilities.mjs and scripts/lint-dependencies.mjs but is declared NOWHERE in package.json -- it resolves only because `astro` and `@astrojs/sitemap` depend on it (^4.3.6). So the version validating this registry's schema is whatever Astro happens to hoist, and an unrelated Astro bump can change or remove it. Declare it as a direct devDependency, pinned.",
      "approved_scopes": [
        "ci",
        "operator-macbook",
        "rig"
      ],
      "conditions": [
        "Declare zod as a direct devDependency, pinned. It is currently a phantom dependency -- imported by the linters, declared nowhere, and present only because Astro pulls it. The schema validator guarding this registry must not be whatever an unrelated Astro bump happens to hoist."
      ],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    },
    "npm/argparse@2.0.1": {
      "ecosystem": "npm",
      "name": "argparse",
      "version": "2.0.1",
      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
      "verdict": "approved",
      "audited": "2026-09-11T00:00:00.000Z",
      "audit": {
        "install_scripts": 0,
        "capabilities": [],
        "source": "registry.npmjs.org"
      },
      "reviewed": "2026-09-11T00:00:00.000Z",
      "reviewer": "claude-3",
      "evidence": "audit-npm-tree.py: integrity verified, 0 install scripts, zero capability matches. nodeca/argparse, PSF-2.0, created 2012-05-16. Transitive dependency of js-yaml; 188M weekly downloads.",
      "notes": null,
      "approved_scopes": [
        "ci",
        "operator-macbook",
        "rig"
      ],
      "conditions": [],
      "approved_by": "operator",
      "approved_on": "2026-09-11T00:00:00.000Z"
    }
  },
  "known_broken": [
    {
      "ecosystem": "npm",
      "name": "@capacitor/*",
      "versions": ">=8.0.0",
      "reason": "Plugin majors break the native bridge at runtime against installed core 6.2.2: plugin v8 declares peerDependencies @capacitor/core >=8.0.0. CI's npm test is JS-only and does not exercise the native bridge, so a partial bump slips past verification -- this happened on rig-cockpit-worker#117 (@capacitor/status-bar 6.0.3 -> 8.0.3). Lift only in the same PR that moves all @capacitor/* to v8 together.",
      "ref": "dashecorp/rig-cockpit-worker#133"
    },
    {
      "ecosystem": "github-actions",
      "name": "actions/checkout",
      "versions": ">=7",
      "reason": "v4 -> v7 was approved by Review-E and broke the Android build. Recorded here because the knowledge otherwise lives only in a Dependabot ignore rule, invisible to any approval decision. Actions are SHA-pinned in claude-3 docs/infrastructure/approved-tools.md but have never been security reviewed -- see claude-3#886.",
      "ref": "dashecorp/rig-cockpit-worker#111"
    }
  ]
}
