audit-tools 0.28.11 → 0.29.3

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/README.audit.md CHANGED
@@ -1,4 +1,4 @@
1
- # auditor-lambda
1
+ # audit-code
2
2
 
3
3
  Skill-first audit orchestration backend for the `/audit-code` product surface.
4
4
 
@@ -25,7 +25,7 @@ Packaged installs and repository checkouts both ship that prompt asset.
25
25
  The intended user install is one global tool install:
26
26
 
27
27
  ```bash
28
- npm install -g auditor-lambda
28
+ npm install -g audit-tools
29
29
  ```
30
30
 
31
31
  That makes `audit-code` available on `PATH`. During package install, the package
@@ -105,7 +105,7 @@ audit-code next-step
105
105
  Repository-local equivalent:
106
106
 
107
107
  ```bash
108
- node /path/to/auditor-lambda/audit-code.mjs next-step
108
+ node /path/to/audit-tools/audit-code.mjs next-step
109
109
  ```
110
110
 
111
111
  This advances deterministic audit state one bounded step, writes
@@ -148,7 +148,7 @@ For task-to-coverage inspection without reverse-engineering multiple artifacts:
148
148
  audit-code explain-task <task_id>
149
149
  ```
150
150
 
151
- To remove a leftover `.audit-artifacts/` directory from an interrupted or
151
+ To remove a leftover `.audit-tools/audit/` directory from an interrupted or
152
152
  crashed audit:
153
153
 
154
154
  ```bash
@@ -183,12 +183,12 @@ If you want best-effort cross-editor or provider routing, opt into:
183
183
 
184
184
  Optional backend config:
185
185
 
186
- `.audit-artifacts/session-config.json`
186
+ `.audit-tools/audit/session-config.json`
187
187
 
188
188
  ## Practical Guidance
189
189
 
190
190
  - use `/audit-code` in conversation as the canonical product surface
191
- - install once with `npm install -g auditor-lambda`, then let `/audit-code` run `audit-code ensure --quiet` in each repository
191
+ - install once with `npm install -g audit-tools`, then let `/audit-code` run `audit-code ensure --quiet` in each repository
192
192
  - use `audit-code install` when you want to repair or force-refresh repo-local host assets
193
193
  - use `audit-code prompt-path` to locate the packaged prompt asset
194
194
  - use `audit-code` from the repository root only when you need the repo-local backend fallback
@@ -200,24 +200,23 @@ Optional backend config:
200
200
 
201
201
  ```bash
202
202
  npm install
203
- npm run test:single -- tests/next-step.test.mjs
203
+ npm run test:single -- tests/audit/next-step.test.mjs
204
204
  npm run verify:release
205
205
  npm run release:patch
206
206
  npm run release:patch:publish
207
207
  ```
208
208
 
209
209
  When developing from a fresh clone or git worktree, run repo-root `npm install`
210
- before package checks. Missing workspace links can look like stale
211
- `@audit-tools/shared` export or type errors.
210
+ before package checks. Missing `node_modules` can cause misleading type errors.
212
211
 
213
- For GitHub Actions publication and npm Trusted Publishing setup, see `docs/release.md`.
212
+ For GitHub Actions publication and npm Trusted Publishing setup, see `docs/audit-pkg/release.md`.
214
213
 
215
214
  ## Key Docs
216
215
 
217
- - `docs/product.md`
218
- - `docs/operator-guide.md`
219
- - `docs/contracts.md`
220
- - `docs/release.md`
221
- - `docs/development.md`
216
+ - `docs/audit-pkg/product.md`
217
+ - `docs/audit-pkg/operator-guide.md`
218
+ - `docs/audit-pkg/contracts.md`
219
+ - `docs/audit-pkg/release.md`
220
+ - `docs/audit-pkg/development.md`
222
221
  - `docs/history.md`
223
222
  - `skills/audit-code/SKILL.md`
@@ -1,15 +1,15 @@
1
- # remediator-lambda
1
+ # remediate-code
2
2
 
3
3
  Conversation-first remediation orchestrator for arbitrary repositories. It
4
4
  accepts the auditor's `audit-findings.json` (the deterministic machine contract)
