audit-tools 0.31.2 → 0.31.4

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 (55) hide show
  1. package/README.md +60 -20
  2. package/dist/audit/cli/auditStep.d.ts +6 -3
  3. package/dist/audit/cli/auditStep.d.ts.map +1 -1
  4. package/dist/audit/cli/auditStep.js +116 -19
  5. package/dist/audit/cli/auditStep.js.map +1 -1
  6. package/dist/audit/cli/dispatch.d.ts.map +1 -1
  7. package/dist/audit/cli/dispatch.js +41 -2
  8. package/dist/audit/cli/dispatch.js.map +1 -1
  9. package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
  10. package/dist/audit/cli/mergeAndIngestCommand.js +14 -1
  11. package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
  12. package/dist/remediate/index.d.ts.map +1 -1
  13. package/dist/remediate/index.js +1 -0
  14. package/dist/remediate/index.js.map +1 -1
  15. package/dist/remediate/steps/dispatch.d.ts +15 -0
  16. package/dist/remediate/steps/dispatch.d.ts.map +1 -1
  17. package/dist/remediate/steps/dispatch.js +65 -5
  18. package/dist/remediate/steps/dispatch.js.map +1 -1
  19. package/dist/remediate/steps/intakeResolver.d.ts +6 -0
  20. package/dist/remediate/steps/intakeResolver.d.ts.map +1 -1
  21. package/dist/remediate/steps/intakeResolver.js +65 -39
  22. package/dist/remediate/steps/intakeResolver.js.map +1 -1
  23. package/dist/remediate/steps/nextStep.d.ts +9 -0
  24. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  25. package/dist/remediate/steps/nextStep.js +97 -23
  26. package/dist/remediate/steps/nextStep.js.map +1 -1
  27. package/dist/remediate/steps/rollingSession.d.ts.map +1 -1
  28. package/dist/remediate/steps/rollingSession.js +2 -3
  29. package/dist/remediate/steps/rollingSession.js.map +1 -1
  30. package/dist/remediate/steps/types.d.ts +1 -1
  31. package/dist/remediate/steps/types.d.ts.map +1 -1
  32. package/dist/remediate/steps/types.js.map +1 -1
  33. package/dist/shared/index.d.ts +3 -1
  34. package/dist/shared/index.d.ts.map +1 -1
  35. package/dist/shared/index.js +2 -1
  36. package/dist/shared/index.js.map +1 -1
  37. package/dist/shared/io/auditToolsPaths.d.ts +20 -0
  38. package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
  39. package/dist/shared/io/auditToolsPaths.js +24 -0
  40. package/dist/shared/io/auditToolsPaths.js.map +1 -1
  41. package/dist/shared/io/gitignoreArtifacts.d.ts +1 -1
  42. package/dist/shared/io/stepContractWriter.d.ts +12 -4
  43. package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
  44. package/dist/shared/io/stepContractWriter.js +81 -11
  45. package/dist/shared/io/stepContractWriter.js.map +1 -1
  46. package/dist/shared/quota/claimLease.d.ts +32 -0
  47. package/dist/shared/quota/claimLease.d.ts.map +1 -0
  48. package/dist/shared/quota/claimLease.js +66 -0
  49. package/dist/shared/quota/claimLease.js.map +1 -0
  50. package/dist/shared/quota/claimRegistry.d.ts +35 -1
  51. package/dist/shared/quota/claimRegistry.d.ts.map +1 -1
  52. package/dist/shared/quota/claimRegistry.js +74 -7
  53. package/dist/shared/quota/claimRegistry.js.map +1 -1
  54. package/docs/audit-pkg/development.md +1 -1
  55. package/package.json +3 -7
@@ -19,12 +19,20 @@ type ClaimMap = Record<string, ClaimRecord>;
19
19
  * coordinators at the same file — that is the whole point). Every mutating op
20
20
  * runs its entire read-modify-write inside `withFileLock(registryPath + '.lock')`
21
21
  * so concurrent loops are serialized and the single-grant invariant holds.
