hex-audit 0.4.4 → 0.5.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 (102) hide show
  1. package/DEMO.md +14 -12
  2. package/README.md +66 -61
  3. package/dashboard/.next/BUILD_ID +1 -1
  4. package/dashboard/.next/app-build-manifest.json +18 -11
  5. package/dashboard/.next/app-path-routes-manifest.json +1 -1
  6. package/dashboard/.next/build-manifest.json +4 -4
  7. package/dashboard/.next/next-server.js.nft.json +1 -1
  8. package/dashboard/.next/prerender-manifest.js +1 -1
  9. package/dashboard/.next/prerender-manifest.json +1 -1
  10. package/dashboard/.next/required-server-files.json +1 -1
  11. package/dashboard/.next/routes-manifest.json +1 -1
  12. package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/dashboard/.next/server/app/_not-found.html +1 -1
  14. package/dashboard/.next/server/app/_not-found.rsc +4 -4
  15. package/dashboard/.next/server/app/access/page_client-reference-manifest.js +1 -1
  16. package/dashboard/.next/server/app/api/flows/route.js +1 -1
  17. package/dashboard/.next/server/app/api/issues/[id]/move/route.js +1 -1
  18. package/dashboard/.next/server/app/api/issues/[id]/route.js +1 -1
  19. package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +1 -1
  20. package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +1 -1
  21. package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +1 -1
  22. package/dashboard/.next/server/app/diagram.html +1 -1
  23. package/dashboard/.next/server/app/diagram.rsc +4 -4
  24. package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +1 -1
  25. package/dashboard/.next/server/app/flows.html +1 -1
  26. package/dashboard/.next/server/app/flows.rsc +4 -4
  27. package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +1 -1
  28. package/dashboard/.next/server/app/issues/page.js +12 -1
  29. package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
  30. package/dashboard/.next/server/app/overleaf/page.js +1 -0
  31. package/dashboard/.next/server/app/overleaf/page.js.nft.json +1 -0
  32. package/dashboard/.next/server/app/overleaf/page_client-reference-manifest.js +1 -0
  33. package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  34. package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +1 -1
  35. package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  36. package/dashboard/.next/server/app-paths-manifest.json +9 -8
  37. package/dashboard/.next/server/chunks/431.js +1 -1
  38. package/dashboard/.next/server/functions-config-manifest.json +1 -1
  39. package/dashboard/.next/server/middleware-build-manifest.js +1 -1
  40. package/dashboard/.next/server/pages/404.html +1 -1
  41. package/dashboard/.next/server/pages/500.html +1 -1
  42. package/dashboard/.next/server/server-reference-manifest.js +1 -1
  43. package/dashboard/.next/server/server-reference-manifest.json +1 -1
  44. package/dashboard/.next/static/chunks/app/issues/page-2bb52a36f20497fe.js +1 -0
  45. package/dashboard/.next/static/chunks/app/{layout-527d8aa86e483fbd.js → layout-9c3c84993dd895f6.js} +1 -1
  46. package/dashboard/.next/static/chunks/app/overleaf/page-bcea12a80c97b92f.js +1 -0
  47. package/dashboard/.next/static/chunks/{main-70c6d841ad572657.js → main-8f1e837090aef5cf.js} +1 -1
  48. package/dashboard/.next/static/css/9c84313d0484b74f.css +3 -0
  49. package/dashboard/app/api/flows/route.ts +4 -0
  50. package/dashboard/app/api/issues/[id]/move/route.ts +29 -58
  51. package/dashboard/app/api/issues/[id]/route.ts +11 -102
  52. package/dashboard/app/issues/IssuesBoardClient.tsx +155 -50
  53. package/dashboard/app/issues/page.tsx +40 -3
  54. package/dashboard/app/overleaf/OverleafClient.tsx +97 -0
  55. package/dashboard/app/overleaf/page.tsx +32 -0
  56. package/dashboard/components/DashboardLayout.tsx +8 -2
  57. package/dashboard/lib/finding-markdown.ts +110 -0
  58. package/dashboard/next.config.mjs +4 -0
  59. package/dist/analysis/external-calls.d.ts +8 -1
  60. package/dist/analysis/external-calls.d.ts.map +1 -1
  61. package/dist/analysis/external-calls.js +57 -13
  62. package/dist/analysis/external-calls.js.map +1 -1
  63. package/dist/commands/calls.d.ts.map +1 -1
  64. package/dist/commands/calls.js +15 -6
  65. package/dist/commands/calls.js.map +1 -1
  66. package/dist/commands/dashboard.d.ts.map +1 -1
  67. package/dist/commands/dashboard.js +12 -3
  68. package/dist/commands/dashboard.js.map +1 -1
  69. package/dist/commands/init.js +19 -19
  70. package/dist/commands/init.js.map +1 -1
  71. package/dist/commands/issue.d.ts +3 -0
  72. package/dist/commands/issue.d.ts.map +1 -0
  73. package/dist/commands/issue.js +195 -0
  74. package/dist/commands/issue.js.map +1 -0
  75. package/dist/core/config.d.ts +1 -0
  76. package/dist/core/config.d.ts.map +1 -1
  77. package/dist/core/config.js +10 -0
  78. package/dist/core/config.js.map +1 -1
  79. package/dist/core/issues.d.ts +116 -0
  80. package/dist/core/issues.d.ts.map +1 -0
  81. package/dist/core/issues.js +403 -0
  82. package/dist/core/issues.js.map +1 -0
  83. package/dist/core/schema.d.ts +24 -8
  84. package/dist/core/schema.d.ts.map +1 -1
  85. package/dist/core/schema.js +12 -1
  86. package/dist/core/schema.js.map +1 -1
  87. package/dist/index.js +3 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/skills/generate-overleaf.md +18 -10
  90. package/dist/skills/ingest-aa-report.md +15 -19
  91. package/dist/skills/init-audit.md +13 -18
  92. package/dist/skills/sync-issues.md +86 -195
  93. package/dist/skills/validate-all-findings.md +50 -0
  94. package/dist/skills/validate-issue.md +20 -10
  95. package/dist/skills/write-finding.md +23 -28
  96. package/package.json +1 -1
  97. package/dashboard/.next/server/app/api/flows.body +0 -1
  98. package/dashboard/.next/server/app/api/flows.meta +0 -1
  99. package/dashboard/.next/static/chunks/app/issues/page-dc110d4cc0a5c398.js +0 -1
  100. package/dashboard/.next/static/css/7a38e5062ba6d403.css +0 -3
  101. /package/dashboard/.next/static/{ePObaFrrwft0BlvlllUMo → NrFPHIFHWQ5jNF62Px_X8}/_buildManifest.js +0 -0
  102. /package/dashboard/.next/static/{ePObaFrrwft0BlvlllUMo → NrFPHIFHWQ5jNF62Px_X8}/_ssgManifest.js +0 -0
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Canonical issue-mutation logic, shared by the `hex issue` CLI command and the
3
+ * dashboard's PATCH/move API routes. Pure: depends only on node:fs / node:path
4
+ * and is parameterized by `outputDir` (the project's `.hex/` directory) so it
5
+ * can run from the CLI (resolves outputDir via config) or from the dashboard
6
+ * server runtime (resolves outputDir via process.cwd()).
7
+ *
8
+ * The single source of truth for: materializing a findings.json entry from a
9
+ * source-specific record (conformance / auditagent / github), routing edits
10
+ * between findings.json and tracking.json, and column→status mapping.
11
+ *
12
+ * Deliberately NOT imported across the src/ <-> dashboard/ tree boundary as a
13
+ * dependency chain: it pulls in nothing beyond node builtins, so the dashboard
14
+ * can import it via `experimental.externalDir` without dragging CLI deps
15
+ * (chalk/ora/zod) into the Next.js bundle.
16
+ */
17
+ import fs from 'node:fs';
18
+ import path from 'node:path';
19
+ export const SEVERITY_VALUES = ['Critical', 'High', 'Medium', 'Low', 'Info'];
20
+ export const RESOLUTION_VALUES = [
21
+ 'Fixed',
22
+ 'Mitigated',
23
+ 'Acknowledged',
24
+ 'Not Fixed',
25
+ 'Unresolved',
26
+ ];
27
+ export const COLUMN_TO_STATUS = {
28
+ potential: 'pending_validation',
29
+ verified: 'verified',
30
+ invalid: 'rejected',
31
+ duplicate: 'duplicate',
32
+ };
33
+ /** Fields a user may edit through the board modal or `hex issue patch`. */
34
+ export const EDITABLE_FIELDS = [
35
+ 'title',
36
+ 'severity',
37
+ 'description',
38
+ 'recommendation',
39
+ 'resolution',
40
+ 'update_from_client',
41
+ 'notes',
42
+ ];
43
+ // ─── Low-level IO (atomic, JSON) ────────────────────────────────────
44
+ function readJson(file) {
45
+ try {
46
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ function writeJson(file, data) {
53
+ const dir = path.dirname(file);
54
+ if (!fs.existsSync(dir))
55
+ fs.mkdirSync(dir, { recursive: true });
56
+ const tmp = file + '.tmp';
57
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2) + '\n', 'utf-8');
58
+ fs.renameSync(tmp, file);
59
+ }
60
+ function loadFindings(outputDir) {
61
+ return readJson(path.join(outputDir, 'findings.json')) ?? { findings: [] };
62
+ }
63
+ function loadTracking(outputDir) {
64
+ return readJson(path.join(outputDir, 'tracking.json')) ?? { findings: [] };
65
+ }
66
+ // ─── Validation ─────────────────────────────────────────────────────
67
+ export function isValidSeverity(v) {
68
+ return typeof v === 'string' && SEVERITY_VALUES.includes(v);
69
+ }
70
+ export function isValidResolution(v) {
71
+ return typeof v === 'string' && RESOLUTION_VALUES.includes(v);
72
+ }
73
+ // ─── ID allocation ──────────────────────────────────────────────────
74
+ /**
75
+ * Allocate the next uniform issue id (`H-001`, `H-002`, ...). Scans both
76
+ * findings.json and tracking.json for the highest `H-<n>` so every creator
77
+ * (init-audit conformance materialization, write-finding, ingest-aa-report,
78
+ * sync-issues pull) agrees on a single sequential namespace.
79
+ */
80
+ export function allocateId(outputDir) {
81
+ let max = 0;
82
+ const scan = (id) => {
83
+ const m = /^H-(\d+)$/.exec(id);
84
+ if (m)
85
+ max = Math.max(max, parseInt(m[1], 10));
86
+ };
87
+ for (const f of loadFindings(outputDir).findings)
88
+ scan(f.id);
89
+ for (const t of loadTracking(outputDir).findings)
90
+ scan(t.id);
91
+ return `H-${String(max + 1).padStart(3, '0')}`;
92
+ }
93
+ // ─── Source-specific materialization ────────────────────────────────
94
+ function newEmptyFinding(id, severity) {
95
+ return {
96
+ id,
97
+ title: id,
98
+ severity,
99
+ category: '',
100
+ description: '',
101
+ root_cause: { locations: [] },
102
+ poc: { status: 'not_started', file: null, validation_memo: null },
103
+ recommendation: '',
104
+ references: { external_links: [] },
105
+ created_at: new Date().toISOString(),
106
+ };
107
+ }
108
+ /** Build a findings.json record from a conformance item, keyed by source_ref. */
109
+ function findingFromConformance(outputDir, id, ref, tracking) {
110
+ const spec = readJson(path.join(outputDir, 'spec-conformance.json'));
111
+ const item = spec?.items?.find((i) => i.id === ref);
112
+ if (!item)
113
+ return null;
114
+ const f = newEmptyFinding(id, (tracking?.severity ?? item.severity_hint ?? 'Info'));
115
+ f.title = tracking?.title ?? String(item.spec_text ?? id);
116
+ f.category = 'Spec Conformance';
117
+ f.description = String(item.finding ?? item.spec_text ?? '');
118
+ const loc = item.code_location;
119
+ if (loc?.file)
120
+ f.root_cause.locations = [{ file: loc.file }];
121
+ f.source_ref = ref;
122
+ return f;
123
+ }
124
+ /** Build a findings.json record from an ai-results or external/github record, keyed by source_ref. */
125
+ function findingFromAiOrGithub(outputDir, id, kind, ref, tracking) {
126
+ const nested = kind === 'auditagent'
127
+ ? path.join(outputDir, 'ai-results', 'auditagent', 'findings.json')
128
+ : path.join(outputDir, 'external', 'github', 'findings.json');
129
+ const file = readJson(nested);
130
+ const rec = file?.findings?.find((r) => r.id === ref || String(r.issue_number ?? '') === ref || r.id === `github-${ref}`);
131
+ if (!rec)
132
+ return null;
133
+ const f = newEmptyFinding(id, rec.severity ?? tracking?.severity ?? 'Info');
134
+ f.title = String(rec.title ?? tracking?.title ?? id);
135
+ f.category = String(rec.category ?? '');
136
+ f.description = String(rec.description ?? '');
137
+ const affected = rec.affected_code ?? [];
138
+ f.root_cause.locations = affected.map((a) => ({ file: a.file, snippet: a.snippet }));
139
+ f.source_ref = ref;
140
+ return f;
141
+ }
142
+ /**
143
+ * Ensure a findings.json entry exists for `id`, materializing one from the
144
+ * source-specific record if needed. Idempotent: returns the existing entry
145
+ * untouched when present. Dispatches on the tracking entry's `source` +
146
+ * `source_ref` (not the id, which is now a uniform `H-NNN`).
147
+ */
148
+ export function ensureFindingExists(outputDir, id) {
149
+ const findings = loadFindings(outputDir);
150
+ const existing = findings.findings.find((f) => f.id === id);
151
+ if (existing)
152
+ return existing;
153
+ const tracking = loadTracking(outputDir).findings.find((t) => t.id === id);
154
+ const ref = tracking?.source_ref ?? '';
155
+ let materialized = null;
156
+ if (tracking?.source === 'conformance' && ref) {
157
+ materialized = findingFromConformance(outputDir, id, ref, tracking);
158
+ }
159
+ else if (tracking?.source === 'auditagent' && ref) {
160
+ materialized = findingFromAiOrGithub(outputDir, id, 'auditagent', ref, tracking);
161
+ }
162
+ else if (tracking?.source === 'github' && ref) {
163
+ materialized = findingFromAiOrGithub(outputDir, id, 'github', ref, tracking);
164
+ }
165
+ // Fallback: synthesize a minimal record from the tracking entry (manual
166
+ // findings, or any source record we couldn't read).
167
+ if (!materialized) {
168
+ materialized = newEmptyFinding(id, tracking?.severity ?? 'Info');
169
+ if (tracking?.title)
170
+ materialized.title = tracking.title;
171
+ if (tracking?.source_ref)
172
+ materialized.source_ref = tracking.source_ref;
173
+ }
174
+ findings.findings.push(materialized);
175
+ writeJson(path.join(outputDir, 'findings.json'), findings);
176
+ return materialized;
177
+ }
178
+ // ─── Mutations ──────────────────────────────────────────────────────
179
+ /**
180
+ * Move an issue between board columns. Materializes a findings.json entry first
181
+ * (so non-manual cards become reportable when promoted to Verified), then flips
182
+ * the tracking status.
183
+ *
184
+ * Note: this does NOT edit the user's source files. Source annotation
185
+ * (`// @audit-issue-verified ...`) remains the responsibility of the
186
+ * /validate-issue skill, which the auditor invokes deliberately — a drag-drop
187
+ * on the board should never silently rewrite .sol files.
188
+ */
189
+ const SYNCED_LOCK_MSG = 'Issue is synced to GitHub and is read-only in Hex. Edit it on GitHub, then run /sync-issues to pull the changes.';
190
+ export function moveIssue(outputDir, id, column, duplicateOf) {
191
+ const nextStatus = COLUMN_TO_STATUS[column];
192
+ // `synced` is reachable only via markSynced (the /sync-issues path), never drag/move.
193
+ if (!nextStatus) {
194
+ throw new Error(`Invalid column: ${column}. The "synced" column is reached only via /sync-issues.`);
195
+ }
196
+ const current = loadTracking(outputDir).findings.find((t) => t.id === id);
197
+ if (current?.status === 'synced')
198
+ throw new Error(SYNCED_LOCK_MSG);
199
+ // Promoting to Verified should make the issue reportable.
200
+ if (column === 'verified')
201
+ ensureFindingExists(outputDir, id);
202
+ const tracking = loadTracking(outputDir);
203
+ let entry = tracking.findings.find((t) => t.id === id);
204
+ if (!entry) {
205
+ // The board only surfaces tracking entries, but be defensive: synthesize one
206
+ // from the (now-ensured) finding so a move never 404s on a real card.
207
+ const finding = ensureFindingExists(outputDir, id);
208
+ entry = {
209
+ id,
210
+ title: finding.title,
211
+ severity: finding.severity,
212
+ source: 'manual',
213
+ status: nextStatus,
214
+ poc_status: finding.poc?.status ?? 'not_started',
215
+ poc_file: finding.poc?.file ?? null,
216
+ duplicates: [],
217
+ duplicate_of: column === 'duplicate' ? (duplicateOf ?? null) : null,
218
+ notes: '',
219
+ };
220
+ tracking.findings.push(entry);
221
+ }
222
+ else {
223
+ entry.status = nextStatus;
224
+ }
225
+ if (column === 'duplicate') {
226
+ // Record the canonical issue this duplicates, if given.
227
+ if (duplicateOf)
228
+ entry.duplicate_of = duplicateOf;
229
+ }
230
+ else if (entry.duplicate_of) {
231
+ // Clear a stale duplicate pointer when the card leaves the Duplicate column.
232
+ entry.duplicate_of = null;
233
+ }
234
+ writeJson(path.join(outputDir, 'tracking.json'), tracking);
235
+ return entry;
236
+ }
237
+ /**
238
+ * Patch editable fields on an issue. Materializes a findings.json entry first so
239
+ * description / recommendation / resolution / update_from_client always land on
240
+ * a real record (not just non-manual cards' tracking rows). Title / severity /
241
+ * notes are mirrored on the tracking entry so the board reads current values
242
+ * without re-reading findings.json.
243
+ */
244
+ export function patchIssue(outputDir, id, updates) {
245
+ const clean = {};
246
+ for (const key of EDITABLE_FIELDS) {
247
+ if (!(key in updates))
248
+ continue;
249
+ const value = updates[key];
250
+ if (key === 'severity' && value != null && !isValidSeverity(value)) {
251
+ throw new Error(`Invalid severity: ${String(value)}`);
252
+ }
253
+ if (key === 'resolution' && value != null && value !== '' && !isValidResolution(value)) {
254
+ throw new Error(`Invalid resolution: ${String(value)}`);
255
+ }
256
+ clean[key] = value;
257
+ }
258
+ if (Object.keys(clean).length === 0) {
259
+ throw new Error('No editable fields supplied');
260
+ }
261
+ const current = loadTracking(outputDir).findings.find((t) => t.id === id);
262
+ if (current?.status === 'synced')
263
+ throw new Error(SYNCED_LOCK_MSG);
264
+ const finding = ensureFindingExists(outputDir, id);
265
+ const findings = loadFindings(outputDir);
266
+ const target = findings.findings.find((f) => f.id === id) ?? finding;
267
+ for (const [key, value] of Object.entries(clean)) {
268
+ if (key === 'notes')
269
+ continue; // notes lives on tracking, not findings
270
+ if (key === 'resolution' && (value === '' || value == null)) {
271
+ delete target.resolution;
272
+ continue;
273
+ }
274
+ target[key] = value;
275
+ }
276
+ writeJson(path.join(outputDir, 'findings.json'), findings);
277
+ // Mirror title / severity / notes onto tracking.
278
+ const tracking = loadTracking(outputDir);
279
+ const entry = tracking.findings.find((t) => t.id === id);
280
+ if (entry) {
281
+ if ('title' in clean)
282
+ entry.title = clean.title;
283
+ if ('severity' in clean)
284
+ entry.severity = clean.severity;
285
+ if ('notes' in clean)
286
+ entry.notes = clean.notes;
287
+ writeJson(path.join(outputDir, 'tracking.json'), tracking);
288
+ }
289
+ return target;
290
+ }
291
+ /**
292
+ * Allocate a uniform `H-NNN` id and write a tracking entry + findings.json
293
+ * skeleton. Returns the new id. Conformance/manual start in the Potential
294
+ * column (`pending_validation`); auditagent starts `unverified`. Skills call
295
+ * this (via `hex issue new`) instead of hand-writing JSON.
296
+ */
297
+ export function createIssue(outputDir, input) {
298
+ const id = allocateId(outputDir);
299
+ const status = input.source === 'auditagent' ? 'unverified' : 'pending_validation';
300
+ // Materialize the full finding from the source record when source_ref
301
+ // resolves (conformance / auditagent / github), so the board shows the real
302
+ // description immediately. Fall back to a titled skeleton otherwise.
303
+ const ref = input.source_ref ?? '';
304
+ let f = null;
305
+ if (input.source === 'conformance' && ref) {
306
+ f = findingFromConformance(outputDir, id, ref);
307
+ }
308
+ else if (input.source === 'auditagent' && ref) {
309
+ f = findingFromAiOrGithub(outputDir, id, 'auditagent', ref);
310
+ }
311
+ else if (input.source === 'github' && ref) {
312
+ f = findingFromAiOrGithub(outputDir, id, 'github', ref);
313
+ }
314
+ if (!f) {
315
+ f = newEmptyFinding(id, input.severity ?? 'Info');
316
+ f.title = input.title;
317
+ if (input.source_ref)
318
+ f.source_ref = input.source_ref;
319
+ }
320
+ // An explicit --severity / --title from the caller wins over the source record.
321
+ if (input.severity)
322
+ f.severity = input.severity;
323
+ if (input.title)
324
+ f.title = input.title;
325
+ const severity = f.severity;
326
+ const findings = loadFindings(outputDir);
327
+ findings.findings.push(f);
328
+ writeJson(path.join(outputDir, 'findings.json'), findings);
329
+ const tracking = loadTracking(outputDir);
330
+ tracking.findings.push({
331
+ id,
332
+ title: input.title,
333
+ severity,
334
+ source: input.source,
335
+ status,
336
+ poc_status: 'not_started',
337
+ poc_file: null,
338
+ duplicates: [],
339
+ duplicate_of: null,
340
+ source_ref: input.source_ref ?? null,
341
+ notes: '',
342
+ });
343
+ writeJson(path.join(outputDir, 'tracking.json'), tracking);
344
+ return id;
345
+ }
346
+ /**
347
+ * Mark an issue as synced to GitHub: set status to `synced`, write the github
348
+ * block, and overwrite finding fields from GitHub (GitHub is the source of
349
+ * truth once synced). Used by /sync-issues for both push-confirm (after
350
+ * `gh issue create`) and pull-update (GitHub edits → local). This is the only
351
+ * function that produces `status: 'synced'`.
352
+ */
353
+ export function markSynced(outputDir, id, github, fields = {}) {
354
+ const finding = ensureFindingExists(outputDir, id);
355
+ const findings = loadFindings(outputDir);
356
+ const target = findings.findings.find((f) => f.id === id) ?? finding;
357
+ if (fields.title != null)
358
+ target.title = fields.title;
359
+ if (fields.severity != null && isValidSeverity(fields.severity))
360
+ target.severity = fields.severity;
361
+ if (fields.description != null)
362
+ target.description = fields.description;
363
+ if (fields.recommendation != null)
364
+ target.recommendation = fields.recommendation;
365
+ if (fields.update_from_client != null)
366
+ target.update_from_client = fields.update_from_client;
367
+ if (fields.resolution != null) {
368
+ if (fields.resolution === '')
369
+ delete target.resolution;
370
+ else if (isValidResolution(fields.resolution))
371
+ target.resolution = fields.resolution;
372
+ }
373
+ target.github = { ...github };
374
+ writeJson(path.join(outputDir, 'findings.json'), findings);
375
+ const tracking = loadTracking(outputDir);
376
+ let entry = tracking.findings.find((t) => t.id === id);
377
+ if (!entry) {
378
+ entry = {
379
+ id,
380
+ title: target.title,
381
+ severity: target.severity,
382
+ source: 'github',
383
+ status: 'synced',
384
+ poc_status: target.poc?.status ?? 'not_started',
385
+ poc_file: target.poc?.file ?? null,
386
+ duplicates: [],
387
+ duplicate_of: null,
388
+ source_ref: String(github.issue_number),
389
+ notes: '',
390
+ };
391
+ tracking.findings.push(entry);
392
+ }
393
+ else {
394
+ entry.status = 'synced';
395
+ entry.title = target.title;
396
+ entry.severity = target.severity;
397
+ if (entry.source_ref == null)
398
+ entry.source_ref = String(github.issue_number);
399
+ }
400
+ writeJson(path.join(outputDir, 'tracking.json'), tracking);
401
+ return target;
402
+ }
403
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/core/issues.ts"],"names":[],"mappings":"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"}
@@ -2067,6 +2067,7 @@ export declare const FindingSchema: z.ZodObject<{
2067
2067
  }>>;
2068
2068
  update_from_client: z.ZodOptional<z.ZodString>;
2069
2069
  resolution: z.ZodOptional<z.ZodEnum<["Fixed", "Mitigated", "Acknowledged", "Not Fixed", "Unresolved"]>>;
2070
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2070
2071
  }, "strip", z.ZodTypeAny, {
2071
2072
  id: string;
2072
2073
  description: string;
@@ -2105,6 +2106,7 @@ export declare const FindingSchema: z.ZodObject<{
2105
2106
  } | undefined;
2106
2107
  update_from_client?: string | undefined;
2107
2108
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2109
+ source_ref?: string | null | undefined;
2108
2110
  }, {
2109
2111
  id: string;
2110
2112
  description: string;
@@ -2143,6 +2145,7 @@ export declare const FindingSchema: z.ZodObject<{
2143
2145
  } | undefined;
2144
2146
  update_from_client?: string | undefined;
2145
2147
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2148
+ source_ref?: string | null | undefined;
2146
2149
  }>;
