@mirnoorata/codexa 0.3.0 → 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 (51) hide show
  1. package/README.md +23 -5
  2. package/dist/cli.js +3 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/eval/scoring.js +17 -0
  5. package/dist/eval/scoring.js.map +1 -1
  6. package/dist/indexer/external-facts.d.ts +2 -1
  7. package/dist/indexer/external-facts.js +16 -0
  8. package/dist/indexer/external-facts.js.map +1 -1
  9. package/dist/indexer/freshness.d.ts +6 -1
  10. package/dist/indexer/freshness.js +13 -3
  11. package/dist/indexer/freshness.js.map +1 -1
  12. package/dist/indexer.js +46 -15
  13. package/dist/indexer.js.map +1 -1
  14. package/dist/init.js +9 -4
  15. package/dist/init.js.map +1 -1
  16. package/dist/mcp/compaction.js +5 -0
  17. package/dist/mcp/compaction.js.map +1 -1
  18. package/dist/mcp/tool-registry.d.ts +19 -19
  19. package/dist/mcp/tool-registry.js +19 -19
  20. package/dist/mcp/tool-registry.js.map +1 -1
  21. package/dist/mcp/tools.js +5 -2
  22. package/dist/mcp/tools.js.map +1 -1
  23. package/dist/mcp-repo-root.js +37 -9
  24. package/dist/mcp-repo-root.js.map +1 -1
  25. package/dist/query/change-plan.js +11 -0
  26. package/dist/query/change-plan.js.map +1 -1
  27. package/dist/query/complexity.d.ts +27 -0
  28. package/dist/query/complexity.js +226 -0
  29. package/dist/query/complexity.js.map +1 -0
  30. package/dist/query/post-edit/decision.js +17 -6
  31. package/dist/query/post-edit/decision.js.map +1 -1
  32. package/dist/query/post-edit.js +49 -15
  33. package/dist/query/post-edit.js.map +1 -1
  34. package/dist/risk-ingest.d.ts +2 -2
  35. package/dist/risk-ingest.js +152 -63
  36. package/dist/risk-ingest.js.map +1 -1
  37. package/dist/scip-import.d.ts +3 -0
  38. package/dist/scip-import.js +569 -0
  39. package/dist/scip-import.js.map +1 -0
  40. package/dist/static-analysis.d.ts +2 -1
  41. package/dist/static-analysis.js +353 -37
  42. package/dist/static-analysis.js.map +1 -1
  43. package/dist/symbol-report-ingest.d.ts +10 -1
  44. package/dist/symbol-report-ingest.js +256 -23
  45. package/dist/symbol-report-ingest.js.map +1 -1
  46. package/dist/types.d.ts +33 -1
  47. package/dist/types.js.map +1 -1
  48. package/integrations/.claude-plugin/marketplace.json +1 -1
  49. package/integrations/claude-code/.claude-plugin/plugin.json +1 -1
  50. package/package.json +4 -3
  51. package/plugins/codexa/.codex-plugin/plugin.json +1 -1
