wabachi 0.2.1 → 0.3.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 (50) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/README.md +5 -0
  3. package/dist/architecture/cli.js +47 -32
  4. package/dist/architecture/cli.js.map +1 -1
  5. package/dist/architecture/documentation/react-flow.d.ts +23 -0
  6. package/dist/architecture/documentation/react-flow.js +436 -0
  7. package/dist/architecture/documentation/react-flow.js.map +1 -0
  8. package/dist/architecture/documentation/site.d.ts +10 -13
  9. package/dist/architecture/documentation/site.js +58 -24
  10. package/dist/architecture/documentation/site.js.map +1 -1
  11. package/dist/architecture/projection/react-flow.d.ts +96 -0
  12. package/dist/architecture/projection/react-flow.js +388 -0
  13. package/dist/architecture/projection/react-flow.js.map +1 -0
  14. package/dist/cli.js +1 -1
  15. package/dist/command-contract.d.ts +3 -2
  16. package/dist/command-contract.js +6 -5
  17. package/dist/command-contract.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/runtime/repository.d.ts +3 -0
  22. package/dist/runtime/repository.js +140 -16
  23. package/dist/runtime/repository.js.map +1 -1
  24. package/dist/runtime/run.js +3 -1
  25. package/dist/runtime/run.js.map +1 -1
  26. package/dist/working-set/codec.d.ts +7 -0
  27. package/dist/working-set/codec.js +53 -0
  28. package/dist/working-set/codec.js.map +1 -0
  29. package/dist/working-set/conflicts.d.ts +46 -0
  30. package/dist/working-set/conflicts.js +97 -0
  31. package/dist/working-set/conflicts.js.map +1 -0
  32. package/dist/working-set/derive.d.ts +34 -0
  33. package/dist/working-set/derive.js +634 -0
  34. package/dist/working-set/derive.js.map +1 -0
  35. package/dist/working-set/index.d.ts +3 -0
  36. package/dist/working-set/index.js +3 -0
  37. package/dist/working-set/index.js.map +1 -0
  38. package/dist/working-set/model.d.ts +93 -0
  39. package/dist/working-set/model.js +204 -0
  40. package/dist/working-set/model.js.map +1 -0
  41. package/dist/working-set/quality.d.ts +201 -0
  42. package/dist/working-set/quality.js +447 -0
  43. package/dist/working-set/quality.js.map +1 -0
  44. package/dist/working-set/seeds.d.ts +135 -0
  45. package/dist/working-set/seeds.js +433 -0
  46. package/dist/working-set/seeds.js.map +1 -0
  47. package/docs/USAGE.md +30 -22
  48. package/docs/examples/minimal-canon.json +24 -0
  49. package/package.json +10 -3
  50. package/skills/wabachi/SKILL.md +10 -1
