@farmslot/protocol 0.39.0 → 0.41.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.
- package/CHANGELOG.md +27 -0
- package/dist/contracts/agents.d.ts +3 -0
- package/dist/contracts/agents.d.ts.map +1 -1
- package/dist/contracts/agents.js +12 -0
- package/dist/contracts/agents.js.map +1 -1
- package/dist/contracts/config.d.ts.map +1 -1
- package/dist/contracts/config.js +6 -1
- package/dist/contracts/config.js.map +1 -1
- package/dist/contracts/execution-templates.d.ts +9 -0
- package/dist/contracts/execution-templates.d.ts.map +1 -1
- package/dist/contracts/execution-templates.js.map +1 -1
- package/dist/contracts/family.d.ts +6 -0
- package/dist/contracts/family.d.ts.map +1 -1
- package/dist/contracts/family.js.map +1 -1
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/run-gate-readiness.d.ts +45 -0
- package/dist/contracts/run-gate-readiness.d.ts.map +1 -0
- package/dist/contracts/run-gate-readiness.js +5 -0
- package/dist/contracts/run-gate-readiness.js.map +1 -0
- package/dist/contracts/run-lifecycle-view.d.ts +17 -0
- package/dist/contracts/run-lifecycle-view.d.ts.map +1 -0
- package/dist/contracts/run-lifecycle-view.js +70 -0
- package/dist/contracts/run-lifecycle-view.js.map +1 -0
- package/dist/contracts/runs.d.ts +23 -2
- package/dist/contracts/runs.d.ts.map +1 -1
- package/dist/contracts/runs.js +3 -0
- package/dist/contracts/runs.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/node/pack-portability.d.ts.map +1 -1
- package/dist/node/pack-portability.js +16 -1
- package/dist/node/pack-portability.js.map +1 -1
- package/dist/recipe/document.d.ts +3 -1
- package/dist/recipe/document.d.ts.map +1 -1
- package/dist/recipe/document.js +28 -2
- package/dist/recipe/document.js.map +1 -1
- package/dist/recipe/hud-intent.d.ts +5 -0
- package/dist/recipe/hud-intent.d.ts.map +1 -1
- package/dist/recipe/hud-intent.js +39 -0
- package/dist/recipe/hud-intent.js.map +1 -1
- package/dist/recipe/index.d.ts +2 -1
- package/dist/recipe/index.d.ts.map +1 -1
- package/dist/recipe/index.js +2 -1
- package/dist/recipe/index.js.map +1 -1
- package/dist/recipe/run-pointer.d.ts +9 -0
- package/dist/recipe/run-pointer.d.ts.map +1 -0
- package/dist/recipe/run-pointer.js +20 -0
- package/dist/recipe/run-pointer.js.map +1 -0
- package/dist/recipes/step-io.d.ts +2 -0
- package/dist/recipes/step-io.d.ts.map +1 -1
- package/dist/recipes/step-io.js +5 -0
- package/dist/recipes/step-io.js.map +1 -1
- package/dist/roadmap/delivery-view.d.ts +12 -0
- package/dist/roadmap/delivery-view.d.ts.map +1 -0
- package/dist/roadmap/delivery-view.js +15 -0
- package/dist/roadmap/delivery-view.js.map +1 -0
- package/dist/rpc/index.d.ts +1 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +1 -0
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/registry.d.ts +2 -0
- package/dist/rpc/registry.d.ts.map +1 -1
- package/dist/rpc/registry.js +2 -0
- package/dist/rpc/registry.js.map +1 -1
- package/dist/rpc/run.d.ts +19 -0
- package/dist/rpc/run.d.ts.map +1 -1
- package/dist/rpc/sources.d.ts +31 -0
- package/dist/rpc/sources.d.ts.map +1 -0
- package/dist/rpc/sources.js +2 -0
- package/dist/rpc/sources.js.map +1 -0
- package/dist/runs/decision-resolution.d.ts +2 -0
- package/dist/runs/decision-resolution.d.ts.map +1 -1
- package/dist/runs/decision-resolution.js +11 -1
- package/dist/runs/decision-resolution.js.map +1 -1
- package/dist/runs/family-iteration-ledger.d.ts +2 -0
- package/dist/runs/family-iteration-ledger.d.ts.map +1 -1
- package/dist/runs/family-iteration-ledger.js +15 -3
- package/dist/runs/family-iteration-ledger.js.map +1 -1
- package/dist/runs/publish-approval.d.ts +8 -0
- package/dist/runs/publish-approval.d.ts.map +1 -1
- package/dist/runs/publish-approval.js +32 -0
- package/dist/runs/publish-approval.js.map +1 -1
- package/dist/runs/review-chain.d.ts +9 -0
- package/dist/runs/review-chain.d.ts.map +1 -1
- package/dist/runs/review-chain.js +24 -0
- package/dist/runs/review-chain.js.map +1 -1
- package/dist/runs/review-curation.d.ts +51 -0
- package/dist/runs/review-curation.d.ts.map +1 -0
- package/dist/runs/review-curation.js +138 -0
- package/dist/runs/review-curation.js.map +1 -0
- package/dist/runs/review-retries.d.ts +4 -1
- package/dist/runs/review-retries.d.ts.map +1 -1
- package/dist/runs/review-retries.js +16 -0
- package/dist/runs/review-retries.js.map +1 -1
- package/dist/runs/run-title.d.ts +18 -0
- package/dist/runs/run-title.d.ts.map +1 -0
- package/dist/runs/run-title.js +64 -0
- package/dist/runs/run-title.js.map +1 -0
- package/dist/sources/contracts.d.ts +127 -0
- package/dist/sources/contracts.d.ts.map +1 -0
- package/dist/sources/contracts.js +2 -0
- package/dist/sources/contracts.js.map +1 -0
- package/dist/sources/validation.d.ts +9 -0
- package/dist/sources/validation.d.ts.map +1 -0
- package/dist/sources/validation.js +79 -0
- package/dist/sources/validation.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RunSourceStatus, SourceDeclaration, SourceLock, SourceNodeStatus, SourceResolution } from '../sources/contracts.js';
|
|
2
|
+
export interface SourcesStatusParams {
|
|
3
|
+
sourceId?: string;
|
|
4
|
+
runId?: string;
|
|
5
|
+
nodeId?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SourcesStatusResult {
|
|
8
|
+
runSource?: RunSourceStatus;
|
|
9
|
+
configured: boolean;
|
|
10
|
+
declarationRevision?: number;
|
|
11
|
+
declarations: SourceDeclaration[];
|
|
12
|
+
resolutions: SourceResolution[];
|
|
13
|
+
locks: SourceLock[];
|
|
14
|
+
nodes: SourceNodeStatus[];
|
|
15
|
+
errors: Array<{
|
|
16
|
+
nodeId?: string;
|
|
17
|
+
sourceId?: string;
|
|
18
|
+
project?: string;
|
|
19
|
+
reason: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface SourcesSyncParams {
|
|
23
|
+
sourceId?: string;
|
|
24
|
+
nodeId?: string;
|
|
25
|
+
operationId: string;
|
|
26
|
+
expectedDeclarationRevision: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SourcesSyncResult extends SourcesStatusResult {
|
|
29
|
+
operationId: string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/rpc/sources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/rpc/sources.ts"],"names":[],"mappings":""}
|
|
@@ -20,6 +20,7 @@ export interface RunDecisionActionInput {
|
|
|
20
20
|
runId: string;
|
|
21
21
|
decision: Pick<RunDecision, 'id' | 'payload'> & Partial<Pick<RunDecision, 'type'>>;
|
|
22
22
|
actionId: string;
|
|
23
|
+
evidenceAttestationReason?: string;
|
|
23
24
|
selectionData?: Record<string, unknown>;
|
|
24
25
|
resourcePosture?: ResourcePostureGateChoice;
|
|
25
26
|
}
|
|
@@ -57,6 +58,7 @@ export declare function buildRunResolveDecisionParams(input: {
|
|
|
57
58
|
runId: string;
|
|
58
59
|
decision: Pick<RunDecision, 'id' | 'payload'>;
|
|
59
60
|
actionId: string;
|
|
61
|
+
evidenceAttestationReason?: string;
|
|
60
62
|
triageAssessmentId?: string;
|
|
61
63
|
publicationTarget?: PublicationTarget;
|
|
62
64
|
selectedEvidenceKeys?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-resolution.d.ts","sourceRoot":"","sources":["../../src/runs/decision-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-resolution.d.ts","sourceRoot":"","sources":["../../src/runs/decision-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAK9D,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;EAS7F;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,OAAO,OAAO,CAAC,iBAAiB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC5E;IAAE,MAAM,EAAE,OAAO,OAAO,CAAC,oBAAoB,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEtF,oFAAoF;AACpF,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,sBAAsB,GAC5B,wBAAwB,CAQ1B;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,sBAAsB;;;EAYrE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAetC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC;;;;OAIG;IACH,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C,GAAG,wBAAwB,CAgC3B"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Methods } from '../rpc/registry.js';
|
|
2
|
+
import { evidenceAttestationReason } from './publish-approval.js';
|
|
3
|
+
import { reviewPostingFingerprint } from './review-curation.js';
|
|
2
4
|
/** Candidate selection shared by the desktop and native decision renderers. */
|
|
3
5
|
export function slotPickerViewModel(payload, selectedSlotId) {
|
|
4
6
|
const candidates = payload.candidates.filter((candidate) => candidate.score >= 0);
|
|
@@ -60,19 +62,27 @@ export function readyResolveSelectionData(input) {
|
|
|
60
62
|
* automatically bound to the exact package visible in that client.
|
|
61
63
|
*/
|
|
62
64
|
export function buildRunResolveDecisionParams(input) {
|
|
65
|
+
const attestationReason = evidenceAttestationReason(input.actionId, input.evidenceAttestationReason);
|
|
63
66
|
const payload = input.decision.payload?.kind === 'ready'
|
|
64
67
|
? input.decision.payload
|
|
65
68
|
: undefined;
|
|
66
|
-
|
|
69
|
+
let selectionData = readyResolveSelectionData({
|
|
67
70
|
payload,
|
|
68
71
|
publicationTarget: input.publicationTarget,
|
|
69
72
|
selectedEvidenceKeys: input.selectedEvidenceKeys,
|
|
70
73
|
extraSelectionData: input.selectionData,
|
|
71
74
|
});
|
|
75
|
+
if (input.actionId === 'post' && input.decision.payload?.kind === 'review') {
|
|
76
|
+
selectionData = {
|
|
77
|
+
reviewFingerprint: reviewPostingFingerprint(input.decision.payload),
|
|
78
|
+
...selectionData,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
72
81
|
return {
|
|
73
82
|
runId: input.runId,
|
|
74
83
|
decisionId: input.decision.id,
|
|
75
84
|
actionId: input.actionId,
|
|
85
|
+
...(attestationReason !== undefined ? { evidenceAttestationReason: attestationReason } : {}),
|
|
76
86
|
...(input.triageAssessmentId !== undefined
|
|
77
87
|
? { triageAssessmentId: input.triageAssessmentId }
|
|
78
88
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-resolution.js","sourceRoot":"","sources":["../../src/runs/decision-resolution.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,OAA0B,EAAE,cAA8B;IAC5F,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAClF,OAAO;QACL,UAAU;QACV,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QAC/D,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,cAAc,CAAC;YACjF,CAAC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;YAC1B,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-resolution.js","sourceRoot":"","sources":["../../src/runs/decision-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,4 +32,6 @@ export interface FamilyIterationLedgerPresentation {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
export declare function buildFamilyIterationLedgerPresentation(snapshot: Pick<FamilyObservabilitySnapshot, 'runs' | 'familyChangeLedger'>): FamilyIterationLedgerPresentation;
|
|
35
|
+
/** Distinguish unavailable capture from a deliberately absent validation delta. */
|
|
36
|
+
export declare function unavailableContributionLabel(entry: Pick<FamilyChangeLedgerEntry, 'flowType' | 'contributionDiff'>): string;
|
|
35
37
|
//# sourceMappingURL=family-iteration-ledger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family-iteration-ledger.d.ts","sourceRoot":"","sources":["../../src/runs/family-iteration-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAEvB,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"family-iteration-ledger.d.ts","sourceRoot":"","sources":["../../src/runs/family-iteration-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAEvB,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,IAAI,CAAC,2BAA2B,EAAE,MAAM,GAAG,oBAAoB,CAAC,GACzE,iCAAiC,CA6BnC;AA6MD,mFAAmF;AACnF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,kBAAkB,CAAC,GACpE,MAAM,CAMR"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { taskTitleText } from './run-title.js';
|
|
1
2
|
export function buildFamilyIterationLedgerPresentation(snapshot) {
|
|
2
3
|
const ledgerEntries = snapshot.familyChangeLedger?.entries ?? [];
|
|
3
4
|
const runsById = new Map(snapshot.runs.map((run) => [run.runId, run]));
|
|
@@ -11,7 +12,9 @@ export function buildFamilyIterationLedgerPresentation(snapshot) {
|
|
|
11
12
|
cards,
|
|
12
13
|
summary: {
|
|
13
14
|
totalRuns: cards.length,
|
|
14
|
-
producedDiffRuns:
|
|
15
|
+
producedDiffRuns: orderedEntries.filter((entry) => entry.iterationDiff?.available ||
|
|
16
|
+
entry.contributionDiff.available ||
|
|
17
|
+
entry.legacyDiffFallback?.available).length,
|
|
15
18
|
reviewedInputRuns: cards.filter((card) => card.reviewedInputLabel !== 'no reviewed input')
|
|
16
19
|
.length,
|
|
17
20
|
recipeRuns: cards.filter((card) => card.recipeLabel !== 'recipe not captured').length,
|
|
@@ -30,7 +33,7 @@ function buildFamilyIterationCard(entry, run, index) {
|
|
|
30
33
|
flowType: entry.flowType,
|
|
31
34
|
flowLabel: flowTypeLabel(entry.flowType),
|
|
32
35
|
reason: iterationReason(entry, run),
|
|
33
|
-
title: run?.summary?.trim() || entry.ticketOrPr || entry.familyRootTicketOrPr,
|
|
36
|
+
title: taskTitleText(run?.summary?.trim() || entry.ticketOrPr || entry.familyRootTicketOrPr, Infinity),
|
|
34
37
|
diffLabel: contributionDiffLabel(entry),
|
|
35
38
|
reviewedInputLabel: reviewedInputLabel(entry),
|
|
36
39
|
evidenceLabel: evidenceLabel(entry, run),
|
|
@@ -107,7 +110,7 @@ function contributionDiffLabel(entry) {
|
|
|
107
110
|
? entry.legacyDiffFallback
|
|
108
111
|
: null;
|
|
109
112
|
if (!diff)
|
|
110
|
-
return
|
|
113
|
+
return unavailableContributionLabel(entry);
|
|
111
114
|
const scope = entry.iterationDiff?.available ? 'iteration delta' : 'produced code delta';
|
|
112
115
|
return `${scope} · ${diff.files} files · +${diff.additions} -${diff.deletions}`;
|
|
113
116
|
}
|
|
@@ -214,4 +217,13 @@ function fallbackLedgerEntryForRun(run) {
|
|
|
214
217
|
missingData: run.missingData,
|
|
215
218
|
};
|
|
216
219
|
}
|
|
220
|
+
/** Distinguish unavailable capture from a deliberately absent validation delta. */
|
|
221
|
+
export function unavailableContributionLabel(entry) {
|
|
222
|
+
const reason = entry.contributionDiff.missingReason;
|
|
223
|
+
if (reason === 'no-source-diff')
|
|
224
|
+
return 'no source-code delta recorded';
|
|
225
|
+
if (reason === 'no-contribution-expected' || reason === 'validation-only')
|
|
226
|
+
return 'validation-only run; no code delta expected';
|
|
227
|
+
return `code delta not captured: ${reason ?? 'base or diff was not recorded'}`;
|
|
228
|
+
}
|
|
217
229
|
//# sourceMappingURL=family-iteration-ledger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"family-iteration-ledger.js","sourceRoot":"","sources":["../../src/runs/family-iteration-ledger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"family-iteration-ledger.js","sourceRoot":"","sources":["../../src/runs/family-iteration-ledger.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAoC/C,MAAM,UAAU,sCAAsC,CACpD,QAA0E;IAE1E,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,EAAE,OAAO,IAAI,EAAE,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI;SAClC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC7C,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAChD,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAClE,CAAC;IACF,OAAO;QACL,KAAK;QACL,OAAO,EAAE;YACP,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,gBAAgB,EAAE,cAAc,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,aAAa,EAAE,SAAS;gBAC9B,KAAK,CAAC,gBAAgB,CAAC,SAAS;gBAChC,KAAK,CAAC,kBAAkB,EAAE,SAAS,CACtC,CAAC,MAAM;YACR,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,KAAK,mBAAmB,CAAC;iBACvF,MAAM;YACT,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,qBAAqB,CAAC,CAAC,MAAM;YACrF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;YAC1F,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,sBAAsB,CAAC,CAAC,MAAM;YACnF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,MAAM;SAC7E;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA8B,EAC9B,GAA8C,EAC9C,KAAa;IAEb,OAAO;QACL,KAAK,EAAE,KAAK,GAAG,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxC,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC;QACnC,KAAK,EAAE,aAAa,CAClB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,oBAAoB,EACtE,QAAQ,CACT;QACD,SAAS,EAAE,qBAAqB,CAAC,KAAK,CAAC;QACvC,kBAAkB,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAC7C,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC;QACxC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC;QAC7B,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;QACrB,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU;QACtF,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;QAC9D,SAAS,EAAE,GAAG,EAAE,MAAM,IAAI,cAAc;QACxC,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAA0B,EAAE,CAA0B;IAC/E,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC7E,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,QAA6C;IAClE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,eAAe;YAClB,OAAO,eAAe,CAAC;QACzB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAA8B,EAC9B,GAA8C;IAE9C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,QAAQ,KAAK,WAAW;YACnC,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,8BAA8B,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,YAAY,IAAI,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,sBAAsB,IAAI,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,6CAA6C,CAAC;QAC/E,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,mCAAmC,CAAC;QACxD,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,qCAAqC,CAAC;QAC5D,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,0BAA0B,CAAC;QACvD,IAAI,KAAK,CAAC,SAAS,EAAE,SAAS;YAAE,OAAO,2CAA2C,CAAC;QACnF,OAAO,yBAAyB,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW;QAAE,OAAO,kBAAkB,CAAC;IAC9D,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,0BAA0B,CAAC;IACvD,IAAI,KAAK,CAAC,gBAAgB,CAAC,SAAS;QAAE,OAAO,0BAA0B,CAAC;IACxE,OAAO,4BAA4B,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA8B;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,SAAS;QACzC,CAAC,CAAC,KAAK,CAAC,aAAa;QACrB,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS;YAChC,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACxB,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,SAAS;gBACnC,CAAC,CAAC,KAAK,CAAC,kBAAkB;gBAC1B,CAAC,CAAC,IAAI,CAAC;IACb,IAAI,CAAC,IAAI;QAAE,OAAO,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACzF,OAAO,GAAG,KAAK,MAAM,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA8B;IACxD,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,mBAAmB,CAAC;IACjD,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,aAAa,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;IACxG,CAAC;IACD,OAAO,KAAK,CAAC,SAAS,CAAC,aAAa,KAAK,gBAAgB;QACvD,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,4BAA4B,CAAC;AACnC,CAAC;AAED,SAAS,aAAa,CACpB,KAA8B,EAC9B,GAA8C;IAE9C,MAAM,KAAK,GAAG,GAAG,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACrE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAC/C,MAAM,IAAI,GACR,KAAK,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,GAA8C;IACjE,IAAI,CAAC,GAAG;QAAE,OAAO,qBAAqB,CAAC;IACvC,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACrF,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,qBAAqB;QAAE,OAAO,iBAAiB,CAAC;IAClG,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,mBAAmB,CAAC;IACzC,MAAM,KAAK,GAAG;QACZ,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;QAC7D,OAAO,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE;QACnF,OAAO,CAAC,+BAA+B,GAAG,CAAC;YACzC,CAAC,CAAC,GAAG,OAAO,CAAC,+BAA+B,YAAY,OAAO,CAAC,+BAA+B,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oBAAoB;YACpI,CAAC,CAAC,EAAE;KACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjE,CAAC;AAED,SAAS,OAAO,CAAC,GAA8C;IAC7D,IAAI,CAAC,GAAG;QAAE,OAAO,sBAAsB,CAAC;IACxC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAC1F,CAAC;IACF,MAAM,WAAW,GACf,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,GAAG,YAAY,CAAC,MAAM,gBAAgB,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,MAAM,eAAe,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChK,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,YAAY,CAAC,MAAM,gBAAgB,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtF,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,WAAW,CAAC,MAAM,eAAe,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,GAA8C;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,sBAAsB,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAkC;IACnE,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,oBAAoB,EAAE,GAAG,CAAC,UAAU;QACpC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM;QAC5D,gBAAgB,EAAE;YAChB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YAC3D,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS;YACjC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK;YACzB,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS;YACjC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS;YACjC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB;SACrE;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM;YAC3B,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACtF,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,EAAE;SAChB;QACD,kBAAkB,EAAE,EAAE;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,4BAA4B,CAC1C,KAAqE;IAErE,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC;IACpD,IAAI,MAAM,KAAK,gBAAgB;QAAE,OAAO,+BAA+B,CAAC;IACxE,IAAI,MAAM,KAAK,0BAA0B,IAAI,MAAM,KAAK,iBAAiB;QACvE,OAAO,6CAA6C,CAAC;IACvD,OAAO,4BAA4B,MAAM,IAAI,+BAA+B,EAAE,CAAC;AACjF,CAAC"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
import type { RunGatePrerequisiteReason, RunGateReadiness } from '../contracts/run-gate-readiness.js';
|
|
2
|
+
import type { DecisionAction } from '../contracts/runs.js';
|
|
1
3
|
/** Approve publication of a package whose reviews satisfy the gate's policy. */
|
|
2
4
|
export declare const APPROVE_PUBLISH_ACTION = "approve-publish";
|
|
5
|
+
export declare const APPROVE_PUBLISH_EVIDENCE_ATTESTED_ACTION = "approve-publish-evidence-attested";
|
|
6
|
+
export declare const EVIDENCE_ATTESTATION_ACTION: DecisionAction;
|
|
7
|
+
export declare function isEvidencePolicyReason(reason: RunGatePrerequisiteReason): boolean;
|
|
8
|
+
export declare function evidenceAttestationAvailable(readiness?: RunGateReadiness): boolean;
|
|
9
|
+
export declare function evidenceAttestationReason(actionId: string, reason?: string): string | undefined;
|
|
10
|
+
export declare function isValidEvidenceAttestationReason(reason: unknown): reason is string;
|
|
3
11
|
/**
|
|
4
12
|
* Human override action surfaced on the publish gate when staleness is caused
|
|
5
13
|
* purely by evidence/subject drift while the reviewed HEAD still matches the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-approval.d.ts","sourceRoot":"","sources":["../../src/runs/publish-approval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish-approval.d.ts","sourceRoot":"","sources":["../../src/runs/publish-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,oBAAoB,CAAC;AAExD,eAAO,MAAM,wCAAwC,sCAAsC,CAAC;AAE5F,eAAO,MAAM,2BAA2B,EAAE,cAMzC,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAQjF;AAED,wBAAgB,4BAA4B,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAOlF;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS/F;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAElF;AAED;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,qCAAqC,CAAC;AAE1F,oGAAoG;AACpG,eAAO,MAAM,2CAA2C,yCAAyC,CAAC;AAElG;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAOvD,CAAC;AAEH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpF"}
|
|
@@ -1,6 +1,37 @@
|
|
|
1
1
|
import { APPROVE_PUBLISH_UNRESOLVED_ACTION } from './review-retries.js';
|
|
2
2
|
/** Approve publication of a package whose reviews satisfy the gate's policy. */
|
|
3
3
|
export const APPROVE_PUBLISH_ACTION = 'approve-publish';
|
|
4
|
+
export const APPROVE_PUBLISH_EVIDENCE_ATTESTED_ACTION = 'approve-publish-evidence-attested';
|
|
5
|
+
export const EVIDENCE_ATTESTATION_ACTION = {
|
|
6
|
+
id: APPROVE_PUBLISH_EVIDENCE_ATTESTED_ACTION,
|
|
7
|
+
label: 'Attest evidence and approve',
|
|
8
|
+
style: 'danger',
|
|
9
|
+
description: 'Your reason and approver identity will appear in the PR. Integrity, source, CI and review checks remain required.',
|
|
10
|
+
};
|
|
11
|
+
export function isEvidencePolicyReason(reason) {
|
|
12
|
+
return (reason.prerequisite === 'evidence' &&
|
|
13
|
+
reason.code === 'evidence-policy-unsatisfied' &&
|
|
14
|
+
['execution-verdict', 'claim-verdict', 'criterion-binding'].includes(reason.evidencePolicy ?? ''));
|
|
15
|
+
}
|
|
16
|
+
export function evidenceAttestationAvailable(readiness) {
|
|
17
|
+
return (!!readiness &&
|
|
18
|
+
readiness.state === 'not-ready' &&
|
|
19
|
+
readiness.reasons.length > 0 &&
|
|
20
|
+
readiness.reasons.every(isEvidencePolicyReason));
|
|
21
|
+
}
|
|
22
|
+
export function evidenceAttestationReason(actionId, reason) {
|
|
23
|
+
if (actionId !== APPROVE_PUBLISH_EVIDENCE_ATTESTED_ACTION) {
|
|
24
|
+
if (reason !== undefined)
|
|
25
|
+
throw new Error('An evidence reason requires attested evidence approval.');
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
if (!isValidEvidenceAttestationReason(reason))
|
|
29
|
+
throw new Error('Attested evidence approval requires a written reason.');
|
|
30
|
+
return reason.trim();
|
|
31
|
+
}
|
|
32
|
+
export function isValidEvidenceAttestationReason(reason) {
|
|
33
|
+
return typeof reason === 'string' && reason.trim().length > 0;
|
|
34
|
+
}
|
|
4
35
|
/**
|
|
5
36
|
* Human override action surfaced on the publish gate when staleness is caused
|
|
6
37
|
* purely by evidence/subject drift while the reviewed HEAD still matches the
|
|
@@ -18,6 +49,7 @@ export const APPROVE_PUBLISH_SNAPSHOT_UNAVAILABLE_ACTION = 'approve-publish-snap
|
|
|
18
49
|
*/
|
|
19
50
|
export const PUBLISH_APPROVAL_ACTIONS = new Set([
|
|
20
51
|
APPROVE_PUBLISH_ACTION,
|
|
52
|
+
APPROVE_PUBLISH_EVIDENCE_ATTESTED_ACTION,
|
|
21
53
|
APPROVE_PUBLISH_EVIDENCE_REFRESH_ACTION,
|
|
22
54
|
APPROVE_PUBLISH_SNAPSHOT_UNAVAILABLE_ACTION,
|
|
23
55
|
APPROVE_PUBLISH_UNRESOLVED_ACTION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-approval.js","sourceRoot":"","sources":["../../src/runs/publish-approval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish-approval.js","sourceRoot":"","sources":["../../src/runs/publish-approval.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAExE,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,wCAAwC,GAAG,mCAAmC,CAAC;AAE5F,MAAM,CAAC,MAAM,2BAA2B,GAAmB;IACzD,EAAE,EAAE,wCAAwC;IAC5C,KAAK,EAAE,6BAA6B;IACpC,KAAK,EAAE,QAAQ;IACf,WAAW,EACT,mHAAmH;CACtH,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,MAAiC;IACtE,OAAO,CACL,MAAM,CAAC,YAAY,KAAK,UAAU;QAClC,MAAM,CAAC,IAAI,KAAK,6BAA6B;QAC7C,CAAC,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAClE,MAAM,CAAC,cAAc,IAAI,EAAE,CAC5B,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,SAA4B;IACvE,OAAO,CACL,CAAC,CAAC,SAAS;QACX,SAAS,CAAC,KAAK,KAAK,WAAW;QAC/B,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,MAAe;IACzE,IAAI,QAAQ,KAAK,wCAAwC,EAAE,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS;YACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAe;IAC9D,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,kCAAkC,CAAC;AAE1F,oGAAoG;AACpG,MAAM,CAAC,MAAM,2CAA2C,GAAG,sCAAsC,CAAC;AAElG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IACnE,sBAAsB;IACtB,wCAAwC;IACxC,uCAAuC;IACvC,2CAA2C;IAC3C,iCAAiC;IACjC,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,QAAmC;IACzE,OAAO,wBAAwB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { RepeatReviewContext, ReviewChainEntry, ReviewMode, Run, RunReviewResult } from '../contracts/index.js';
|
|
2
2
|
export declare function reviewResultForRun(run: Pick<Run, 'decisions' | 'reviewResult'>): RunReviewResult | null;
|
|
3
|
+
/** Saved choices are requests; only a published receipt confirms the provider event. */
|
|
4
|
+
export declare function savedReviewView(run: Pick<Run, 'flowType' | 'status' | 'decisions' | 'reviewResult' | 'reviewPublication'>): {
|
|
5
|
+
verdict: string | null;
|
|
6
|
+
reviewedSha: string | null;
|
|
7
|
+
report: string | null;
|
|
8
|
+
requestedRecommendation: string | null;
|
|
9
|
+
requestedFindingCount: number | null;
|
|
10
|
+
confirmedEvent: "APPROVE" | "REQUEST_CHANGES" | "COMMENT" | null;
|
|
11
|
+
} | null;
|
|
3
12
|
export declare function currentReviewChainEntry(run: Pick<Run, 'id' | 'familyId' | 'createdAt' | 'completedAt' | 'decisions' | 'reviewResult' | 'metrics' | 'repeatReviewContext'>): ReviewChainEntry | null;
|
|
4
13
|
/** Shared client projection: immutable predecessors plus the current generation. */
|
|
5
14
|
export declare function reviewChainForRun(run: Parameters<typeof currentReviewChainEntry>[0]): ReviewChainEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-chain.d.ts","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAEhB,UAAU,EACV,GAAG,EACH,eAAe,EAChB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-chain.d.ts","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAEhB,UAAU,EACV,GAAG,EACH,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,CAAC,GAC3C,eAAe,GAAG,IAAI,CAOxB;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,GAAG,mBAAmB,CAAC;;;;;;;SAqB3F;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,CACP,GAAG,EACD,IAAI,GACJ,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,cAAc,GACd,SAAS,GACT,qBAAqB,CACxB,GACA,gBAAgB,GAAG,IAAI,CA4BzB;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,GACjD,gBAAgB,EAAE,CAMpB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5D,UAAU,CAEZ;AAED,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GACvC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,SAAS,CAEpE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isTerminalRunStatus } from '../contracts/runs.js';
|
|
1
2
|
export function reviewResultForRun(run) {
|
|
2
3
|
if (run.reviewResult)
|
|
3
4
|
return run.reviewResult;
|
|
@@ -8,6 +9,29 @@ export function reviewResultForRun(run) {
|
|
|
8
9
|
}
|
|
9
10
|
return null;
|
|
10
11
|
}
|
|
12
|
+
/** Saved choices are requests; only a published receipt confirms the provider event. */
|
|
13
|
+
export function savedReviewView(run) {
|
|
14
|
+
const latestGate = [...run.decisions]
|
|
15
|
+
.reverse()
|
|
16
|
+
.find((item) => item.type === 'engine_review_posting');
|
|
17
|
+
if (latestGate && !latestGate.resolvedAt)
|
|
18
|
+
return null;
|
|
19
|
+
const result = reviewResultForRun(run);
|
|
20
|
+
if (!result && (run.flowType !== 'review-pr' || !isTerminalRunStatus(run.status)))
|
|
21
|
+
return null;
|
|
22
|
+
const selection = latestGate?.selectionData;
|
|
23
|
+
const receipt = run.reviewPublication?.receipt;
|
|
24
|
+
return {
|
|
25
|
+
verdict: result?.recommendation?.trim() ? result.recommendation : null,
|
|
26
|
+
reviewedSha: result?.reviewSnapshot?.headSha || null,
|
|
27
|
+
report: result?.reviewMd?.trim() ? result.reviewMd : null,
|
|
28
|
+
requestedRecommendation: typeof selection?.recommendation === 'string' ? selection.recommendation : null,
|
|
29
|
+
requestedFindingCount: Array.isArray(selection?.includedIndices)
|
|
30
|
+
? selection.includedIndices.length
|
|
31
|
+
: null,
|
|
32
|
+
confirmedEvent: receipt?.state === 'published' ? receipt.event : null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
11
35
|
export function currentReviewChainEntry(run) {
|
|
12
36
|
const context = run.repeatReviewContext;
|
|
13
37
|
if (!context)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-chain.js","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-chain.js","sourceRoot":"","sources":["../../src/runs/review-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { PRReviewThread } from '../contracts/reviews.js';
|
|
2
|
+
import type { ReviewGatePayload, ReviewLineComment, RunReviewResult } from '../contracts/runs.js';
|
|
3
|
+
export declare function reviewCommentKey(comment: ReviewLineComment): string;
|
|
4
|
+
export declare function reviewCommentsByFile(comments: readonly ReviewLineComment[]): Map<string, ReviewLineComment[]>;
|
|
5
|
+
export declare function reviewCommentCountByFile(commentsByFile: ReadonlyMap<string, readonly ReviewLineComment[]>): Map<string, number>;
|
|
6
|
+
export declare function reviewThreadsForFile(commentsByFile: ReadonlyMap<string, readonly ReviewLineComment[]>, filePath: string, timestamp?: () => string): PRReviewThread[];
|
|
7
|
+
export declare const REVIEW_POST_RECOMMENDATIONS: readonly ["COMMENT", "REQUEST_CHANGES", "APPROVE"];
|
|
8
|
+
export type ReviewPostRecommendation = (typeof REVIEW_POST_RECOMMENDATIONS)[number];
|
|
9
|
+
export declare function reviewPostRecommendation(payload: Pick<ReviewGatePayload, 'recommendation'>): ReviewPostRecommendation;
|
|
10
|
+
/** Bind user choices to content, excluding refresh times and transient artifact URLs. */
|
|
11
|
+
export declare function reviewPostingFingerprint(payload: RunReviewResult): string;
|
|
12
|
+
export interface ReviewCurationState {
|
|
13
|
+
reviewFingerprint: string;
|
|
14
|
+
includedIndices: number[];
|
|
15
|
+
recommendation: ReviewPostRecommendation;
|
|
16
|
+
includeEvidence: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function createReviewCuration(payload: ReviewGatePayload): ReviewCurationState;
|
|
19
|
+
export declare function toggleReviewFinding(state: ReviewCurationState, index: number): ReviewCurationState;
|
|
20
|
+
export declare function reviewCurationView(payload: ReviewGatePayload, state: ReviewCurationState): {
|
|
21
|
+
fingerprint: string;
|
|
22
|
+
reviewedSha: string | null;
|
|
23
|
+
findings: {
|
|
24
|
+
index: number;
|
|
25
|
+
included: boolean;
|
|
26
|
+
path: string;
|
|
27
|
+
line: number;
|
|
28
|
+
body: string;
|
|
29
|
+
severity: string;
|
|
30
|
+
}[];
|
|
31
|
+
includedCount: number;
|
|
32
|
+
recommendation: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
|
|
33
|
+
evidenceAvailable: boolean;
|
|
34
|
+
includeEvidence: boolean;
|
|
35
|
+
reportNote: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function assertReviewCurationFresh(payload: RunReviewResult, selection?: Record<string, unknown>): void;
|
|
38
|
+
/** Existing publication selection semantics, shared with both client models. */
|
|
39
|
+
export declare function selectReviewFindings(result: RunReviewResult, selection: Record<string, unknown>): RunReviewResult;
|
|
40
|
+
export interface ReviewedSourceLine {
|
|
41
|
+
number: number;
|
|
42
|
+
text: string;
|
|
43
|
+
target: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ReviewedFindingContext {
|
|
46
|
+
available: boolean;
|
|
47
|
+
note: string;
|
|
48
|
+
lines: ReviewedSourceLine[];
|
|
49
|
+
}
|
|
50
|
+
export declare function reviewedFindingContext(content: string, line: number): ReviewedFindingContext;
|
|
51
|
+
//# sourceMappingURL=review-curation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-curation.d.ts","sourceRoot":"","sources":["../../src/runs/review-curation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAEnE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GACrC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAQlC;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC,GAChE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrB;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC,EACjE,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAM,MAAuC,GACvD,cAAc,EAAE,CAkBlB;AAED,eAAO,MAAM,2BAA2B,oDAAqD,CAAC;AAC9F,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GACjD,wBAAwB,CAG1B;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAWzE;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,wBAAwB,CAAC;IACzC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,CAOpF;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAOrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,mBAAmB;;;;;;;;;;;;;;;;EAexF;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAUN;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe,CAyBjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AACD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAkB5F"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { digestRecipeDocument } from '../recipe/digest.js';
|
|
2
|
+
export function reviewCommentKey(comment) {
|
|
3
|
+
return `${comment.path}\u0000${comment.line}\u0000${comment.body}`;
|
|
4
|
+
}
|
|
5
|
+
export function reviewCommentsByFile(comments) {
|
|
6
|
+
const map = new Map();
|
|
7
|
+
for (const comment of comments) {
|
|
8
|
+
const list = map.get(comment.path) ?? [];
|
|
9
|
+
list.push(comment);
|
|
10
|
+
map.set(comment.path, list);
|
|
11
|
+
}
|
|
12
|
+
return map;
|
|
13
|
+
}
|
|
14
|
+
export function reviewCommentCountByFile(commentsByFile) {
|
|
15
|
+
const map = new Map();
|
|
16
|
+
for (const [path, comments] of commentsByFile) {
|
|
17
|
+
map.set(path, comments.length);
|
|
18
|
+
}
|
|
19
|
+
return map;
|
|
20
|
+
}
|
|
21
|
+
export function reviewThreadsForFile(commentsByFile, filePath, timestamp = () => new Date().toISOString()) {
|
|
22
|
+
const comments = commentsByFile.get(filePath) ?? [];
|
|
23
|
+
return comments.map((comment, index) => ({
|
|
24
|
+
id: `review-${index}-${comment.line}`,
|
|
25
|
+
path: comment.path,
|
|
26
|
+
line: comment.line,
|
|
27
|
+
resolved: false,
|
|
28
|
+
outdated: false,
|
|
29
|
+
comments: [
|
|
30
|
+
{
|
|
31
|
+
id: index,
|
|
32
|
+
body: `**[${comment.severity}]** ${comment.body}`,
|
|
33
|
+
author: 'Review Agent',
|
|
34
|
+
createdAt: timestamp(),
|
|
35
|
+
updatedAt: timestamp(),
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
export const REVIEW_POST_RECOMMENDATIONS = ['COMMENT', 'REQUEST_CHANGES', 'APPROVE'];
|
|
41
|
+
export function reviewPostRecommendation(payload) {
|
|
42
|
+
const value = payload.recommendation?.trim().toUpperCase();
|
|
43
|
+
return value === 'APPROVE' || value === 'REQUEST_CHANGES' ? value : 'COMMENT';
|
|
44
|
+
}
|
|
45
|
+
/** Bind user choices to content, excluding refresh times and transient artifact URLs. */
|
|
46
|
+
export function reviewPostingFingerprint(payload) {
|
|
47
|
+
const snapshot = payload.reviewSnapshot;
|
|
48
|
+
return digestRecipeDocument([
|
|
49
|
+
snapshot?.baseSha ?? null,
|
|
50
|
+
snapshot?.headSha ?? null,
|
|
51
|
+
snapshot?.diffHash ?? null,
|
|
52
|
+
snapshot?.untrackedFiles ?? [],
|
|
53
|
+
payload.reviewMd,
|
|
54
|
+
payload.recommendation,
|
|
55
|
+
payload.lineComments,
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
export function createReviewCuration(payload) {
|
|
59
|
+
return {
|
|
60
|
+
reviewFingerprint: reviewPostingFingerprint(payload),
|
|
61
|
+
includedIndices: payload.lineComments.map((_, index) => index),
|
|
62
|
+
recommendation: reviewPostRecommendation(payload),
|
|
63
|
+
includeEvidence: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function toggleReviewFinding(state, index) {
|
|
67
|
+
return {
|
|
68
|
+
...state,
|
|
69
|
+
includedIndices: state.includedIndices.includes(index)
|
|
70
|
+
? state.includedIndices.filter((value) => value !== index)
|
|
71
|
+
: [...state.includedIndices, index].sort((a, b) => a - b),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function reviewCurationView(payload, state) {
|
|
75
|
+
return {
|
|
76
|
+
fingerprint: reviewPostingFingerprint(payload),
|
|
77
|
+
reviewedSha: payload.reviewSnapshot?.headSha?.trim() || null,
|
|
78
|
+
findings: payload.lineComments.map((comment, index) => ({
|
|
79
|
+
...comment,
|
|
80
|
+
index,
|
|
81
|
+
included: state.includedIndices.includes(index),
|
|
82
|
+
})),
|
|
83
|
+
includedCount: state.includedIndices.length,
|
|
84
|
+
recommendation: state.recommendation,
|
|
85
|
+
evidenceAvailable: Boolean(payload.evidenceMarkdown?.trim()),
|
|
86
|
+
includeEvidence: state.includeEvidence,
|
|
87
|
+
reportNote: 'Selection controls finding comments. The original review report stays unchanged.',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function assertReviewCurationFresh(payload, selection) {
|
|
91
|
+
const fingerprint = selection?.reviewFingerprint;
|
|
92
|
+
if (fingerprint !== undefined &&
|
|
93
|
+
(typeof fingerprint !== 'string' || fingerprint !== reviewPostingFingerprint(payload))) {
|
|
94
|
+
throw Object.assign(new Error('Review changed. Inspect the current review before posting.'), {
|
|
95
|
+
code: 'REVIEW_CHANGED',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Existing publication selection semantics, shared with both client models. */
|
|
100
|
+
export function selectReviewFindings(result, selection) {
|
|
101
|
+
assertReviewCurationFresh(result, selection);
|
|
102
|
+
const recommendation = selection.recommendation ?? result.recommendation;
|
|
103
|
+
if (typeof recommendation !== 'string' ||
|
|
104
|
+
!REVIEW_POST_RECOMMENDATIONS.includes(recommendation))
|
|
105
|
+
throw new Error('Invalid selected review recommendation');
|
|
106
|
+
const indices = selection.includedIndices;
|
|
107
|
+
if (indices !== undefined &&
|
|
108
|
+
(!Array.isArray(indices) ||
|
|
109
|
+
indices.some((index) => !Number.isInteger(index) || index < 0 || index >= result.lineComments.length)))
|
|
110
|
+
throw new Error('Invalid selected review comments');
|
|
111
|
+
return {
|
|
112
|
+
...result,
|
|
113
|
+
recommendation,
|
|
114
|
+
lineComments: indices === undefined
|
|
115
|
+
? result.lineComments
|
|
116
|
+
: result.lineComments.filter((_, index) => indices.includes(index)),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function reviewedFindingContext(content, line) {
|
|
120
|
+
const lines = content.replace(/\r\n?/g, '\n').split('\n');
|
|
121
|
+
if (lines.at(-1) === '')
|
|
122
|
+
lines.pop();
|
|
123
|
+
if (!Number.isSafeInteger(line) || line < 1 || line > lines.length)
|
|
124
|
+
return {
|
|
125
|
+
available: false,
|
|
126
|
+
note: 'Finding line is unavailable in the reviewed revision.',
|
|
127
|
+
lines: [],
|
|
128
|
+
};
|
|
129
|
+
const start = Math.max(1, line - 4), end = Math.min(lines.length, line + 4);
|
|
130
|
+
return {
|
|
131
|
+
available: true,
|
|
132
|
+
note: '',
|
|
133
|
+
lines: lines
|
|
134
|
+
.slice(start - 1, end)
|
|
135
|
+
.map((text, index) => ({ number: start + index, text, target: start + index === line })),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=review-curation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-curation.js","sourceRoot":"","sources":["../../src/runs/review-curation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type { ReviewStatus } from '../contracts/runs.js';
|
|
1
|
+
import type { ReviewRoundBudget, ReviewStatus } from '../contracts/runs.js';
|
|
2
|
+
export declare const MAX_REVIEW_ROUNDS = 5;
|
|
3
|
+
/** Round budget is separate from the number of qualifying passing reviewers. */
|
|
4
|
+
export declare function reviewRoundBudget(used: number): ReviewRoundBudget;
|
|
2
5
|
export declare const APPROVE_PUBLISH_UNRESOLVED_ACTION = "approve-publish-unresolved";
|
|
3
6
|
type ReviewRetryFields = Partial<Pick<ReviewStatus, 'source' | 'verdict' | 'unresolvedCount' | 'issues' | 'feedbackSent' | 'recoveryContinuationPending' | 'retryCount' | 'maxRetries' | 'maxRetriesExhausted' | 'attempts' | 'reviewedHeadSha' | 'reviewedReviewSubjectHash' | 'reviewSnapshot'>>;
|
|
4
7
|
export declare function reviewRetryCount(review: ReviewRetryFields): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-retries.d.ts","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-retries.d.ts","sourceRoot":"","sources":["../../src/runs/review-retries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAcjE;AAED,eAAO,MAAM,iCAAiC,+BAA+B,CAAC;AAE9E,KAAK,iBAAiB,GAAG,OAAO,CAC9B,IAAI,CACF,YAAY,EACV,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,6BAA6B,GAC7B,YAAY,GACZ,YAAY,GACZ,qBAAqB,GACrB,UAAU,GACV,iBAAiB,GACjB,2BAA2B,GAC3B,gBAAgB,CACnB,CACF,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAMlE;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAW5E;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,iBAAiB,EAC7D,MAAM,EAAE,CAAC,EACT,oBAAoB,CAAC,EAAE,MAAM,GAC5B,CAAC,CAeH;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAQtE;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAChD,iBAAiB,GAAG,SAAS,CAI/B;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,GAChD,iBAAiB,GAAG,SAAS,CAI/B"}
|