2147
2150
  export declare const FindingsSchema: z.ZodObject<{
2148
2151
  findings: z.ZodArray<z.ZodObject<{
@@ -2249,6 +2252,7 @@ export declare const FindingsSchema: z.ZodObject<{
2249
2252
  }>>;
2250
2253
  update_from_client: z.ZodOptional<z.ZodString>;
2251
2254
  resolution: z.ZodOptional<z.ZodEnum<["Fixed", "Mitigated", "Acknowledged", "Not Fixed", "Unresolved"]>>;
2255
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2252
2256
  }, "strip", z.ZodTypeAny, {
2253
2257
  id: string;
2254
2258
  description: string;
@@ -2287,6 +2291,7 @@ export declare const FindingsSchema: z.ZodObject<{
2287
2291
  } | undefined;
2288
2292
  update_from_client?: string | undefined;
2289
2293
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2294
+ source_ref?: string | null | undefined;
2290
2295
  }, {
2291
2296
  id: string;
2292
2297
  description: string;
@@ -2325,6 +2330,7 @@ export declare const FindingsSchema: z.ZodObject<{
2325
2330
  } | undefined;
2326
2331
  update_from_client?: string | undefined;
2327
2332
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2333
+ source_ref?: string | null | undefined;
2328
2334
  }>, "many">;
2329
2335
  }, "strip", z.ZodTypeAny, {
2330
2336
  findings: {
@@ -2365,6 +2371,7 @@ export declare const FindingsSchema: z.ZodObject<{
2365
2371
  } | undefined;
2366
2372
  update_from_client?: string | undefined;
2367
2373
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2374
+ source_ref?: string | null | undefined;
2368
2375
  }[];
2369
2376
  }, {
2370
2377
  findings: {
@@ -2405,6 +2412,7 @@ export declare const FindingsSchema: z.ZodObject<{
2405
2412
  } | undefined;
2406
2413
  update_from_client?: string | undefined;
2407
2414
  resolution?: "Fixed" | "Mitigated" | "Acknowledged" | "Not Fixed" | "Unresolved" | undefined;
2415
+ source_ref?: string | null | undefined;
2408
2416
  }[];
2409
2417
  }>;
