@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.
Files changed (57) hide show
  1. package/dist/monitor-ui/assets/{GraphView-BILt_jGR.js → GraphView-Dvqux-3b.js} +3 -3
  2. package/dist/monitor-ui/assets/ValidationView-ksCr_lB7.css +1 -0
  3. package/dist/monitor-ui/assets/ValidationView-qhnNfj00.js +1 -0
  4. package/dist/monitor-ui/assets/{elk-api-CW6DDhyE.js → elk-api-D1k8qsLm.js} +1 -1
  5. package/dist/monitor-ui/assets/{elk.bundled-WR-av3nY.js → elk.bundled-DgeQWR_s.js} +1 -1
  6. package/dist/monitor-ui/assets/{index-Drtw0yLv.js → index-beXagC6U.js} +3 -3
  7. package/dist/monitor-ui/index.html +1 -1
  8. package/dist/src/artifacts/scope.d.ts +1 -1
  9. package/dist/src/artifacts/scope.js +2 -2
  10. package/dist/src/artifacts/scope.js.map +1 -1
  11. package/dist/src/broker/admission.d.ts +19 -0
  12. package/dist/src/broker/admission.js +33 -0
  13. package/dist/src/broker/admission.js.map +1 -0
  14. package/dist/src/broker/changes.d.ts +25 -0
  15. package/dist/src/broker/changes.js +27 -0
  16. package/dist/src/broker/changes.js.map +1 -0
  17. package/dist/src/broker/coalescing.d.ts +1 -0
  18. package/dist/src/broker/coalescing.js +5 -3
  19. package/dist/src/broker/coalescing.js.map +1 -1
  20. package/dist/src/broker/graph.d.ts +1 -1
  21. package/dist/src/broker/graph.js +1 -1
  22. package/dist/src/broker/graph.js.map +1 -1
  23. package/dist/src/broker/index.d.ts +29 -3
  24. package/dist/src/broker/index.js +263 -307
  25. package/dist/src/broker/index.js.map +1 -1
  26. package/dist/src/broker/readiness.d.ts +17 -0
  27. package/dist/src/broker/readiness.js +252 -0
  28. package/dist/src/broker/readiness.js.map +1 -0
  29. package/dist/src/broker/storage.d.ts +101 -0
  30. package/dist/src/broker/storage.js +315 -0
  31. package/dist/src/broker/storage.js.map +1 -0
  32. package/dist/src/contracts.d.ts +1 -1
  33. package/dist/src/monitor/store.js +6 -4
  34. package/dist/src/monitor/store.js.map +1 -1
  35. package/dist/src/monitor/ui/format.js +1 -1
  36. package/dist/src/monitor/ui/format.js.map +1 -1
  37. package/dist/src/project/cli.js +8 -7
  38. package/dist/src/project/cli.js.map +1 -1
  39. package/dist/src/project/gates.d.ts +6 -0
  40. package/dist/src/project/gates.js +33 -0
  41. package/dist/src/project/gates.js.map +1 -0
  42. package/dist/src/project/index.d.ts +2 -1
  43. package/dist/src/project/index.js +2 -2
  44. package/dist/src/project/index.js.map +1 -1
  45. package/dist/src/project/query.js +35 -8
  46. package/dist/src/project/query.js.map +1 -1
  47. package/dist/src/project/store.d.ts +1 -1
  48. package/dist/src/project/store.js +29 -17
  49. package/dist/src/project/store.js.map +1 -1
  50. package/dist/src/project/types.d.ts +7 -3
  51. package/dist/src/requester/index.d.ts +3 -2
  52. package/dist/src/requester/index.js +6 -5
  53. package/dist/src/requester/index.js.map +1 -1
  54. package/dist/src/state-format.js +2 -2
  55. package/package.json +2 -2
  56. package/dist/monitor-ui/assets/ValidationView-D18mwExY.css +0 -1
  57. 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 rows = database.prepare("SELECT json_object('id',id,'runId',run_id,'criticId',json_extract(data,'$.criticId'),'validationInput',json_extract(data,'$.validationInput'),'result',json_extract(data,'$.result'),'status',status,'completedAt',json_extract(data,'$.completedAt')) AS data FROM requests WHERE status IN ('GREEN','RED') AND json_extract(data, '$.validationInput.version') = 3 ORDER BY json_extract(data, '$.completedAt'), rowid").all();
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 request = JSON.parse(String(row.data));
13
- if (!request.validationInput || !/^[a-f0-9]{64}$/.test(request.validationInput.key) || !request.result || request.result.verdict !== request.status || !request.completedAt)
16
+ const header = JSON.parse(String(row.data));
17
+ if (!header.inputRef || !header.resultRef || !header.completedAt)
14
18
  return [];
15
- return [{ requestId: request.id, runId: request.runId, criticId: request.criticId, input: request.validationInput, completedAt: request.completedAt, verdict: request.result.verdict, result: semanticResult(request.result) }];
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 remains lossless, including 5.0/5.1 records.
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 runProjection = full ? 'data' : "json_remove(data, '$.graph', '$.project.templates', '$.project.snapshot.config.configManifest')";
42
- const row = database.prepare(`SELECT ${runProjection} AS data FROM runs WHERE id = ?`).get(id);
43
- if (!row)
50
+ const store = records(database), run = store.run(id, full);
51
+ if (!run)
44
52
  return null;
45
- const run = JSON.parse(String(row.data));
46
- const requests = database.prepare(`SELECT ${full ? 'data' : requestProjection} AS data FROM requests WHERE run_id = ? ORDER BY ordinal`).all(id).map(row => JSON.parse(String(row.data)));
47
- const shared = (run.project?.coalescedRequestIds ?? []).flatMap(id => { const row = database.prepare(`SELECT ${requestProjection} AS data FROM requests WHERE id = ?`).get(id); return row ? [JSON.parse(String(row.data))] : []; });
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
- const projection = options.detail === 'full' ? 'data' : requestProjection;
63
- return withProjectStore(stateDir, db => (runId ? db.prepare(`SELECT ${projection} AS data FROM requests WHERE run_id = ? ORDER BY ordinal`).all(runId) : db.prepare(`SELECT ${projection} AS data FROM requests ORDER BY json_extract(data, '$.createdAt') DESC, rowid DESC`).all()).map(row => { const request = JSON.parse(String(row.data)); return resultView(options, request, () => requesterRequest(request, stateDir)); }), []);
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":"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"}
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 the same static definitions and exact Artifact scope used for validation. */
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 the same static definitions and exact Artifact scope used for validation. */
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 request = structuredClone({ repoId, snapshotHash, criticId: critic.id, title: critic.title,
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,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAkH;IAChO,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACtJ,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC7J,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9J,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACxG,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IAC9F,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,MAAM,OAAO,GAAmB,eAAe,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK;YAC9G,GAAG,KAAK,EAAE,cAAc,EAAE,iBAAiB,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChH,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;YACpF,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAClO,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requester/index.ts"],"names":[],"mappings":"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"}
@@ -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 !== 5)
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=5');
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": "5.1.2",
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": ">=5.0.0 <6"
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};