lootforge 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 (243) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +764 -0
  3. package/bin/lootforge.js +28 -0
  4. package/dist/benchmarks/coarseToFineCost.d.ts +21 -0
  5. package/dist/benchmarks/coarseToFineCost.js +49 -0
  6. package/dist/benchmarks/coarseToFineCost.js.map +1 -0
  7. package/dist/checks/boundaryMetrics.d.ts +12 -0
  8. package/dist/checks/boundaryMetrics.js +102 -0
  9. package/dist/checks/boundaryMetrics.js.map +1 -0
  10. package/dist/checks/candidateScore.d.ts +11 -0
  11. package/dist/checks/candidateScore.js +462 -0
  12. package/dist/checks/candidateScore.js.map +1 -0
  13. package/dist/checks/commandParser.d.ts +5 -0
  14. package/dist/checks/commandParser.js +99 -0
  15. package/dist/checks/commandParser.js.map +1 -0
  16. package/dist/checks/consistencyOutliers.d.ts +42 -0
  17. package/dist/checks/consistencyOutliers.js +156 -0
  18. package/dist/checks/consistencyOutliers.js.map +1 -0
  19. package/dist/checks/imageAcceptance.d.ts +67 -0
  20. package/dist/checks/imageAcceptance.js +967 -0
  21. package/dist/checks/imageAcceptance.js.map +1 -0
  22. package/dist/checks/packInvariants.d.ts +56 -0
  23. package/dist/checks/packInvariants.js +1064 -0
  24. package/dist/checks/packInvariants.js.map +1 -0
  25. package/dist/checks/softAdapters.d.ts +25 -0
  26. package/dist/checks/softAdapters.js +275 -0
  27. package/dist/checks/softAdapters.js.map +1 -0
  28. package/dist/checks/vlmGate.d.ts +8 -0
  29. package/dist/checks/vlmGate.js +200 -0
  30. package/dist/checks/vlmGate.js.map +1 -0
  31. package/dist/cli/commands/atlas.d.ts +5 -0
  32. package/dist/cli/commands/atlas.js +18 -0
  33. package/dist/cli/commands/atlas.js.map +1 -0
  34. package/dist/cli/commands/eval.d.ts +6 -0
  35. package/dist/cli/commands/eval.js +23 -0
  36. package/dist/cli/commands/eval.js.map +1 -0
  37. package/dist/cli/commands/generate.d.ts +18 -0
  38. package/dist/cli/commands/generate.js +66 -0
  39. package/dist/cli/commands/generate.js.map +1 -0
  40. package/dist/cli/commands/init.d.ts +15 -0
  41. package/dist/cli/commands/init.js +146 -0
  42. package/dist/cli/commands/init.js.map +1 -0
  43. package/dist/cli/commands/package.d.ts +6 -0
  44. package/dist/cli/commands/package.js +27 -0
  45. package/dist/cli/commands/package.js.map +1 -0
  46. package/dist/cli/commands/plan.d.ts +16 -0
  47. package/dist/cli/commands/plan.js +49 -0
  48. package/dist/cli/commands/plan.js.map +1 -0
  49. package/dist/cli/commands/process.d.ts +14 -0
  50. package/dist/cli/commands/process.js +29 -0
  51. package/dist/cli/commands/process.js.map +1 -0
  52. package/dist/cli/commands/regenerate.d.ts +29 -0
  53. package/dist/cli/commands/regenerate.js +244 -0
  54. package/dist/cli/commands/regenerate.js.map +1 -0
  55. package/dist/cli/commands/review.d.ts +5 -0
  56. package/dist/cli/commands/review.js +18 -0
  57. package/dist/cli/commands/review.js.map +1 -0
  58. package/dist/cli/commands/select.d.ts +6 -0
  59. package/dist/cli/commands/select.js +21 -0
  60. package/dist/cli/commands/select.js.map +1 -0
  61. package/dist/cli/commands/serve.d.ts +16 -0
  62. package/dist/cli/commands/serve.js +100 -0
  63. package/dist/cli/commands/serve.js.map +1 -0
  64. package/dist/cli/commands/validate.d.ts +17 -0
  65. package/dist/cli/commands/validate.js +108 -0
  66. package/dist/cli/commands/validate.js.map +1 -0
  67. package/dist/cli/index.d.ts +1 -0
  68. package/dist/cli/index.js +157 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/parseArgs.d.ts +3 -0
  71. package/dist/cli/parseArgs.js +37 -0
  72. package/dist/cli/parseArgs.js.map +1 -0
  73. package/dist/contracts/stageArtifacts.d.ts +4031 -0
  74. package/dist/contracts/stageArtifacts.js +663 -0
  75. package/dist/contracts/stageArtifacts.js.map +1 -0
  76. package/dist/manifest/load.d.ts +3 -0
  77. package/dist/manifest/load.js +50 -0
  78. package/dist/manifest/load.js.map +1 -0
  79. package/dist/manifest/normalize-palette.d.ts +17 -0
  80. package/dist/manifest/normalize-palette.js +235 -0
  81. package/dist/manifest/normalize-palette.js.map +1 -0
  82. package/dist/manifest/normalize-policy.d.ts +48 -0
  83. package/dist/manifest/normalize-policy.js +239 -0
  84. package/dist/manifest/normalize-policy.js.map +1 -0
  85. package/dist/manifest/normalize-prompt.d.ts +14 -0
  86. package/dist/manifest/normalize-prompt.js +73 -0
  87. package/dist/manifest/normalize-prompt.js.map +1 -0
  88. package/dist/manifest/normalize-target.d.ts +49 -0
  89. package/dist/manifest/normalize-target.js +542 -0
  90. package/dist/manifest/normalize-target.js.map +1 -0
  91. package/dist/manifest/schema.d.ts +7570 -0
  92. package/dist/manifest/schema.js +373 -0
  93. package/dist/manifest/schema.js.map +1 -0
  94. package/dist/manifest/semantic-validation.d.ts +4 -0
  95. package/dist/manifest/semantic-validation.js +526 -0
  96. package/dist/manifest/semantic-validation.js.map +1 -0
  97. package/dist/manifest/types.d.ts +263 -0
  98. package/dist/manifest/types.js +2 -0
  99. package/dist/manifest/types.js.map +1 -0
  100. package/dist/manifest/validate.d.ts +12 -0
  101. package/dist/manifest/validate.js +221 -0
  102. package/dist/manifest/validate.js.map +1 -0
  103. package/dist/output/assetPackManifest.d.ts +19 -0
  104. package/dist/output/assetPackManifest.js +20 -0
  105. package/dist/output/assetPackManifest.js.map +1 -0
  106. package/dist/output/catalog.d.ts +60 -0
  107. package/dist/output/catalog.js +107 -0
  108. package/dist/output/catalog.js.map +1 -0
  109. package/dist/output/contactSheet.d.ts +13 -0
  110. package/dist/output/contactSheet.js +124 -0
  111. package/dist/output/contactSheet.js.map +1 -0
  112. package/dist/output/phaserManifest.d.ts +8 -0
  113. package/dist/output/phaserManifest.js +25 -0
  114. package/dist/output/phaserManifest.js.map +1 -0
  115. package/dist/output/pixiManifest.d.ts +8 -0
  116. package/dist/output/pixiManifest.js +37 -0
  117. package/dist/output/pixiManifest.js.map +1 -0
  118. package/dist/output/provenance.d.ts +121 -0
  119. package/dist/output/provenance.js +10 -0
  120. package/dist/output/provenance.js.map +1 -0
  121. package/dist/output/runtimeManifests.d.ts +21 -0
  122. package/dist/output/runtimeManifests.js +82 -0
  123. package/dist/output/runtimeManifests.js.map +1 -0
  124. package/dist/output/unityImportManifest.d.ts +10 -0
  125. package/dist/output/unityImportManifest.js +58 -0
  126. package/dist/output/unityImportManifest.js.map +1 -0
  127. package/dist/output/zip.d.ts +5 -0
  128. package/dist/output/zip.js +68 -0
  129. package/dist/output/zip.js.map +1 -0
  130. package/dist/pipeline/atlas.d.ts +33 -0
  131. package/dist/pipeline/atlas.js +286 -0
  132. package/dist/pipeline/atlas.js.map +1 -0
  133. package/dist/pipeline/eval.d.ts +104 -0
  134. package/dist/pipeline/eval.js +246 -0
  135. package/dist/pipeline/eval.js.map +1 -0
  136. package/dist/pipeline/generate.d.ts +44 -0
  137. package/dist/pipeline/generate.js +1088 -0
  138. package/dist/pipeline/generate.js.map +1 -0
  139. package/dist/pipeline/package.d.ts +18 -0
  140. package/dist/pipeline/package.js +218 -0
  141. package/dist/pipeline/package.js.map +1 -0
  142. package/dist/pipeline/process.d.ts +15 -0
  143. package/dist/pipeline/process.js +776 -0
  144. package/dist/pipeline/process.js.map +1 -0
  145. package/dist/pipeline/review.d.ts +10 -0
  146. package/dist/pipeline/review.js +341 -0
  147. package/dist/pipeline/review.js.map +1 -0
  148. package/dist/pipeline/seamHeal.d.ts +2 -0
  149. package/dist/pipeline/seamHeal.js +70 -0
  150. package/dist/pipeline/seamHeal.js.map +1 -0
  151. package/dist/pipeline/select.d.ts +39 -0
  152. package/dist/pipeline/select.js +79 -0
  153. package/dist/pipeline/select.js.map +1 -0
  154. package/dist/providers/job.d.ts +29 -0
  155. package/dist/providers/job.js +113 -0
  156. package/dist/providers/job.js.map +1 -0
  157. package/dist/providers/localDiffusion.d.ts +28 -0
  158. package/dist/providers/localDiffusion.js +235 -0
  159. package/dist/providers/localDiffusion.js.map +1 -0
  160. package/dist/providers/nano.d.ts +36 -0
  161. package/dist/providers/nano.js +402 -0
  162. package/dist/providers/nano.js.map +1 -0
  163. package/dist/providers/openai.d.ts +37 -0
  164. package/dist/providers/openai.js +378 -0
  165. package/dist/providers/openai.js.map +1 -0
  166. package/dist/providers/policy.d.ts +9 -0
  167. package/dist/providers/policy.js +192 -0
  168. package/dist/providers/policy.js.map +1 -0
  169. package/dist/providers/prompt.d.ts +3 -0
  170. package/dist/providers/prompt.js +63 -0
  171. package/dist/providers/prompt.js.map +1 -0
  172. package/dist/providers/registry.d.ts +24 -0
  173. package/dist/providers/registry.js +92 -0
  174. package/dist/providers/registry.js.map +1 -0
  175. package/dist/providers/runtime.d.ts +15 -0
  176. package/dist/providers/runtime.js +101 -0
  177. package/dist/providers/runtime.js.map +1 -0
  178. package/dist/providers/runtimeConfig.d.ts +20 -0
  179. package/dist/providers/runtimeConfig.js +146 -0
  180. package/dist/providers/runtimeConfig.js.map +1 -0
  181. package/dist/providers/types-core.d.ts +514 -0
  182. package/dist/providers/types-core.js +60 -0
  183. package/dist/providers/types-core.js.map +1 -0
  184. package/dist/providers/types.d.ts +4 -0
  185. package/dist/providers/types.js +5 -0
  186. package/dist/providers/types.js.map +1 -0
  187. package/dist/service/generationRequest.d.ts +58 -0
  188. package/dist/service/generationRequest.js +203 -0
  189. package/dist/service/generationRequest.js.map +1 -0
  190. package/dist/service/providerCapabilities.d.ts +40 -0
  191. package/dist/service/providerCapabilities.js +114 -0
  192. package/dist/service/providerCapabilities.js.map +1 -0
  193. package/dist/service/server.d.ts +31 -0
  194. package/dist/service/server.js +774 -0
  195. package/dist/service/server.js.map +1 -0
  196. package/dist/shared/errors.d.ts +13 -0
  197. package/dist/shared/errors.js +24 -0
  198. package/dist/shared/errors.js.map +1 -0
  199. package/dist/shared/fs.d.ts +6 -0
  200. package/dist/shared/fs.js +30 -0
  201. package/dist/shared/fs.js.map +1 -0
  202. package/dist/shared/image.d.ts +25 -0
  203. package/dist/shared/image.js +136 -0
  204. package/dist/shared/image.js.map +1 -0
  205. package/dist/shared/paths.d.ts +30 -0
  206. package/dist/shared/paths.js +103 -0
  207. package/dist/shared/paths.js.map +1 -0
  208. package/dist/shared/schemas.d.ts +209 -0
  209. package/dist/shared/schemas.js +93 -0
  210. package/dist/shared/schemas.js.map +1 -0
  211. package/dist/shared/typeGuards.d.ts +1 -0
  212. package/dist/shared/typeGuards.js +4 -0
  213. package/dist/shared/typeGuards.js.map +1 -0
  214. package/dist/shared/zod.d.ts +1 -0
  215. package/dist/shared/zod.js +14 -0
  216. package/dist/shared/zod.js.map +1 -0
  217. package/dist/showcase/format.d.ts +9 -0
  218. package/dist/showcase/format.js +61 -0
  219. package/dist/showcase/format.js.map +1 -0
  220. package/dist/showcase/panelRenderer.d.ts +59 -0
  221. package/dist/showcase/panelRenderer.js +294 -0
  222. package/dist/showcase/panelRenderer.js.map +1 -0
  223. package/dist/showcase/releaseConfig.d.ts +233 -0
  224. package/dist/showcase/releaseConfig.js +75 -0
  225. package/dist/showcase/releaseConfig.js.map +1 -0
  226. package/dist/showcase/releaseEvidence.d.ts +25 -0
  227. package/dist/showcase/releaseEvidence.js +540 -0
  228. package/dist/showcase/releaseEvidence.js.map +1 -0
  229. package/dist/showcase/releaseEvidenceSchema.d.ts +1611 -0
  230. package/dist/showcase/releaseEvidenceSchema.js +165 -0
  231. package/dist/showcase/releaseEvidenceSchema.js.map +1 -0
  232. package/dist/showcase/scenarioRenderer.d.ts +19 -0
  233. package/dist/showcase/scenarioRenderer.js +488 -0
  234. package/dist/showcase/scenarioRenderer.js.map +1 -0
  235. package/docs/ADAPTER_CONTRACT.md +141 -0
  236. package/docs/ENGINE_TARGETING.md +86 -0
  237. package/docs/MANIFEST_POLICY_COVERAGE.md +130 -0
  238. package/docs/RELEASE_WORKFLOW.md +117 -0
  239. package/docs/ROADMAP.md +411 -0
  240. package/docs/ROADMAP_ISSUES.md +244 -0
  241. package/docs/SERVICE_MODE.md +137 -0
  242. package/docs/manifest-schema.md +254 -0
  243. package/package.json +70 -0