2410
2418
  export declare const TrackingSourceSchema: z.ZodEnum<["manual", "auditagent", "conformance", "github"]>;
@@ -2413,14 +2421,15 @@ export declare const TrackingEntrySchema: z.ZodObject<{
2413
2421
  title: z.ZodString;
2414
2422
  severity: z.ZodEnum<["Critical", "High", "Medium", "Low", "Info"]>;
2415
2423
  source: z.ZodEnum<["manual", "auditagent", "conformance", "github"]>;
2416
- status: z.ZodEnum<["verified", "pending_validation", "rejected", "duplicate", "unverified"]>;
2424
+ status: z.ZodEnum<["verified", "pending_validation", "rejected", "duplicate", "unverified", "synced"]>;
2417
2425
  poc_status: z.ZodEnum<["passing", "failing", "not_started"]>;
2418
2426
  poc_file: z.ZodNullable<z.ZodString>;
2419
2427
  duplicates: z.ZodArray<z.ZodString, "many">;
2420
2428
  duplicate_of: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2429
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2421
2430
  notes: z.ZodString;
2422
2431
  }, "strip", z.ZodTypeAny, {
2423
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2432
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2424
2433
  id: string;
2425
2434
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2426
2435
  title: string;
@@ -2429,9 +2438,10 @@ export declare const TrackingEntrySchema: z.ZodObject<{
2429
2438
  poc_file: string | null;
2430
2439
  duplicates: string[];
2431
2440
  notes: string;
2441
+ source_ref?: string | null | undefined;
2432
2442
  duplicate_of?: string | null | undefined;
2433
2443
  }, {
2434
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2444
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2435
2445
  id: string;
2436
2446
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2437
2447
  title: string;
@@ -2440,6 +2450,7 @@ export declare const TrackingEntrySchema: z.ZodObject<{
2440
2450
  poc_file: string | null;
2441
2451
  duplicates: string[];
2442
2452
  notes: string;
2453
+ source_ref?: string | null | undefined;
2443
2454
  duplicate_of?: string | null | undefined;
2444
2455
  }>;
2445
2456
  export declare const TrackingSchema: z.ZodObject<{
@@ -2448,14 +2459,15 @@ export declare const TrackingSchema: z.ZodObject<{
2448
2459
  title: z.ZodString;
2449
2460
  severity: z.ZodEnum<["Critical", "High", "Medium", "Low", "Info"]>;
2450
2461
  source: z.ZodEnum<["manual", "auditagent", "conformance", "github"]>;
2451
- status: z.ZodEnum<["verified", "pending_validation", "rejected", "duplicate", "unverified"]>;
2462
+ status: z.ZodEnum<["verified", "pending_validation", "rejected", "duplicate", "unverified", "synced"]>;
2452
2463
  poc_status: z.ZodEnum<["passing", "failing", "not_started"]>;
2453
2464
  poc_file: z.ZodNullable<z.ZodString>;
2454
2465
  duplicates: z.ZodArray<z.ZodString, "many">;
2455
2466
  duplicate_of: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2467
+ source_ref: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2456
2468
  notes: z.ZodString;
2457
2469
  }, "strip", z.ZodTypeAny, {
2458
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2470
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2459
2471
  id: string;
2460
2472
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2461
2473
  title: string;
@@ -2464,9 +2476,10 @@ export declare const TrackingSchema: z.ZodObject<{
2464
2476
  poc_file: string | null;
2465
2477
  duplicates: string[];
2466
2478
  notes: string;
2479
+ source_ref?: string | null | undefined;
2467
2480
  duplicate_of?: string | null | undefined;
2468
2481
  }, {
2469
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2482
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2470
2483
  id: string;
2471
2484
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2472
2485
  title: string;
@@ -2475,11 +2488,12 @@ export declare const TrackingSchema: z.ZodObject<{
2475
2488
  poc_file: string | null;
2476
2489
  duplicates: string[];
2477
2490
  notes: string;
2491
+ source_ref?: string | null | undefined;
2478
2492
  duplicate_of?: string | null | undefined;
2479
2493
  }>, "many">;
2480
2494
  }, "strip", z.ZodTypeAny, {
2481
2495
  findings: {
2482
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2496
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2483
2497
  id: string;
2484
2498
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2485
2499
  title: string;
@@ -2488,11 +2502,12 @@ export declare const TrackingSchema: z.ZodObject<{
2488
2502
  poc_file: string | null;
2489
2503
  duplicates: string[];
2490
2504
  notes: string;
2505
+ source_ref?: string | null | undefined;
2491
2506
  duplicate_of?: string | null | undefined;
2492
2507
  }[];
2493
2508
  }, {
2494
2509
  findings: {
2495
- status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified";
2510
+ status: "verified" | "pending_validation" | "rejected" | "duplicate" | "unverified" | "synced";
2496
2511
  id: string;
2497
2512
  severity: "Critical" | "High" | "Medium" | "Low" | "Info";
2498
2513
  title: string;
@@ -2501,6 +2516,7 @@ export declare const TrackingSchema: z.ZodObject<{
2501
2516
  poc_file: string | null;
2502
2517
  duplicates: string[];
2503
2518
  notes: string;
2519
+ source_ref?: string | null | undefined;
2504
2520
  duplicate_of?: string | null | undefined;
2505
2521
  }[];
2506
2522
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -286,6 +286,9 @@ export const FindingSchema = z.object({
286
286
  github: GithubLinkSchema.optional(),
287
287
  update_from_client: z.string().optional(),
288
288
  resolution: ResolutionSchema.optional(),
289
+ // Maps a uniform H-NNN id back to its origin record (conformance item id,
290
+ // auditagent finding id, or GitHub issue number) for materialization/dedup.
291
+ source_ref: z.string().nullable().optional(),
289
292
  });
290
293
  export const FindingsSchema = z.object({
291
294
  findings: z.array(FindingSchema),
@@ -297,11 +300,19 @@ export const TrackingEntrySchema = z.object({
297
300
  title: z.string(),
298
301
  severity: SeveritySchema,
299
302
  source: TrackingSourceSchema,
300
- status: z.enum(['verified', 'pending_validation', 'rejected', 'duplicate', 'unverified']),
303
+ status: z.enum([
304
+ 'verified',
305
+ 'pending_validation',
306
+ 'rejected',
307
+ 'duplicate',
308
+ 'unverified',
309
+ 'synced',
310
+ ]),
301
311
  poc_status: z.enum(['passing', 'failing', 'not_started']),
302
312
  poc_file: z.string().nullable(),
303
313
  duplicates: z.array(z.string()),
304
314
  duplicate_of: z.string().nullable().optional(),
315
+ source_ref: z.string().nullable().optional(),
305
316
  notes: z.string(),
306
317
  });
307
318
  export const TrackingSchema = z.object({