@@ -0,0 +1,226 @@
1
+ import { uniqueSorted } from "../util.js";
2
+ const DEFAULT_INVARIANTS = [
3
+ "Do not cut trust-boundary validation, data-loss handling, security, accessibility, or explicit user requirements.",
4
+ "Prefer deletion or a narrow local edit before adding a new abstraction.",
5
+ "Prefer standard library, native platform features, and already-installed dependencies before adding code.",
6
+ "Non-trivial logic still needs the smallest runnable check that would fail if it breaks."
7
+ ];
8
+ const MANIFEST_PATH_RE = /(^|\/)(package\.json|package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb|pyproject\.toml|requirements(?:-[^/]+)?\.txt|poetry\.lock|uv\.lock|go\.mod|go\.sum|Cargo\.toml|Cargo\.lock)$/u;
9
+ const ABSTRACTION_PATH_RE = /(^|[-_/])(abstract|adapter|factory|manager|registry|interface)([-_.\/]|$)/iu;
10
+ export function buildPlanComplexityReview(input) {
11
+ const items = [];
12
+ if (!input.editReadiness.editable) {
13
+ items.push({
14
+ kind: "yagni",
15
+ severity: "review",
16
+ message: "Do not edit from this orientation-only packet; narrow to an explicit file or symbol first.",
17
+ rationale: input.editReadiness.reason
18
+ });
19
+ }
20
+ const manifestTargets = manifestPaths(input.plannedEditTargets);
21
+ if (manifestTargets.length > 0) {
22
+ items.push({
23
+ kind: "existing-dependency",
24
+ severity: "review",
25
+ message: "Package or dependency manifests are in scope; justify the change against stdlib, native, or already-installed alternatives.",
26
+ paths: manifestTargets,
27
+ rationale: "Manifest edits are a common source of avoidable dependency and maintenance cost."
28
+ });
29
+ }
30
+ if (input.plannedEditTargets.length > 6) {
31
+ items.push({
32
+ kind: "scope",
33
+ severity: "watch",
34
+ message: `Planned edit scope spans ${input.plannedEditTargets.length} files; split it unless the task truly crosses that boundary.`,
35
+ paths: input.plannedEditTargets.slice(0, 8),
36
+ rationale: "Broad planned scopes make speculative scaffolding and unrelated edits more likely."
37
+ });
38
+ }
39
+ const plannedVerificationCount = input.plannedTests.length + input.requiredWorkflowChecks.length + input.requiredDependencyChecks.length;
40
+ if (input.editReadiness.editable && plannedVerificationCount === 0) {
41
+ items.push({
42
+ kind: "verification",
43
+ severity: "review",
44
+ message: "No runnable check is planned; non-trivial logic needs one smallest relevant check.",
45
+ rationale: "Minimal code without proof is unfinished, not lean."
46
+ });
47
+ }
48
+ return review("plan", items);
49
+ }
50
+ export function buildPostEditComplexityReview(input) {
51
+ const items = [];
52
+ const changedPaths = input.changedSinceSnapshot.map((entry) => entry.path);
53
+ const manifestChanges = manifestPaths(changedPaths);
54
+ if (manifestChanges.length > 0) {
55
+ items.push({
56
+ kind: "existing-dependency",
57
+ severity: "review",
58
+ message: "Package or dependency manifests changed; verify this was necessary instead of using existing platform or dependency surface.",
59
+ paths: manifestChanges,
60
+ rationale: "The dirty tree proves only that manifests changed, so this remains a dependency/change review signal."
61
+ });
62
+ }
63
+ const unplannedNewFiles = input.changedSinceSnapshot
64
+ .filter((entry) => input.unplannedEditedFiles.includes(entry.path))
65
+ .filter((entry) => entry.kind === "added" || entry.kind === "untracked")
66
+ .map((entry) => entry.path);
67
+ if (unplannedNewFiles.length > 0) {
68
+ items.push({
69
+ kind: "scope",
70
+ severity: "review",
71
+ message: "New files appeared outside the saved planned scope; confirm they are required before keeping them.",
72
+ paths: unplannedNewFiles,
73
+ rationale: "Unplanned new files are where speculative scaffolding usually enters."
74
+ });
75
+ }
76
+ const abstractionFiles = input.changedSinceSnapshot
77
+ .filter((entry) => entry.kind === "added" || entry.kind === "untracked")
78
+ .map((entry) => entry.path)
79
+ .filter((filePath) => ABSTRACTION_PATH_RE.test(filePath));
80
+ if (abstractionFiles.length > 0) {
81
+ items.push({
82
+ kind: "abstraction",
83
+ severity: "watch",
84
+ message: "New abstraction-shaped files appeared; keep them only if there is more than one real caller or implementation.",
85
+ paths: abstractionFiles,
86
+ rationale: "One-implementation interfaces, managers, registries, and adapters often add ownership without reducing complexity."
87
+ });
88
+ }
89
+ const broadThreshold = input.plannedScope.length > 0 ? Math.max(8, input.plannedScope.length + 3) : 8;
90
+ if (input.changedSinceSnapshot.length > broadThreshold) {
91
+ items.push({
92
+ kind: "scope",
93
+ severity: "watch",
94
+ message: `Dirty scope spans ${input.changedSinceSnapshot.length} files since the snapshot; check for unrelated edits before finalizing.`,
95
+ paths: changedPaths.slice(0, 8),
96
+ rationale: "Large dirty fanout is a practical over-build signal even when every file is individually plausible."
97
+ });
98
+ }
99
+ if (input.hasActualEditedFiles && input.noVerificationProofForEditedFiles) {
100
+ items.push({
101
+ kind: "verification",
102
+ severity: "review",
103
+ message: "Edited files have no credible verification evidence; smaller code still needs one runnable check.",
104
+ rationale: "This mirrors the post-edit verification gate as a minimality invariant."
105
+ });
106
+ }
107
+ else if (input.testsNotRun.length > 0) {
108
+ items.push({
109
+ kind: "verification",
110
+ severity: "watch",
111
+ message: "Recommended tests are still unaccounted for; do not use minimality as a reason to skip them.",
112
+ paths: input.testsNotRun.map((test) => test.path).slice(0, 8),
113
+ rationale: "The leanest acceptable proof is the smallest relevant check, not no check."
114
+ });
115
+ }
116
+ return review("post-edit", items);
117
+ }
118
+ export function formatComplexityReview(reviewData) {
119
+ const lines = ["Complexity review:", `- ${reviewData.summary}`];
120
+ if (reviewData.items.length === 0) {
121
+ lines.push("- Lean already: no dependency, abstraction, scope, or verification complexity signal fired.");
122
+ }
123
+ else {
124
+ for (const item of reviewData.items.slice(0, 8)) {
125
+ const paths = item.paths && item.paths.length > 0 ? ` [${item.paths.slice(0, 4).join(", ")}${item.paths.length > 4 ? "; ..." : ""}]` : "";
126
+ const replacement = item.replacement ? ` Replace with: ${item.replacement}.` : "";
127
+ lines.push(`- ${item.kind}/${item.severity}: ${item.message}${paths} ${item.rationale}.${replacement}`.trim());
128
+ }
129
+ }
130
+ lines.push("Invariants:");
131
+ lines.push(...reviewData.invariants.slice(0, 4).map((invariant) => `- ${invariant}`));
132
+ return lines;
133
+ }
134
+ export function compactComplexityReview(value, itemLimit = 8) {
135
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
136
+ return value;
137
+ }
138
+ const record = value;
139
+ const priorTruncation = complexityTruncation(record);
140
+ const items = Array.isArray(record.items) ? record.items.slice(0, itemLimit).map(compactComplexityItem) : [];
141
+ const invariants = Array.isArray(record.invariants) ? record.invariants.filter((entry) => typeof entry === "string").slice(0, 6) : [];
142
+ const truncation = { ...priorTruncation };
143
+ if (Array.isArray(record.items) && record.items.length > itemLimit) {
144
+ truncation.items = { total: priorTruncation.items?.total ?? record.items.length, returned: itemLimit };
145
+ }
146
+ if (Array.isArray(record.invariants) && record.invariants.length > 6) {
147
+ truncation.invariants = { total: priorTruncation.invariants?.total ?? record.invariants.length, returned: 6 };
148
+ }
149
+ return {
150
+ schemaVersion: record.schemaVersion,
151
+ phase: record.phase,
152
+ status: record.status,
153
+ blocking: record.blocking,
154
+ summary: record.summary,
155
+ items,
156
+ invariants,
157
+ truncation: Object.keys(truncation).length > 0 ? truncation : undefined
158
+ };
159
+ }
160
+ function review(phase, rawItems) {
161
+ const items = dedupeItems(rawItems).slice(0, 8);
162
+ const status = items.some((item) => item.severity === "review" || item.severity === "watch") ? "review" : "lean";
163
+ const summary = status === "lean"
164
+ ? "Lean already: no deterministic over-build signal fired; still prefer deletion, reuse, and native surface before adding code."
165
+ : `${items.length} complexity signal(s) need review; keep this advisory and preserve safety and verification.`;
166
+ return {
167
+ schemaVersion: 1,
168
+ phase,
169
+ status,
170
+ blocking: false,
171
+ summary,
172
+ items,
173
+ invariants: DEFAULT_INVARIANTS
174
+ };
175
+ }
176
+ function manifestPaths(paths) {
177
+ return uniqueSorted(paths.filter((filePath) => MANIFEST_PATH_RE.test(filePath)));
178
+ }
179
+ function dedupeItems(items) {
180
+ const seen = new Set();
181
+ const result = [];
182
+ for (const item of items) {
183
+ const key = [item.kind, item.severity, item.message, item.paths?.join("\0") ?? ""].join("\0");
184
+ if (seen.has(key)) {
185
+ continue;
186
+ }
187
+ seen.add(key);
188
+ result.push({
189
+ ...item,
190
+ paths: item.paths ? uniqueSorted(item.paths).slice(0, 12) : undefined
191
+ });
192
+ }
193
+ return result;
194
+ }
195
+ function compactComplexityItem(item) {
196
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
197
+ return item;
198
+ }
199
+ const record = item;
200
+ return {
201
+ kind: record.kind,
202
+ severity: record.severity,
203
+ message: record.message,
204
+ paths: Array.isArray(record.paths) ? record.paths.slice(0, 8) : undefined,
205
+ replacement: record.replacement,
206
+ rationale: record.rationale
207
+ };
208
+ }
209
+ function complexityTruncation(record) {
210
+ const truncation = record.truncation;
211
+ if (!truncation || typeof truncation !== "object" || Array.isArray(truncation)) {
212
+ return {};
213
+ }
214
+ const result = {};
215
+ for (const [key, value] of Object.entries(truncation)) {
216
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
217
+ continue;
218
+ }
219
+ const maybeEntry = value;
220
+ if (typeof maybeEntry.total === "number" && typeof maybeEntry.returned === "number") {
221
+ result[key] = { total: maybeEntry.total, returned: maybeEntry.returned };
222
+ }
223
+ }
224
+ return result;
225
+ }
226
+ //# sourceMappingURL=complexity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity.js","sourceRoot":"","sources":["../../src/query/complexity.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
+ const ADVISORY_UNINDEXED_FILE_PATTERN = /\.(?:avif|bmp|css|gif|ico|ini|jpe?g|jsonc?|less|lock|mdx?|otf|pcss|png|postcss|rst|sass|scss|svg|toml|ttf|txt|webp|woff2?|ya?ml)$/iu;
2
+ const ADVISORY_UNINDEXED_BASENAME_PATTERN = /(^|\/)(?:dockerfile|package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb)$/iu;
1
3
  export function postEditDecision(input) {
2
4
  const missingWorkflowCheckCount = input.workflowChecks.filter((check) => check.status === "missing").length;
3
5
  const missingDependencyCheckCount = input.dependencyChecks.filter((check) => check.status === "missing").length;
6
+ const blockingUnindexedEditedFiles = input.unindexedEditedFiles.filter((filePath) => !isAdvisoryUnindexedEditedFile(filePath));
7
+ const advisoryUnindexedEditedFiles = input.unindexedEditedFiles.filter((filePath) => isAdvisoryUnindexedEditedFile(filePath));
4
8
  const riskEscalationsCoveredByVerification = input.riskEscalations.length > 0 &&
5
9
  input.unplannedEditedFiles.length === 0 &&
6
10
  input.testsNotRun.length === 0 &&
@@ -24,7 +28,7 @@ export function postEditDecision(input) {
24
28
  : undefined,
25
29
  input.unplannedEditedFiles.length > 0 ? `${input.unplannedEditedFiles.length} edited file(s) outside planned scope` : undefined,
26
30
  input.unplannedChangedSymbols.length > 0 ? `${input.unplannedChangedSymbols.length} changed symbol(s) outside requested symbol target` : undefined,
27
- input.unindexedEditedFiles.length > 0 ? `${input.unindexedEditedFiles.length} changed-since-snapshot file(s) are not indexed` : undefined,
31
+ input.unindexedEditedFiles.length > 0 ? `${input.unindexedEditedFiles.length} changed-since-snapshot file(s) lack indexed source/symbol context` : undefined,
28
32
  input.symbolDeltas.some((delta) => delta.newSymbols.length > 0 || delta.removedSymbols.length > 0)
29
33
  ? `${input.symbolDeltas.reduce((sum, delta) => sum + delta.newSymbols.length + delta.removedSymbols.length, 0)} symbol delta(s) detected`
30
34
  : undefined,
@@ -71,7 +75,8 @@ export function postEditDecision(input) {
71
75
  headChanged: headChangedBlocking,
72
76
  unplannedEditedFiles: input.unplannedEditedFiles,
73
77
  unplannedChangedSymbols: input.unplannedChangedSymbols,
74
- unindexedEditedFiles: input.unindexedEditedFiles,
78
+ blockingUnindexedEditedFiles,
79
+ advisoryUnindexedEditedFiles,
75
80
  symbolDeltas: input.symbolDeltas,
76
81
  riskDeltas: input.riskDeltas,
77
82
  missingWorkflowCheckCount,
@@ -95,32 +100,38 @@ export function postEditDecision(input) {
95
100
  hasDegradedSnapshotTests
96
101
  };
97
102
  }
103
+ function isAdvisoryUnindexedEditedFile(filePath) {
104
+ return ADVISORY_UNINDEXED_FILE_PATTERN.test(filePath) || ADVISORY_UNINDEXED_BASENAME_PATTERN.test(filePath);
105
+ }
98
106
  function inspectClassification(verdict, input) {
99
107
  if (verdict !== "inspect") {
100
108
  return { mode: "none", reasons: [] };
101
109
  }
102
- const blockingReasons = [
110
+ const blockingReasonsWithoutQuality = [
103
111
  input.headChanged ? "snapshot commit changed" : undefined,
104
112
  input.worktreeDegradationReasons.length > 0 ? "worktree state unavailable" : undefined,
105
113
  input.unplannedEditedFiles.length > 0 ? "edited files outside planned scope" : undefined,
106
114
  input.unplannedChangedSymbols.length > 0 ? "changed symbols outside requested symbol target" : undefined,
107
- input.unindexedEditedFiles.length > 0 ? "edited files are not indexed" : undefined,
115
+ input.blockingUnindexedEditedFiles.length > 0 ? "source-like edited files are not indexed" : undefined,
108
116
  input.missingWorkflowCheckCount > 0 ? "required workflow checks missing" : undefined,
109
117
  input.missingDependencyCheckCount > 0 ? "required dependency checks missing" : undefined,
110
- input.quality?.level === "medium" || input.quality?.level === "low" ? "context quality is not high" : undefined,
111
118
  input.riskEscalationsNeedInspection ? "high-risk target lacks complete verification accounting" : undefined,
112
119
  input.waivedVerification.length > 0 ? "verification was waived" : undefined,
113
120
  input.noVerificationProofForEditedFiles ? "edited files have no credible verification evidence" : undefined
114
121
  ].filter((reason) => Boolean(reason));
122
+ const qualityBlockingReason = input.quality?.level === "low" ? "context quality is low" : input.quality?.level === "medium" && blockingReasonsWithoutQuality.length > 0 ? "context quality is not high" : undefined;
123
+ const blockingReasons = [...blockingReasonsWithoutQuality, qualityBlockingReason].filter((reason) => Boolean(reason));
115
124
  if (blockingReasons.length > 0) {
116
125
  return { mode: "blocking", reasons: blockingReasons };
117
126
  }
118
127
  const advisoryReasons = [
119
128
  !input.snapshot ? "no saved task snapshot" : undefined,
120
129
  input.snapshotAmbiguity ? "latest snapshot was ambiguous" : undefined,
130
+ input.advisoryUnindexedEditedFiles.length > 0 ? "edited non-source files lack symbol ranges" : undefined,
121
131
  input.hasDegradedSnapshotTests ? "planned snapshot tests have degraded provenance" : undefined,
122
132
  input.symbolDeltas.some((delta) => delta.newSymbols.length > 0 || delta.removedSymbols.length > 0) ? "symbol inventory changed" : undefined,
123
- input.riskDeltas.some((delta) => delta.delta > 0) ? "risk score changed but blocking risk checks are covered" : undefined
133
+ input.riskDeltas.some((delta) => delta.delta > 0) ? "risk score changed but blocking risk checks are covered" : undefined,
134
+ input.quality?.level === "medium" ? "context quality is medium" : undefined
124
135
  ].filter((reason) => Boolean(reason));
125
136
  return { mode: "advisory", reasons: advisoryReasons.length > 0 ? advisoryReasons : ["inspect is advisory; no blocking drift signal was found"] };
126
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/query/post-edit/decision.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/query/post-edit/decision.ts"],"names":[],"mappings":"AAaA,MAAM,+BAA+B,GACnC,qIAAqI,CAAC;AACxI,MAAM,mCAAmC,GAAG,kFAAkF,CAAC;AAe/H,MAAM,UAAU,gBAAgB,CAAC,KAyBhC;IACC,MAAM,yBAAyB,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC5G,MAAM,2BAA2B,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAChH,MAAM,4BAA4B,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/H,MAAM,4BAA4B,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9H,MAAM,oCAAoC,GACxC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAChC,KAAK,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC;QACvC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAC9B,KAAK,CAAC,6BAA6B;QACnC,yBAAyB,KAAK,CAAC;QAC/B,2BAA2B,KAAK,CAAC;QACjC,KAAK,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,MAAM,6BAA6B,GACjC,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC;IAC1G,MAAM,wBAAwB,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG;QACnB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3I,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAC7D,KAAK,CAAC,cAAc,CAAC,aAAa,KAAK,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC9F,KAAK,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzC,CAAC,CAAC,+BAA+B,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,iDAAiD;YAC7H,CAAC,CAAC,SAAS;QACb,KAAK,CAAC,WAAW;YACf,CAAC,CAAC,KAAK,CAAC,gBAAgB;gBACtB,CAAC,CAAC,2FAA2F;gBAC7F,CAAC,CAAC,iCAAiC;YACrC,CAAC,CAAC,SAAS;QACb,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,uCAAuC,CAAC,CAAC,CAAC,SAAS;QAC/H,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,MAAM,oDAAoD,CAAC,CAAC,CAAC,SAAS;QAClJ,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,oEAAoE,CAAC,CAAC,CAAC,SAAS;QAC5J,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAChG,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,2BAA2B;YACzI,CAAC,CAAC,SAAS;QACb,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,yBAAyB,CAAC,CAAC,CAAC,SAAS;QACtJ,yBAAyB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,qCAAqC,CAAC,CAAC,CAAC,SAAS;QAC7G,2BAA2B,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,2BAA2B,uCAAuC,CAAC,CAAC,CAAC,SAAS;QACnH,wBAAwB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,MAAM,kDAAkD,CAAC,CAAC,CAAC,SAAS;QAC9H,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,SAAS;QAC7E,6BAA6B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,mCAAmC,CAAC,CAAC,CAAC,SAAS;QAC9G,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,yCAAyC,CAAC,CAAC,CAAC,SAAS;QAC7H,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B;YAChG,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,SAAS;QACb,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,6CAA6C,CAAC,CAAC,CAAC,SAAS;QACxL,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,CAAC,SAAS;KAC5G,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACzE,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACnF,MAAM,OAAO,GACX,mBAAmB,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB;QAC/E,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;YACb,KAAK,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzC,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAChC,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;YACxC,yBAAyB,GAAG,CAAC;YAC7B,2BAA2B,GAAG,CAAC;YAC/B,wBAAwB;YACxB,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;YACnC,KAAK,CAAC,iCAAiC;YACvC,6BAA6B;YAC7B,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,QAAQ;YACjC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK;YAClC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC1D,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,UAAU,CAAC;IACrB,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE;QAC7C,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,0BAA0B,EAAE,KAAK,CAAC,0BAA0B;QAC5D,WAAW,EAAE,mBAAmB;QAChC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,4BAA4B;QAC5B,4BAA4B;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,yBAAyB;QACzB,2BAA2B;QAC3B,wBAAwB;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,6BAA6B;QAC7B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,iCAAiC,EAAE,KAAK,CAAC,iCAAiC;KAC3E,CAAC,CAAC;IACH,OAAO;QACL,YAAY;QACZ,OAAO;QACP,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;QAC/D,yBAAyB;QACzB,2BAA2B;QAC3B,oCAAoC;QACpC,6BAA6B;QAC7B,wBAAwB;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAgB;IACrD,OAAO,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAoC,EACpC,KAkBC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IACD,MAAM,6BAA6B,GAAG;QACpC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;QACzD,KAAK,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS;QACtF,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,SAAS;QACxF,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,SAAS;QACxG,KAAK,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,SAAS;QACtG,KAAK,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,SAAS;QACpF,KAAK,CAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,SAAS;QACxF,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,SAAS;QAC3G,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;QAC3E,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,CAAC,SAAS;KAC5G,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,qBAAqB,GACzB,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,QAAQ,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IACxL,MAAM,eAAe,GAAG,CAAC,GAAG,6BAA6B,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxI,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,eAAe,GAAG;QACtB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;QACtD,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,SAAS;QACxG,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,SAAS;QAC9F,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;QAC3I,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,SAAS;QACzH,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,yDAAyD,CAAC,EAAE,CAAC;AACnJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAoC,EAAE,WAAgC;IACjG,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC9E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { promises as fs } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { isTestPath } from "../language.js";
4
+ import { buildPostEditComplexityReview, formatComplexityReview } from "./complexity.js";
4
5
  import { groupDiffImpact, formatDiffGroups, formatGaps, indexGaps } from "./diff.js";
5
6
  import { clampInt, fitLinesToTokenBudget } from "./formatting.js";
6
7
  import { affectedWorkflowGraphEdges, testsFromGraphEdges } from "./graph.js";
@@ -74,12 +75,25 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
74
75
  const task = input.task ?? snapshot?.task ?? "Post-edit review";
75
76
  const effectiveTaskId = snapshot?.taskId ?? loadedSnapshot.latestTaskId ?? input.taskId;
76
77
  const changeType = input.changeType ?? snapshot?.changeType ?? "unknown";
77
- const reviewTargets = uniqueSorted([
78
- ...(editPaths.length > 0 ? editPaths : []),
78
+ // Priority order, then cap: actually-edited files must never be dropped
79
+ // in favor of alphabetically-earlier explicit inputs (uniqueSorted+slice
80
+ // did exactly that, silently shrinking verdict-relevant test accounting).
81
+ const reviewTargetPool = [
82
+ ...editPaths,
79
83
  ...explicitFiles,
80
84
  ...explicitSymbolFiles,
81
85
  ...(editPaths.length === 0 && explicitFiles.length === 0 && explicitSymbolFiles.length === 0 && snapshot ? snapshot.plannedFiles.slice(0, limit) : [])
82
- ]).slice(0, Math.max(limit, 3));
86
+ ];
87
+ const seenReviewTargets = new Set();
88
+ const orderedReviewTargets = [];
89
+ for (const target of reviewTargetPool) {
90
+ if (!seenReviewTargets.has(target)) {
91
+ seenReviewTargets.add(target);
92
+ orderedReviewTargets.push(target);
93
+ }
94
+ }
95
+ const reviewTargets = orderedReviewTargets.slice(0, Math.max(limit, 3));
96
+ const droppedReviewTargets = orderedReviewTargets.length - reviewTargets.length;
83
97
  const context = await contextPackQuery(session, {
84
98
  task,
85
99
  files: reviewTargets,
@@ -263,6 +277,14 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
263
277
  riskEscalationsNeedInspection,
264
278
  riskEscalations
265
279
  });
280
+ const complexityReview = buildPostEditComplexityReview({
281
+ changedSinceSnapshot,
282
+ unplannedEditedFiles,
283
+ plannedScope,
284
+ testsNotRun,
285
+ noVerificationProofForEditedFiles,
286
+ hasActualEditedFiles
287
+ });
266
288
  const quality = contextData.quality;
267
289
  const sessionMemoryPointer = priorSessionMemory
268
290
  ? {
@@ -333,6 +355,25 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
333
355
  `Inspect classification: ${inspectMode}; authority ${completionAuthority}`,
334
356
  semanticReviewContext ? formatPostEditSemanticReviewContext(semanticReviewContext) : undefined,
335
357
  `Outcome record: ${outcomePath ?? "not persisted"}`,
358
+ droppedReviewTargets > 0
359
+ ? `Review scope: first ${reviewTargets.length} of ${orderedReviewTargets.length} candidate targets (edited files prioritized); ${droppedReviewTargets} not analyzed — raise limit to widen.`
360
+ : undefined,
361
+ // Verdict-relevant summaries render BEFORE the bulk sections: small
362
+ // token budgets truncate from the end, and a hook consuming this text
363
+ // needs the drift reasons and next actions to survive, not the
364
+ // thirtieth changed-file entry.
365
+ "",
366
+ "Drift reasons:",
367
+ ...(driftReasons.length > 0 ? driftReasons.map((reason) => `- ${reason}`) : ["- none"]),
368
+ inspectReasons.length > 0 ? "" : undefined,
369
+ inspectReasons.length > 0 ? "Inspect reasons:" : undefined,
370
+ ...inspectReasons.map((reason) => `- ${reason}`),
371
+ "",
372
+ "Next actions:",
373
+ ...nextActions.map((action) => `- ${action}`),
374
+ missedLikelyTests.length > 0 ? `Tests still unaccounted for: ${missedLikelyTests.slice(0, 8).map((test) => test.path).join(", ")}` : "Tests still unaccounted for: none",
375
+ "",
376
+ ...formatComplexityReview(complexityReview),
336
377
  "",
337
378
  "Changed since snapshot:",
338
379
  ...(changedSinceSnapshot.length > 0 ? changedSinceSnapshot.slice(0, 30).map(formatChangedEntry) : ["- none detected"]),
@@ -347,7 +388,7 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
347
388
  snapshot
348
389
  ? snapshot.origin === "hook-implicit"
349
390
  ? "- Planned edit targets: none declared (implicit baseline); call change_plan with saveSnapshot=true to declare scope and tests"
350
- : `- Planned edit targets: ${plannedScope.slice(0, 20).join(", ") || "none"}`
391
+ : `- Planned edit targets: ${plannedScope.slice(0, 20).join(", ") || "none"}${plannedScope.length > 20 ? `; +${plannedScope.length - 20} more` : ""}`
351
392
  : "- Planned edit targets: unavailable",
352
393
  `- Actual edited files since snapshot: ${editPaths.slice(0, 30).join(", ") || "none"}`,
353
394
  unplannedEditedFiles.length > 0 ? `- Unplanned edited files: ${unplannedEditedFiles.join(", ")}` : "- No unplanned edits detected against the saved planned scope.",
@@ -357,7 +398,9 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
357
398
  : requestedSymbolNames.size > 0
358
399
  ? "- No changed symbols outside the requested symbol target detected."
359
400
  : undefined,
360
- snapshot && plannedButUntouchedFiles.length > 0 ? `- Planned targets not touched yet: ${plannedButUntouchedFiles.slice(0, 12).join(", ")}` : undefined,
401
+ snapshot && plannedButUntouchedFiles.length > 0
402
+ ? `- Planned targets not touched yet: ${plannedButUntouchedFiles.slice(0, 12).join(", ")}${plannedButUntouchedFiles.length > 12 ? `; +${plannedButUntouchedFiles.length - 12} more` : ""}`
403
+ : undefined,
361
404
  headChanged ? `- Snapshot commit ${snapshot?.dirtyBaseline.headCommit ?? "none"} differs from current ${freshness.headCommit ?? "none"}` : undefined,
362
405
  "",
363
406
  "Symbol delta:",
@@ -401,16 +444,6 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
401
444
  "",
402
445
  "Verification ledger:",
403
446
  ...formatVerificationLedger(dataVerificationLedger),
404
- missedLikelyTests.length > 0 ? `Tests still unaccounted for: ${missedLikelyTests.slice(0, 8).map((test) => test.path).join(", ")}` : "Tests still unaccounted for: none",
405
- "",
406
- "Drift reasons:",
407
- ...(driftReasons.length > 0 ? driftReasons.map((reason) => `- ${reason}`) : ["- none"]),
408
- inspectReasons.length > 0 ? "" : undefined,
409
- inspectReasons.length > 0 ? "Inspect reasons:" : undefined,
410
- ...inspectReasons.map((reason) => `- ${reason}`),
411
- "",
412
- "Next actions:",
413
- ...nextActions.map((action) => `- ${action}`),
414
447
  "",
415
448
  "Known gaps:",
416
449
  ...formatGaps(uniqueSorted([...(contextData.gaps ?? []), ...indexGaps(index, freshness, unindexedEditedFiles)]))
@@ -502,6 +535,7 @@ async function postEditReviewQueryInternal(sessionInput, input, options, interna
502
535
  workflows: limitArray(workflows, 12),
503
536
  workflowChecks: limitArray(workflowChecks, 20),
504
537
  dependencyChecks: limitArray(dependencyChecks, 30),
538
+ complexityReview,
505
539
  context: compactContextData(context.data),
506
540
  quality,
507
541
  semanticReviewContext,