22
+ *
23
+ * The stale-reclaim window defaults to the file lock's `STALE_LOCK_MS` but is
24
+ * per-registry configurable (`staleMs`): a claim guarding a long unit of work
25
+ * (e.g. an audit task whose LLM execution outruns 30s) needs a longer lease than
26
+ * a short state mutation, so a genuinely-live owner heartbeating on a timer is
27
+ * never reclaimed mid-flight (OD3, `spec/multi-ide-concurrent-runs-design.md`).
22
28
  */
23
29
  export declare class ClaimRegistry {
24
30
  private readonly registryPath;
25
31
  private readonly now;
26
32
  private readonly lockPath;
27
- constructor(registryPath: string, now?: () => number);
33
+ private readonly staleMs;
34
+ constructor(registryPath: string, now?: () => number, staleMs?: number);
35
+ private isStale;
28
36
  /**
29
37
  * Attempt to claim `nodeId` for `poolId`. Granted when the node is unclaimed or
30
38
  * the existing claim is stale (heartbeat older than STALE_LOCK_MS). Returns the
@@ -32,6 +40,32 @@ export declare class ClaimRegistry {
32
40
  * live owner's token when another loop holds it.
33
41
  */
34
42
  claim(nodeId: string, poolId: string): Promise<ClaimResult>;
43
+ /**
44
+ * Claim as many of `nodeIds` as are free (unclaimed or stale) in ONE lock-held
45
+ * read-modify-write — the batch analogue of `claim`, so a peer partitioning a
46
+ * pool of N tasks pays a single file write instead of N. Returns the granted
47
+ * subset (nodeIds this call now owns) with their fresh owner tokens.
48
+ *
49
+ * `poolId` doubles as the OWNER identity for re-grant: a node already held by a
50
+ * DIFFERENT live pool is omitted (that peer's disjoint partition), but a node
51
+ * already held by the SAME `poolId` is RE-GRANTED (heartbeat refreshed). This
52
+ * makes a caller that re-runs the partition under a stable poolId idempotent —
53
+ * it reclaims its own in-flight nodes instead of skipping them — while distinct
54
+ * pools still partition disjointly. (Audit passes the runId as poolId: one run's
55
+ * repeated dispatch re-grants; two IDEs' runs skip each other.)
56
+ */
57
+ claimMany(nodeIds: readonly string[], poolId: string): Promise<{
58
+ granted: string[];
59
+ ownerTokenByNode: Record<string, string>;
60
+ }>;
61
+ /**
62
+ * Unconditionally remove claims for `nodeIds` (no token check), returning how
63
+ * many were present. For authoritative release points where the work is known
64
+ * done regardless of who dispatched it — e.g. releasing a task claim once its
65
+ * result has been ingested — and for releasing over-claimed (deferred) nodes a
66
+ * peer should be free to take. Distinct from `release`, which is token-checked.
67
+ */
68
+ clear(nodeIds: readonly string[]): Promise<number>;
35
69
  /**
36
70
  * Refresh the heartbeat on a claim we still hold. Token-checked: a no-op if the
37
71
  * node is unclaimed or held under a different token. Returns whether the
@@ -1 +1 @@
1
- {"version":3,"file":"claimRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAmD5C;;;;;GAKG;AACH,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,MAAyB;IAKvD;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAejE;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrE;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnE;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBvC,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIrC;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOlD"}
1
+ {"version":3,"file":"claimRegistry.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AA+C5C;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,MAAyB,EACrD,OAAO,GAAE,MAAsB;IAMjC,OAAO,CAAC,OAAO;IAIf;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAejE;;;;;;;;;;;;;OAaG;IACG,SAAS,CACb,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAuB3E;;;;;;OAMG;IACG,KAAK,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrE;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnE;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBvC,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIrC;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAOlD"}
@@ -45,23 +45,31 @@ async function writeClaimMap(registryPath, claims) {
45
45
  await mkdir(dirname(registryPath), { recursive: true });
46
46
  await writeFile(registryPath, `${JSON.stringify(claims, null, 2)}\n`, "utf8");
47
47
  }
48
- function isStale(record, now) {
49
- return now - record.heartbeatAt > STALE_LOCK_MS;
50
- }
51
48
  /**
52
49
  * File-backed claim registry. The caller owns the path (and may point two
53
50
  * coordinators at the same file — that is the whole point). Every mutating op
54
51
  * runs its entire read-modify-write inside `withFileLock(registryPath + '.lock')`
55
52
  * so concurrent loops are serialized and the single-grant invariant holds.
53
+ *
54
+ * The stale-reclaim window defaults to the file lock's `STALE_LOCK_MS` but is
55
+ * per-registry configurable (`staleMs`): a claim guarding a long unit of work
56
+ * (e.g. an audit task whose LLM execution outruns 30s) needs a longer lease than
57
+ * a short state mutation, so a genuinely-live owner heartbeating on a timer is
58
+ * never reclaimed mid-flight (OD3, `spec/multi-ide-concurrent-runs-design.md`).
56
59
  */
57
60
  export class ClaimRegistry {
58
61
  registryPath;
59
62
  now;
60
63
  lockPath;
61
- constructor(registryPath, now = () => Date.now()) {
64
+ staleMs;
65
+ constructor(registryPath, now = () => Date.now(), staleMs = STALE_LOCK_MS) {
62
66
  this.registryPath = registryPath;
63
67
  this.now = now;
64
68
  this.lockPath = `${registryPath}.lock`;
69
+ this.staleMs = staleMs;
70
+ }
71
+ isStale(record, now) {
72
+ return now - record.heartbeatAt > this.staleMs;
65
73
  }
66
74
  /**
67
75
  * Attempt to claim `nodeId` for `poolId`. Granted when the node is unclaimed or
@@ -74,7 +82,7 @@ export class ClaimRegistry {
74
82
  const claims = await readClaimMap(this.registryPath);
75
83
  const now = this.now();
76
84
  const existing = claims[nodeId];
77
- if (existing && !isStale(existing, now)) {
85
+ if (existing && !this.isStale(existing, now)) {
78
86
  return { acquired: false, heldBy: existing.ownerToken };
79
87
  }
80
88
  const ownerToken = mintOwnerToken();
@@ -83,6 +91,65 @@ export class ClaimRegistry {
83
91
  return { acquired: true, ownerToken };
84
92
  });
85
93
  }
94
+ /**
95
+ * Claim as many of `nodeIds` as are free (unclaimed or stale) in ONE lock-held
96
+ * read-modify-write — the batch analogue of `claim`, so a peer partitioning a
97
+ * pool of N tasks pays a single file write instead of N. Returns the granted
98
+ * subset (nodeIds this call now owns) with their fresh owner tokens.
99
+ *
100
+ * `poolId` doubles as the OWNER identity for re-grant: a node already held by a
101
+ * DIFFERENT live pool is omitted (that peer's disjoint partition), but a node
102
+ * already held by the SAME `poolId` is RE-GRANTED (heartbeat refreshed). This
103
+ * makes a caller that re-runs the partition under a stable poolId idempotent —
104
+ * it reclaims its own in-flight nodes instead of skipping them — while distinct
105
+ * pools still partition disjointly. (Audit passes the runId as poolId: one run's
106
+ * repeated dispatch re-grants; two IDEs' runs skip each other.)
107
+ */
108
+ async claimMany(nodeIds, poolId) {
109
+ return withFileLock(this.lockPath, async () => {
110
+ const claims = await readClaimMap(this.registryPath);
111
+ const now = this.now();
112
+ const granted = [];
113
+ const ownerTokenByNode = {};
114
+ for (const nodeId of nodeIds) {
115
+ const existing = claims[nodeId];
116
+ // Skip only when a DIFFERENT pool holds it live; my own live claim is
117
+ // re-grantable (idempotent re-partition).
118
+ if (existing && !this.isStale(existing, now) && existing.poolId !== poolId) {
119
+ continue;
120
+ }
121
+ const ownerToken = mintOwnerToken();
122
+ claims[nodeId] = { ownerToken, poolId, heartbeatAt: now };
123
+ granted.push(nodeId);
124
+ ownerTokenByNode[nodeId] = ownerToken;
125
+ }
126
+ if (granted.length > 0)
127
+ await writeClaimMap(this.registryPath, claims);
128
+ return { granted, ownerTokenByNode };
129
+ });
130
+ }
131
+ /**
132
+ * Unconditionally remove claims for `nodeIds` (no token check), returning how
133
+ * many were present. For authoritative release points where the work is known
134
+ * done regardless of who dispatched it — e.g. releasing a task claim once its
135
+ * result has been ingested — and for releasing over-claimed (deferred) nodes a
136
+ * peer should be free to take. Distinct from `release`, which is token-checked.
137
+ */
138
+ async clear(nodeIds) {
139
+ return withFileLock(this.lockPath, async () => {
140
+ const claims = await readClaimMap(this.registryPath);
141
+ let removed = 0;
142
+ for (const nodeId of nodeIds) {
143
+ if (claims[nodeId]) {
144
+ delete claims[nodeId];
145
+ removed += 1;
146
+ }
147
+ }
148
+ if (removed > 0)
149
+ await writeClaimMap(this.registryPath, claims);
150
+ return removed;
151
+ });
152
+ }
86
153
  /**
87
154
  * Refresh the heartbeat on a claim we still hold. Token-checked: a no-op if the
88
155
  * node is unclaimed or held under a different token. Returns whether the
@@ -128,7 +195,7 @@ export class ClaimRegistry {
128
195
  const now = this.now();
129
196
  const reclaimed = [];
130
197
  for (const [nodeId, record] of Object.entries(claims)) {
131
- if (isStale(record, now)) {
198
+ if (this.isStale(record, now)) {
132
199
  delete claims[nodeId];
133
200
  reclaimed.push(nodeId);
134
201
  }
@@ -150,7 +217,7 @@ export class ClaimRegistry {
150
217
  return withFileLock(this.lockPath, async () => {
151
218
  const claims = await readClaimMap(this.registryPath);
152
219
  const existing = claims[nodeId];
153
- return existing !== undefined && !isStale(existing, this.now());
220
+ return existing !== undefined && !this.isStale(existing, this.now());
154
221
  });
155
222
  }
156
223
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claimRegistry.js","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claimRegistry.js","sourceRoot":"","sources":["../../../src/shared/quota/claimRegistry.ts"],"names":[],"mappings":"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"}
@@ -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/audit/next-step.test.mjs
25
+ npx vitest run tests/audit/next-step.test.mjs
26
26
  npm run verify:release
27
27
  ```
28
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.31.2",
3
+ "version": "0.31.4",
4
4
  "private": false,
5
5
  "description": "Portable hybrid code auditing + remediation orchestrators for arbitrary repositories.",
6
6
  "type": "module",
@@ -38,12 +38,8 @@
38
38
  "postinstall": "node scripts/postinstall.mjs",
39
39
  "build": "tsc -p tsconfig.json",
40
40
  "check": "tsc -p tsconfig.json --noEmit",
41
- "test": "npm run build && npm run test:node && npm run test:remediate",
42
- "test:node": "node --import tsx/esm --test tests/shared/*.test.mjs tests/audit/*.test.mjs",
43
- "test:audit": "npm run build && node --import tsx/esm --test tests/audit/*.test.mjs",
44
- "test:shared": "npm run build && node --import tsx/esm --test tests/shared/*.test.mjs",
45
- "test:remediate": "vitest run",
46
- "test:single": "npm run build && node --import tsx/esm --test",
41
+ "test": "npm run build && vitest run",
42
+ "test:single": "npm run build && vitest run",
47
43
  "verify:release": "npm run check && npm run check:deadcode && npm run check:doc-manifest && npm test && npm run verify:hosts && npm run smoke:packaged-audit-code && npm run smoke:packaged-remediate-code",
48
44
  "check:deadcode": "knip --no-config-hints",
49
45
  "check:doc-manifest": "node scripts/check-doc-manifest.mjs",