5
- from [auditor-lambda](https://github.com/OhOkThisIsFine/auditor-lambda), an
5
+ from [audit-code](https://github.com/OhOkThisIsFine/audit-tools), an
6
6
  `audit-report.md` or other feedback document (LLM-extracted), or conversational
7
7
  feedback — then advances through one backend-rendered step prompt at a time.
8
8
 
9
9
  ## Primary Usage
10
10
 
11
11
  ```bash
12
- npm install -g remediator-lambda
12
+ npm install -g audit-tools
13
13
  ```
14
14
 
15
15
  Then start from a conversation:
@@ -37,25 +37,24 @@ after that brief is clear enough to convert into bounded findings.
37
37
 
38
38
  ## Runtime Artifacts
39
39
 
40
- Active runs use `.remediation-artifacts/` in the target repository. The current
41
- state is `.remediation-artifacts/state.json`, and the current step contract is
40
+ Active runs use `.audit-tools/remediation/` in the target repository. The current
41
+ state is `.audit-tools/remediation/state.json`, and the current step contract is
42
42
  written to:
43
43
 
44
- - `.remediation-artifacts/steps/current-step.json`
45
- - `.remediation-artifacts/steps/current-prompt.md`
44
+ - `.audit-tools/remediation/steps/current-step.json`
45
+ - `.audit-tools/remediation/steps/current-prompt.md`
46
46
 
47
- After close, the durable outputs are written at the repo root:
47
+ After close, the durable outputs are written to `.audit-tools/`:
48
48
 
49
49
  - `remediation-report.md`
50
- - `remediation-report.json`
50
+ - `remediation-outcomes.json`
51
51
  - `remediation-closing-result.json`
52
52
 
53
53
  ## Development From Source
54
54
 
55
- The global `npm install -g remediator-lambda` path is for users. For repository
55
+ The global `npm install -g audit-tools` path is for users. For repository
56
56
  development in a fresh clone or git worktree, run `npm install` at the repo root
57
- before build, check, test, or package-scoped workflows so workspace links point
58
- at the current `@audit-tools/shared` sources instead of stale compiled output.
57
+ before build, check, or test workflows.
59
58
 
60
59
  ## CLI
61
60
 
@@ -80,7 +79,7 @@ no LLM involved. A Markdown `audit-report.md` (or any other free-form or partial
80
79
  document) is instead routed through intake synthesis and bounded LLM finding
81
80
  extraction, so it cannot silently produce a zero-finding plan. The deterministic
82
81
  contract is locked by `tests/fixtures/auditor-contract-audit-findings.json`,
83
- regenerated with `npm run fixtures:auditor-contract` from auditor-lambda's
82
+ regenerated with `npm run fixtures:auditor-contract` from audit-code's
84
83
  findings renderer.
85
84
 
86
85
  ## Intake
@@ -92,7 +91,7 @@ The remediator can start from any of these inputs:
92
91
  - conversational feedback typed directly after `/remediate-code`
93
92
  - a mix of documents and conversation
94
93
 
95
- Runtime intake artifacts live under `.remediation-artifacts/intake/`:
94
+ Runtime intake artifacts live under `.audit-tools/remediation/intake/`:
96
95
 
97
96
  - `source-manifest.json`
98
97
  - `conversation-start.md`
@@ -38,7 +38,7 @@ function runBuild(command, args) {
38
38
  const child = spawn(resolved.command, resolved.args, {
39
39
  cwd: repoRoot,
40
40
  // Auto-rebuild output is diagnostic — route both child streams to the
41
- // parent's stderr (fd 2) so npm's `> auditor-lambda@… build` banner can
41
+ // parent's stderr (fd 2) so npm's `> audit-tools@… build` banner can
42
42
  // never pollute the wrapper's stdout JSON channel when a caller captures it.
43
43
  stdio: ['ignore', 2, 2],
44
44
  env: process.env,
@@ -155,7 +155,7 @@ export const INSTALL_HOST_DEFINITIONS = {
155
155
  ],
156
156
  steps: [
157
157
  'Open this repository in Codex.',
158
- 'Use the global `/audit-code` skill installed by `npm install -g auditor-lambda`.',
158
+ 'Use the global `/audit-code` skill installed by `npm install -g audit-tools`.',
159
159
  'If the global skill is unavailable, follow the AGENTS fallback instructions that point at the repo-local prompt asset.',
160
160
  ],
161
161
  profile: {
@@ -187,7 +187,7 @@ export const INSTALL_HOST_DEFINITIONS = {
187
187
  ],
188
188
  steps: [
189
189
  'Open this repository in OpenCode.',
190
- 'Use the global `/audit-code` command installed by `npm install -g auditor-lambda`.',
190
+ 'Use the global `/audit-code` command installed by `npm install -g audit-tools`.',
191
191
  'Let OpenCode load the generated `opencode.json` for project permissions; the global command drives `audit-code next-step` directly.',
192
192
  ],
193
193
  profile: {
@@ -58,7 +58,6 @@ function buildAuditBashPermissions() {
58
58
  for (const sub of AUDIT_CODE_WRAPPER_EXTRA_SUBCOMMANDS) {
59
59
  perm[`*audit-code.mjs* ${sub}`] = 'allow';
60
60
  }
61
- perm['*node* *auditor-lambda*dist*index.js* worker-run*'] = 'allow';
62
61
  perm['git status*'] = 'allow';
63
62
  perm['git diff*'] = 'allow';
64
63
  perm['grep *'] = 'allow';
@@ -158,7 +157,6 @@ export function assertOpenCodeAuditPermissionConfig(permissionConfig, label) {
158
157
  '*audit-code.mjs* submit-packet*',
159
158
  '*audit-code.mjs* merge-and-ingest*',
160
159
  '*audit-code.mjs* worker-run*',
161
- '*node* *auditor-lambda*dist*index.js* worker-run*',
162
160
  ]) {
163
161
  if (bash[pattern] !== 'allow') {
164
162
  throw new Error(`OpenCode ${label}.bash must allow ${pattern}. Run "audit-code install --host opencode".`);
@@ -213,7 +211,7 @@ function mergePermissionBlock(existingPermission, generatedPermission) {
213
211
  export function buildMergedOpenCodeProjectConfig(existing, root) {
214
212
  if (!sharedOpenCodePermissions) {
215
213
  throw new Error(
216
- 'audit-tools/shared is not available. Run "npm run build -w audit-tools/shared" before deploying OpenCode config.',
214
+ 'audit-tools/shared is not available. Run "npm run build" before deploying OpenCode config.',
217
215
  );
218
216
  }
219
217
  const generated = renderOpenCodeProjectConfig(root);
@@ -1 +1 @@
1
- {"version":3,"file":"designAssessment.d.ts","sourceRoot":"","sources":["../../../src/audit/extractors/designAssessment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAa,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAkUrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,oBAAoB,CAAC;IACpC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,gBAAgB,CAgBnB"}
1
+ {"version":3,"file":"designAssessment.d.ts","sourceRoot":"","sources":["../../../src/audit/extractors/designAssessment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA8MrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,oBAAoB,CAAC;IACpC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,gBAAgB,CAmBnB"}
@@ -1,3 +1,4 @@
1
+ import { deriveGraphSignals } from "./graphSignals.js";
1
2
  // ID generation is instance-scoped per build (no shared mutable module state),
2
3
  // so repeated/concurrent buildDesignAssessment calls produce independent,
3
4
  // non-colliding DA-### sequences.
@@ -5,90 +6,8 @@ function createFindingIdGenerator() {
5
6
  let n = 1;
6
7
  return () => `DA-${String(n++).padStart(3, "0")}`;
7
8
  }
8
- function allEdges(graphBundle) {
9
- const edges = [];
10
- for (const [key, value] of Object.entries(graphBundle.graphs)) {
11
- if (key === "routes" || !Array.isArray(value))
12
- continue;
13
- for (const edge of value) {
14
- if (edge && typeof edge.from === "string" && typeof edge.to === "string") {
15
- edges.push(edge);
16
- }
17
- }
18
- }
19
- return edges;
20
- }
21
- function dfsVisit(node, path, adjacency, visited, stack, cycles) {
22
- if (stack.has(node)) {
23
- const cycleStart = path.indexOf(node);
24
- if (cycleStart >= 0) {
25
- cycles.push(path.slice(cycleStart));
26
- }
27
- return;
28
- }
29
- if (visited.has(node))
30
- return;
31
- visited.add(node);
32
- stack.add(node);
33
- path.push(node);
34
- for (const neighbor of adjacency.get(node) ?? []) {
35
- dfsVisit(neighbor, path, adjacency, visited, stack, cycles);
36
- }
37
- path.pop();
38
- stack.delete(node);
39
- }
40
- function detectCycles(edges) {
41
- const adjacency = new Map();
42
- for (const edge of edges) {
43
- if (!adjacency.has(edge.from))
44
- adjacency.set(edge.from, new Set());
45
- adjacency.get(edge.from).add(edge.to);
46
- }
47
- const cycles = [];
48
- // Each DFS root gets a fresh per-DFS visited set so that nodes already fully
49
- // explored via one root are re-entered from a new root. This is required
50
- // because a shared visited set across DFS starts prevents detection of cycles
51
- // that are reachable from a later root only through an already-visited node
52
- // (the "diamond reachability" case). The stack (current DFS path) is still
53
- // per-path-bookkeeping and correctly identifies back-edges within each DFS.
54
- for (const node of adjacency.keys()) {
55
- const visited = new Set();
56
- const stack = new Set();
57
- dfsVisit(node, [], adjacency, visited, stack, cycles);
58
- }
59
- return cycles;
60
- }
61
- // Canonicalize a directed cycle by rotating it so the lexicographically
62
- // smallest node leads, preserving order/direction. Rotation (not sort) keeps
63
- // distinct directed cycles over the same node set apart (A→B→C→A vs A→C→B→A)
64
- // while still deduping the same cycle discovered from different DFS start nodes
65
- // (which differ only by rotation).
66
- function canonicalCycleKey(cycle) {
67
- if (cycle.length === 0)
68
- return "";
69
- let minIdx = 0;
70
- for (let i = 1; i < cycle.length; i++) {
71
- if (cycle[i] < cycle[minIdx])
72
- minIdx = i;
73
- }
74
- const rotated = [...cycle.slice(minIdx), ...cycle.slice(0, minIdx)];
75
- return rotated.join("\0");
76
- }
77
- function deduplicateCycles(cycles) {
78
- const seen = new Set();
79
- const unique = [];
80
- for (const cycle of cycles) {
81
- const normalized = canonicalCycleKey(cycle);
82
- if (!seen.has(normalized)) {
83
- seen.add(normalized);
84
- unique.push(cycle);
85
- }
86
- }
87
- return unique;
88
- }
89
- function detectCycleFindings(graphBundle, nextId) {
90
- const edges = allEdges(graphBundle);
91
- const cycles = deduplicateCycles(detectCycles(edges));
9
+ function detectCycleFindings(signals, nextId) {
10
+ const cycles = signals.cycles;
92
11
  if (cycles.length === 0)
93
12
  return [];
94
13
  return cycles.slice(0, 10).map((cycle) => ({
@@ -103,43 +22,29 @@ function detectCycleFindings(graphBundle, nextId) {
103
22
  systemic: true,
104
23
  }));
105
24
  }
106
- function detectHubModules(graphBundle, nextId) {
107
- const edges = allEdges(graphBundle);
108
- const fanIn = new Map();
109
- const fanOut = new Map();
110
- for (const edge of edges) {
111
- fanOut.set(edge.from, (fanOut.get(edge.from) ?? 0) + 1);
112
- fanIn.set(edge.to, (fanIn.get(edge.to) ?? 0) + 1);
113
- }
114
- const allNodes = new Set([...fanIn.keys(), ...fanOut.keys()]);
115
- const hubThreshold = Math.max(8, Math.ceil(allNodes.size * 0.15));
25
+ function detectHubModules(signals, nextId) {
116
26
  const findings = [];
117
- for (const node of allNodes) {
118
- const inCount = fanIn.get(node) ?? 0;
119
- const outCount = fanOut.get(node) ?? 0;
120
- if (inCount >= hubThreshold && outCount >= hubThreshold) {
121
- findings.push({
122
- id: nextId(),
123
- title: `Hub module: ${node}`,
124
- category: "hub_module",
125
- severity: "medium",
126
- confidence: "high",
127
- lens: "architecture",
128
- summary: `${node} has ${inCount} incoming and ${outCount} outgoing dependencies. Hub modules become change bottlenecks and make the dependency graph fragile.`,
129
- affected_files: [{ path: node }],
130
- systemic: true,
131
- });
132
- }
27
+ // Deterministic order: `hubs` derives from the connected set's iteration order
28
+ // (edge insertion order), so the DA-### ids assigned here are reproducible.
29
+ for (const node of signals.hubs) {
30
+ const inCount = signals.fanIn.get(node) ?? 0;
31
+ const outCount = signals.fanOut.get(node) ?? 0;
32
+ findings.push({
33
+ id: nextId(),
34
+ title: `Hub module: ${node}`,
35
+ category: "hub_module",
36
+ severity: "medium",
37
+ confidence: "high",
38
+ lens: "architecture",
39
+ summary: `${node} has ${inCount} incoming and ${outCount} outgoing dependencies. Hub modules become change bottlenecks and make the dependency graph fragile.`,
40
+ affected_files: [{ path: node }],
41
+ systemic: true,
42
+ });
133
43
  }
134
44
  return findings;
135
45
  }
136
- function detectOrphanUnits(unitManifest, graphBundle, nextId) {
137
- const edges = allEdges(graphBundle);
138
- const connected = new Set();
139
- for (const edge of edges) {
140
- connected.add(edge.from);
141
- connected.add(edge.to);
142
- }
46
+ function detectOrphanUnits(unitManifest, signals, nextId) {
47
+ const connected = signals.connected;
143
48
  if (connected.size === 0)
144
49
  return [];
145
50
  const orphans = [];
@@ -235,13 +140,8 @@ function detectUnitSprawl(unitManifest, nextId) {
235
140
  }
236
141
  return findings;
237
142
  }
238
- function detectFlowGaps(criticalFlows, graphBundle, nextId) {
239
- const edges = allEdges(graphBundle);
240
- const connected = new Set();
241
- for (const edge of edges) {
242
- connected.add(edge.from);
243
- connected.add(edge.to);
244
- }
143
+ function detectFlowGaps(criticalFlows, signals, nextId) {
144
+ const connected = signals.connected;
245
145
  const findings = [];
246
146
  for (const flow of criticalFlows.flows) {
247
147
  const disconnected = flow.paths.filter((path) => !connected.has(path));
@@ -264,13 +164,16 @@ function detectFlowGaps(criticalFlows, graphBundle, nextId) {
264
164
  }
265
165
  export function buildDesignAssessment(params) {
266
166
  const nextId = createFindingIdGenerator();
167
+ // Single source of truth for the whole-graph signals — the same module the
168
+ // risk register reads, so cycle/hub/orphan derivation cannot drift between them.
169
+ const signals = deriveGraphSignals(params.graphBundle);
267
170
  const findings = [
268
- ...detectCycleFindings(params.graphBundle, nextId),
269
- ...detectHubModules(params.graphBundle, nextId),
270
- ...detectOrphanUnits(params.unitManifest, params.graphBundle, nextId),
171
+ ...detectCycleFindings(signals, nextId),
172
+ ...detectHubModules(signals, nextId),
173
+ ...detectOrphanUnits(params.unitManifest, signals, nextId),
271
174
  ...detectRiskConcentration(params.riskRegister, params.unitManifest, nextId),
272
175
  ...detectUnitSprawl(params.unitManifest, nextId),
273
- ...detectFlowGaps(params.criticalFlows, params.graphBundle, nextId),
176
+ ...detectFlowGaps(params.criticalFlows, signals, nextId),
274
177
  ];
275
178
  return {
276
179
  generated_at: new Date().toISOString(),
@@ -1 +1 @@
1
- {"version":3,"file":"designAssessment.js","sourceRoot":"","sources":["../../../src/audit/extractors/designAssessment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"designAssessment.js","sourceRoot":"","sources":["../../../src/audit/extractors/designAssessment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { GraphBundle, GraphEdge } from "audit-tools/shared";
2
+ /**
3
+ * Whole-graph derived signals, single-sourced.
4
+ *
5
+ * The audit graph is built per-file by the language analyzers (compiler-fidelity
6
+ * import/call/reference edges) and the regex floor. Several architectural
7
+ * heuristics are not edges but *queries over the merged edge set* — cycles, hub
8
+ * concentration, orphans, and the "deletion test" (low-in-degree leaves). These
9
+ * were previously recomputed ad-hoc inside the design assessment; they live here
10
+ * now so BOTH the design assessment and the risk register read one source of
11
+ * truth, and so the risk register can finally weight graph-structural risk.
12
+ *
13
+ * Language-neutral by construction: it consumes only `from`/`to` node ids (repo
14
+ * paths), so every analyzer that contributes import/call edges — TS, Python, … —
15
+ * feeds these signals identically. No new dependency, no per-ecosystem fork.
16
+ */
17
+ export interface GraphSignals {
18
+ /**
19
+ * Deduplicated directed cycles. Each entry is the node sequence of one cycle
20
+ * (the cycle closes from the last node back to the first); rotations of the
21
+ * same directed cycle are collapsed, distinct directed cycles over the same
22
+ * node set are kept apart.
23
+ */
24
+ cycles: string[][];
25
+ /** Per-node incoming edge count (number of edges whose `to` is the node). */
26
+ fanIn: Map<string, number>;
27
+ /** Per-node outgoing edge count (number of edges whose `from` is the node). */
28
+ fanOut: Map<string, number>;
29
+ /** Every node that participates in at least one cycle. */
30
+ nodesInCycles: Set<string>;
31
+ /** Hub nodes: `fanIn >= hubThreshold && fanOut >= hubThreshold`. */
32
+ hubs: Set<string>;
33
+ /** The fan-in/fan-out threshold a node must meet on both sides to be a hub. */
34
+ hubThreshold: number;
35
+ /**
36
+ * Deletion-test candidates (the ralph-architecture-sweep heuristic): nodes that
37
+ * nothing imports (`fanIn === 0`) yet which import others (`fanOut > 0`). A
38
+ * low-in-degree leaf is an easy deletion/refactor target — though it may also be
39
+ * a legitimate entrypoint (CLI main, test root), so this is an advisory signal
40
+ * the LLM lenses adjudicate, not a verdict. Pure orphans (`fanIn === 0 &&
41
+ * fanOut === 0`) are deliberately NOT here — those are the separate zero-edge
42
+ * orphan signal ({@link connected}-based) and would otherwise double-report.
43
+ */
44
+ deletionCandidates: Set<string>;
45
+ /** Every node touched by any edge (as `from` or `to`) — the connected set. */
46
+ connected: Set<string>;
47
+ }
48
+ /**
49
+ * Flatten every edge bucket of a graph bundle into one edge list. `routes` is
50
+ * excluded (it is a `{path,handler,method}` shape, not a `from`/`to` edge);
51
+ * malformed entries (missing string endpoints) are dropped so a bad analyzer
52
+ * output can never throw here.
53
+ */
54
+ export declare function allGraphEdges(graphBundle: GraphBundle): GraphEdge[];
55
+ /**
56
+ * Derive every whole-graph signal from a graph bundle in one pass. Pure: no IO,
57
+ * no mutation of the input — a deterministic function of the edge set, so the
58
+ * structure executor (which has the live bundle) and the design-assessment
59
+ * executor (which re-reads the persisted bundle) compute identical signals
60
+ * without a new persisted artifact.
61
+ */
62
+ export declare function deriveGraphSignals(graphBundle: GraphBundle): GraphSignals;
63
+ //# sourceMappingURL=graphSignals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphSignals.d.ts","sourceRoot":"","sources":["../../../src/audit/extractors/graphSignals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,6EAA6E;IAC7E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,0DAA0D;IAC1D,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,oEAAoE;IACpE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,8EAA8E;IAC9E,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,EAAE,CAWnE;AA2ED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,CA+CzE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Flatten every edge bucket of a graph bundle into one edge list. `routes` is
3
+ * excluded (it is a `{path,handler,method}` shape, not a `from`/`to` edge);
4
+ * malformed entries (missing string endpoints) are dropped so a bad analyzer
5
+ * output can never throw here.
6
+ */
7
+ export function allGraphEdges(graphBundle) {
8
+ const edges = [];
9
+ for (const [key, value] of Object.entries(graphBundle.graphs)) {
10
+ if (key === "routes" || !Array.isArray(value))
11
+ continue;
12
+ for (const edge of value) {
13
+ if (edge && typeof edge.from === "string" && typeof edge.to === "string") {
14
+ edges.push(edge);
15
+ }
16
+ }
17
+ }
18
+ return edges;
19
+ }
20
+ function dfsVisit(node, path, adjacency, visited, stack, cycles) {
21
+ if (stack.has(node)) {
22
+ const cycleStart = path.indexOf(node);
23
+ if (cycleStart >= 0) {
24
+ cycles.push(path.slice(cycleStart));
25
+ }
26
+ return;
27
+ }
28
+ if (visited.has(node))
29
+ return;
30
+ visited.add(node);
31
+ stack.add(node);
32
+ path.push(node);
33
+ for (const neighbor of adjacency.get(node) ?? []) {
34
+ dfsVisit(neighbor, path, adjacency, visited, stack, cycles);
35
+ }
36
+ path.pop();
37
+ stack.delete(node);
38
+ }
39
+ function detectCycles(adjacency) {
40
+ const cycles = [];
41
+ // Each DFS root gets a fresh per-DFS visited set so that nodes already fully
42
+ // explored via one root are re-entered from a new root. This is required
43
+ // because a shared visited set across DFS starts prevents detection of cycles
44
+ // that are reachable from a later root only through an already-visited node
45
+ // (the "diamond reachability" case). The stack (current DFS path) is still
46
+ // per-path-bookkeeping and correctly identifies back-edges within each DFS.
47
+ for (const node of adjacency.keys()) {
48
+ const visited = new Set();
49
+ const stack = new Set();
50
+ dfsVisit(node, [], adjacency, visited, stack, cycles);
51
+ }
52
+ return cycles;
53
+ }
54
+ // Canonicalize a directed cycle by rotating it so the lexicographically
55
+ // smallest node leads, preserving order/direction. Rotation (not sort) keeps
56
+ // distinct directed cycles over the same node set apart (A→B→C→A vs A→C→B→A)
57
+ // while still deduping the same cycle discovered from different DFS start nodes
58
+ // (which differ only by rotation).
59
+ function canonicalCycleKey(cycle) {
60
+ if (cycle.length === 0)
61
+ return "";
62
+ let minIdx = 0;
63
+ for (let i = 1; i < cycle.length; i++) {
64
+ if (cycle[i] < cycle[minIdx])
65
+ minIdx = i;
66
+ }
67
+ const rotated = [...cycle.slice(minIdx), ...cycle.slice(0, minIdx)];
68
+ return rotated.join("\0");
69
+ }
70
+ function deduplicateCycles(cycles) {
71
+ const seen = new Set();
72
+ const unique = [];
73
+ for (const cycle of cycles) {
74
+ const normalized = canonicalCycleKey(cycle);
75
+ if (!seen.has(normalized)) {
76
+ seen.add(normalized);
77
+ unique.push(cycle);
78
+ }
79
+ }
80
+ return unique;
81
+ }
82
+ /**
83
+ * Derive every whole-graph signal from a graph bundle in one pass. Pure: no IO,
84
+ * no mutation of the input — a deterministic function of the edge set, so the
85
+ * structure executor (which has the live bundle) and the design-assessment
86
+ * executor (which re-reads the persisted bundle) compute identical signals
87
+ * without a new persisted artifact.
88
+ */
89
+ export function deriveGraphSignals(graphBundle) {
90
+ const edges = allGraphEdges(graphBundle);
91
+ const adjacency = new Map();
92
+ const fanIn = new Map();
93
+ const fanOut = new Map();
94
+ const connected = new Set();
95
+ for (const edge of edges) {
96
+ if (!adjacency.has(edge.from))
97
+ adjacency.set(edge.from, new Set());
98
+ adjacency.get(edge.from).add(edge.to);
99
+ fanOut.set(edge.from, (fanOut.get(edge.from) ?? 0) + 1);
100
+ fanIn.set(edge.to, (fanIn.get(edge.to) ?? 0) + 1);
101
+ connected.add(edge.from);
102
+ connected.add(edge.to);
103
+ }
104
+ const cycles = deduplicateCycles(detectCycles(adjacency));
105
+ const nodesInCycles = new Set();
106
+ for (const cycle of cycles) {
107
+ for (const node of cycle)
108
+ nodesInCycles.add(node);
109
+ }
110
+ const hubThreshold = Math.max(8, Math.ceil(connected.size * 0.15));
111
+ const hubs = new Set();
112
+ const deletionCandidates = new Set();
113
+ for (const node of connected) {
114
+ const inCount = fanIn.get(node) ?? 0;
115
+ const outCount = fanOut.get(node) ?? 0;
116
+ if (inCount >= hubThreshold && outCount >= hubThreshold) {
117
+ hubs.add(node);
118
+ }
119
+ if (inCount === 0 && outCount > 0) {
120
+ deletionCandidates.add(node);
121
+ }
122
+ }
123
+ return {
124
+ cycles,
125
+ fanIn,
126
+ fanOut,
127
+ nodesInCycles,
128
+ hubs,
129
+ hubThreshold,
130
+ deletionCandidates,
131
+ connected,
132
+ };
133
+ }
134
+ //# sourceMappingURL=graphSignals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphSignals.js","sourceRoot":"","sources":["../../../src/audit/extractors/graphSignals.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { UnitManifest } from "../types.js";
2
2
  import type { ExternalAnalyzerResults } from "../types/externalAnalyzer.js";
3
3
  import type { CriticalFlowManifest, RiskRegister } from "audit-tools/shared";
4
- export declare function buildRiskRegister(unitManifest: UnitManifest, criticalFlows?: CriticalFlowManifest, externalAnalyzerResults?: ExternalAnalyzerResults): RiskRegister;
4
+ import type { GraphSignals } from "./graphSignals.js";
5
+ export declare function buildRiskRegister(unitManifest: UnitManifest, criticalFlows?: CriticalFlowManifest, externalAnalyzerResults?: ExternalAnalyzerResults, graphSignals?: GraphSignals): RiskRegister;
5
6
  //# sourceMappingURL=risk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../../src/audit/extractors/risk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAY,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvF,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,oBAAoB,EACpC,uBAAuB,CAAC,EAAE,uBAAuB,GAChD,YAAY,CAoEd"}
1
+ {"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../../src/audit/extractors/risk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAY,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,oBAAoB,EACpC,uBAAuB,CAAC,EAAE,uBAAuB,EACjD,YAAY,CAAC,EAAE,YAAY,GAC1B,YAAY,CAwFd"}
@@ -1,5 +1,5 @@
1
1
  const MAX_RISK_SCORE = 10;
2
- export function buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerResults) {
2
+ export function buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerResults, graphSignals) {
3
3
  const flowMap = new Map();
4
4
  for (const flow of criticalFlows?.flows ?? []) {
5
5
  for (const path of flow.paths) {
@@ -31,10 +31,29 @@ export function buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerR
31
31
  if (externalHits > 0) {
32
32
  signals.push("external_analyzer_signal");
33
33
  }
34
+ // Whole-graph structural signals (single-sourced in graphSignals). A unit
35
+ // inherits a signal when ANY of its files is so flagged in the dependency
36
+ // graph. `member_of_cycle` and `is_hub` raise structural-fragility risk;
37
+ // `deletion_candidate` (low-in-degree dead-code suspect) is informational —
38
+ // it flags cleanup scope without inflating the risk score.
39
+ const inCycle = graphSignals != null &&
40
+ unit.files.some((path) => graphSignals.nodesInCycles.has(path));
41
+ if (inCycle)
42
+ signals.push("member_of_cycle");
43
+ const isHub = graphSignals != null &&
44
+ unit.files.some((path) => graphSignals.hubs.has(path));
45
+ if (isHub)
46
+ signals.push("is_hub");
47
+ const deletionCandidate = graphSignals != null &&
48
+ unit.files.some((path) => graphSignals.deletionCandidates.has(path));
49
+ if (deletionCandidate)
50
+ signals.push("deletion_candidate");
34
51
  const riskScore = (unit.risk_score ?? 0) +
35
52
  flowHits +
36
53
  externalHits +
37
- (signals.includes("path_level_stateful_behavior") ? 1 : 0);
54
+ (signals.includes("path_level_stateful_behavior") ? 1 : 0) +
55
+ (inCycle ? 1 : 0) +
56
+ (isHub ? 1 : 0);
38
57
  return {
39
58
  unit_id: unit.unit_id,
40
59
  risk_score: Math.min(MAX_RISK_SCORE, riskScore),
@@ -1 +1 @@
1
- {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../../src/audit/extractors/risk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../../src/audit/extractors/risk.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"structureExecutors.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAWzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAyD5B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,GACrB,iBAAiB,CA6CnB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,UAAU,GAAG,YAAY,GAAG,MAAe,GAChD,iBAAiB,CAiCnB"}
1
+ {"version":3,"file":"structureExecutors.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,GACrB,iBAAiB,CA6CnB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,IAAI,GAAE,UAAU,GAAG,YAAY,GAAG,MAAe,GAChD,iBAAiB,CAiCnB"}
@@ -5,6 +5,7 @@ import { buildRiskRegister } from "../extractors/risk.js";
5
5
  import { buildSurfaceManifest } from "../extractors/surfaces.js";
6
6
  import { buildUnitManifest } from "./unitBuilder.js";
7
7
  import { buildDesignAssessment } from "../extractors/designAssessment.js";
8
+ import { deriveGraphSignals } from "../extractors/graphSignals.js";
8
9
  export async function runStructureExecutor(bundle, root) {
9
10
  if (!bundle.repo_manifest) {
10
11
  throw new Error("Cannot run structure executor without repo_manifest");
@@ -22,7 +23,8 @@ export async function runStructureExecutor(bundle, root) {
22
23
  });
23
24
  const surfaceManifest = buildSurfaceManifest(bundle.repo_manifest, disposition, { graphBundle });
24
25
  const criticalFlows = buildCriticalFlowManifest(bundle.repo_manifest, surfaceManifest, disposition);
25
- const riskRegister = buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerResults);
26
+ const graphSignals = deriveGraphSignals(graphBundle);
27
+ const riskRegister = buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerResults, graphSignals);
26
28
  return {
27
29
  updated: {
28
30
  ...bundle,
@@ -1 +1 @@
1
- {"version":3,"file":"structureExecutors.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structureExecutors.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"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"}
@@ -56,7 +56,7 @@ audit-code validate-results --results /path/to/results.json
56
56
 
57
57
  ## Artifact bundle
58
58
 
59
- The backend stores resumable artifacts under `.audit-artifacts/`, including:
59
+ The backend stores resumable artifacts under `.audit-tools/audit/`, including:
60
60
 
61
61
  - `repo_manifest.json`
62
62
  - `file_disposition.json`
@@ -22,7 +22,7 @@ shipped-sprint archive — that history lives in git + project memory.
22
22
  npm install
23
23
  npm run check
24
24
  npm test
25
- npm run test:single -- tests/next-step.test.mjs
25
+ npm run test:single -- tests/audit/next-step.test.mjs
26
26
  npm run verify:release
27
27
  ```
28
28
 
@@ -37,7 +37,7 @@ Shared install files:
37
37
  - `.audit-code/install/GETTING-STARTED.md`
38
38
  - `.audit-code/install/manifest.json`
39
39
  - `.audit-code/install/run-mcp-server.mjs`
40
- - `.audit-artifacts/session-config.json` when no backend fallback config exists
40
+ - `.audit-tools/audit/session-config.json` when no backend fallback config exists
41
41
 
42
42
  Host-specific files may include:
43
43
 
@@ -111,14 +111,14 @@ audit-code cleanup
111
111
  ```
112
112
 
113
113
  `audit-code next-step` is the backend-rendered step engine used by the
114
- conversation prompt. It writes `.audit-artifacts/steps/current-step.json` and
115
- `.audit-artifacts/steps/current-prompt.md`, then the host should follow only
114
+ conversation prompt. It writes `.audit-tools/audit/steps/current-step.json` and
115
+ `.audit-tools/audit/steps/current-prompt.md`, then the host should follow only
116
116
  that prompt.
117
117
 
118
118
  `audit-code validate` checks artifact shape, cross-artifact consistency,
119
119
  session config, and explicit provider readiness.
120
120
 
121
- `audit-code cleanup` removes the `.audit-artifacts/` directory when safe to
121
+ `audit-code cleanup` removes the `.audit-tools/audit/` directory when safe to
122
122
  do so. It reads `audit_state.json` before acting: `complete` and `not_started`
123
123
  states are deleted unconditionally; `active` and `blocked` states are refused
124
124
  (the audit is resumable). If `audit_state.json` is missing — typically a
@@ -130,7 +130,7 @@ previews the action without deleting anything.
130
130
  Backend fallback configuration lives at:
131
131
 
132
132
  ```text
133
- .audit-artifacts/session-config.json
133
+ .audit-tools/audit/session-config.json
134
134
  ```
135
135
 
136
136
  The canonical `/audit-code` conversation route should not require users to
@@ -1,6 +1,6 @@
1
1
  # Product
2
2
 
3
- > Normative definition: [`spec/audit-goals.md`](../spec/audit-goals.md) — product
3
+ > Normative definition: [`spec/audit-goals.md`](../../spec/audit/audit-goals.md) — product
4
4
  > identity, invariants, deterministic/LLM boundaries, and completion. This page is
5
5
  > the product overview.
6
6
 
package/opencode.json CHANGED
@@ -52,7 +52,6 @@
52
52
  "*audit-code.mjs* validate*": "allow",
53
53
  "*audit-code.mjs": "allow",
54
54
  "*audit-code.mjs* worker-run*": "allow",
55
- "*node* *auditor-lambda*dist*index.js* worker-run*": "allow",
56
55
  "git status*": "allow",
57
56
  "git diff*": "allow",
58
57
  "grep *": "allow",
@@ -106,7 +105,6 @@
106
105
  "*audit-code.mjs* validate*": "allow",
107
106
  "*audit-code.mjs": "allow",
108
107
  "*audit-code.mjs* worker-run*": "allow",
109
- "*node* *auditor-lambda*dist*index.js* worker-run*": "allow",
110
108
  "git status*": "allow",
111
109
  "git diff*": "allow",
112
110
  "grep *": "allow",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.28.11",
3
+ "version": "0.29.3",
4
4
  "private": false,
5
5
  "description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
6
6
  "type": "module",
@@ -98,7 +98,7 @@ The prompt payload in `audit-code.prompt.md` remains the canonical instruction a
98
98
  The intended user setup is one global package install:
99
99
 
100
100
  ```bash
101
- npm install -g auditor-lambda
101
+ npm install -g audit-tools
102
102
  ```
103
103
 
104
104
  That makes `audit-code` available on `PATH` and seeds user-level command/skill
@@ -132,12 +132,11 @@ audit-code
132
132
 
133
133
  from the target repository root.
134
134
 
135
- When developing `auditor-lambda` itself, prefer the local wrapper at
136
- `packages/audit-code/audit-code.mjs` (there is no `audit-code.mjs` at the
137
- monorepo root):
135
+ When developing `audit-tools` itself, prefer the local wrapper at
136
+ `audit-code.mjs` (at the repo root):
138
137
 
139
138
  ```bash
140
- node packages/audit-code/audit-code.mjs # from the monorepo root
139
+ node audit-code.mjs # from the repo root
141
140
  ```
142
141
 
143
142
  That keeps the run pinned to the local wrapper and local `dist/` output instead
@@ -17,12 +17,11 @@ First, make sure the repository has current local audit assets:
17
17
  audit-code ensure --quiet
18
18
  ```
19
19
 
20
- When developing `auditor-lambda` itself, the entrypoint lives at
21
- `packages/audit-code/audit-code.mjs` (there is no `audit-code.mjs` at the
22
- monorepo root). From the monorepo root use:
20
+ When developing `audit-tools` itself, the entrypoint lives at
21
+ `audit-code.mjs` (at the repo root). From the repo root use:
23
22
 
24
23
  ```bash
25
- node packages/audit-code/audit-code.mjs ensure --quiet
24
+ node audit-code.mjs ensure --quiet
26
25
  ```
27
26
 
28
27
  Then ask the backend for exactly one next step. This is also the **capability
@@ -64,10 +63,10 @@ lower it under rate-limit pressure. The backend's learned quota adapts from
64
63
  there. The token values should match the window of the model(s) dispatching the
65
64
  packets (e.g. 200000 / 32000 for a 200k-context model).
66
65
 
67
- When developing `auditor-lambda` itself, from the monorepo root use:
66
+ When developing `audit-tools` itself, from the repo root use:
68
67
 
69
68
  ```bash
70
- node packages/audit-code/audit-code.mjs next-step --host-max-active-subagents 4 --host-context-tokens 200000 --host-output-tokens 32000
69
+ node audit-code.mjs next-step --host-max-active-subagents 4 --host-context-tokens 200000 --host-output-tokens 32000
71
70
  ```
72
71
 
73
72
  Read the returned JSON only far enough to find `prompt_path`, then read and
@@ -51,7 +51,7 @@ instruction asset.
51
51
  The intended user setup is one global package install:
52
52
 
53
53
  ```bash
54
- npm install -g remediator-lambda
54
+ npm install -g audit-tools
55
55
  ```
56
56
 
57
57
  That makes `remediate-code` available on `PATH` and seeds user-level
@@ -76,7 +76,7 @@ bootstrap.
76
76
 
77
77
  ## Repo-local fallback
78
78
 
79
- When developing inside the `remediator-lambda` repository itself, prefer:
79
+ When developing inside the `audit-tools` repository itself, prefer:
80
80
 
81
81
  ```bash
82
82
  node remediate-code.mjs