@clear-capabilities/agentic-security-scanner 0.145.0 → 0.147.5
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.
- package/CHANGELOG.md +266 -0
- package/bin/agentic-security.js +3508 -69
- package/dist/1122.index.js +779 -0
- package/dist/{301.index.js → 1301.index.js} +2 -2
- package/dist/1379.index.js +591 -0
- package/dist/{444.index.js → 1444.index.js} +2 -2
- package/dist/{660.index.js → 1660.index.js} +2 -2
- package/dist/{700.index.js → 1700.index.js} +2 -2
- package/dist/{905.index.js → 1905.index.js} +3 -3
- package/dist/{920.index.js → 1920.index.js} +3 -3
- package/dist/{238.index.js → 2238.index.js} +3 -3
- package/dist/{271.index.js → 2271.index.js} +2 -2
- package/dist/{985.index.js → 2376.index.js} +1260 -340
- package/dist/2432.index.js +793 -0
- package/dist/2659.index.js +93 -0
- package/dist/{826.index.js → 2826.index.js} +2 -2
- package/dist/{830.index.js → 2830.index.js} +2 -2
- package/dist/2923.index.js +298 -0
- package/dist/{1.index.js → 3001.index.js} +5 -5
- package/dist/{117.index.js → 3117.index.js} +3 -3
- package/dist/3180.index.js +379 -0
- package/dist/3276.index.js +117 -0
- package/dist/{415.index.js → 3415.index.js} +2 -2
- package/dist/{499.index.js → 3499.index.js} +2 -2
- package/dist/3518.index.js +450 -0
- package/dist/{526.index.js → 3526.index.js} +5 -5
- package/dist/{736.index.js → 3736.index.js} +4 -4
- package/dist/{839.index.js → 3839.index.js} +4 -4
- package/dist/{113.index.js → 4113.index.js} +5 -5
- package/dist/{265.index.js → 4265.index.js} +2 -2
- package/dist/{384.index.js → 4384.index.js} +3 -3
- package/dist/4547.index.js +268 -0
- package/dist/4863.index.js +422 -0
- package/dist/{970.index.js → 4970.index.js} +2 -2
- package/dist/5051.index.js +841 -0
- package/dist/{144.index.js → 5144.index.js} +5 -5
- package/dist/{333.index.js → 5333.index.js} +3 -3
- package/dist/5343.index.js +185 -0
- package/dist/5350.index.js +866 -0
- package/dist/5561.index.js +436 -0
- package/dist/{637.index.js → 5637.index.js} +3 -3
- package/dist/{449.index.js → 5830.index.js} +2 -2
- package/dist/6626.index.js +532 -0
- package/dist/6662.index.js +297 -0
- package/dist/{675.index.js → 6675.index.js} +5 -5
- package/dist/{730.index.js → 6730.index.js} +6 -6
- package/dist/6829.index.js +225 -0
- package/dist/6944.index.js +130 -0
- package/dist/{178.index.js → 7178.index.js} +3 -3
- package/dist/{227.index.js → 7227.index.js} +2 -2
- package/dist/7310.index.js +520 -0
- package/dist/{552.index.js → 7552.index.js} +4 -4
- package/dist/7709.index.js +78 -0
- package/dist/8218.index.js +160 -0
- package/dist/{476.index.js → 8476.index.js} +4 -4
- package/dist/{513.index.js → 8513.index.js} +5 -5
- package/dist/{520.index.js → 8520.index.js} +2 -2
- package/dist/{718.index.js → 8718.index.js} +2 -2
- package/dist/{752.index.js → 8752.index.js} +2 -2
- package/dist/8846.index.js +100 -0
- package/dist/{435.index.js → 9091.index.js} +560 -189
- package/dist/{207.index.js → 9207.index.js} +2 -2
- package/dist/{220.index.js → 9220.index.js} +2 -2
- package/dist/9390.index.js +163 -0
- package/dist/{503.index.js → 9503.index.js} +2 -2
- package/dist/{801.index.js → 9801.index.js} +2 -2
- package/dist/{824.index.js → 9824.index.js} +2 -2
- package/dist/agentic-security.mjs +16 -16
- package/dist/agentic-security.mjs.sha256 +1 -1
- package/dist/compliance-frameworks/hipaa-security-rule.json +3 -2
- package/dist/frontend/index.html +21 -0
- package/dist/frontend/src/app.js +176 -0
- package/dist/frontend/src/components/evidence-inspector.js +141 -0
- package/dist/frontend/src/components/filter-rail.js +119 -0
- package/dist/frontend/src/components/query-bar.js +126 -0
- package/dist/frontend/src/data/flagship-graph.js +1460 -0
- package/dist/frontend/src/export-entry.js +36 -0
- package/dist/frontend/src/lib/api-client.js +92 -0
- package/dist/frontend/src/lib/contrast.js +34 -0
- package/dist/frontend/src/lib/dom.js +24 -0
- package/dist/frontend/src/lib/escape-html.js +16 -0
- package/dist/frontend/src/lib/flow-path.js +40 -0
- package/dist/frontend/src/lib/focus-controls.js +149 -0
- package/dist/frontend/src/lib/protection-visual.js +46 -0
- package/dist/frontend/src/lib/query-language.js +240 -0
- package/dist/frontend/src/lib/row-filters.js +43 -0
- package/dist/frontend/src/lib/state.js +84 -0
- package/dist/frontend/src/main.js +83 -0
- package/dist/frontend/src/shell.js +184 -0
- package/dist/frontend/src/views/architecture-view.js +798 -0
- package/dist/frontend/src/views/inventory-view.js +292 -0
- package/dist/frontend/src/views/privacy-view.js +172 -0
- package/dist/frontend/src/views/trace-view.js +206 -0
- package/dist/frontend/styles/architecture-view.css +93 -0
- package/dist/frontend/styles/filter-rail.css +34 -0
- package/dist/frontend/styles/inspector.css +69 -0
- package/dist/frontend/styles/inventory-view.css +74 -0
- package/dist/frontend/styles/privacy-view.css +86 -0
- package/dist/frontend/styles/query-bar.css +107 -0
- package/dist/frontend/styles/shell.css +155 -0
- package/dist/frontend/styles/tokens.css +128 -0
- package/dist/frontend/styles/trace-view.css +95 -0
- package/package.json +13 -6
- package/src/dataflow/CLAUDE.md +1 -1
- package/src/dataflow/catalog.js +42 -0
- package/src/dataflow/orm-write-catalog.js +175 -0
- package/src/engine.js +92 -1
- package/src/ir/CLAUDE.md +1 -0
- package/src/ir/chrome-probe.mjs +150 -0
- package/src/ir/parser-js.js +94 -7
- package/src/lineage/CLAUDE.md +1203 -0
- package/src/lineage/DESIGN_DESTINATION_RESOLVER.md +156 -0
- package/src/lineage/DESIGN_GRAPH_BUILDER.md +938 -0
- package/src/lineage/DESIGN_HANDLING_ANALYZER.md +355 -0
- package/src/lineage/DESIGN_INTRAPROCEDURAL.md +628 -0
- package/src/lineage/DESIGN_PATH_PROVENANCE.md +3451 -0
- package/src/lineage/DESIGN_QUEUE_DETAIL.md +120 -0
- package/src/lineage/DESIGN_REGISTRIES.md +880 -0
- package/src/lineage/DESIGN_STORE_DETAIL.md +143 -0
- package/src/lineage/DESIGN_TRANSIT_PROTECTION.md +245 -0
- package/src/lineage/classification.js +56 -0
- package/src/lineage/coverage.js +658 -0
- package/src/lineage/cross-repo-link.js +107 -0
- package/src/lineage/dataflow-graph.schema.json +184 -0
- package/src/lineage/decision-story.js +206 -0
- package/src/lineage/drift-policy.js +279 -0
- package/src/lineage/driver.js +135 -0
- package/src/lineage/engine.js +992 -0
- package/src/lineage/export-briefing.js +628 -0
- package/src/lineage/export-csv.js +62 -0
- package/src/lineage/export-json.js +238 -0
- package/src/lineage/export-privacy.js +258 -0
- package/src/lineage/federation-loader.js +111 -0
- package/src/lineage/field-identity.js +78 -0
- package/src/lineage/fixtures/build-flagship-fixture.mjs +272 -0
- package/src/lineage/fixtures/flagship-graph.json +1453 -0
- package/src/lineage/flow-grade.js +221 -0
- package/src/lineage/governance-edit.js +169 -0
- package/src/lineage/graph-builder.js +1114 -0
- package/src/lineage/graph-diff.js +431 -0
- package/src/lineage/graph-snapshot.js +180 -0
- package/src/lineage/handling-analyzer.js +168 -0
- package/src/lineage/ids.js +349 -0
- package/src/lineage/impact-assessment.js +76 -0
- package/src/lineage/impact-engine.js +268 -0
- package/src/lineage/index.js +281 -0
- package/src/lineage/language-coverage-tiers.js +58 -0
- package/src/lineage/obligation-mapping.js +126 -0
- package/src/lineage/obligation-predicates.js +235 -0
- package/src/lineage/observation-adapters.js +282 -0
- package/src/lineage/observation-correlation.js +622 -0
- package/src/lineage/observation-store.js +497 -0
- package/src/lineage/path-query.js +410 -0
- package/src/lineage/path-store.js +400 -0
- package/src/lineage/protection.js +53 -0
- package/src/lineage/recipient-profile.js +192 -0
- package/src/lineage/recipient-registry.js +394 -0
- package/src/lineage/redact-graph.js +224 -0
- package/src/lineage/remediation.js +417 -0
- package/src/lineage/resolve-destination.js +91 -0
- package/src/lineage/runtime-observation.js +464 -0
- package/src/lineage/scenario-diff.js +84 -0
- package/src/lineage/scenario-engine.js +251 -0
- package/src/lineage/scenario.js +101 -0
- package/src/lineage/schema.js +167 -0
- package/src/lineage/sink-registry.js +427 -0
- package/src/lineage/source-registry.js +357 -0
- package/src/lineage/source-seeding.js +212 -0
- package/src/lineage/summaries.js +590 -0
- package/src/lineage/transform-catalog.js +397 -0
- package/src/lineage/transit-protection.js +150 -0
- package/src/lineage/validate.js +285 -0
- package/src/mcp/CLAUDE.md +7 -1
- package/src/mcp/dataflow-tools.js +160 -0
- package/src/mcp/server.js +1 -1
- package/src/mcp/tools.js +2 -1
- package/src/pipeline/scan-health.js +19 -1
- package/src/posture/CLAUDE.md +19 -0
- package/src/posture/artifact-registry.js +52 -0
- package/src/posture/auditor-walkthrough.js +76 -0
- package/src/posture/compliance-frameworks/hipaa-security-rule.json +3 -2
- package/src/posture/obligation-evidence-pack.js +202 -0
- package/src/posture/remediation-ledger.js +337 -0
- package/src/server/CLAUDE.md +47 -0
- package/src/server/graph-loader.js +141 -0
- package/src/server/http-server.js +325 -0
- package/src/server/routes.js +129 -0
- package/src/server/security.js +111 -0
- package/src/server/static-assets.js +144 -0
- package/src/shared/frontend-root.js +52 -0
- package/dist/11.index.js +0 -353
- package/dist/259.index.js +0 -975
- package/dist/317.index.js +0 -300
- package/dist/609.index.js +0 -741
- package/dist/838.index.js +0 -152
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,272 @@
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
## 0.147.5 — Fix: `bench:provenance:check`'s cold-memory sample size was unreliable on GitHub Actions
|
|
15
|
+
|
|
16
|
+
`v0.147.4`'s tag was pushed but its hosted release-gate run failed before
|
|
17
|
+
reaching `npm publish` — the `dataflow-watch` fix held (the full test suite
|
|
18
|
+
passed cleanly), but `bench/provenance/runner.mjs`'s `bench:provenance:check`
|
|
19
|
+
failed: "only 8/20 iterations produced a usable sample (need >= 10)" for
|
|
20
|
+
`cold.memOverheadRatio`. This is the SAME failure `v0.147.3`'s release run
|
|
21
|
+
also hit (7/20 that time) — two consecutive, reproducible failures on
|
|
22
|
+
GitHub's runners specifically, while this bench passes cleanly (~20/20)
|
|
23
|
+
every time locally, so this is a real platform gap, not one-off noise.
|
|
24
|
+
|
|
25
|
+
Root cause: `cold.memOverheadRatio` is a per-iteration ratio against the
|
|
26
|
+
without-provenance arm's own peak-RSS delta, and `measure()` skips the
|
|
27
|
+
ratio entirely for an iteration where that delta is `0`
|
|
28
|
+
(`if (without.rssDeltaBytes > 0) { ... }`) — the without-provenance scan is
|
|
29
|
+
only ~40-60ms, short enough that the 10ms-interval peak-RSS poller can
|
|
30
|
+
genuinely observe no net growth for it, especially under a shared runner's
|
|
31
|
+
different GC pacing. `BASELINE.json` itself already records this as
|
|
32
|
+
expected (`memOverheadRatio.n: 19`, one dropped iteration out of 20 even on
|
|
33
|
+
the machine that captured it) — GitHub Actions just drops far more of them
|
|
34
|
+
(a ~35-40% survival rate against RELIABLE_N=10 at N=20 leaves no margin).
|
|
35
|
+
|
|
36
|
+
Raises `N` from 20 to 60 in `bench/provenance/runner.mjs` — the same
|
|
37
|
+
already-established remedy this exact file used once before for a related
|
|
38
|
+
small-sample fragility (doubling 10→20), extended further given the new,
|
|
39
|
+
worse-than-expected survival rate. `RELIABLE_N` (10) and the regression
|
|
40
|
+
thresholds are unchanged; `BASELINE.json`'s reference values were not
|
|
41
|
+
touched (the measured overhead is well within budget — this was purely a
|
|
42
|
+
sample-count reliability failure, not a regression). Verified locally:
|
|
43
|
+
passes with real margin (cold memory p95 11.42x vs a 24.38x limit), at a
|
|
44
|
+
real but bounded cost — this one bench step now takes ~2:23 instead of
|
|
45
|
+
~40-60s, a release-time-only cost. `v0.147.4` was never published to any
|
|
46
|
+
registry (confirmed via `npm view`). Carries the identical fixes from
|
|
47
|
+
0.147.1-0.147.4 forward.
|
|
48
|
+
|
|
49
|
+
## 0.147.4 — Fix: close a real fs.watch startup race in `dataflow watch` (test-only; no product behavior change)
|
|
50
|
+
|
|
51
|
+
`v0.147.3`'s tag was pushed but its hosted release-gate run failed before
|
|
52
|
+
reaching `npm publish` — again `cli/dataflow-watch-2`, but this time raising
|
|
53
|
+
the wait timeout (0.147.3's own fix) did NOT help: it timed out at the
|
|
54
|
+
*full* 90000ms budget with zero rescan output, which the real rescan
|
|
55
|
+
pipeline (~1-2s once triggered) rules out as "merely slow." Root cause: `bin/
|
|
56
|
+
agentic-security.js`'s `cmdDataflowWatch` prints its "watching ... Ctrl-C to
|
|
57
|
+
stop" banner — the exact string these tests poll for as the "watcher is
|
|
58
|
+
live" signal — *before* calling `watchProject()`, which is where
|
|
59
|
+
`fs.watch()` actually arms its (possibly recursive, whole-tree-walking on
|
|
60
|
+
Linux) inotify descriptors. A test file-write landing in that gap produces
|
|
61
|
+
an event inotify never delivers at all — a permanent miss, not a delay —
|
|
62
|
+
which a longer timeout cannot fix by construction.
|
|
63
|
+
|
|
64
|
+
Fixed with a 1000ms settle delay in the test, inserted between seeing the
|
|
65
|
+
startup banner and writing the trigger file, in both `dataflow-watch-1` and
|
|
66
|
+
`dataflow-watch-2` (`test/cli/dataflow-watch.test.js`). No product code
|
|
67
|
+
changed — `cmdDataflowWatch`'s banner-before-watchProject ordering is real,
|
|
68
|
+
pre-existing behavior, unrelated to anything in 0.147.1-0.147.3, and left
|
|
69
|
+
alone here rather than reordered under release time pressure without full
|
|
70
|
+
confidence in every caller depending on today's ordering. `v0.147.3` was
|
|
71
|
+
never published to any registry (confirmed via `npm view`). Carries the
|
|
72
|
+
identical fixes from 0.147.1-0.147.3 forward.
|
|
73
|
+
|
|
74
|
+
## 0.147.3 — CI fix: raise dataflow-watch's live-subprocess wait timeout (no functional change from 0.147.2)
|
|
75
|
+
|
|
76
|
+
Same story as 0.147.2, different test: `v0.147.2`'s hosted release-gate run
|
|
77
|
+
also failed before reaching `npm publish` — `test/cli/dataflow-watch.test.js`'s
|
|
78
|
+
`cli/dataflow-watch-2` polls a real subprocess's live stderr for a
|
|
79
|
+
`DRIFT POLICY VIOLATION` line after triggering a file-watch-driven rescan,
|
|
80
|
+
with a 30000ms budget. That step completes in ~1.4s on a normal machine (a
|
|
81
|
+
~20x margin) but still timed out on this run — this repo's watch mode uses
|
|
82
|
+
Node's native `fs.watch(..., { recursive: true })`
|
|
83
|
+
(`src/posture/watch-mode.js`), documented as slower/less reliable under
|
|
84
|
+
Linux CI runners' inotify handling than on a dev machine. `v0.147.2` was
|
|
85
|
+
never published to any registry (confirmed via `npm view`).
|
|
86
|
+
|
|
87
|
+
Raises the wait budget from 30000ms to a shared `WAIT_TIMEOUT_MS = 90000`
|
|
88
|
+
across both real-subprocess tests in that file (the ones that depend on the
|
|
89
|
+
file-watch path — an unrelated fast-fail test in the same file was left
|
|
90
|
+
untouched). No product code changed; this carries the identical fixes from
|
|
91
|
+
0.147.1 and 0.147.2 forward.
|
|
92
|
+
|
|
93
|
+
## 0.147.2 — CI fix: raise the headless-Chrome render timeout (no functional change from 0.147.1)
|
|
94
|
+
|
|
95
|
+
`v0.147.1`'s tag was pushed but its hosted release-gate run failed before
|
|
96
|
+
ever reaching `npm publish` — `scripts/export-image.mjs`'s `exportPng` test
|
|
97
|
+
hit its own hardcoded 15000ms Chrome render timeout on a slower draw of the
|
|
98
|
+
GitHub Actions runner (the same render took 7983ms on the immediately
|
|
99
|
+
preceding v0.147.0 release run — a ~2x runner-speed swing well within
|
|
100
|
+
normal CI variance, not a regression). `v0.147.1` was never published to
|
|
101
|
+
any registry; this release carries the identical `explore`/`dataflow
|
|
102
|
+
export --format html` fix described below under 0.147.1, plus this one
|
|
103
|
+
timeout change: `RENDER_TIMEOUT_MS` default raised from 15000ms to 30000ms
|
|
104
|
+
in `scripts/export-image.mjs`, giving roughly 4x headroom over the observed
|
|
105
|
+
good-case render time. No other code changed.
|
|
106
|
+
|
|
107
|
+
## 0.147.1 — Fix: `explore` and `dataflow export --format html` were broken for every real npm/npx install
|
|
108
|
+
|
|
109
|
+
Both commands located the Data Flow Explorer frontend (`frontend/`, a
|
|
110
|
+
repo-root sibling of `scanner/` in this monorepo) via a fixed relative path
|
|
111
|
+
computed from each module's own `import.meta.url`
|
|
112
|
+
(`path.resolve(HERE, '../../../frontend')` in `static-assets.js`,
|
|
113
|
+
`'../../frontend'` in `generate-html-report.mjs`). That math was correct
|
|
114
|
+
only for the unbundled dev checkout. Once `npm run build` (ncc) split those
|
|
115
|
+
modules into their own `dist/*.index.js` chunks, `import.meta.url` inside
|
|
116
|
+
them reflected `dist/`'s own, shallower location, and the same fixed
|
|
117
|
+
relative math resolved *outside the installed package entirely* — and
|
|
118
|
+
`frontend/` was never part of the published npm tarball to begin with. The
|
|
119
|
+
practical effect: `agentic-security explore .` 404'd on `GET /` for every
|
|
120
|
+
real `npx`/`npm install` user (`{"error":"not found"}`, never an
|
|
121
|
+
index.html), and `dataflow export . --format html` failed outright
|
|
122
|
+
(`ENOENT: no such file or directory, scandir '.../frontend/styles'`). Both
|
|
123
|
+
only ever worked when run from a full monorepo clone.
|
|
124
|
+
|
|
125
|
+
Fixed by shipping the frontend's servable files inside the published
|
|
126
|
+
package: `scanner/scripts/copy-frontend.mjs` (new) copies `frontend/`'s
|
|
127
|
+
allowlisted files (`index.html`, `src/**/*.js`, top-level `styles/*.css` —
|
|
128
|
+
the exact same allowlist `static-assets.js` already enforced for serving)
|
|
129
|
+
into `scanner/dist/frontend/` as part of `npm run build`; a new shared
|
|
130
|
+
resolver, `scanner/src/shared/frontend-root.js`, replaces both hardcoded
|
|
131
|
+
relative paths with a search-upward strategy that finds the frontend
|
|
132
|
+
correctly regardless of bundling depth. Verified by packing a real tarball
|
|
133
|
+
(`npm pack`) and installing it into an isolated directory with no monorepo
|
|
134
|
+
present: `explore`'s `GET /` now returns 200 with the real `index.html`
|
|
135
|
+
(previously 404), static JS/CSS assets and the token-authenticated
|
|
136
|
+
`/api/v1/graph` endpoint both 200, and `dataflow export --format html`
|
|
137
|
+
exits 0 and writes a real self-contained report (previously exited 2).
|
|
138
|
+
`dpia`/`ropa` export formats were already unaffected (a separate,
|
|
139
|
+
already-self-contained code path) and are unchanged.
|
|
140
|
+
|
|
141
|
+
## 0.147.0 — Documentation overhaul: a cohesive assurance-platform story, verified against the shipped code
|
|
142
|
+
|
|
143
|
+
The 0.144.0 Assurance Hardening release shipped a real 3-state ship verdict,
|
|
144
|
+
a model-egress policy gate, risk-dollar scenario disclosure, and per-artifact
|
|
145
|
+
retention/encryption — but the docs describing it, and the README's whole
|
|
146
|
+
front-door story, hadn't caught up. This release rewrites both, built
|
|
147
|
+
exclusively from real, re-verified source rather than the original
|
|
148
|
+
documentation brief's assumptions (which turned out to contain several
|
|
149
|
+
fabricated CLI flags and vocabularies — a `scan --assurance` flag that
|
|
150
|
+
doesn't exist, `--assurance` is `ci`-only; a fictional `--explain-health`
|
|
151
|
+
flag; nine invented verify-verdict strings; a fictional unified compliance
|
|
152
|
+
state model where three separate, differently-cased vocabularies actually
|
|
153
|
+
exist).
|
|
154
|
+
|
|
155
|
+
**README** rewritten around a 5-capability story (Find It / Prove It / Fix
|
|
156
|
+
It Safely / Govern It / Explain It), a corrected 5-minute quickstart, the
|
|
157
|
+
real 3-state ship verdict as a running example, and persona-based
|
|
158
|
+
navigation (Developer / AppSec / Privacy / Compliance / Platform
|
|
159
|
+
Engineering).
|
|
160
|
+
|
|
161
|
+
**16 new docs**: `docs/walkthroughs/{assurance-modes,scan-health,
|
|
162
|
+
finding-evidence,verified-remediation,privacy-data-flow,model-egress}.md`;
|
|
163
|
+
`docs/architecture/finding-lifecycle.md`; `docs/concepts.md`
|
|
164
|
+
(evidence-before-severity, deterministic-vs-model-assisted);
|
|
165
|
+
`docs/governance/state-and-retention.md`; `docs/guides/risk-dollars.md`;
|
|
166
|
+
`docs/examples/README.md` (a 13-entry gallery); `docs/reference/
|
|
167
|
+
{output-schema,glossary}.md`; `docs/troubleshooting/scan-health.md`; and two
|
|
168
|
+
real, captured Data Flow Explorer browser screenshots at `docs/assets/`.
|
|
169
|
+
|
|
170
|
+
**A new doc-testing tool**, `scripts/verify-doc-examples.mjs`: parses the
|
|
171
|
+
real CLI dispatch table out of `bin/agentic-security.js` at runtime (so it
|
|
172
|
+
can't drift out of sync with the CLI the way a hand-maintained list would)
|
|
173
|
+
to catch fabricated commands and the specific `<subcommand> --help`
|
|
174
|
+
landmine (passing `--help` to a subcommand silently runs the real command
|
|
175
|
+
instead of printing help — only bare `agentic-security help` is valid),
|
|
176
|
+
plus JSON-block and Mermaid-syntax sanity checks. Deliberately not wired
|
|
177
|
+
into any gate — a standalone `npm run docs:verify-examples`.
|
|
178
|
+
|
|
179
|
+
**Existing docs corrected**, not just extended: `docs/guides/
|
|
180
|
+
{quickstart,scanning,compliance,ci-setup,finding-provenance}.md`,
|
|
181
|
+
`docs/reference/{cli,configuration}.md`, `docs/ARCHITECTURE.md`,
|
|
182
|
+
`docs/README.md`, and several `commands/`/`skills/` files carried stale
|
|
183
|
+
claims — the most consequential being that `scan` was documented as
|
|
184
|
+
defaulting finding-provenance ON, when it actually defaults OFF (`ci`
|
|
185
|
+
defaults it ON; this asymmetry exists because plain provenance resolution
|
|
186
|
+
cost a measured 4.5s→45s regression on a 207-file tree, the same
|
|
187
|
+
measurement behind this project's own TTFF benchmark).
|
|
188
|
+
|
|
189
|
+
## 0.146.0 — Data Flow Explorer: trace sensitive data through your architecture, not just through one finding
|
|
190
|
+
|
|
191
|
+
Every prior release answers "is this line of code dangerous?" This one adds a
|
|
192
|
+
different question: "where does this piece of sensitive data actually go, and
|
|
193
|
+
what protects it along the way?" `agentic-security dataflow` builds a
|
|
194
|
+
`DataFlowGraph` from a real scan — sources, sinks, the data elements that
|
|
195
|
+
flow between them, and a verdict per hop on transit/at-rest/handling
|
|
196
|
+
protection — and a new local, read-only, loopback-only server
|
|
197
|
+
(`agentic-security explore`) serves it to a clickable UI. Six milestones,
|
|
198
|
+
built in dependency order over this release cycle:
|
|
199
|
+
|
|
200
|
+
**The graph itself (Milestones 0-2).** A stable-ID'd, schema-versioned graph
|
|
201
|
+
contract; an interprocedural field-identity taint engine purpose-built for
|
|
202
|
+
this graph (deliberately separate from the SAST engine's own taint
|
|
203
|
+
analysis — different state shape, different precision goals) with
|
|
204
|
+
context-sensitive summaries and a compact path-provenance DAG that tracks
|
|
205
|
+
*why* a field reached a sink, not just *that* it did; source/sink/
|
|
206
|
+
transformation registries reclassifying this project's existing detection
|
|
207
|
+
catalogs into the graph's own vocabulary; and protection-verdict analyzers
|
|
208
|
+
for transit (TLS presence and validity), at-rest (encryption-before-store),
|
|
209
|
+
and handling (masking/hashing/tokenization — never treated as synonyms).
|
|
210
|
+
|
|
211
|
+
**A local server and reference UI (Milestone 3).** `agentic-security explore`
|
|
212
|
+
— the first HTTP server anywhere in this codebase (the MCP and LSP servers
|
|
213
|
+
are both stdio) — serves the signed, already-scanned graph read-only,
|
|
214
|
+
loopback-only, to a zero-build-step frontend prototype with architecture,
|
|
215
|
+
privacy-lifecycle, and evidence-trace views.
|
|
216
|
+
|
|
217
|
+
**Export and decision-intelligence surfaces (Milestone 4).** JSON/CSV/HTML/
|
|
218
|
+
PNG/PDF/SVG export; a Regulatory Obligation Overlay mapping graph facts
|
|
219
|
+
against bundled compliance frameworks (never claiming "compliant" from a
|
|
220
|
+
single mapping); an Executive Risk Story mode ranking flows on nine
|
|
221
|
+
transparent, disclosed factors — never a blended, uncalibrated score; a
|
|
222
|
+
Data-Flow Time Machine (`dataflow diff`) comparing two scans with real
|
|
223
|
+
drift-policy alerting on newly-introduced disclosures; and Third-Party and
|
|
224
|
+
Cross-Border Intelligence, keeping legal/jurisdiction facts honestly
|
|
225
|
+
`unknown` rather than inferred from brand recognition.
|
|
226
|
+
|
|
227
|
+
**Simulation, corroboration, and cross-repo linkage (Milestone 5).** A
|
|
228
|
+
What-If Architecture Simulator (`dataflow scenario apply`) that clones and
|
|
229
|
+
overrides a graph to test a hypothetical fix, never mutating the real scan,
|
|
230
|
+
with every simulated verdict marked `HYPOTHETICAL` and `assumed`-graded so
|
|
231
|
+
it can never be mistaken for a real one; Blast-Radius Impact Assessment and
|
|
232
|
+
a Remediation Command Center with a hash-chained ledger enforcing that
|
|
233
|
+
closing an item requires either a clean rescan or an explicit, permitted
|
|
234
|
+
manual attestation — and that a later regression reopens it automatically;
|
|
235
|
+
a Runtime-Corroborated Digital Twin (`dataflow observations import`) that
|
|
236
|
+
layers operator-supplied runtime telemetry onto the static graph through a
|
|
237
|
+
closed-world contract that rejects, not merely redacts, any field capable
|
|
238
|
+
of carrying a payload value; per-language coverage-tier disclosure so a
|
|
239
|
+
partially-supported language is labeled as such rather than silently
|
|
240
|
+
under-reported; and `federate declare` — an operator-declared edge between
|
|
241
|
+
two independently-scanned repositories' own graphs, with each graph staying
|
|
242
|
+
its own separate, unmodified artifact.
|
|
243
|
+
|
|
244
|
+
**New top-level commands:** `explore`, `dataflow`, `governance`,
|
|
245
|
+
`remediation`, `federate` — the latter three write operator-declared
|
|
246
|
+
config through the same reviewable contract (preview, version guard,
|
|
247
|
+
backup, audit event) established for exactly this class of write.
|
|
248
|
+
|
|
249
|
+
**On rigor, again.** As with 0.145.0's own provenance work, a dedicated
|
|
250
|
+
final-review pass — after every task-level review and a green test
|
|
251
|
+
suite — found real Blocking or Important bugs in nearly every one of
|
|
252
|
+
these sub-projects: a remediation item that could be marked verified from
|
|
253
|
+
a snapshot chronologically *older* than the incident it was supposed to
|
|
254
|
+
fix; a runtime-observation payload-refusal grammar that closed single-value
|
|
255
|
+
smuggling but missed the same payload split across array elements; a
|
|
256
|
+
cross-repo link's own self-consistency digest compared against the wrong
|
|
257
|
+
half of a redacted export, so an untampered file permanently read as
|
|
258
|
+
tampered; and — found only in this release's own post-completion
|
|
259
|
+
re-audit, prompted by checking every named acceptance criterion's text
|
|
260
|
+
against the actual shipped code rather than trusting a summary — one
|
|
261
|
+
acceptance criterion (`AC-26`, on the What-If Simulator) that had never
|
|
262
|
+
been checked against its own literal wording by any prior document, and
|
|
263
|
+
was quietly unmet until this audit closed it. Every one of these was
|
|
264
|
+
found, fixed, and independently re-verified — including personally
|
|
265
|
+
reproducing the bug and its fix live, not just re-reading a diff — before
|
|
266
|
+
this release.
|
|
267
|
+
|
|
268
|
+
**Disclosed, not built.** Full graph-merge across repositories (only
|
|
269
|
+
declared, single-edge cross-repo links ship); synthetic node/edge
|
|
270
|
+
insertion for the What-If Simulator (every node/edge today derives from a
|
|
271
|
+
real registry decision or call site — inventing one has no precedent yet);
|
|
272
|
+
automatic destination/schema correlation for cross-repo edges (needs
|
|
273
|
+
prerequisite work — schema-derived edges, fuller destination resolution —
|
|
274
|
+
that isn't built); an HTML-table stress-test pass for the largest graphs;
|
|
275
|
+
config-declared (as opposed to runtime-observed) corroboration for the
|
|
276
|
+
Digital Twin, folded into already-scoped backlog rather than duplicated.
|
|
277
|
+
None of these block the acceptance criteria this release's milestones are
|
|
278
|
+
gated on.
|
|
279
|
+
|
|
14
280
|
## 0.145.0 — Finding Provenance ships, and two audits find what the first one missed
|
|
15
281
|
|
|
16
282
|
Every finding now carries a `findingProvenance` record answering "when did this
|