@@ -0,0 +1,540 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { diffNullable, formatOptionalNumber, formatRatio, formatSignedInteger, formatSignedOptionalNumber, formatSignedPercent, mean, median, ratio, } from "./format.js";
4
+ import { ReleaseEvidenceReportSchema, baselineDeltaSchema, normalizeReportSchema, providerComparisonSchema, providerEvidenceSchema, scenarioEvidenceSchema, } from "./releaseEvidenceSchema.js";
5
+ import { readAndValidateStageArtifact, } from "../contracts/stageArtifacts.js";
6
+ // Re-export for backward compatibility
7
+ export { ReleaseEvidenceReportSchema } from "./releaseEvidenceSchema.js";
8
+ export async function readReleaseEvidenceReport(filePath) {
9
+ const resolved = path.resolve(filePath);
10
+ const raw = await readFile(resolved, "utf8");
11
+ const parsed = JSON.parse(raw);
12
+ const normalized = normalizeReportSchema(parsed);
13
+ return ReleaseEvidenceReportSchema.parse(normalized);
14
+ }
15
+ export async function buildReleaseEvidenceReport(params) {
16
+ const providerEntries = await Promise.all(params.providerRuns.map(async (run) => {
17
+ const outDir = path.resolve(params.runRootDir, run.id);
18
+ return buildProviderEvidence({
19
+ run,
20
+ outDir,
21
+ repoRoot: params.repoRoot,
22
+ });
23
+ }));
24
+ const aggregate = buildAggregateEvidence(providerEntries);
25
+ // Build provider comparisons: use explicit pairs if provided, otherwise auto-infer
26
+ const comparisonPairs = params.comparisonPairs ?? inferComparisonPairs(params.providerRuns);
27
+ const providerPairs = comparisonPairs
28
+ .map((pair) => buildProviderComparisonByRunId(providerEntries, pair))
29
+ .filter((result) => result !== undefined);
30
+ const baselineDelta = buildBaselineDelta(aggregate.quality, params.baselineReport);
31
+ const report = ReleaseEvidenceReportSchema.parse({
32
+ schemaVersion: "release-showcase-v2",
33
+ generatedAt: new Date().toISOString(),
34
+ release: {
35
+ version: params.releaseVersion,
36
+ codename: params.codename,
37
+ comparisonPolicy: params.comparisonPolicy,
38
+ },
39
+ ...(params.baselineVersion
40
+ ? {
41
+ baseline: {
42
+ version: params.baselineVersion,
43
+ ...(params.baselineEvidencePath
44
+ ? {
45
+ evidencePath: toPortableArtifactPath(params.baselineEvidencePath, params.repoRoot),
46
+ }
47
+ : {}),
48
+ available: Boolean(params.baselineReport),
49
+ },
50
+ }
51
+ : {}),
52
+ providers: providerEntries,
53
+ aggregate,
54
+ comparisons: {
55
+ providerPairs,
56
+ ...(baselineDelta ? { baselineDelta } : {}),
57
+ },
58
+ scenarios: params.scenarios.map((scenario) => buildScenarioEvidence({
59
+ scenario,
60
+ aggregate,
61
+ providers: providerEntries,
62
+ providerPairs,
63
+ baselineDelta,
64
+ })),
65
+ });
66
+ return report;
67
+ }
68
+ export function renderReleaseEvidenceSummary(report) {
69
+ const lines = [];
70
+ lines.push(`# Release Showcase Evidence - ${report.release.version} (${report.release.codename})`);
71
+ lines.push("");
72
+ lines.push(`Generated: ${report.generatedAt}`);
73
+ lines.push(`Comparison policy: ${report.release.comparisonPolicy}`);
74
+ lines.push("");
75
+ lines.push("## Aggregate Quality");
76
+ lines.push("");
77
+ lines.push(`- Providers: ${report.aggregate.quality.providerCount}`);
78
+ lines.push(`- Targets: ${report.aggregate.quality.targetCount}`);
79
+ lines.push(`- Hard-gate pass rate: ${formatRatio(report.aggregate.quality.passRate)} (${report.aggregate.quality.passedHardGates}/${report.aggregate.quality.targetCount})`);
80
+ lines.push(`- Hard errors: ${report.aggregate.quality.hardErrors}`);
81
+ lines.push(`- Final score mean: ${formatOptionalNumber(report.aggregate.quality.finalScoreMean)}`);
82
+ lines.push(`- Final score median: ${formatOptionalNumber(report.aggregate.quality.finalScoreMedian)}`);
83
+ lines.push("");
84
+ lines.push("## Provider Breakdown");
85
+ lines.push("");
86
+ for (const provider of report.providers) {
87
+ lines.push(`### ${provider.label} (${provider.provider})`);
88
+ lines.push(`- Out dir: ${provider.outDir}`);
89
+ lines.push(`- Quality: passRate=${formatRatio(provider.quality.passRate)}, finalScoreMean=${formatOptionalNumber(provider.quality.finalScoreMean)}, hardErrors=${provider.quality.hardErrors}`);
90
+ lines.push(`- Coarse-to-fine: enabledJobs=${provider.features.coarseToFine.enabledJobs}, promoted=${provider.features.coarseToFine.promotedCandidates}, discarded=${provider.features.coarseToFine.discardedCandidates}`);
91
+ lines.push(`- Agentic retry: attemptedJobs=${provider.features.agenticRetry.attemptedJobs}, attempts=${provider.features.agenticRetry.attemptedTotal}, succeededJobs=${provider.features.agenticRetry.succeededJobs}`);
92
+ lines.push(`- Pack invariants: errors=${provider.features.packInvariants.errors}, warnings=${provider.features.packInvariants.warnings}`);
93
+ lines.push(`- Consistency outliers: targets=${provider.features.consistencyOutliers.outlierTargets}, penalty=${provider.features.consistencyOutliers.totalPenalty}`);
94
+ lines.push(`- Style policy: errors=${provider.features.stylePolicy.errorCount}, warnings=${provider.features.stylePolicy.warningCount}`);
95
+ lines.push(`- Spritesheet drift: issues=${provider.features.spritesheetDrift.issueCount}, maxSilhouette=${formatOptionalNumber(provider.features.spritesheetDrift.maxSilhouetteDrift)}, maxIdentity=${formatOptionalNumber(provider.features.spritesheetDrift.maxIdentityDrift)}, maxPose=${formatOptionalNumber(provider.features.spritesheetDrift.maxPoseDrift)}`);
96
+ lines.push("");
97
+ }
98
+ lines.push("## Scenario Highlights");
99
+ lines.push("");
100
+ for (const scenario of report.scenarios) {
101
+ lines.push(`### ${scenario.title}`);
102
+ lines.push(`- ${scenario.summary}`);
103
+ for (const value of scenario.values) {
104
+ lines.push(`- ${value.label}: ${value.value}`);
105
+ }
106
+ lines.push("");
107
+ }
108
+ return `${lines.join("\n").trimEnd()}\n`;
109
+ }
110
+ async function buildProviderEvidence(input) {
111
+ const evalPath = path.join(input.outDir, "checks", "eval-report.json");
112
+ const provenancePath = path.join(input.outDir, "provenance", "run.json");
113
+ const [evalReport, provenance] = await Promise.all([
114
+ readAndValidateStageArtifact("eval-report", evalPath),
115
+ readAndValidateStageArtifact("provenance-run", provenancePath),
116
+ ]);
117
+ return summarizeProviderEvidence(input, evalReport, provenance);
118
+ }
119
+ function summarizeProviderEvidence(input, evalReport, provenance) {
120
+ const targetCount = evalReport.targetCount;
121
+ const passedHardGates = evalReport.targets.filter((target) => target.passedHardGates).length;
122
+ const failedHardGates = targetCount - passedHardGates;
123
+ const passRate = ratio(passedHardGates, targetCount);
124
+ const finalScores = evalReport.targets.map((target) => target.finalScore);
125
+ const candidateScores = evalReport.targets
126
+ .map((target) => target.candidateScore)
127
+ .filter((value) => typeof value === "number");
128
+ const coarseToFineJobs = provenance.jobs
129
+ .map((job) => job.coarseToFine)
130
+ .filter((value) => Boolean(value));
131
+ const agenticRetryJobs = provenance.jobs
132
+ .map((job) => job.agenticRetry)
133
+ .filter((value) => Boolean(value));
134
+ const triggerCodes = {};
135
+ for (const retry of agenticRetryJobs) {
136
+ for (const attempt of retry.attempts) {
137
+ for (const code of attempt.triggeredBy) {
138
+ triggerCodes[code] = (triggerCodes[code] ?? 0) + 1;
139
+ }
140
+ }
141
+ }
142
+ const packIssues = evalReport.packInvariants?.issues ?? [];
143
+ const spritesheetIssues = packIssues.filter(isSpritesheetIssue);
144
+ const spritesheetMetrics = evalReport.packInvariants?.metrics?.spritesheetContinuityByAnimation;
145
+ const spritesheetEntries = Object.values(spritesheetMetrics ?? {});
146
+ const maxSilhouetteDrift = spritesheetEntries.length > 0
147
+ ? Math.max(...spritesheetEntries.map((entry) => entry.maxSilhouetteDrift))
148
+ : null;
149
+ const maxAnchorDrift = spritesheetEntries.length > 0
150
+ ? Math.max(...spritesheetEntries.map((entry) => entry.maxAnchorDrift))
151
+ : null;
152
+ const maxIdentityDrift = maxMetricAcrossIssues(spritesheetIssues, "maxIdentityDrift");
153
+ const maxPoseDrift = maxMetricAcrossIssues(spritesheetIssues, "maxPoseDrift");
154
+ const styleErrors = evalReport.targets.flatMap((target) => target.hardGateErrors);
155
+ const styleWarnings = evalReport.targets.flatMap((target) => target.hardGateWarnings);
156
+ const styleErrorCodes = styleErrors
157
+ .map(extractIssueCode)
158
+ .filter((code) => code.startsWith("style_policy_"));
159
+ const styleWarningCodes = styleWarnings
160
+ .map(extractIssueCode)
161
+ .filter((code) => code.startsWith("style_policy_"));
162
+ const styleCodes = Array.from(new Set([...styleErrorCodes, ...styleWarningCodes])).sort();
163
+ const groupSummary = evalReport.consistencyGroupSummary ?? [];
164
+ const warningTargets = groupSummary.reduce((sum, group) => sum + group.warningTargetIds.length, 0);
165
+ const outlierTargets = groupSummary.reduce((sum, group) => sum + group.outlierTargetIds.length, 0);
166
+ const totalPenalty = groupSummary.reduce((sum, group) => sum + group.totalPenalty, 0);
167
+ const maxGroupScore = groupSummary.length > 0 ? Math.max(...groupSummary.map((group) => group.maxScore)) : null;
168
+ return providerEvidenceSchema.parse({
169
+ id: input.run.id,
170
+ label: input.run.label,
171
+ provider: input.run.provider,
172
+ manifestPath: toPortableArtifactPath(input.run.manifestPathResolved, input.repoRoot),
173
+ outDir: toPortableArtifactPath(input.outDir, input.repoRoot),
174
+ generatedAt: provenance.generatedAt,
175
+ quality: {
176
+ targetCount,
177
+ passedHardGates,
178
+ failedHardGates,
179
+ hardErrors: evalReport.hardErrors,
180
+ passRate,
181
+ finalScoreMean: mean(finalScores),
182
+ finalScoreMedian: median(finalScores),
183
+ candidateScoreMean: mean(candidateScores),
184
+ },
185
+ features: {
186
+ coarseToFine: {
187
+ enabledJobs: coarseToFineJobs.filter((job) => job.enabled).length,
188
+ promotedCandidates: coarseToFineJobs.reduce((sum, job) => sum + job.promoted.length, 0),
189
+ discardedCandidates: coarseToFineJobs.reduce((sum, job) => sum + job.discarded.length, 0),
190
+ skippedJobs: coarseToFineJobs.filter((job) => Boolean(job.skippedReason)).length,
191
+ },
192
+ agenticRetry: {
193
+ enabledJobs: agenticRetryJobs.filter((job) => job.enabled).length,
194
+ attemptedJobs: agenticRetryJobs.filter((job) => job.attempted > 0).length,
195
+ attemptedTotal: agenticRetryJobs.reduce((sum, job) => sum + job.attempted, 0),
196
+ succeededJobs: agenticRetryJobs.filter((job) => job.succeeded).length,
197
+ triggerCodes,
198
+ },
199
+ packInvariants: {
200
+ errors: evalReport.packInvariants?.errors ?? 0,
201
+ warnings: evalReport.packInvariants?.warnings ?? 0,
202
+ issueCodes: Array.from(new Set(packIssues.map((issue) => issue.code))).sort(),
203
+ },
204
+ consistencyOutliers: {
205
+ groups: groupSummary.length,
206
+ warningTargets,
207
+ outlierTargets,
208
+ totalPenalty,
209
+ maxScore: maxGroupScore,
210
+ },
211
+ stylePolicy: {
212
+ errorCount: styleErrorCodes.length,
213
+ warningCount: styleWarningCodes.length,
214
+ codes: styleCodes,
215
+ },
216
+ spritesheetDrift: {
217
+ issueCount: spritesheetIssues.length,
218
+ animationsMeasured: spritesheetEntries.length,
219
+ maxSilhouetteDrift,
220
+ maxAnchorDrift,
221
+ maxIdentityDrift,
222
+ maxPoseDrift,
223
+ },
224
+ },
225
+ });
226
+ }
227
+ function buildAggregateEvidence(providers) {
228
+ const qualityProviders = providers.filter((provider) => provider.quality.targetCount > 0);
229
+ const targetCount = qualityProviders.reduce((sum, provider) => sum + provider.quality.targetCount, 0);
230
+ const passedHardGates = qualityProviders.reduce((sum, provider) => sum + provider.quality.passedHardGates, 0);
231
+ const failedHardGates = qualityProviders.reduce((sum, provider) => sum + provider.quality.failedHardGates, 0);
232
+ const hardErrors = qualityProviders.reduce((sum, provider) => sum + provider.quality.hardErrors, 0);
233
+ const finalScoreMeans = qualityProviders
234
+ .map((provider) => provider.quality.finalScoreMean)
235
+ .filter((value) => typeof value === "number");
236
+ const finalScoreMedians = qualityProviders
237
+ .map((provider) => provider.quality.finalScoreMedian)
238
+ .filter((value) => typeof value === "number");
239
+ return {
240
+ quality: {
241
+ providerCount: qualityProviders.length,
242
+ targetCount,
243
+ passedHardGates,
244
+ failedHardGates,
245
+ hardErrors,
246
+ passRate: ratio(passedHardGates, targetCount),
247
+ finalScoreMean: mean(finalScoreMeans),
248
+ finalScoreMedian: mean(finalScoreMedians),
249
+ },
250
+ features: {
251
+ coarseToFineEnabledJobs: providers.reduce((sum, provider) => sum + provider.features.coarseToFine.enabledJobs, 0),
252
+ coarseToFinePromotedCandidates: providers.reduce((sum, provider) => sum + provider.features.coarseToFine.promotedCandidates, 0),
253
+ coarseToFineDiscardedCandidates: providers.reduce((sum, provider) => sum + provider.features.coarseToFine.discardedCandidates, 0),
254
+ agenticRetryAttemptedJobs: providers.reduce((sum, provider) => sum + provider.features.agenticRetry.attemptedJobs, 0),
255
+ agenticRetryAttempts: providers.reduce((sum, provider) => sum + provider.features.agenticRetry.attemptedTotal, 0),
256
+ packInvariantErrors: providers.reduce((sum, provider) => sum + provider.features.packInvariants.errors, 0),
257
+ packInvariantWarnings: providers.reduce((sum, provider) => sum + provider.features.packInvariants.warnings, 0),
258
+ consistencyOutlierTargets: providers.reduce((sum, provider) => sum + provider.features.consistencyOutliers.outlierTargets, 0),
259
+ stylePolicyErrors: providers.reduce((sum, provider) => sum + provider.features.stylePolicy.errorCount, 0),
260
+ spritesheetIssueCount: providers.reduce((sum, provider) => sum + provider.features.spritesheetDrift.issueCount, 0),
261
+ },
262
+ };
263
+ }
264
+ /** Auto-infer comparison pairs from provider runs when none are explicitly configured. */
265
+ function inferComparisonPairs(runs) {
266
+ if (runs.length < 2) {
267
+ return [];
268
+ }
269
+ // Group runs by provider name to find distinct providers
270
+ const providerMap = new Map();
271
+ for (const run of runs) {
272
+ if (!providerMap.has(run.provider)) {
273
+ providerMap.set(run.provider, run.id);
274
+ }
275
+ }
276
+ const providers = Array.from(providerMap.entries());
277
+ if (providers.length < 2) {
278
+ return [];
279
+ }
280
+ // Compare first two distinct providers
281
+ return [
282
+ {
283
+ id: `${providers[0][0]}-vs-${providers[1][0]}`,
284
+ leftRunId: providers[0][1],
285
+ rightRunId: providers[1][1],
286
+ },
287
+ ];
288
+ }
289
+ function buildProviderComparisonByRunId(providers, pair) {
290
+ const left = providers.find((provider) => provider.id === pair.leftRunId);
291
+ const right = providers.find((provider) => provider.id === pair.rightRunId);
292
+ if (!left || !right) {
293
+ return undefined;
294
+ }
295
+ return providerComparisonSchema.parse({
296
+ id: pair.id,
297
+ leftId: left.id,
298
+ rightId: right.id,
299
+ finalScoreMeanDelta: diffNullable(left.quality.finalScoreMean, right.quality.finalScoreMean),
300
+ passRateDelta: diffNullable(left.quality.passRate, right.quality.passRate),
301
+ hardErrorDelta: left.quality.hardErrors - right.quality.hardErrors,
302
+ });
303
+ }
304
+ function buildBaselineDelta(current, baselineReport) {
305
+ if (!baselineReport) {
306
+ return undefined;
307
+ }
308
+ return baselineDeltaSchema.parse({
309
+ baselineVersion: baselineReport.release.version,
310
+ finalScoreMeanDelta: diffNullable(current.finalScoreMean, baselineReport.aggregate.quality.finalScoreMean),
311
+ passRateDelta: diffNullable(current.passRate, baselineReport.aggregate.quality.passRate),
312
+ hardErrorDelta: current.hardErrors - baselineReport.aggregate.quality.hardErrors,
313
+ });
314
+ }
315
+ function buildScenarioEvidence(params) {
316
+ const { scenario, aggregate, providers, providerPairs, baselineDelta } = params;
317
+ const firstPair = providerPairs[0];
318
+ const fallbackValues = [
319
+ {
320
+ label: "Aggregate final score mean",
321
+ value: formatOptionalNumber(aggregate.quality.finalScoreMean),
322
+ },
323
+ {
324
+ label: "Aggregate hard-gate pass rate",
325
+ value: formatRatio(aggregate.quality.passRate),
326
+ },
327
+ ];
328
+ switch (scenario.id) {
329
+ case "quality-delta":
330
+ return scenarioEvidenceSchema.parse({
331
+ id: scenario.id,
332
+ title: scenario.title,
333
+ panelFile: scenario.panelFile,
334
+ summary: baselineDelta
335
+ ? "Release-over-release quality delta against the pinned baseline evidence."
336
+ : "Baseline evidence is unavailable. Capture baseline evidence to compute deltas.",
337
+ values: baselineDelta
338
+ ? [
339
+ {
340
+ label: "Final score mean delta",
341
+ value: formatSignedOptionalNumber(baselineDelta.finalScoreMeanDelta),
342
+ },
343
+ {
344
+ label: "Hard-gate pass-rate delta",
345
+ value: formatSignedPercent(baselineDelta.passRateDelta),
346
+ },
347
+ {
348
+ label: "Hard error delta",
349
+ value: formatSignedInteger(baselineDelta.hardErrorDelta),
350
+ },
351
+ ]
352
+ : fallbackValues,
353
+ });
354
+ case "provider-openai-vs-nano":
355
+ case "provider-comparison":
356
+ return scenarioEvidenceSchema.parse({
357
+ id: scenario.id,
358
+ title: scenario.title,
359
+ panelFile: scenario.panelFile,
360
+ summary: providerPairs.length > 0
361
+ ? `Best-case provider comparison (${firstPair.leftId} vs ${firstPair.rightId}).`
362
+ : "Provider comparison unavailable. Capture runs from multiple providers.",
363
+ values: providerPairs.length > 0
364
+ ? [
365
+ {
366
+ label: `Final score mean delta (${firstPair.leftId} - ${firstPair.rightId})`,
367
+ value: formatSignedOptionalNumber(firstPair.finalScoreMeanDelta),
368
+ },
369
+ {
370
+ label: `Pass-rate delta (${firstPair.leftId} - ${firstPair.rightId})`,
371
+ value: formatSignedPercent(firstPair.passRateDelta),
372
+ },
373
+ {
374
+ label: `Hard error delta (${firstPair.leftId} - ${firstPair.rightId})`,
375
+ value: formatSignedInteger(firstPair.hardErrorDelta),
376
+ },
377
+ ]
378
+ : fallbackValues,
379
+ });
380
+ case "spritesheet-drift-qa":
381
+ return scenarioEvidenceSchema.parse({
382
+ id: scenario.id,
383
+ title: scenario.title,
384
+ panelFile: scenario.panelFile,
385
+ summary: "Spritesheet continuity and drift gates from pack invariants.",
386
+ values: [
387
+ {
388
+ label: "Spritesheet issue count",
389
+ value: String(aggregate.features.spritesheetIssueCount),
390
+ },
391
+ {
392
+ label: "Max identity drift",
393
+ value: formatOptionalNumber(maxProviderSpritesheetMetric(providers, "maxIdentityDrift")),
394
+ },
395
+ {
396
+ label: "Max pose drift",
397
+ value: formatOptionalNumber(maxProviderSpritesheetMetric(providers, "maxPoseDrift")),
398
+ },
399
+ ],
400
+ });
401
+ case "style-bible-policy":
402
+ return scenarioEvidenceSchema.parse({
403
+ id: scenario.id,
404
+ title: scenario.title,
405
+ panelFile: scenario.panelFile,
406
+ summary: "Machine-checkable style-bible policy diagnostics.",
407
+ values: [
408
+ {
409
+ label: "Style policy errors",
410
+ value: String(aggregate.features.stylePolicyErrors),
411
+ },
412
+ {
413
+ label: "Hard-gate pass rate",
414
+ value: formatRatio(aggregate.quality.passRate),
415
+ },
416
+ ],
417
+ });
418
+ case "coarse-to-fine":
419
+ return scenarioEvidenceSchema.parse({
420
+ id: scenario.id,
421
+ title: scenario.title,
422
+ panelFile: scenario.panelFile,
423
+ summary: "Coarse-to-fine promotion/discard traces from provenance.",
424
+ values: [
425
+ {
426
+ label: "Enabled jobs",
427
+ value: String(aggregate.features.coarseToFineEnabledJobs),
428
+ },
429
+ {
430
+ label: "Promoted candidates",
431
+ value: String(aggregate.features.coarseToFinePromotedCandidates),
432
+ },
433
+ {
434
+ label: "Discarded candidates",
435
+ value: String(aggregate.features.coarseToFineDiscardedCandidates),
436
+ },
437
+ ],
438
+ });
439
+ case "agentic-retry":
440
+ return scenarioEvidenceSchema.parse({
441
+ id: scenario.id,
442
+ title: scenario.title,
443
+ panelFile: scenario.panelFile,
444
+ summary: "Bounded auto-correction retry activity for failed candidates.",
445
+ values: [
446
+ {
447
+ label: "Jobs with retries",
448
+ value: String(aggregate.features.agenticRetryAttemptedJobs),
449
+ },
450
+ {
451
+ label: "Total retry attempts",
452
+ value: String(aggregate.features.agenticRetryAttempts),
453
+ },
454
+ ],
455
+ });
456
+ case "pack-invariants":
457
+ return scenarioEvidenceSchema.parse({
458
+ id: scenario.id,
459
+ title: scenario.title,
460
+ panelFile: scenario.panelFile,
461
+ summary: "Pack-level invariant diagnostics (uniqueness, continuity, budget).",
462
+ values: [
463
+ {
464
+ label: "Invariant errors",
465
+ value: String(aggregate.features.packInvariantErrors),
466
+ },
467
+ {
468
+ label: "Invariant warnings",
469
+ value: String(aggregate.features.packInvariantWarnings),
470
+ },
471
+ ],
472
+ });
473
+ case "consistency-outliers":
474
+ return scenarioEvidenceSchema.parse({
475
+ id: scenario.id,
476
+ title: scenario.title,
477
+ panelFile: scenario.panelFile,
478
+ summary: "Consistency-group outlier scoring and ranking influence.",
479
+ values: [
480
+ {
481
+ label: "Outlier targets",
482
+ value: String(aggregate.features.consistencyOutlierTargets),
483
+ },
484
+ {
485
+ label: "Final score mean",
486
+ value: formatOptionalNumber(aggregate.quality.finalScoreMean),
487
+ },
488
+ ],
489
+ });
490
+ default:
491
+ return scenarioEvidenceSchema.parse({
492
+ id: scenario.id,
493
+ title: scenario.title,
494
+ panelFile: scenario.panelFile,
495
+ summary: scenario.description ?? "Release evidence scenario summary.",
496
+ values: fallbackValues,
497
+ });
498
+ }
499
+ }
500
+ function extractIssueCode(issue) {
501
+ const separatorIndex = issue.indexOf(":");
502
+ if (separatorIndex === -1) {
503
+ return issue.trim();
504
+ }
505
+ return issue.slice(0, separatorIndex).trim();
506
+ }
507
+ function isSpritesheetIssue(issue) {
508
+ return issue.code.startsWith("spritesheet_") || issue.code.startsWith("pack_spritesheet");
509
+ }
510
+ function maxProviderSpritesheetMetric(providers, key) {
511
+ const values = providers
512
+ .map((provider) => provider.features.spritesheetDrift[key])
513
+ .filter((value) => typeof value === "number");
514
+ if (values.length === 0) {
515
+ return null;
516
+ }
517
+ return Math.max(...values);
518
+ }
519
+ function maxMetricAcrossIssues(issues, key) {
520
+ const values = issues
521
+ .map((issue) => issue.metrics?.[key])
522
+ .filter((value) => typeof value === "number");
523
+ if (values.length === 0) {
524
+ return null;
525
+ }
526
+ return Math.max(...values);
527
+ }
528
+ function toPortableArtifactPath(filePath, repoRoot) {
529
+ const resolvedPath = path.resolve(filePath);
530
+ if (!repoRoot) {
531
+ return resolvedPath;
532
+ }
533
+ const relativePath = path.relative(path.resolve(repoRoot), resolvedPath);
534
+ if (relativePath.length === 0 ||
535
+ (!relativePath.startsWith("..") && !path.isAbsolute(relativePath))) {
536
+ return relativePath.split(path.sep).join("/");
537
+ }
538
+ return resolvedPath;
539
+ }
540
+ //# sourceMappingURL=releaseEvidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseEvidence.js","sourceRoot":"","sources":["../../src/showcase/releaseEvidence.ts"],"names":[],"mappings":"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"}