@clear-capabilities/agentic-security-scanner 0.144.0 → 0.147.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/bin/agentic-security.js +3813 -83
  3. package/dist/1122.index.js +702 -0
  4. package/dist/{301.index.js → 1301.index.js} +2 -2
  5. package/dist/1379.index.js +591 -0
  6. package/dist/{444.index.js → 1444.index.js} +13 -4
  7. package/dist/{660.index.js → 1660.index.js} +2 -2
  8. package/dist/{700.index.js → 1700.index.js} +2 -2
  9. package/dist/{905.index.js → 1905.index.js} +3 -3
  10. package/dist/{920.index.js → 1920.index.js} +3 -3
  11. package/dist/{238.index.js → 2238.index.js} +3 -3
  12. package/dist/2271.index.js +165 -0
  13. package/dist/{985.index.js → 2376.index.js} +1260 -340
  14. package/dist/2432.index.js +793 -0
  15. package/dist/2659.index.js +93 -0
  16. package/dist/{826.index.js → 2826.index.js} +2 -2
  17. package/dist/{830.index.js → 2830.index.js} +2 -2
  18. package/dist/2923.index.js +298 -0
  19. package/dist/{1.index.js → 3001.index.js} +5 -5
  20. package/dist/{117.index.js → 3117.index.js} +3 -3
  21. package/dist/3180.index.js +307 -0
  22. package/dist/3276.index.js +117 -0
  23. package/dist/{415.index.js → 3415.index.js} +2 -2
  24. package/dist/{499.index.js → 3499.index.js} +2 -2
  25. package/dist/3518.index.js +450 -0
  26. package/dist/{526.index.js → 3526.index.js} +14 -6
  27. package/dist/{736.index.js → 3736.index.js} +4 -4
  28. package/dist/{839.index.js → 3839.index.js} +4 -4
  29. package/dist/{113.index.js → 4113.index.js} +14 -6
  30. package/dist/{265.index.js → 4265.index.js} +2 -2
  31. package/dist/{384.index.js → 4384.index.js} +3 -3
  32. package/dist/4547.index.js +268 -0
  33. package/dist/4863.index.js +422 -0
  34. package/dist/{970.index.js → 4970.index.js} +67 -3
  35. package/dist/5051.index.js +770 -0
  36. package/dist/{144.index.js → 5144.index.js} +5 -5
  37. package/dist/{333.index.js → 5333.index.js} +3 -3
  38. package/dist/5343.index.js +185 -0
  39. package/dist/5350.index.js +866 -0
  40. package/dist/5561.index.js +436 -0
  41. package/dist/{637.index.js → 5637.index.js} +29 -7
  42. package/dist/{449.index.js → 5830.index.js} +78 -14
  43. package/dist/6626.index.js +532 -0
  44. package/dist/6662.index.js +297 -0
  45. package/dist/{675.index.js → 6675.index.js} +5 -5
  46. package/dist/{730.index.js → 6730.index.js} +6 -6
  47. package/dist/6829.index.js +225 -0
  48. package/dist/6944.index.js +130 -0
  49. package/dist/{178.index.js → 7178.index.js} +26 -8
  50. package/dist/{227.index.js → 7227.index.js} +2 -2
  51. package/dist/7310.index.js +520 -0
  52. package/dist/{552.index.js → 7552.index.js} +4 -4
  53. package/dist/7709.index.js +78 -0
  54. package/dist/8218.index.js +160 -0
  55. package/dist/{476.index.js → 8476.index.js} +4 -4
  56. package/dist/{513.index.js → 8513.index.js} +5 -5
  57. package/dist/{520.index.js → 8520.index.js} +2 -2
  58. package/dist/{718.index.js → 8718.index.js} +2 -2
  59. package/dist/{752.index.js → 8752.index.js} +2 -2
  60. package/dist/8846.index.js +100 -0
  61. package/dist/{435.index.js → 9091.index.js} +580 -187
  62. package/dist/{207.index.js → 9207.index.js} +2 -2
  63. package/dist/{220.index.js → 9220.index.js} +2 -2
  64. package/dist/9390.index.js +163 -0
  65. package/dist/{503.index.js → 9503.index.js} +2 -2
  66. package/dist/{801.index.js → 9801.index.js} +2 -2
  67. package/dist/{824.index.js → 9824.index.js} +2 -2
  68. package/dist/agentic-security.mjs +16 -16
  69. package/dist/agentic-security.mjs.sha256 +1 -1
  70. package/dist/compliance-frameworks/hipaa-security-rule.json +3 -2
  71. package/package.json +23 -10
  72. package/src/compare.js +6 -1
  73. package/src/dataflow/CLAUDE.md +2 -2
  74. package/src/dataflow/catalog.js +42 -0
  75. package/src/dataflow/orm-write-catalog.js +175 -0
  76. package/src/engine.js +580 -30
  77. package/src/fix/apply-fix-service.js +1 -0
  78. package/src/history-scan.js +22 -5
  79. package/src/ir/CLAUDE.md +2 -1
  80. package/src/ir/chrome-probe.mjs +150 -0
  81. package/src/ir/parser-js.js +94 -7
  82. package/src/lineage/CLAUDE.md +1203 -0
  83. package/src/lineage/DESIGN_DESTINATION_RESOLVER.md +156 -0
  84. package/src/lineage/DESIGN_GRAPH_BUILDER.md +938 -0
  85. package/src/lineage/DESIGN_HANDLING_ANALYZER.md +355 -0
  86. package/src/lineage/DESIGN_INTRAPROCEDURAL.md +628 -0
  87. package/src/lineage/DESIGN_PATH_PROVENANCE.md +3451 -0
  88. package/src/lineage/DESIGN_QUEUE_DETAIL.md +120 -0
  89. package/src/lineage/DESIGN_REGISTRIES.md +880 -0
  90. package/src/lineage/DESIGN_STORE_DETAIL.md +143 -0
  91. package/src/lineage/DESIGN_TRANSIT_PROTECTION.md +245 -0
  92. package/src/lineage/classification.js +56 -0
  93. package/src/lineage/coverage.js +658 -0
  94. package/src/lineage/cross-repo-link.js +107 -0
  95. package/src/lineage/dataflow-graph.schema.json +184 -0
  96. package/src/lineage/decision-story.js +206 -0
  97. package/src/lineage/drift-policy.js +279 -0
  98. package/src/lineage/driver.js +135 -0
  99. package/src/lineage/engine.js +992 -0
  100. package/src/lineage/export-briefing.js +628 -0
  101. package/src/lineage/export-csv.js +62 -0
  102. package/src/lineage/export-json.js +238 -0
  103. package/src/lineage/export-privacy.js +258 -0
  104. package/src/lineage/federation-loader.js +111 -0
  105. package/src/lineage/field-identity.js +78 -0
  106. package/src/lineage/fixtures/build-flagship-fixture.mjs +272 -0
  107. package/src/lineage/fixtures/flagship-graph.json +1453 -0
  108. package/src/lineage/flow-grade.js +221 -0
  109. package/src/lineage/governance-edit.js +169 -0
  110. package/src/lineage/graph-builder.js +1114 -0
  111. package/src/lineage/graph-diff.js +431 -0
  112. package/src/lineage/graph-snapshot.js +180 -0
  113. package/src/lineage/handling-analyzer.js +168 -0
  114. package/src/lineage/ids.js +349 -0
  115. package/src/lineage/impact-assessment.js +76 -0
  116. package/src/lineage/impact-engine.js +268 -0
  117. package/src/lineage/index.js +281 -0
  118. package/src/lineage/language-coverage-tiers.js +58 -0
  119. package/src/lineage/obligation-mapping.js +126 -0
  120. package/src/lineage/obligation-predicates.js +235 -0
  121. package/src/lineage/observation-adapters.js +282 -0
  122. package/src/lineage/observation-correlation.js +622 -0
  123. package/src/lineage/observation-store.js +497 -0
  124. package/src/lineage/path-query.js +410 -0
  125. package/src/lineage/path-store.js +400 -0
  126. package/src/lineage/protection.js +53 -0
  127. package/src/lineage/recipient-profile.js +192 -0
  128. package/src/lineage/recipient-registry.js +394 -0
  129. package/src/lineage/redact-graph.js +224 -0
  130. package/src/lineage/remediation.js +417 -0
  131. package/src/lineage/resolve-destination.js +91 -0
  132. package/src/lineage/runtime-observation.js +464 -0
  133. package/src/lineage/scenario-diff.js +84 -0
  134. package/src/lineage/scenario-engine.js +251 -0
  135. package/src/lineage/scenario.js +101 -0
  136. package/src/lineage/schema.js +167 -0
  137. package/src/lineage/sink-registry.js +427 -0
  138. package/src/lineage/source-registry.js +357 -0
  139. package/src/lineage/source-seeding.js +212 -0
  140. package/src/lineage/summaries.js +590 -0
  141. package/src/lineage/transform-catalog.js +397 -0
  142. package/src/lineage/transit-protection.js +150 -0
  143. package/src/lineage/validate.js +285 -0
  144. package/src/lsp/server.js +49 -2
  145. package/src/mcp/CLAUDE.md +7 -1
  146. package/src/mcp/dataflow-tools.js +160 -0
  147. package/src/mcp/server.js +1 -1
  148. package/src/mcp/tools.js +22 -1
  149. package/src/pipeline/assurance-mode.js +64 -1
  150. package/src/pipeline/finding-schema.js +8 -1
  151. package/src/pipeline/scan-health.js +19 -1
  152. package/src/posture/CLAUDE.md +140 -0
  153. package/src/posture/accuracy-scorecard.js +60 -0
  154. package/src/posture/artifact-registry.js +76 -0
  155. package/src/posture/auditor-walkthrough.js +192 -13
  156. package/src/posture/compliance-frameworks/hipaa-security-rule.json +3 -2
  157. package/src/posture/compliance-policy.js +12 -2
  158. package/src/posture/cross-repo-memory.js +7 -2
  159. package/src/posture/fix-history.js +25 -2
  160. package/src/posture/fix-verify.js +9 -1
  161. package/src/posture/fleet.js +0 -0
  162. package/src/posture/git-history.js +13 -5
  163. package/src/posture/material-change.js +21 -2
  164. package/src/posture/mttr.js +75 -12
  165. package/src/posture/obligation-evidence-pack.js +202 -0
  166. package/src/posture/pre-incident-archaeology.js +39 -7
  167. package/src/posture/privacy-framework.js +14 -0
  168. package/src/posture/provenance/ai-authorship.js +68 -0
  169. package/src/posture/provenance/branch-entry.js +80 -0
  170. package/src/posture/provenance/cache.js +143 -0
  171. package/src/posture/provenance/confidence.js +36 -0
  172. package/src/posture/provenance/coordinator.js +786 -0
  173. package/src/posture/provenance/dag-walk.js +249 -0
  174. package/src/posture/provenance/evidence-attribution.js +59 -0
  175. package/src/posture/provenance/git-evidence.js +310 -0
  176. package/src/posture/provenance/lifecycle.js +208 -0
  177. package/src/posture/provenance/missing-control-resolver.js +137 -0
  178. package/src/posture/provenance/origin-resolver.js +342 -0
  179. package/src/posture/provenance/predicate-replay.js +133 -0
  180. package/src/posture/provenance/providers/config.js +39 -0
  181. package/src/posture/provenance/providers/github.js +62 -0
  182. package/src/posture/provenance/providers/gitlab.js +58 -0
  183. package/src/posture/provenance/repo-lineage.js +74 -0
  184. package/src/posture/provenance/sca-origin.js +139 -0
  185. package/src/posture/provenance/schema.js +255 -0
  186. package/src/posture/provenance/transitive-sca.js +147 -0
  187. package/src/posture/provenance/validate.js +30 -0
  188. package/src/posture/provenance-evidence-bundle.js +144 -0
  189. package/src/posture/remediation-ledger.js +337 -0
  190. package/src/posture/sbom-diff.js +15 -2
  191. package/src/posture/secret-history.js +10 -2
  192. package/src/posture/state-dir.js +38 -14
  193. package/src/posture/vuln-archaeology.js +8 -2
  194. package/src/pr-delta.js +25 -4
  195. package/src/report/index.js +197 -3
  196. package/src/runScan.js +34 -5
  197. package/src/sast/rate-limit.js +33 -3
  198. package/src/server/CLAUDE.md +47 -0
  199. package/src/server/graph-loader.js +141 -0
  200. package/src/server/http-server.js +325 -0
  201. package/src/server/routes.js +129 -0
  202. package/src/server/security.js +111 -0
  203. package/src/server/static-assets.js +139 -0
  204. package/src/util/git-hardening.js +128 -0
  205. package/dist/11.index.js +0 -353
  206. package/dist/259.index.js +0 -975
  207. package/dist/317.index.js +0 -300
  208. package/dist/609.index.js +0 -741
  209. package/dist/838.index.js +0 -152