@@ -0,0 +1,447 @@
1
+ import { validateCandidateWorkingSet, } from "./model.js";
2
+ /** Version of the pinned, offline Candidate Working Set quality corpus. */
3
+ export const WORKING_SET_QUALITY_CORPUS_SCHEMA_VERSION = 1;
4
+ export const WORKING_SET_QUALITY_CORPUS_KIND = "working-set-quality-corpus";
5
+ export const WORKING_SET_QUALITY_REPORT_KIND = "working-set-quality-report";
6
+ const QUALITY_TARGET_KINDS = ["file", "symbol", "test"];
7
+ const MAX_CORPUS_CASES = 128;
8
+ const MAX_CORPUS_ID_LENGTH = 256;
9
+ const MAX_CASE_ID_LENGTH = 256;
10
+ const MAX_DESCRIPTION_LENGTH = 1024;
11
+ const MAX_TARGET_LOCATOR_LENGTH = 1024;
12
+ function isRecord(value) {
13
+ return value !== null && typeof value === "object" && !Array.isArray(value);
14
+ }
15
+ function assertAllowedKeys(value, keys, label) {
16
+ const allowed = new Set(keys);
17
+ for (const key of Object.keys(value)) {
18
+ if (!allowed.has(key))
19
+ throw new TypeError(`${label} contains unknown field: ${key}`);
20
+ }
21
+ }
22
+ function normalizeText(value, label, maxLength, allowWhitespace = false) {
23
+ if (typeof value !== "string")
24
+ throw new TypeError(`${label} must be a string`);
25
+ const normalized = value.normalize("NFC");
26
+ if (normalized.length === 0 ||
27
+ normalized.length > maxLength ||
28
+ /[\p{Cc}\p{Cf}\p{Cs}]/u.test(normalized) ||
29
+ (!allowWhitespace && /\p{White_Space}/u.test(normalized))) {
30
+ throw new TypeError(`${label} is malformed or exceeds its bound`);
31
+ }
32
+ return normalized;
33
+ }
34
+ function normalizeRevision(value, label) {
35
+ const revision = normalizeText(value, label, 64);
36
+ if (!/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/iu.test(revision)) {
37
+ throw new TypeError(`${label} must be a full immutable hexadecimal revision`);
38
+ }
39
+ return revision.toLowerCase();
40
+ }
41
+ function normalizeRepository(value) {
42
+ if (!isRecord(value))
43
+ throw new TypeError("quality repository must be an object");
44
+ assertAllowedKeys(value, ["repositoryHost", "repositoryId", "repository"], "quality repository");
45
+ return Object.freeze({
46
+ repositoryHost: normalizeText(value.repositoryHost, "quality repository repositoryHost", 256),
47
+ repositoryId: normalizeText(value.repositoryId, "quality repository repositoryId", 256),
48
+ repository: normalizeText(value.repository, "quality repository repository", 256),
49
+ });
50
+ }
51
+ function sameRepository(left, right) {
52
+ return (left.repositoryHost === right.repositoryHost &&
53
+ left.repositoryId === right.repositoryId &&
54
+ left.repository === right.repository);
55
+ }
56
+ function compareText(left, right) {
57
+ if (left < right)
58
+ return -1;
59
+ if (left > right)
60
+ return 1;
61
+ return 0;
62
+ }
63
+ function targetKey(target) {
64
+ return `${target.kind}\u0000${target.locator}`;
65
+ }
66
+ function compareTargets(left, right) {
67
+ return compareText(targetKey(left), targetKey(right));
68
+ }
69
+ function normalizeTarget(value, label) {
70
+ if (!isRecord(value))
71
+ throw new TypeError(`${label} must be an object`);
72
+ assertAllowedKeys(value, ["kind", "locator"], label);
73
+ if (!QUALITY_TARGET_KINDS.includes(value.kind)) {
74
+ throw new TypeError(`${label} must name a concrete target`);
75
+ }
76
+ return Object.freeze({
77
+ kind: value.kind,
78
+ locator: normalizeText(value.locator, `${label} locator`, MAX_TARGET_LOCATOR_LENGTH, true),
79
+ });
80
+ }
81
+ function normalizeTargetList(value, label) {
82
+ if (!Array.isArray(value))
83
+ throw new TypeError(`${label} must be an array`);
84
+ const unique = new Map();
85
+ for (const [index, target] of value.entries()) {
86
+ const normalized = normalizeTarget(target, `${label} ${index}`);
87
+ const key = targetKey(normalized);
88
+ if (unique.has(key))
89
+ throw new TypeError(`${label} contains duplicate target: ${key}`);
90
+ unique.set(key, normalized);
91
+ }
92
+ return Object.freeze([...unique.values()].sort(compareTargets));
93
+ }
94
+ function targetMap(targets) {
95
+ return new Map(targets.map((target) => [targetKey(target), target]));
96
+ }
97
+ function difference(left, right) {
98
+ const rightKeys = new Set(right.map(targetKey));
99
+ return left.filter((target) => !rightKeys.has(targetKey(target)));
100
+ }
101
+ function intersection(left, right) {
102
+ const rightKeys = new Set(right.map(targetKey));
103
+ return left.filter((target) => rightKeys.has(targetKey(target)));
104
+ }
105
+ function rate(count, denominator) {
106
+ return denominator === 0 ? 0 : Math.round((count / denominator) * 10000) / 10000;
107
+ }
108
+ function normalizeOptionalTargets(value, label, required) {
109
+ if (value === undefined && !required)
110
+ return undefined;
111
+ return normalizeTargetList(value, label);
112
+ }
113
+ function normalizeBehavioralProxies(value) {
114
+ if (value === undefined)
115
+ return undefined;
116
+ if (!isRecord(value))
117
+ throw new TypeError("quality behavioralProxies must be an object");
118
+ assertAllowedKeys(value, ["observedExpansionTargets", "observedReadTargets", "observedVerificationTargets"], "quality behavioralProxies");
119
+ return Object.freeze({
120
+ observedExpansionTargets: normalizeOptionalTargets(value.observedExpansionTargets, "observedExpansionTargets", false),
121
+ observedReadTargets: normalizeOptionalTargets(value.observedReadTargets, "observedReadTargets", false),
122
+ observedVerificationTargets: normalizeOptionalTargets(value.observedVerificationTargets, "observedVerificationTargets", false),
123
+ });
124
+ }
125
+ function normalizePruning(value) {
126
+ if (value === undefined)
127
+ return undefined;
128
+ if (!isRecord(value))
129
+ throw new TypeError("quality pruning must be an object");
130
+ assertAllowedKeys(value, ["beforeTargets", "afterTargets"], "quality pruning");
131
+ const beforeTargets = normalizeTargetList(value.beforeTargets, "pruning beforeTargets");
132
+ const afterTargets = normalizeTargetList(value.afterTargets, "pruning afterTargets");
133
+ if (difference(afterTargets, beforeTargets).length > 0) {
134
+ throw new TypeError("pruning afterTargets must be a subset of beforeTargets");
135
+ }
136
+ return Object.freeze({ beforeTargets, afterTargets });
137
+ }
138
+ function normalizeQualityCase(value, repository, revision) {
139
+ if (!isRecord(value))
140
+ throw new TypeError("quality case must be an object");
141
+ assertAllowedKeys(value, [
142
+ "caseId",
143
+ "description",
144
+ "revision",
145
+ "candidate",
146
+ "initialTargets",
147
+ "legitimateTargets",
148
+ "expansionTargets",
149
+ "verificationTargets",
150
+ "pruning",
151
+ "behavioralProxies",
152
+ ], "quality case");
153
+ const caseId = normalizeText(value.caseId, "quality case caseId", MAX_CASE_ID_LENGTH);
154
+ const description = normalizeText(value.description, "quality case description", MAX_DESCRIPTION_LENGTH, true);
155
+ const caseRevision = normalizeRevision(value.revision, `quality case ${caseId} revision`);
156
+ if (caseRevision !== revision)
157
+ throw new TypeError(`quality case ${caseId} is not bound to corpus revision`);
158
+ const candidate = validateCandidateWorkingSet(value.candidate);
159
+ if (candidate.revision !== revision)
160
+ throw new TypeError(`quality case ${caseId} candidate revision is not pinned`);
161
+ if (!sameRepository(candidate.repository, repository)) {
162
+ throw new TypeError(`quality case ${caseId} candidate repository does not match corpus repository`);
163
+ }
164
+ const initialTargets = normalizeTargetList(value.initialTargets, `quality case ${caseId} initialTargets`);
165
+ const legitimateTargets = normalizeTargetList(value.legitimateTargets, `quality case ${caseId} legitimateTargets`);
166
+ const expansionTargets = normalizeTargetList(value.expansionTargets, `quality case ${caseId} expansionTargets`);
167
+ if (difference(expansionTargets, legitimateTargets).length > 0) {
168
+ throw new TypeError(`quality case ${caseId} expansionTargets must be legitimate context`);
169
+ }
170
+ if (intersection(expansionTargets, initialTargets).length > 0) {
171
+ throw new TypeError(`quality case ${caseId} expansionTargets must be outside the initial set`);
172
+ }
173
+ const verificationTargets = normalizeOptionalTargets(value.verificationTargets, `quality case ${caseId} verificationTargets`, false);
174
+ if (verificationTargets?.some((target) => target.kind !== "test")) {
175
+ throw new TypeError(`quality case ${caseId} verificationTargets must be test targets`);
176
+ }
177
+ return Object.freeze({
178
+ caseId,
179
+ description,
180
+ revision: caseRevision,
181
+ candidate,
182
+ initialTargets,
183
+ legitimateTargets,
184
+ expansionTargets,
185
+ verificationTargets,
186
+ pruning: normalizePruning(value.pruning),
187
+ behavioralProxies: normalizeBehavioralProxies(value.behavioralProxies),
188
+ });
189
+ }
190
+ /** Parses and validates an immutable-revision-bound quality corpus manifest. */
191
+ export function parseWorkingSetQualityCorpus(value) {
192
+ if (!isRecord(value))
193
+ throw new TypeError("quality corpus must be an object");
194
+ assertAllowedKeys(value, ["kind", "schemaVersion", "corpusId", "repository", "revision", "cases"], "quality corpus");
195
+ if (value.kind !== undefined && value.kind !== WORKING_SET_QUALITY_CORPUS_KIND) {
196
+ throw new TypeError("quality corpus kind is unsupported");
197
+ }
198
+ if (value.schemaVersion !== undefined && value.schemaVersion !== WORKING_SET_QUALITY_CORPUS_SCHEMA_VERSION) {
199
+ throw new TypeError("quality corpus schema version is unsupported");
200
+ }
201
+ const corpusId = normalizeText(value.corpusId, "quality corpus corpusId", MAX_CORPUS_ID_LENGTH);
202
+ const repository = normalizeRepository(value.repository);
203
+ const revision = normalizeRevision(value.revision, "quality corpus revision");
204
+ if (!Array.isArray(value.cases))
205
+ throw new TypeError("quality corpus cases must be an array");
206
+ if (value.cases.length > MAX_CORPUS_CASES)
207
+ throw new TypeError("quality corpus cases exceed their bound");
208
+ const cases = value.cases.map((entry) => normalizeQualityCase(entry, repository, revision));
209
+ const caseIds = new Set();
210
+ for (const qualityCase of cases) {
211
+ if (caseIds.has(qualityCase.caseId))
212
+ throw new TypeError(`quality corpus contains duplicate case: ${qualityCase.caseId}`);
213
+ caseIds.add(qualityCase.caseId);
214
+ }
215
+ cases.sort((left, right) => compareText(left.caseId, right.caseId));
216
+ return Object.freeze({
217
+ kind: WORKING_SET_QUALITY_CORPUS_KIND,
218
+ schemaVersion: WORKING_SET_QUALITY_CORPUS_SCHEMA_VERSION,
219
+ corpusId,
220
+ repository,
221
+ revision,
222
+ cases: Object.freeze(cases),
223
+ });
224
+ }
225
+ /** Alias for callers that construct a corpus in memory rather than parse JSON. */
226
+ export const createWorkingSetQualityCorpus = parseWorkingSetQualityCorpus;
227
+ function metricForTargets(targets, denominator) {
228
+ return Object.freeze({
229
+ count: targets.length,
230
+ denominator,
231
+ rate: rate(targets.length, denominator),
232
+ targets: Object.freeze([...targets]),
233
+ });
234
+ }
235
+ function unavailable(reason) {
236
+ return Object.freeze({ available: false, reason });
237
+ }
238
+ function isProviderArtifact(artifact) {
239
+ return artifact === "provider" || artifact.startsWith("provider-");
240
+ }
241
+ function concreteCandidateTargets(candidate) {
242
+ const unique = new Map();
243
+ for (const entry of candidate.entries) {
244
+ if (entry.target.kind !== "unresolved")
245
+ unique.set(targetKey(entry.target), entry.target);
246
+ }
247
+ return [...unique.values()].sort(compareTargets);
248
+ }
249
+ function providerMetric(candidate) {
250
+ const concreteEntries = candidate.entries.filter((entry) => entry.target.kind !== "unresolved");
251
+ const providerEntries = concreteEntries.filter((entry) => entry.evidence.some(({ artifact }) => isProviderArtifact(artifact)));
252
+ if (providerEntries.length === 0)
253
+ return unavailable("candidate artifact has no provider attribution evidence");
254
+ const providerTargets = new Map();
255
+ for (const entry of providerEntries)
256
+ providerTargets.set(targetKey(entry.target), entry.target);
257
+ return Object.freeze({
258
+ available: true,
259
+ candidateEntryCount: concreteEntries.length,
260
+ providerAttributedEntryCount: providerEntries.length,
261
+ providerAttributedTargetCount: providerTargets.size,
262
+ contributionRate: rate(providerEntries.length, concreteEntries.length),
263
+ });
264
+ }
265
+ function verificationMetric(qualityCase, candidateTargets) {
266
+ const expectedTargets = qualityCase.verificationTargets;
267
+ if (expectedTargets === undefined)
268
+ return unavailable("corpus case has no verification relevance labels");
269
+ const candidateVerificationTargets = candidateTargets.filter((target) => target.kind === "test");
270
+ const relevantTargets = intersection(candidateVerificationTargets, expectedTargets);
271
+ const missingTargets = difference(expectedTargets, candidateVerificationTargets);
272
+ const irrelevantTargets = difference(candidateVerificationTargets, expectedTargets);
273
+ return Object.freeze({
274
+ available: true,
275
+ expectedCount: expectedTargets.length,
276
+ candidateCount: candidateVerificationTargets.length,
277
+ relevantCount: relevantTargets.length,
278
+ missingCount: missingTargets.length,
279
+ irrelevantCount: irrelevantTargets.length,
280
+ recall: rate(relevantTargets.length, expectedTargets.length),
281
+ precision: rate(relevantTargets.length, candidateVerificationTargets.length),
282
+ });
283
+ }
284
+ function pruningMetric(qualityCase, legitimateTargets) {
285
+ const pruning = qualityCase.pruning;
286
+ if (pruning === undefined)
287
+ return unavailable("corpus case has no before/after pruning evidence");
288
+ const removedTargets = difference(pruning.beforeTargets, pruning.afterTargets);
289
+ const overIncludedBeforePruning = difference(pruning.beforeTargets, legitimateTargets);
290
+ return Object.freeze({
291
+ available: true,
292
+ beforeCount: pruning.beforeTargets.length,
293
+ afterCount: pruning.afterTargets.length,
294
+ removedCount: removedTargets.length,
295
+ removedTargets: Object.freeze([...removedTargets]),
296
+ legitimateRemovedCount: intersection(removedTargets, legitimateTargets).length,
297
+ overIncludedRemovedCount: intersection(removedTargets, overIncludedBeforePruning).length,
298
+ });
299
+ }
300
+ function behavioralMetric(observedTargets, candidateTargets, legitimateTargets) {
301
+ if (observedTargets === undefined)
302
+ return unavailable("corpus case has no tagged behavioral observation");
303
+ return Object.freeze({
304
+ available: true,
305
+ observedCount: observedTargets.length,
306
+ observedTargets: Object.freeze([...observedTargets]),
307
+ candidateOverlapCount: intersection(observedTargets, candidateTargets).length,
308
+ legitimateOverlapCount: intersection(observedTargets, legitimateTargets).length,
309
+ outsideLegitimateCount: difference(observedTargets, legitimateTargets).length,
310
+ });
311
+ }
312
+ function measureCase(qualityCase) {
313
+ const candidateTargets = concreteCandidateTargets(qualityCase.candidate);
314
+ const missingLegitimateContext = difference(qualityCase.legitimateTargets, candidateTargets);
315
+ const missingExpansions = difference(qualityCase.expansionTargets, candidateTargets);
316
+ const overIncluded = difference(candidateTargets, qualityCase.legitimateTargets);
317
+ const unresolvedCount = qualityCase.candidate.entries.filter((entry) => entry.state === "unresolved").length;
318
+ const providerContribution = providerMetric(qualityCase.candidate);
319
+ const behavioral = qualityCase.behavioralProxies;
320
+ return Object.freeze({
321
+ caseId: qualityCase.caseId,
322
+ description: qualityCase.description,
323
+ revision: qualityCase.revision,
324
+ workingSetId: qualityCase.candidate.workingSetId,
325
+ objective: Object.freeze({
326
+ initialSetSize: Object.freeze({ count: qualityCase.initialTargets.length }),
327
+ missingLegitimateContext: metricForTargets(missingLegitimateContext, qualityCase.legitimateTargets.length),
328
+ missingExpansions: metricForTargets(missingExpansions, qualityCase.expansionTargets.length),
329
+ overInclusion: metricForTargets(overIncluded, candidateTargets.length),
330
+ unresolvedConflictRate: Object.freeze({
331
+ unresolvedCount,
332
+ candidateEntryCount: qualityCase.candidate.entries.length,
333
+ rate: rate(unresolvedCount, qualityCase.candidate.entries.length),
334
+ }),
335
+ pruningEffect: pruningMetric(qualityCase, qualityCase.legitimateTargets),
336
+ providerContribution,
337
+ verificationRelevance: verificationMetric(qualityCase, candidateTargets),
338
+ }),
339
+ behavioralProxies: Object.freeze({
340
+ expansionHistory: behavioralMetric(behavioral?.observedExpansionTargets, candidateTargets, qualityCase.legitimateTargets),
341
+ readHistory: behavioralMetric(behavioral?.observedReadTargets, candidateTargets, qualityCase.legitimateTargets),
342
+ verificationHistory: behavioralMetric(behavioral?.observedVerificationTargets, candidateTargets, qualityCase.legitimateTargets),
343
+ }),
344
+ });
345
+ }
346
+ function sumAvailable(metrics) {
347
+ return metrics.filter((metric) => metric.available);
348
+ }
349
+ function buildCoreReport(corpus) {
350
+ const cases = corpus.cases.map(measureCase);
351
+ const objectives = cases.map(({ objective }) => objective);
352
+ const pruning = sumAvailable(objectives.map(({ pruningEffect }) => pruningEffect));
353
+ const providers = sumAvailable(objectives.map(({ providerContribution }) => providerContribution));
354
+ const verification = sumAvailable(objectives.map(({ verificationRelevance }) => verificationRelevance));
355
+ const proxies = cases.map(({ behavioralProxies }) => behavioralProxies);
356
+ const expansionHistory = sumAvailable(proxies.map(({ expansionHistory: metric }) => metric));
357
+ const readHistory = sumAvailable(proxies.map(({ readHistory: metric }) => metric));
358
+ const verificationHistory = sumAvailable(proxies.map(({ verificationHistory: metric }) => metric));
359
+ const unresolvedConflictCount = objectives.reduce((sum, objective) => sum + objective.unresolvedConflictRate.unresolvedCount, 0);
360
+ const unresolvedConflictDenominator = objectives.reduce((sum, objective) => sum + objective.unresolvedConflictRate.candidateEntryCount, 0);
361
+ const providerCandidateEntryCount = providers.reduce((sum, metric) => sum + metric.candidateEntryCount, 0);
362
+ const providerAttributedEntryCount = providers.reduce((sum, metric) => sum + metric.providerAttributedEntryCount, 0);
363
+ return {
364
+ kind: WORKING_SET_QUALITY_REPORT_KIND,
365
+ schemaVersion: WORKING_SET_QUALITY_CORPUS_SCHEMA_VERSION,
366
+ corpusId: corpus.corpusId,
367
+ repository: corpus.repository,
368
+ revision: corpus.revision,
369
+ cases: Object.freeze(cases),
370
+ behavioralProxies: {
371
+ summary: {
372
+ expansionHistoryCasesWithEvidence: expansionHistory.length,
373
+ expansionHistoryObservedCount: expansionHistory.reduce((sum, metric) => sum + metric.observedCount, 0),
374
+ readHistoryCasesWithEvidence: readHistory.length,
375
+ readHistoryObservedCount: readHistory.reduce((sum, metric) => sum + metric.observedCount, 0),
376
+ verificationHistoryCasesWithEvidence: verificationHistory.length,
377
+ verificationHistoryObservedCount: verificationHistory.reduce((sum, metric) => sum + metric.observedCount, 0),
378
+ },
379
+ },
380
+ objective: {
381
+ summary: {
382
+ caseCount: cases.length,
383
+ initialSetSizeTotal: objectives.reduce((sum, objective) => sum + objective.initialSetSize.count, 0),
384
+ missingLegitimateContextCount: objectives.reduce((sum, objective) => sum + objective.missingLegitimateContext.count, 0),
385
+ missingExpansionCount: objectives.reduce((sum, objective) => sum + objective.missingExpansions.count, 0),
386
+ overInclusionCount: objectives.reduce((sum, objective) => sum + objective.overInclusion.count, 0),
387
+ unresolvedConflictCount,
388
+ unresolvedConflictDenominator,
389
+ unresolvedConflictRate: rate(unresolvedConflictCount, unresolvedConflictDenominator),
390
+ pruningCasesWithEvidence: pruning.length,
391
+ pruningBeforeCount: pruning.reduce((sum, metric) => sum + metric.beforeCount, 0),
392
+ pruningAfterCount: pruning.reduce((sum, metric) => sum + metric.afterCount, 0),
393
+ pruningRemovedCount: pruning.reduce((sum, metric) => sum + metric.removedCount, 0),
394
+ providerCasesWithEvidence: providers.length,
395
+ providerCandidateEntryCount,
396
+ providerAttributedEntryCount,
397
+ providerAttributedTargetCount: providers.reduce((sum, metric) => sum + metric.providerAttributedTargetCount, 0),
398
+ providerContributionRate: rate(providerAttributedEntryCount, providerCandidateEntryCount),
399
+ verificationCasesWithEvidence: verification.length,
400
+ verificationExpectedCount: verification.reduce((sum, metric) => sum + metric.expectedCount, 0),
401
+ verificationCandidateCount: verification.reduce((sum, metric) => sum + metric.candidateCount, 0),
402
+ verificationRelevantCount: verification.reduce((sum, metric) => sum + metric.relevantCount, 0),
403
+ verificationRecall: rate(verification.reduce((sum, metric) => sum + metric.relevantCount, 0), verification.reduce((sum, metric) => sum + metric.expectedCount, 0)),
404
+ verificationPrecision: rate(verification.reduce((sum, metric) => sum + metric.relevantCount, 0), verification.reduce((sum, metric) => sum + metric.candidateCount, 0)),
405
+ },
406
+ },
407
+ };
408
+ }
409
+ function stableSerialize(value) {
410
+ if (Array.isArray(value))
411
+ return `[${value.map((entry) => stableSerialize(entry)).join(",")}]`;
412
+ if (isRecord(value)) {
413
+ return `{${Object.keys(value)
414
+ .sort(compareText)
415
+ .map((key) => `${JSON.stringify(key)}:${stableSerialize(value[key])}`)
416
+ .join(",")}}`;
417
+ }
418
+ const serialized = JSON.stringify(value);
419
+ if (serialized === undefined)
420
+ throw new TypeError("quality value is not serializable");
421
+ return serialized;
422
+ }
423
+ /** Serializes a quality report with recursively sorted object keys. */
424
+ export function serializeWorkingSetQualityReport(report) {
425
+ return `${stableSerialize(report)}\n`;
426
+ }
427
+ /**
428
+ * Measures only the supplied artifacts and labels. It never derives, prunes,
429
+ * mutates, or promotes behavioral observations into Candidate Working Set data.
430
+ */
431
+ export function measureWorkingSetQuality(value) {
432
+ const corpus = parseWorkingSetQualityCorpus(value);
433
+ const first = buildCoreReport(corpus);
434
+ const second = buildCoreReport(corpus);
435
+ const repeatability = Object.freeze({
436
+ available: true,
437
+ runs: 2,
438
+ identical: stableSerialize(first) === stableSerialize(second),
439
+ });
440
+ return Object.freeze({
441
+ ...first,
442
+ objective: Object.freeze({ ...first.objective, repeatability }),
443
+ });
444
+ }
445
+ /** Descriptive alias for callers measuring Candidate Working Set artifacts. */
446
+ export const measureCandidateWorkingSetQuality = measureWorkingSetQuality;
447
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/working-set/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import { type RepositoryMapping, type RepositoryMappingInput } from "../architecture/canon/repository-mappings.js";
2
+ import type { CorrelationResult } from "../runtime/correlation.js";
3
+ import type { ResolvedRepository } from "../runtime/provider.js";
4
+ import type { RepositoryIdentity, WorkingSetEvidenceReference, WorkingSetTarget } from "./model.js";
5
+ /** Version of the bounded task and entrypoint seed contract. */
6
+ export declare const WORKING_SET_SEED_SCHEMA_VERSION: 1;
7
+ export type WorkingSetSeedSchemaVersion = typeof WORKING_SET_SEED_SCHEMA_VERSION;
8
+ export declare const WORKING_SET_SEED_KIND: "working-set-seeds";
9
+ export declare const WORKING_SET_SEED_RESOLUTION_KIND: "working-set-seed-resolution";
10
+ export declare const WORKING_SET_SEED_KINDS: readonly ["path", "symbol-export", "architecture-component"];
11
+ export type WorkingSetSeedKind = (typeof WORKING_SET_SEED_KINDS)[number];
12
+ /** V1 intent metadata is an identifier, not a task description or authority. */
13
+ export declare const WORKING_SET_TASK_INTENTS: readonly ["implement", "investigate", "verify"];
14
+ export type WorkingSetTaskIntent = (typeof WORKING_SET_TASK_INTENTS)[number];
15
+ export declare const WORKING_SET_SEED_LIMITS: Readonly<{
16
+ maxSeeds: 128;
17
+ maxTaskIdLength: 128;
18
+ maxRepositoryFieldLength: 256;
19
+ maxRevisionLength: 64;
20
+ maxPathLength: 1024;
21
+ maxSymbolLength: 512;
22
+ maxExportNameLength: 512;
23
+ maxComponentIdLength: 512;
24
+ maxResolutionCandidates: 64;
25
+ maxResolutionEvidence: 64;
26
+ }>;
27
+ export interface WorkingSetTaskMetadata {
28
+ /** Stable caller-owned task identity; it carries no execution authority. */
29
+ readonly taskId: string;
30
+ readonly intent: WorkingSetTaskIntent;
31
+ }
32
+ export interface WorkingSetPathSeed {
33
+ readonly kind: "path";
34
+ readonly path: string;
35
+ }
36
+ export interface WorkingSetSymbolExportSeed {
37
+ readonly kind: "symbol-export";
38
+ readonly path: string;
39
+ readonly symbol: string;
40
+ readonly exportName?: string;
41
+ }
42
+ export interface WorkingSetArchitectureComponentSeed {
43
+ readonly kind: "architecture-component";
44
+ readonly componentId: string;
45
+ }
46
+ export type WorkingSetSeed = WorkingSetPathSeed | WorkingSetSymbolExportSeed | WorkingSetArchitectureComponentSeed;
47
+ export interface WorkingSetPathSeedInput {
48
+ readonly kind: "path";
49
+ readonly path: string;
50
+ }
51
+ export interface WorkingSetSymbolExportSeedInput {
52
+ readonly kind: "symbol-export";
53
+ readonly path: string;
54
+ readonly symbol: string;
55
+ readonly exportName?: string;
56
+ }
57
+ export interface WorkingSetArchitectureComponentSeedInput {
58
+ readonly kind: "architecture-component";
59
+ readonly componentId: string;
60
+ }
61
+ export type WorkingSetSeedInput = WorkingSetPathSeedInput | WorkingSetSymbolExportSeedInput | WorkingSetArchitectureComponentSeedInput;
62
+ export interface WorkingSetSeedDocument {
63
+ readonly kind: typeof WORKING_SET_SEED_KIND;
64
+ readonly schemaVersion: WorkingSetSeedSchemaVersion;
65
+ readonly task: WorkingSetTaskMetadata;
66
+ readonly repository: RepositoryIdentity;
67
+ /** Full immutable revision identifier; mutable refs are rejected. */
68
+ readonly revision: string;
69
+ readonly seeds: readonly WorkingSetSeed[];
70
+ }
71
+ export interface WorkingSetSeedDocumentInput {
72
+ readonly kind?: typeof WORKING_SET_SEED_KIND;
73
+ readonly schemaVersion?: WorkingSetSeedSchemaVersion;
74
+ readonly task: WorkingSetTaskMetadata;
75
+ readonly repository: RepositoryIdentity;
76
+ readonly revision: string;
77
+ readonly seeds: readonly WorkingSetSeedInput[];
78
+ }
79
+ export type WorkingSetSeedResolutionStatus = "resolved" | "unresolved";
80
+ export type WorkingSetSeedUnresolvedReason = "repository-mismatch" | "missing" | "ambiguous";
81
+ export interface WorkingSetSeedResolutionContext {
82
+ /** Identity and revision that the analysis run has explicitly pinned. */
83
+ readonly repository: RepositoryIdentity;
84
+ readonly revision: string;
85
+ /** Existing Canon repository mappings; no mapping is inferred from a seed. */
86
+ readonly repositoryMappings?: readonly (RepositoryMapping | RepositoryMappingInput)[];
87
+ /** Existing provider correlation evidence; no provider scan is started here. */
88
+ readonly correlation?: CorrelationResult;
89
+ /** Optional runtime source form when correlation evidence uses a URL/path. */
90
+ readonly resolvedRepository?: ResolvedRepository;
91
+ }
92
+ export interface WorkingSetSeedTarget extends WorkingSetTarget {
93
+ readonly kind: "file" | "symbol" | "test";
94
+ }
95
+ export interface ResolvedWorkingSetSeed {
96
+ readonly status: "resolved";
97
+ readonly seed: WorkingSetSeed;
98
+ readonly targets: readonly WorkingSetSeedTarget[];
99
+ readonly evidence: readonly WorkingSetEvidenceReference[];
100
+ }
101
+ export interface UnresolvedWorkingSetSeed {
102
+ readonly status: "unresolved";
103
+ readonly seed: WorkingSetSeed;
104
+ readonly reason: WorkingSetSeedUnresolvedReason;
105
+ /** Candidate IDs or locators are retained only when bounded evidence exists. */
106
+ readonly candidates: readonly string[];
107
+ readonly evidence: readonly WorkingSetEvidenceReference[];
108
+ }
109
+ export type WorkingSetSeedResolution = ResolvedWorkingSetSeed | UnresolvedWorkingSetSeed;
110
+ export interface WorkingSetSeedResolutionResult {
111
+ readonly kind: typeof WORKING_SET_SEED_RESOLUTION_KIND;
112
+ readonly schemaVersion: WorkingSetSeedSchemaVersion;
113
+ readonly task: WorkingSetTaskMetadata;
114
+ readonly repository: RepositoryIdentity;
115
+ readonly revision: string;
116
+ readonly binding: "matched" | "mismatch";
117
+ readonly resolutions: readonly WorkingSetSeedResolution[];
118
+ }
119
+ /** Creates and canonicalizes a bounded structured task/seed document. */
120
+ export declare function createWorkingSetSeeds(input: WorkingSetSeedDocumentInput): WorkingSetSeedDocument;
121
+ /** Validates a serialized-shape seed document before semantic use. */
122
+ export declare function validateWorkingSetSeeds(input: unknown): WorkingSetSeedDocument;
123
+ /** Deterministic JSON serialization of the bounded seed contract. */
124
+ export declare function serializeWorkingSetSeeds(input: WorkingSetSeedDocumentInput | WorkingSetSeedDocument): string;
125
+ /** Parses JSON and rejects malformed or unsupported seed documents. */
126
+ export declare function parseWorkingSetSeeds(serialized: string): WorkingSetSeedDocument;
127
+ export declare const decodeWorkingSetSeeds: typeof parseWorkingSetSeeds;
128
+ /**
129
+ * Resolves only the supplied bounded seeds against the pinned repository,
130
+ * existing Canon mappings, and supplied correlation evidence. It never scans
131
+ * the repository or treats seed metadata as execution authority.
132
+ */
133
+ export declare function resolveWorkingSetSeeds(input: WorkingSetSeedDocumentInput | WorkingSetSeedDocument, context: WorkingSetSeedResolutionContext): WorkingSetSeedResolutionResult;
134
+ /** Resolves one already-canonical seed with the same bounded rules. */
135
+ export declare function resolveWorkingSetSeed(seed: WorkingSetSeedInput, context: WorkingSetSeedResolutionContext): WorkingSetSeedResolution;