@ccdd/project 5.1.2 → 6.0.1
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/dist/monitor-ui/assets/{GraphView-BILt_jGR.js → GraphView-Dvqux-3b.js} +3 -3
- package/dist/monitor-ui/assets/ValidationView-ksCr_lB7.css +1 -0
- package/dist/monitor-ui/assets/ValidationView-qhnNfj00.js +1 -0
- package/dist/monitor-ui/assets/{elk-api-CW6DDhyE.js → elk-api-D1k8qsLm.js} +1 -1
- package/dist/monitor-ui/assets/{elk.bundled-WR-av3nY.js → elk.bundled-DgeQWR_s.js} +1 -1
- package/dist/monitor-ui/assets/{index-Drtw0yLv.js → index-beXagC6U.js} +3 -3
- package/dist/monitor-ui/index.html +1 -1
- package/dist/src/artifacts/scope.d.ts +1 -1
- package/dist/src/artifacts/scope.js +2 -2
- package/dist/src/artifacts/scope.js.map +1 -1
- package/dist/src/broker/admission.d.ts +19 -0
- package/dist/src/broker/admission.js +33 -0
- package/dist/src/broker/admission.js.map +1 -0
- package/dist/src/broker/changes.d.ts +25 -0
- package/dist/src/broker/changes.js +27 -0
- package/dist/src/broker/changes.js.map +1 -0
- package/dist/src/broker/coalescing.d.ts +1 -0
- package/dist/src/broker/coalescing.js +5 -3
- package/dist/src/broker/coalescing.js.map +1 -1
- package/dist/src/broker/graph.d.ts +1 -1
- package/dist/src/broker/graph.js +1 -1
- package/dist/src/broker/graph.js.map +1 -1
- package/dist/src/broker/index.d.ts +29 -3
- package/dist/src/broker/index.js +263 -307
- package/dist/src/broker/index.js.map +1 -1
- package/dist/src/broker/readiness.d.ts +17 -0
- package/dist/src/broker/readiness.js +252 -0
- package/dist/src/broker/readiness.js.map +1 -0
- package/dist/src/broker/storage.d.ts +101 -0
- package/dist/src/broker/storage.js +315 -0
- package/dist/src/broker/storage.js.map +1 -0
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/monitor/store.js +6 -4
- package/dist/src/monitor/store.js.map +1 -1
- package/dist/src/monitor/ui/format.js +1 -1
- package/dist/src/monitor/ui/format.js.map +1 -1
- package/dist/src/project/cli.js +8 -7
- package/dist/src/project/cli.js.map +1 -1
- package/dist/src/project/gates.d.ts +6 -0
- package/dist/src/project/gates.js +33 -0
- package/dist/src/project/gates.js.map +1 -0
- package/dist/src/project/index.d.ts +2 -1
- package/dist/src/project/index.js +2 -2
- package/dist/src/project/index.js.map +1 -1
- package/dist/src/project/query.js +35 -8
- package/dist/src/project/query.js.map +1 -1
- package/dist/src/project/store.d.ts +1 -1
- package/dist/src/project/store.js +29 -17
- package/dist/src/project/store.js.map +1 -1
- package/dist/src/project/types.d.ts +7 -3
- package/dist/src/requester/index.d.ts +3 -2
- package/dist/src/requester/index.js +6 -5
- package/dist/src/requester/index.js.map +1 -1
- package/dist/src/state-format.js +2 -2
- package/package.json +2 -2
- package/dist/monitor-ui/assets/ValidationView-D18mwExY.css +0 -1
- package/dist/monitor-ui/assets/ValidationView-L-a3hI_A.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { records } from '../broker/storage.js';
|
|
1
2
|
import { assertStateFormat } from '../state-format.js';
|
|
2
3
|
import { semanticResult } from '../response-schema.js';
|
|
3
4
|
import { requesterRun, requesterRequest, requesterEvidence, resultView } from '../result-view.js';
|
|
@@ -6,13 +7,21 @@ import { existsSync } from 'node:fs';
|
|
|
6
7
|
import { join } from 'node:path';
|
|
7
8
|
import { planProject } from './query.js';
|
|
8
9
|
import { findCoalescibleRequest } from '../broker/coalescing.js';
|
|
9
|
-
export function readEvidence(database) {
|
|
10
|
-
const
|
|
10
|
+
export function readEvidence(database, runId) {
|
|
11
|
+
const store = records(database);
|
|
12
|
+
const rows = runId === undefined
|
|
13
|
+
? database.prepare("SELECT data FROM requests WHERE status IN ('GREEN','RED') ORDER BY json_extract(data,'$.completedAt'),rowid").all()
|
|
14
|
+
: database.prepare("SELECT q.data FROM requests q JOIN (SELECT DISTINCT evidence_id FROM run_members WHERE run_id=? AND evidence_id IS NOT NULL) m ON q.id=m.evidence_id WHERE q.status IN ('GREEN','RED') ORDER BY json_extract(q.data,'$.completedAt'),q.rowid").all(runId);
|
|
11
15
|
return rows.flatMap(row => {
|
|
12
|
-
const
|
|
13
|
-
if (!
|
|
16
|
+
const header = JSON.parse(String(row.data));
|
|
17
|
+
if (!header.inputRef || !header.resultRef || !header.completedAt)
|
|
14
18
|
return [];
|
|
15
|
-
|
|
19
|
+
const input = store.get(header.inputRef), result = store.get(header.semanticRef);
|
|
20
|
+
if (!result || result.verdict !== header.status)
|
|
21
|
+
throw new Error('Stored result/status mismatch.');
|
|
22
|
+
if (input.version !== 3 || !/^[a-f0-9]{64}$/.test(input.key))
|
|
23
|
+
return [];
|
|
24
|
+
return [{ requestId: header.id, runId: header.runId, criticId: header.criticId, input, completedAt: header.completedAt, verdict: result.verdict, result: semanticResult(result) }];
|
|
16
25
|
});
|
|
17
26
|
}
|
|
18
27
|
/** Existing databases only; no migrations, ownership reconciliation or write connection. */
|
|
@@ -35,20 +44,18 @@ export function withProjectStore(stateDir, read, empty) {
|
|
|
35
44
|
}
|
|
36
45
|
export function projectHistory(stateDir, options = {}) { return withProjectStore(stateDir, db => readEvidence(db).map(evidence => resultView(options, evidence, () => requesterEvidence(evidence, stateDir))), []); }
|
|
37
46
|
// Compact/status consumers do not hydrate request manifests or duplicated Run
|
|
38
|
-
// templates/graph. Full audit lookup
|
|
47
|
+
// templates/graph. Full audit lookup reconstructs the admitted current-format record.
|
|
39
48
|
const requestProjection = "json_remove(data, '$.artifacts', '$.configManifest', '$.payload', '$.references')";
|
|
40
49
|
function readRun(database, id, full) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
if (!row)
|
|
50
|
+
const store = records(database), run = store.run(id, full);
|
|
51
|
+
if (!run)
|
|
44
52
|
return null;
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const events = database.prepare('SELECT * FROM (SELECT * FROM events WHERE run_id = ? ORDER BY id DESC LIMIT 500) ORDER BY id').all(id).map(event => ({ id: Number(event.id), runId: String(event.run_id), requestId: event.request_id === null ? null : String(event.request_id), createdAt: String(event.created_at), type: String(event.type), message: String(event.message), ...(event.data ? { data: JSON.parse(String(event.data)) } : {}) }));
|
|
53
|
+
const requests = database.prepare('SELECT id FROM requests WHERE run_id=? ORDER BY ordinal').all(id).map(row => store.request(String(row.id), full));
|
|
54
|
+
const shared = (run.project?.coalescedRequestIds ?? []).map(id => store.request(id, false));
|
|
55
|
+
const events = full ? database.prepare('SELECT * FROM (SELECT * FROM events WHERE run_id = ? ORDER BY id DESC LIMIT 500) ORDER BY id').all(id).map(event => ({ id: Number(event.id), runId: String(event.run_id), requestId: event.request_id === null ? null : String(event.request_id), createdAt: String(event.created_at), type: String(event.type), message: String(event.message), ...(event.data ? { data: JSON.parse(String(event.data)) } : {}) })) : [];
|
|
49
56
|
const owner = database.prepare('SELECT pid, claimed_at FROM run_owners WHERE run_id = ?').get(id);
|
|
50
57
|
return { ...run, scope: run.scope ?? { kind: run.graph ? 'graph' : 'chain' }, requests, events, owner: owner ? { pid: Number(owner.pid), claimedAt: String(owner.claimed_at) } : null,
|
|
51
|
-
...(run.project?.version === 3 ? { validation: planProject(run.project.snapshot, readEvidence(database).filter(e => !run.project.evidenceRequestIds || run.project.evidenceRequestIds.includes(e.requestId)), { selection: run.project.selection, recursive: run.project.recursive, force: run.project.force, runId: id, coalescedRequestIds: run.project.coalescedRequestIds, attempts: [...requests, ...shared] }) } : {}) };
|
|
58
|
+
...(run.project?.version === 3 ? { validation: planProject(run.project.snapshot, readEvidence(database, id).filter(e => !run.project.evidenceRequestIds || run.project.evidenceRequestIds.includes(e.requestId)), { selection: run.project.selection, recursive: run.project.recursive, force: run.project.force, ignoreGates: run.project.ignoreGates, runId: id, coalescedRequestIds: run.project.coalescedRequestIds, attempts: [...requests, ...shared] }) } : {}) };
|
|
52
59
|
}
|
|
53
60
|
export function storedRun(database, id) { return readRun(database, id, true); }
|
|
54
61
|
export function storedRequesterRun(database, id, stateDir) {
|
|
@@ -59,13 +66,18 @@ export function storedValidation(database, id) { return readRun(database, id, fa
|
|
|
59
66
|
export function projectRun(stateDir, id) { return withProjectStore(stateDir, db => storedRun(db, id), null); }
|
|
60
67
|
export function projectRuns(stateDir, options = {}) { return withProjectStore(stateDir, db => db.prepare('SELECT id FROM runs ORDER BY created_at DESC, rowid DESC').all().map(row => { const run = readRun(db, String(row.id), options.detail === 'full'); return resultView(options, run, () => requesterRun(run, stateDir)); }), []); }
|
|
61
68
|
export function projectRequests(stateDir, runId, options = {}) {
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
return withProjectStore(stateDir, db => {
|
|
70
|
+
const store = records(db);
|
|
71
|
+
return (runId ? db.prepare('SELECT id FROM requests WHERE run_id=? ORDER BY ordinal').all(runId) : db.prepare('SELECT id FROM requests ORDER BY rowid').all()).map(row => {
|
|
72
|
+
const request = store.request(String(row.id), options.detail === 'full');
|
|
73
|
+
return resultView(options, request, () => requesterRequest(request, stateDir));
|
|
74
|
+
});
|
|
75
|
+
}, []);
|
|
64
76
|
}
|
|
65
77
|
/** Evidence and active candidates belong to one readonly snapshot; never reconcile stored owners. */
|
|
66
78
|
export function currentProjectPlan(stateDir, snapshot, options) {
|
|
67
79
|
return withProjectStore(stateDir, db => planProject(snapshot, readEvidence(db), options, critic => {
|
|
68
|
-
const source = findCoalescibleRequest(db, critic.id, critic.input.key);
|
|
80
|
+
const source = findCoalescibleRequest(db, critic.id, critic.input.key, { ignoreGates: options?.ignoreGates });
|
|
69
81
|
return source ? { requestId: source.request.id, ...(source.leaseExpiresAt ? { leaseExpiresAt: source.leaseExpiresAt } : {}) } : null;
|
|
70
82
|
}), null) ?? planProject(snapshot, [], options);
|
|
71
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/project/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAyC,MAAM,mBAAmB,CAAC;AACzI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,QAAsB;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/project/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,7 @@ export interface ProjectRunDefinition {
|
|
|
53
53
|
selection: ProjectSelection;
|
|
54
54
|
recursive: boolean;
|
|
55
55
|
force: boolean;
|
|
56
|
+
ignoreGates?: boolean;
|
|
56
57
|
/** Prepared definitions, not tickets or persisted stale states. */
|
|
57
58
|
templates: ReviewEnvelope[];
|
|
58
59
|
/** Original evidence consumed by a completed execution; never a cached stale flag. */
|
|
@@ -60,7 +61,7 @@ export interface ProjectRunDefinition {
|
|
|
60
61
|
/** Existing active requests adopted by this Run; never duplicate executions. */
|
|
61
62
|
coalescedRequestIds?: string[];
|
|
62
63
|
}
|
|
63
|
-
export type ValidationStatus = 'PASS' | 'BASIS' | 'UNREVIEWED' | 'STALE' | 'RED' | 'ERROR' | 'INCOMPLETE' | 'QUEUED' | 'RUNNING' | 'WAITING_HUMAN';
|
|
64
|
+
export type ValidationStatus = 'BLOCKED' | 'WAIT_DEPENDENCY' | 'PASS' | 'BASIS' | 'UNREVIEWED' | 'STALE' | 'RED' | 'ERROR' | 'INCOMPLETE' | 'QUEUED' | 'RUNNING' | 'WAITING_HUMAN';
|
|
64
65
|
export interface CriticValidation {
|
|
65
66
|
id: string;
|
|
66
67
|
title: string;
|
|
@@ -98,13 +99,15 @@ export interface ProjectQuery {
|
|
|
98
99
|
export interface ProjectPlan extends ProjectQuery {
|
|
99
100
|
recursive: boolean;
|
|
100
101
|
force: boolean;
|
|
102
|
+
ignoreGates?: boolean;
|
|
101
103
|
selectedCriticIds: string[];
|
|
102
104
|
includedCriticIds: string[];
|
|
103
105
|
items: (CriticValidation & {
|
|
104
|
-
action: 'REUSE' | 'COALESCE' | 'EXECUTE' | 'WAIT' | 'ACTIVE' | 'FAILED';
|
|
106
|
+
action: 'BLOCKED' | 'WAIT_DEPENDENCY' | 'REUSE' | 'COALESCE' | 'EXECUTE' | 'WAIT' | 'ACTIVE' | 'FAILED';
|
|
105
107
|
leaseExpiresAt?: string;
|
|
106
108
|
})[];
|
|
107
109
|
counts: {
|
|
110
|
+
gated: number;
|
|
108
111
|
reuse: number;
|
|
109
112
|
coalesce: number;
|
|
110
113
|
execute: number;
|
|
@@ -115,8 +118,9 @@ export interface ProjectPlan extends ProjectQuery {
|
|
|
115
118
|
}
|
|
116
119
|
export interface QueryOptions {
|
|
117
120
|
selection?: ProjectSelection;
|
|
121
|
+
ignoreGates?: boolean;
|
|
118
122
|
forceCriticIds?: readonly string[];
|
|
119
123
|
runId?: string;
|
|
120
124
|
coalescedRequestIds?: readonly string[];
|
|
121
|
-
attempts?: readonly Pick<ReviewRequest, 'id' | 'criticId' | 'status' | 'error'>[];
|
|
125
|
+
attempts?: readonly Pick<ReviewRequest, 'id' | 'criticId' | 'status' | 'error' | 'blockedReason'>[];
|
|
122
126
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { ReviewEnvelope, RepoConfig } from '../contracts.js';
|
|
2
|
-
/** Bind requests to
|
|
3
|
-
export declare function prepareReviewRequests({ repoPath, repoId, snapshotHash, criticId, preparedConfig }: {
|
|
2
|
+
/** Bind requests to exact scope. copy=false is only for Broker-owned submission data; public/default envelopes remain detached. */
|
|
3
|
+
export declare function prepareReviewRequests({ repoPath, repoId, snapshotHash, criticId, preparedConfig, copy }: {
|
|
4
4
|
repoPath: string;
|
|
5
5
|
repoId?: unknown;
|
|
6
6
|
snapshotHash: unknown;
|
|
7
7
|
criticId?: unknown;
|
|
8
8
|
preparedConfig?: RepoConfig;
|
|
9
|
+
copy?: boolean;
|
|
9
10
|
}): Promise<ReviewEnvelope[]>;
|
|
@@ -2,8 +2,8 @@ import { readWorkspaceConfig, criticIdentifier } from '../broker/config.js';
|
|
|
2
2
|
import { assertArtifactAudience } from '../artifacts/types.js';
|
|
3
3
|
import { scopeToolManifest } from '../tools/manifest.js';
|
|
4
4
|
import { resolveArtifactScope } from '../artifacts/scope.js';
|
|
5
|
-
/** Bind requests to
|
|
6
|
-
export async function prepareReviewRequests({ repoPath, repoId = 'local', snapshotHash, criticId, preparedConfig }) {
|
|
5
|
+
/** Bind requests to exact scope. copy=false is only for Broker-owned submission data; public/default envelopes remain detached. */
|
|
6
|
+
export async function prepareReviewRequests({ repoPath, repoId = 'local', snapshotHash, criticId, preparedConfig, copy = true }) {
|
|
7
7
|
if (typeof repoId !== 'string' || !repoId.trim() || repoId.length > 200)
|
|
8
8
|
throw new Error('A registered repoId is required (maximum 200 characters).');
|
|
9
9
|
if (typeof snapshotHash !== 'string' || !/^[a-f0-9]{64}$/.test(snapshotHash))
|
|
@@ -15,11 +15,12 @@ export async function prepareReviewRequests({ repoPath, repoId = 'local', snapsh
|
|
|
15
15
|
if (criticId !== undefined && !critics.length)
|
|
16
16
|
throw new Error(`Unknown Critic: ${criticId}`);
|
|
17
17
|
return critics.map(critic => {
|
|
18
|
-
const scope = resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps]);
|
|
19
|
-
const
|
|
18
|
+
const scope = resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps], copy);
|
|
19
|
+
const source = { repoId, snapshotHash, criticId: critic.id, title: critic.title,
|
|
20
20
|
...scope, configManifest: scopeToolManifest(config.configManifest, scope.artifacts.map(artifact => artifact.id)),
|
|
21
21
|
references: critic.references, requiredObservations: [critic.target, ...critic.deps],
|
|
22
|
-
payload: critic.payload, ...(critic.passSchema ? { passSchema: critic.passSchema } : {}), ...(critic.failSchema ? { failSchema: critic.failSchema } : {}), profile: critic.profile, target: critic.target, deps: critic.deps }
|
|
22
|
+
payload: critic.payload, ...(critic.passSchema ? { passSchema: critic.passSchema } : {}), ...(critic.failSchema ? { failSchema: critic.failSchema } : {}), profile: critic.profile, target: critic.target, deps: critic.deps };
|
|
23
|
+
const request = copy ? structuredClone(source) : source;
|
|
23
24
|
assertArtifactAudience(request);
|
|
24
25
|
return request;
|
|
25
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requester/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requester/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/state-format.js
CHANGED
|
@@ -3,7 +3,7 @@ export class StateFormatError extends Error {
|
|
|
3
3
|
}
|
|
4
4
|
/** No legacy reads or migrations: all entry points use the same format gate. */
|
|
5
5
|
export function assertStateFormat(database) {
|
|
6
|
-
if (database.prepare('PRAGMA user_version').get()?.user_version !==
|
|
6
|
+
if (database.prepare('PRAGMA user_version').get()?.user_version !== 6)
|
|
7
7
|
throw new StateFormatError();
|
|
8
8
|
}
|
|
9
9
|
/** Called inside the initialization transaction, before creating any tables. */
|
|
@@ -11,7 +11,7 @@ export function initializeStateFormat(database) {
|
|
|
11
11
|
const version = database.prepare('PRAGMA user_version').get()?.user_version;
|
|
12
12
|
const existing = database.prepare("SELECT 1 FROM sqlite_master WHERE type='table' LIMIT 1").get();
|
|
13
13
|
if (version === 0 && !existing)
|
|
14
|
-
database.exec('PRAGMA user_version=
|
|
14
|
+
database.exec('PRAGMA user_version=6');
|
|
15
15
|
else
|
|
16
16
|
assertStateFormat(database);
|
|
17
17
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ccdd/project",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"prepack": "npm run build"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@ccdd/core": ">=
|
|
40
|
+
"@ccdd/core": ">=6.0.0 <7"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@earendil-works/pi-agent-core": "0.85.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.validation-view[data-v-40366581]{background:#fff;border:1px solid #e4e7e6;border-radius:14px;padding:24px}.validation-heading[data-v-40366581]{justify-content:space-between;align-items:center;gap:20px;display:flex}h2[data-v-40366581]{margin:0 0 8px;font-size:19px}p[data-v-40366581]{line-height:1.65}.validation-heading p[data-v-40366581],.validation-empty[data-v-40366581]{color:#67716c}.inspect-button[data-v-40366581]{color:#fff;cursor:pointer;white-space:nowrap;background:#264d40;border:0;border-radius:8px;padding:11px 18px}.inspect-button[data-v-40366581]:disabled{opacity:.55;cursor:default}.validation-summary[data-v-40366581]{border-top:1px solid #e4e7e6;padding-top:16px}.validation-summary span[data-v-40366581]{color:#67716c;font-size:12px;display:block}.validation-counts[data-v-40366581]{font-size:13px}.validation-table-wrap[data-v-40366581]{overflow-x:auto}table[data-v-40366581]{border-collapse:collapse;text-align:left;width:100%;font-size:13px}.validation-artifacts[data-v-40366581]{color:#67716c;padding-left:18px;font-size:12px;line-height:1.8}th[data-v-40366581],td[data-v-40366581]{vertical-align:top;border-bottom:1px solid #e8ecea;padding:15px 12px}thead th[data-v-40366581]{color:#67716c;font-size:12px}td p[data-v-40366581]{margin:6px 0}small[data-v-40366581]{color:#67716c;margin-top:7px;font-weight:400;display:block}.validation-status[data-v-40366581]{background:#f3efe3;border-radius:5px;padding:4px 7px;font-size:11px;display:inline-block}.validation-status.passed[data-v-40366581]{color:#246740;background:#e6f1e9}@media (max-width:650px){.validation-view[data-v-40366581]{padding:16px}.validation-heading[data-v-40366581]{flex-direction:column;align-items:flex-start}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,N as n,X as r,a as i,b as a,f as o,h as s,it as c,j as l,l as u,m as d,n as f,nt as p,o as m,r as h,s as g,tt as _,v}from"./index-Drtw0yLv.js";var y=[`aria-busy`],b={class:`validation-heading`},x=[`disabled`],S={key:0},C={key:1,class:`validation-empty`},w={key:2,class:`inline-error`,role:`alert`},T={class:`validation-summary`,role:`status`},E={class:`validation-counts`},D={class:`validation-artifacts`,"aria-label":`Artifact validation requirements`},O={key:0},k={class:`validation-table-wrap`},A={scope:`row`},j={key:0},M={key:0},N={key:1},P={key:2},F=[`onClick`],I=f(a({__name:`ValidationView`,props:{projectId:{},session:{}},emits:[`open-request`,`session-expired`],setup(a,{emit:f}){let I=a,L=f,R=r(null),z=r(!1),B=r(``),V,H=0;t(()=>I.projectId,()=>{H++,V?.abort(),R.value=null,z.value=!1,B.value=``}),e(()=>{H++,V?.abort()});async function U(){if(!I.projectId||!I.session||z.value)return;V=new AbortController;let e=++H;z.value=!0,B.value=``;try{let t=await m(`/api/projects/${encodeURIComponent(I.projectId)}/validation`,{body:{},csrfToken:I.session.csrfToken,signal:V.signal});e===H&&(R.value=t)}catch(t){if(e!==H)return;B.value=g(t),t instanceof i&&t.status===403&&L(`session-expired`)}finally{e===H&&(z.value=!1)}}let W={REUSE:`Reuse verdict`,COALESCE:`Share active review`,EXECUTE:`Ready to review`,WAIT:`Execution not ready`,ACTIVE:`In progress`,FAILED:`Execution needs attention`};return(e,t)=>(l(),s(`section`,{class:`validation-view`,"aria-label":`Current input validation status`,"aria-busy":z.value},[o(`div`,b,[t[0]||=o(`div`,null,[o(`h2`,null,`Current input`),o(`p`,null,`Read the project's current configuration and files to determine the reviews needed.`)],-1),o(`button`,{type:`button`,class:`inspect-button`,disabled:!a.projectId||!a.session||z.value,onClick:U},c(z.value?`Inspecting input…`:`Inspect current input`),9,x)]),a.projectId?!R.value&&!B.value?(l(),s(`p`,C,`Select Inspect current input to see reusable verdicts and required reviews.`)):d(``,!0):(l(),s(`p`,S,`Select a project to inspect.`)),B.value?(l(),s(`p`,w,c(B.value),1)):d(``,!0),R.value?(l(),s(u,{key:3},[o(`p`,T,[o(`strong`,null,c(R.value.plan.satisfied?`PASS · All required reviews are satisfied.`:`More reviews are needed.`),1),o(`span`,null,`Observed at `+c(_(h)(R.value.observedAt))+` · Inspect again after editing files or completing reviews.`,1)]),o(`p`,E,`Reuse `+c(R.value.plan.counts.reuse)+` · Coalesce `+c(R.value.plan.counts.coalesce)+` · Ready to review `+c(R.value.plan.counts.execute)+` · Execution not ready `+c(R.value.plan.counts.wait),1),o(`ul`,D,[(l(!0),s(u,null,n(R.value.plan.artifacts,e=>(l(),s(`li`,{key:e.id},[o(`strong`,null,c(e.id),1),v(` · `+c(e.status)+` · `+c(e.passed)+`/`+c(e.total)+` Critics passed`,1),e.status===`UNREVIEWED`&&!e.total?(l(),s(`span`,O,` · No Critics or explicit basis`)):d(``,!0)]))),128))]),o(`div`,k,[o(`table`,null,[t[1]||=o(`thead`,null,[o(`tr`,null,[o(`th`,{scope:`col`},`Critic / Target`),o(`th`,{scope:`col`},`Status`),o(`th`,{scope:`col`},`Next action and reason`)])],-1),o(`tbody`,null,[(l(!0),s(u,null,n(R.value.plan.items,e=>(l(),s(`tr`,{key:e.id},[o(`th`,A,[v(c(e.title),1),o(`small`,null,c(e.id)+` → `+c(e.target),1)]),o(`td`,null,[o(`span`,{class:p([`validation-status`,{passed:e.status===`PASS`}])},c(e.status),3)]),o(`td`,null,[o(`strong`,null,c(W[e.action]),1),o(`p`,null,c(e.reason),1),e.action===`COALESCE`?(l(),s(`p`,j,[v(`Request: `+c(e.requestId),1),e.leaseExpiresAt?(l(),s(`span`,M,` · Lease expires: `+c(_(h)(e.leaseExpiresAt)),1)):d(``,!0)])):d(``,!0),e.blockedBy.length?(l(),s(`p`,N,`Final validation still needs: `+c(e.blockedBy.join(`, `))+`. This does not delay this Critic's execution.`,1)):d(``,!0),e.result?(l(),s(`p`,P,c(JSON.stringify(R.value.plan.results.find(t=>t.reference.requestId===e.result?.requestId))),1)):d(``,!0),e.result?.requestId?(l(),s(`button`,{key:3,type:`button`,class:`text-button`,onClick:t=>L(`open-request`,{projectId:a.projectId,id:e.result.requestId})},`View recorded verdict`,8,F)):d(``,!0)])]))),128))])])])],64)):d(``,!0)],8,y))}}),[[`__scopeId`,`data-v-40366581`]]);export{I as default};
|