@@ -0,0 +1,130 @@
1
+ export const id = 6944;
2
+ export const ids = [6944];
3
+ export const modules = {
4
+
5
+ /***/ 6944:
6
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
7
+
8
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9
+ /* harmony export */ HO: () => (/* binding */ isValidHost),
10
+ /* harmony export */ SK: () => (/* binding */ constantTimeEqual),
11
+ /* harmony export */ Xv: () => (/* binding */ CSP_HEADER_VALUE),
12
+ /* harmony export */ generateSessionToken: () => (/* binding */ generateSessionToken)
13
+ /* harmony export */ });
14
+ /* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7598);
15
+ // security.js — Milestone 3, sub-project Server, increment 1.
16
+ //
17
+ // Security primitives for the `explore` loopback HTTP server: session-token
18
+ // generation/comparison and Host-header validation (the T2 DNS-rebinding
19
+ // defense — see docs/DATA_FLOW_EXPLORER_THREAT_MODEL.md). No node:http
20
+ // usage here — this module is pure and independently unit-testable.
21
+
22
+
23
+
24
+ /** 32 random bytes, hex-encoded (64 hex chars) — the per-session token. */
25
+ function generateSessionToken() {
26
+ return node_crypto__WEBPACK_IMPORTED_MODULE_0__.randomBytes(32).toString('hex');
27
+ }
28
+
29
+ /**
30
+ * Constant-time string comparison. Wraps crypto.timingSafeEqual, which
31
+ * THROWS on unequal-length buffers — guarded here the same way
32
+ * posture/integrity.js's verifyLastScan guards its own HMAC comparison
33
+ * (`stored.length !== expected.length`), which this function mirrors as
34
+ * its template. Never throws; returns false on any malformed input.
35
+ */
36
+ function constantTimeEqual(a, b) {
37
+ if (typeof a !== 'string' || typeof b !== 'string') return false;
38
+ const bufA = Buffer.from(a, 'utf8');
39
+ const bufB = Buffer.from(b, 'utf8');
40
+ if (bufA.length !== bufB.length) return false;
41
+ try {
42
+ return node_crypto__WEBPACK_IMPORTED_MODULE_0__.timingSafeEqual(bufA, bufB);
43
+ } catch {
44
+ return false;
45
+ }
46
+ }
47
+
48
+ // Loopback hostnames this server ever legitimately answers to. Anything
49
+ // else in a Host header is either a stray/misconfigured client or a
50
+ // DNS-rebinding attempt from a hostile page — reject it (T2).
51
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '::1']);
52
+
53
+ /**
54
+ * Validates a request's `Host` header against the port the server is
55
+ * actually listening on. Accepts only `127.0.0.1`/`localhost`/`::1`
56
+ * (`::1` written either bare or bracketed, `[::1]`), each carrying the
57
+ * expected port explicitly — this is the ENTIRE T2 (DNS rebinding)
58
+ * defense: a hostile page that points a fetch() at 127.0.0.1:<port> still
59
+ * sends the ATTACKER'S origin's Host header value (its own hostname), not
60
+ * "127.0.0.1", so this check rejects it regardless of same-origin policy
61
+ * quirks in any particular browser.
62
+ *
63
+ * A bare host with no port suffix is accepted ONLY when expectedPort is
64
+ * the default HTTP port (80) — browsers omit :80 for a default-port
65
+ * http:// request. In practice this server always listens on a
66
+ * non-default port, so that branch is effectively unreachable but is kept
67
+ * for RFC-correctness rather than special-cased away.
68
+ *
69
+ * @param {string|undefined} hostHeader
70
+ * @param {number} expectedPort
71
+ * @returns {boolean}
72
+ */
73
+ function isValidHost(hostHeader, expectedPort) {
74
+ if (typeof hostHeader !== 'string' || hostHeader.length === 0) return false;
75
+ if (typeof expectedPort !== 'number' || !Number.isInteger(expectedPort) || expectedPort <= 0) return false;
76
+
77
+ const host = hostHeader.trim();
78
+ if (host.length !== hostHeader.length) return false; // reject leading/trailing whitespace outright
79
+ if (/\s/.test(host)) return false; // no embedded whitespace/control chars in a well-formed Host header
80
+
81
+ let hostname;
82
+ let port = null;
83
+
84
+ if (host.startsWith('[')) {
85
+ // Bracketed IPv6 literal form: [::1] or [::1]:port
86
+ const closeIdx = host.indexOf(']');
87
+ if (closeIdx === -1) return false;
88
+ hostname = host.slice(1, closeIdx); // strip brackets
89
+ const rest = host.slice(closeIdx + 1);
90
+ if (rest.length) {
91
+ if (!rest.startsWith(':')) return false;
92
+ const portStr = rest.slice(1);
93
+ if (!/^\d+$/.test(portStr)) return false;
94
+ port = Number(portStr);
95
+ }
96
+ } else {
97
+ const parts = host.split(':');
98
+ if (parts.length === 1) {
99
+ hostname = parts[0];
100
+ } else if (parts.length === 2) {
101
+ hostname = parts[0];
102
+ if (!/^\d+$/.test(parts[1])) return false;
103
+ port = Number(parts[1]);
104
+ } else {
105
+ // More than one colon with no brackets: either a malformed header or
106
+ // a bare (unbracketed) IPv6 literal, which is not valid Host syntax
107
+ // (RFC 7230 §5.4 requires brackets for an IPv6 literal). Reject.
108
+ return false;
109
+ }
110
+ }
111
+
112
+ hostname = hostname.toLowerCase();
113
+ if (!LOOPBACK_HOSTS.has(hostname)) return false;
114
+
115
+ if (port === null) return expectedPort === 80;
116
+ return port === expectedPort;
117
+ }
118
+
119
+ // This server serves JSON only in this increment (no HTML, no inline
120
+ // script/style, no static assets) — `frontend/`'s own static assets are a
121
+ // later increment's (Wire's) job, not S1's. `default-src 'none'` is
122
+ // therefore the correct, maximally-restrictive policy: nothing this
123
+ // server ever returns should load or execute ANY sub-resource. Revisit
124
+ // only when a future increment starts serving HTML/JS itself.
125
+ const CSP_HEADER_VALUE = "default-src 'none'; frame-ancestors 'none'";
126
+
127
+
128
+ /***/ })
129
+
130
+ };
@@ -1,5 +1,5 @@
1
- export const id = 178;
2
- export const ids = [178];
1
+ export const id = 7178;
2
+ export const ids = [7178];
3
3
  export const modules = {
4
4
 
5
5
  /***/ 7178:
@@ -13,7 +13,8 @@ export const modules = {
13
13
  /* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1421);
14
14
  /* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3024);
15
15
  /* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6760);
16
- /* harmony import */ var _engine_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7087);
16
+ /* harmony import */ var _util_git_hardening_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8844);
17
+ /* harmony import */ var _engine_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9753);
17
18
  // Time-travel + counterfactual scanning (v0.68).
18
19
  //
19
20
  // Two new modes that exploit the pure-input shape of runFullScan:
@@ -36,10 +37,14 @@ export const modules = {
36
37
 
37
38
 
38
39
 
40
+
39
41
  const MAX_FILES_PER_SCAN = 5000;
40
42
 
43
+ // `root` is the scan target's repository, not this project's own trusted
44
+ // checkout — hardened per FR-PROV-024 / the second Finding Provenance PRD
45
+ // audit (same exposure class as provenance/git-evidence.js's `_run`).
41
46
  function _git(root, args) {
42
- const r = (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)('git', args, { cwd: root, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
47
+ const r = (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync)('git', (0,_util_git_hardening_js__WEBPACK_IMPORTED_MODULE_3__/* .hardenGitArgs */ .Ax)(args), { cwd: root, encoding: 'utf8', maxBuffer: 64 * 1024 * 1024, env: (0,_util_git_hardening_js__WEBPACK_IMPORTED_MODULE_3__/* .hardenGitEnv */ .Si)() });
43
48
  return { ok: r.status === 0, stdout: r.stdout || '', stderr: r.stderr || '' };
44
49
  }
45
50
 
@@ -99,7 +104,10 @@ function _listFilesAtRef(root, ref) {
99
104
  }
100
105
 
101
106
  function _readFileAtRef(root, ref, file) {
102
- const r = _git(root, ['show', `${ref}:${file}`]);
107
+ // `--no-textconv`: this blob-cat form of `show` was verified NOT
108
+ // reachable via a hostile textconv driver in current git — kept for
109
+ // defense-in-depth/uniformity, same as pr-delta.js's equivalent.
110
+ const r = _git(root, ['show', '--no-textconv', `${ref}:${file}`]);
103
111
  if (!r.ok) return null;
104
112
  return r.stdout;
105
113
  }
@@ -111,7 +119,13 @@ async function _scanAtRef(root, ref) {
111
119
  const c = _readFileAtRef(root, ref, f);
112
120
  if (c != null) fileContents[f] = c;
113
121
  }
114
- const scan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_3__/* .runFullScan */ .wW)({ fileContents, scanRoot: root }, () => {});
122
+ // `provenance:false` this is a HISTORICAL ref, not "the state of this repo
123
+ // right now". Two things must not happen here: resolving git provenance for
124
+ // findings that already are a point in history (pure waste), and letting
125
+ // updateLifecycle see this partial, historical finding set as the current
126
+ // one — it marks every open stableId NOT in the set as `remediated`, so one
127
+ // per-ref scan would mass-remediate the whole project's real open findings.
128
+ const scan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_4__/* .runFullScan */ .wW)({ fileContents, scanRoot: root, provenance: false }, () => {});
115
129
  return {
116
130
  ref,
117
131
  fileCount: Object.keys(fileContents).length,
@@ -193,8 +207,12 @@ async function runWhatIf(root, { overlays = [], remove = [] } = {}) {
193
207
  }
194
208
  }
195
209
  // Baseline (without overlays) for delta computation.
196
- const baseScan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_3__/* .runFullScan */ .wW)({ fileContents: _baselineFor(fileContents, overlays, remove, root), scanRoot: root }, () => {});
197
- const whatIfScan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_3__/* .runFullScan */ .wW)({ fileContents, scanRoot: root }, () => {});
210
+ // Both legs are hypothetical snapshots being differenced against each other,
211
+ // never the repo's current state `provenance:false` for the same reason as
212
+ // _scanAtRef above (no provenance to resolve, and updateLifecycle must not
213
+ // treat either snapshot as "what is open right now").
214
+ const baseScan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_4__/* .runFullScan */ .wW)({ fileContents: _baselineFor(fileContents, overlays, remove, root), scanRoot: root, provenance: false }, () => {});
215
+ const whatIfScan = await (0,_engine_js__WEBPACK_IMPORTED_MODULE_4__/* .runFullScan */ .wW)({ fileContents, scanRoot: root, provenance: false }, () => {});
198
216
  const baseIds = new Set((baseScan.findings || []).map(f => f.stableId || f.id));
199
217
  const wIds = new Set((whatIfScan.findings || []).map(f => f.stableId || f.id));
200
218
  const introduced = (whatIfScan.findings || []).filter(f => !baseIds.has(f.stableId || f.id)).map(_compact);
@@ -1,5 +1,5 @@
1
- export const id = 227;
2
- export const ids = [227];
1
+ export const id = 7227;
2
+ export const ids = [7227];
3
3
  export const modules = {
4
4
 
5
5
  /***/ 7227: