@cleocode/core 2026.10.6 → 2026.10.7-rc.ci.674
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/build-provenance.json +2 -2
- package/dist/cloud/http.d.ts +8 -0
- package/dist/cloud/http.d.ts.map +1 -1
- package/dist/cloud/http.js +11 -0
- package/dist/cloud/http.js.map +1 -1
- package/dist/cloud/journal.d.ts +6 -0
- package/dist/cloud/journal.d.ts.map +1 -1
- package/dist/cloud/journal.js +1 -1
- package/dist/cloud/journal.js.map +1 -1
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +3 -1
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-vault.d.ts +86 -1
- package/dist/cloud/nexus-vault.d.ts.map +1 -1
- package/dist/cloud/nexus-vault.js +875 -98
- package/dist/cloud/nexus-vault.js.map +1 -1
- package/dist/docs/doctor.d.ts +183 -0
- package/dist/docs/doctor.d.ts.map +1 -0
- package/dist/docs/doctor.js +537 -0
- package/dist/docs/doctor.js.map +1 -0
- package/dist/doctor/system-health.d.ts +189 -0
- package/dist/doctor/system-health.d.ts.map +1 -0
- package/dist/doctor/system-health.js +783 -0
- package/dist/doctor/system-health.js.map +1 -0
- package/dist/git/hooks-install.d.ts +17 -34
- package/dist/git/hooks-install.d.ts.map +1 -1
- package/dist/git/hooks-install.js +173 -70
- package/dist/git/hooks-install.js.map +1 -1
- package/dist/harness/ask-enforce.d.ts +43 -0
- package/dist/harness/ask-enforce.d.ts.map +1 -0
- package/dist/harness/ask-enforce.js +165 -0
- package/dist/harness/ask-enforce.js.map +1 -0
- package/dist/hooks.d.ts +8 -30
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +36 -116
- package/dist/hooks.js.map +1 -1
- package/dist/init.d.ts +2 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +5 -14
- package/dist/init.js.map +1 -1
- package/dist/injection.d.ts +2 -2
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +108 -10
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/issue/create.d.ts +4 -0
- package/dist/issue/create.d.ts.map +1 -1
- package/dist/issue/create.js +12 -0
- package/dist/issue/create.js.map +1 -1
- package/dist/issue/index.d.ts +1 -1
- package/dist/issue/index.d.ts.map +1 -1
- package/dist/issue/index.js +1 -1
- package/dist/issue/index.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +8 -2
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/lean-change.d.ts +15 -0
- package/dist/orchestration/lean-change.d.ts.map +1 -0
- package/dist/orchestration/lean-change.js +17 -0
- package/dist/orchestration/lean-change.js.map +1 -0
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +6 -4
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +59 -0
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +150 -5
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +11 -2
- package/dist/release/plan.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +15 -0
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +42 -1
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/release/reconcile.js +2 -2
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/verify-provenance.js +2 -2
- package/dist/release/verify-provenance.js.map +1 -1
- package/dist/resources/admission-ledger.d.ts +8 -0
- package/dist/resources/admission-ledger.d.ts.map +1 -1
- package/dist/resources/admission-ledger.js +5 -0
- package/dist/resources/admission-ledger.js.map +1 -1
- package/dist/resources/claim-keepalive.d.ts +34 -0
- package/dist/resources/claim-keepalive.d.ts.map +1 -0
- package/dist/resources/claim-keepalive.js +49 -0
- package/dist/resources/claim-keepalive.js.map +1 -0
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +3 -0
- package/dist/resources/governor.js.map +1 -1
- package/dist/scaffold/ensure-config.js +1 -1
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +2 -1
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/restore-marker.d.ts +50 -7
- package/dist/store/restore-marker.d.ts.map +1 -1
- package/dist/store/restore-marker.js +77 -25
- package/dist/store/restore-marker.js.map +1 -1
- package/dist/store/row-identity-registry.d.ts +6 -4
- package/dist/store/row-identity-registry.d.ts.map +1 -1
- package/dist/store/row-identity-registry.js +156 -33
- package/dist/store/row-identity-registry.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts +16 -0
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js +4 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +240 -0
- package/dist/store/schema/cleo-shared/brain.d.ts.map +1 -1
- package/dist/store/schema/cleo-shared/brain.js +69 -0
- package/dist/store/schema/cleo-shared/brain.js.map +1 -1
- package/dist/store/schema/tasks.d.ts +1 -1
- package/dist/store/schema/tasks.d.ts.map +1 -1
- package/dist/store/schema/tasks.js +9 -1
- package/dist/store/schema/tasks.js.map +1 -1
- package/dist/store/sync/apply/applier.d.ts.map +1 -1
- package/dist/store/sync/apply/applier.js +85 -3
- package/dist/store/sync/apply/applier.js.map +1 -1
- package/dist/store/sync/apply/parent-delete.d.ts.map +1 -1
- package/dist/store/sync/apply/parent-delete.js +4 -0
- package/dist/store/sync/apply/parent-delete.js.map +1 -1
- package/dist/store/sync/capture.d.ts +8 -0
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +20 -0
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/sync/clock-store.d.ts +21 -0
- package/dist/store/sync/clock-store.d.ts.map +1 -1
- package/dist/store/sync/clock-store.js +47 -0
- package/dist/store/sync/clock-store.js.map +1 -1
- package/dist/store/sync/conflicts.d.ts +13 -0
- package/dist/store/sync/conflicts.d.ts.map +1 -1
- package/dist/store/sync/conflicts.js +22 -0
- package/dist/store/sync/conflicts.js.map +1 -1
- package/dist/store/sync/genesis.d.ts +113 -12
- package/dist/store/sync/genesis.d.ts.map +1 -1
- package/dist/store/sync/genesis.js +325 -27
- package/dist/store/sync/genesis.js.map +1 -1
- package/dist/store/sync/merge/types.d.ts +8 -2
- package/dist/store/sync/merge/types.d.ts.map +1 -1
- package/dist/store/sync/pull.d.ts +192 -0
- package/dist/store/sync/pull.d.ts.map +1 -0
- package/dist/store/sync/pull.js +429 -0
- package/dist/store/sync/pull.js.map +1 -0
- package/dist/store/sync/push.d.ts +110 -0
- package/dist/store/sync/push.d.ts.map +1 -0
- package/dist/store/sync/push.js +172 -0
- package/dist/store/sync/push.js.map +1 -0
- package/dist/store/sync/replay-pin.d.ts +70 -0
- package/dist/store/sync/replay-pin.d.ts.map +1 -0
- package/dist/store/sync/replay-pin.js +172 -0
- package/dist/store/sync/replay-pin.js.map +1 -0
- package/dist/store/sync/sealer.d.ts.map +1 -1
- package/dist/store/sync/sealer.js +6 -2
- package/dist/store/sync/sealer.js.map +1 -1
- package/dist/store/sync/timestamp-canon.d.ts.map +1 -1
- package/dist/store/sync/timestamp-canon.js +15 -0
- package/dist/store/sync/timestamp-canon.js.map +1 -1
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +51 -15
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +1 -1
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +1 -1
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +5 -0
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/vault-manifest.d.ts +7 -0
- package/dist/store/vault-manifest.d.ts.map +1 -1
- package/dist/store/vault-manifest.js +4 -0
- package/dist/store/vault-manifest.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +17 -0
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +49 -0
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/affected-scope.d.ts +52 -3
- package/dist/tasks/affected-scope.d.ts.map +1 -1
- package/dist/tasks/affected-scope.js +94 -3
- package/dist/tasks/affected-scope.js.map +1 -1
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +9 -5
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete-ci.d.ts +2 -0
- package/dist/tasks/complete-ci.d.ts.map +1 -1
- package/dist/tasks/complete-ci.js +26 -7
- package/dist/tasks/complete-ci.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +10 -0
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +63 -6
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/evidence.d.ts +3 -0
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +106 -2
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-preview.d.ts +19 -1
- package/dist/tasks/gate-preview.d.ts.map +1 -1
- package/dist/tasks/gate-preview.js +44 -2
- package/dist/tasks/gate-preview.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts +16 -0
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +25 -2
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/qa-run-binding.d.ts +88 -0
- package/dist/tasks/qa-run-binding.d.ts.map +1 -0
- package/dist/tasks/qa-run-binding.js +188 -0
- package/dist/tasks/qa-run-binding.js.map +1 -0
- package/dist/tasks/req.d.ts +50 -0
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +99 -1
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts +29 -0
- package/dist/tasks/test-run-binding.d.ts.map +1 -1
- package/dist/tasks/test-run-binding.js +47 -23
- package/dist/tasks/test-run-binding.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +9 -0
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +14 -3
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +3 -0
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +10 -1
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +14 -3
- package/dist/validation/engine-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20261010130000_t12895-brain-natural-uids/migration.sql +28 -0
- package/migrations/drizzle-cleo-global/20261010140000_t12896-brain-autoinc-uids/migration.sql +54 -0
- package/migrations/drizzle-cleo-project/20261010130000_t12895-brain-natural-uids/migration.sql +36 -0
- package/migrations/drizzle-cleo-project/20261010140000_t12896-brain-autoinc-uids/migration.sql +58 -0
- package/migrations/sync-journal/20261008120000_t12343-pull-cursor/migration.sql +28 -0
- package/migrations/sync-journal/20261009120000_t13318-seen-floor/migration.sql +41 -0
- package/package.json +18 -18
- package/templates/CLEO-INJECTION.md +5 -3
- package/templates/CLEO-REFERENCE.md +1 -1
- package/templates/git-hooks/legacy-hashes.json +20 -0
- package/templates/git-hooks/pre-commit +1 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binding a `qa-run:` receipt — a recorded native typecheck or lint run — to
|
|
3
|
+
* the change it claims to check (T13427, design note
|
|
4
|
+
* `t13427-qa-run-binding-design`, owner decision option 1).
|
|
5
|
+
*
|
|
6
|
+
* What a bound atom guarantees, exactly:
|
|
7
|
+
* 1. **Result.** The receipt states exit code 0 and zero error diagnostics.
|
|
8
|
+
* 2. **Freshness.** The same clock as `test-run:` ({@link reportFreshness}):
|
|
9
|
+
* the run is not older than the change's commits, edits or deletions.
|
|
10
|
+
* 3. **Coverage.** Every changed code path (evidence-scoped, docs ignored)
|
|
11
|
+
* lies under one of the receipt's `roots`; in a workspace, every package
|
|
12
|
+
* that depends on a changed package is covered by a root at or above its
|
|
13
|
+
* directory, since a type change breaks importers. A workspace-wide change
|
|
14
|
+
* (a path outside every package) is refused: only a whole-project run
|
|
15
|
+
* speaks for it.
|
|
16
|
+
* 4. **Identity.** HEAD and the tool-cache tree hash are recorded by the
|
|
17
|
+
* validator; `cleo complete` refuses the atom once the tree moves, unless
|
|
18
|
+
* merged CI carries the gate.
|
|
19
|
+
*
|
|
20
|
+
* With no origin default branch to diff against (no merge base), nothing is
|
|
21
|
+
* judged beyond the result: the receipt binds with no coverage check, as a
|
|
22
|
+
* `test-run:` report does there.
|
|
23
|
+
*
|
|
24
|
+
* It does NOT prove the run happened (a receipt is a file the caller
|
|
25
|
+
* supplies), and a scoped typecheck does not see unchanged files outside its
|
|
26
|
+
* roots that import a changed export. Merged CI (`ci:<pr>`) or a whole-project
|
|
27
|
+
* `tool:typecheck` speaks for the whole program.
|
|
28
|
+
*
|
|
29
|
+
* @task T13427
|
|
30
|
+
*/
|
|
31
|
+
import { isAbsolute } from 'node:path';
|
|
32
|
+
import { isCiDocumentPath } from '../release/ci-evidence.js';
|
|
33
|
+
import { deriveAffectedPackages, inPackageDir, listWorkspacePackages, } from './affected-packages.js';
|
|
34
|
+
import { reportFreshness } from './test-run-binding.js';
|
|
35
|
+
/** The QA checks a receipt can record: one of each satisfies `qaPassed`. */
|
|
36
|
+
export const QA_RUN_KINDS = ['typecheck', 'lint'];
|
|
37
|
+
/** Example shape, named in every refusal. */
|
|
38
|
+
export const QA_RUN_SHAPE_HINT = '{"kind":"typecheck"|"lint","command":["tsc","--noEmit",…],"exitCode":0,' +
|
|
39
|
+
'"diagnostics":{"errors":0},"roots":["src/a"],"startTime":<epoch ms>}';
|
|
40
|
+
/** A root as the binding compares it: slash-separated, no `./`, no trailing `/`; `.` is `''`. */
|
|
41
|
+
function normaliseRoot(root) {
|
|
42
|
+
const slashed = root.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\/+$/, '');
|
|
43
|
+
return slashed === '.' ? '' : slashed;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate a parsed receipt's shape and result.
|
|
47
|
+
*
|
|
48
|
+
* @param raw - The parsed JSON.
|
|
49
|
+
* @returns The receipt, or the refusal.
|
|
50
|
+
* @task T13427
|
|
51
|
+
*/
|
|
52
|
+
export function parseQaRunReceipt(raw) {
|
|
53
|
+
const invalid = (reason) => ({
|
|
54
|
+
ok: false,
|
|
55
|
+
codeName: 'E_EVIDENCE_INVALID',
|
|
56
|
+
reason: `${reason}. Expected: ${QA_RUN_SHAPE_HINT}`,
|
|
57
|
+
});
|
|
58
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
59
|
+
return invalid('qa-run receipt is not a JSON object');
|
|
60
|
+
}
|
|
61
|
+
const r = raw;
|
|
62
|
+
const kind = r['kind'];
|
|
63
|
+
if (kind !== 'typecheck' && kind !== 'lint') {
|
|
64
|
+
return invalid(`qa-run receipt's "kind" is ${JSON.stringify(kind)}; it must be "typecheck" or "lint"`);
|
|
65
|
+
}
|
|
66
|
+
const command = r['command'];
|
|
67
|
+
if (!Array.isArray(command) ||
|
|
68
|
+
command.length === 0 ||
|
|
69
|
+
!command.every((w) => typeof w === 'string' && w !== '')) {
|
|
70
|
+
return invalid('qa-run receipt\'s "command" must be a non-empty array of strings');
|
|
71
|
+
}
|
|
72
|
+
const exitCode = r['exitCode'];
|
|
73
|
+
if (typeof exitCode !== 'number' || !Number.isInteger(exitCode)) {
|
|
74
|
+
return invalid('qa-run receipt\'s "exitCode" must be an integer');
|
|
75
|
+
}
|
|
76
|
+
const diagnostics = r['diagnostics'];
|
|
77
|
+
const errors = diagnostics !== null && typeof diagnostics === 'object' && !Array.isArray(diagnostics)
|
|
78
|
+
? diagnostics['errors']
|
|
79
|
+
: undefined;
|
|
80
|
+
if (typeof errors !== 'number' || !Number.isInteger(errors) || errors < 0) {
|
|
81
|
+
return invalid('qa-run receipt\'s "diagnostics.errors" must be a non-negative integer');
|
|
82
|
+
}
|
|
83
|
+
if (exitCode !== 0 || errors !== 0) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
codeName: 'E_EVIDENCE_TOOL_FAILED',
|
|
87
|
+
reason: `qa-run ${kind} receipt reports exit code ${exitCode} with ${errors} error diagnostic(s); it must pass with none`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const roots = r['roots'];
|
|
91
|
+
if (!Array.isArray(roots) ||
|
|
92
|
+
roots.length === 0 ||
|
|
93
|
+
!roots.every((p) => typeof p === 'string' && p.trim() !== '')) {
|
|
94
|
+
return invalid('qa-run receipt\'s "roots" must be a non-empty array of root-relative paths');
|
|
95
|
+
}
|
|
96
|
+
const outside = roots.find((p) => {
|
|
97
|
+
const n = normaliseRoot(p);
|
|
98
|
+
return isAbsolute(p) || n === '..' || n.startsWith('../');
|
|
99
|
+
});
|
|
100
|
+
if (outside !== undefined) {
|
|
101
|
+
return invalid(`qa-run receipt root ${JSON.stringify(outside)} is not relative to the project root`);
|
|
102
|
+
}
|
|
103
|
+
const startTime = r['startTime'];
|
|
104
|
+
if (startTime !== undefined && (typeof startTime !== 'number' || !Number.isFinite(startTime))) {
|
|
105
|
+
return invalid('qa-run receipt\'s "startTime" must be epoch milliseconds');
|
|
106
|
+
}
|
|
107
|
+
const tool = r['tool'];
|
|
108
|
+
const toolField = (field) => {
|
|
109
|
+
const v = tool !== null && typeof tool === 'object' && !Array.isArray(tool)
|
|
110
|
+
? tool[field]
|
|
111
|
+
: undefined;
|
|
112
|
+
return typeof v === 'string' && v !== '' ? v : undefined;
|
|
113
|
+
};
|
|
114
|
+
const toolName = toolField('name');
|
|
115
|
+
const toolVersion = toolField('version');
|
|
116
|
+
return {
|
|
117
|
+
ok: true,
|
|
118
|
+
receipt: {
|
|
119
|
+
kind,
|
|
120
|
+
command,
|
|
121
|
+
roots: [...new Set(roots.map(normaliseRoot))].sort(),
|
|
122
|
+
...(typeof startTime === 'number' ? { startTime } : {}),
|
|
123
|
+
...(toolName ? { toolName } : {}),
|
|
124
|
+
...(toolVersion ? { toolVersion } : {}),
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/** Up to five items, then a count. */
|
|
129
|
+
function some(items) {
|
|
130
|
+
return `${items.slice(0, 5).join(', ')}${items.length > 5 ? `, … (${items.length})` : ''}`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Bind a receipt to the change it claims to check, or refuse it when it is
|
|
134
|
+
* older than the change or does not cover it (see the module doc).
|
|
135
|
+
*
|
|
136
|
+
* @param receipt - From {@link parseQaRunReceipt}.
|
|
137
|
+
* @param receiptPath - Absolute path of the receipt file.
|
|
138
|
+
* @param root - The task's checkout.
|
|
139
|
+
* @returns The refusal, or ok.
|
|
140
|
+
* @task T13427
|
|
141
|
+
*/
|
|
142
|
+
export function bindQaRunReceipt(receipt, receiptPath, root) {
|
|
143
|
+
const fresh = reportFreshness(receipt.startTime, receiptPath, root, 'qa-run');
|
|
144
|
+
if (!fresh.ok)
|
|
145
|
+
return fresh;
|
|
146
|
+
const refuse = (reason) => ({
|
|
147
|
+
ok: false,
|
|
148
|
+
codeName: 'E_EVIDENCE_INSUFFICIENT',
|
|
149
|
+
reason,
|
|
150
|
+
});
|
|
151
|
+
const changes = fresh.changes;
|
|
152
|
+
// A change whose every path is set aside as out of scope must not pass
|
|
153
|
+
// vacuously (as for test-run, T13135).
|
|
154
|
+
if (changes !== null && changes.paths.length === 0 && changes.excluded.length > 0) {
|
|
155
|
+
return refuse(`Every path this change touches is excluded from evidence scope (${some(changes.excluded)}), ` +
|
|
156
|
+
`so a qa-run ${receipt.kind} receipt cannot speak for it. Record tool:${receipt.kind}, or ci:<pr> once the PR merges.`);
|
|
157
|
+
}
|
|
158
|
+
const changed = changes?.paths ?? [];
|
|
159
|
+
if (!fresh.judged || changed.length === 0)
|
|
160
|
+
return { ok: true };
|
|
161
|
+
const scope = deriveAffectedPackages(root, changed);
|
|
162
|
+
if (scope.scope === 'full') {
|
|
163
|
+
return refuse(`The change is workspace-wide (${scope.reason}), so only a whole-project ${receipt.kind} ` +
|
|
164
|
+
`speaks for it. Record tool:${receipt.kind}, or ci:<pr> once the PR merges.`);
|
|
165
|
+
}
|
|
166
|
+
const covered = (path) => receipt.roots.some((r) => r === path || inPackageDir(path, r));
|
|
167
|
+
const uncovered = changed.filter((p) => !isCiDocumentPath(p) && !covered(p));
|
|
168
|
+
if (uncovered.length > 0) {
|
|
169
|
+
return refuse(`qa-run ${receipt.kind} receipt (roots ${some(receipt.roots.map((r) => r || '.'))}) does not ` +
|
|
170
|
+
`cover the changed path(s) ${some(uncovered)}. Run ${receipt.kind} over roots that hold ` +
|
|
171
|
+
`every changed file, or record tool:${receipt.kind}.`);
|
|
172
|
+
}
|
|
173
|
+
// A type change breaks importers: a dependent package must be checked too.
|
|
174
|
+
const dependents = scope.packages.filter((name) => !scope.direct.includes(name));
|
|
175
|
+
if (dependents.length > 0) {
|
|
176
|
+
const workspace = listWorkspacePackages(root);
|
|
177
|
+
const unchecked = dependents.filter((name) => {
|
|
178
|
+
const dir = workspace.find((p) => p.name === name)?.dir;
|
|
179
|
+
return dir === undefined || !covered(dir);
|
|
180
|
+
});
|
|
181
|
+
if (unchecked.length > 0) {
|
|
182
|
+
return refuse(`qa-run ${receipt.kind} receipt does not cover package(s) ${some(unchecked)}, which depend ` +
|
|
183
|
+
`on a changed package. Add their directories to the run's roots, or record tool:${receipt.kind}.`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return { ok: true };
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=qa-run-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-run-binding.js","sourceRoot":"","sources":["../../src/tasks/qa-run-binding.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks/req.d.ts
CHANGED
|
@@ -78,6 +78,56 @@ export declare function reqAdd(projectRoot: string, taskId: string, gate: Accept
|
|
|
78
78
|
acceptance: AcceptanceItem[];
|
|
79
79
|
};
|
|
80
80
|
}>;
|
|
81
|
+
/** Result of {@link reqReplace}. */
|
|
82
|
+
export interface ReqReplaceResult {
|
|
83
|
+
/** The task and its committed acceptance array. */
|
|
84
|
+
task: {
|
|
85
|
+
id: string;
|
|
86
|
+
acceptance: AcceptanceItem[];
|
|
87
|
+
};
|
|
88
|
+
/** The replaced REQ-ID. */
|
|
89
|
+
req: string;
|
|
90
|
+
/** Zero-based index of the gate in the acceptance array (unchanged). */
|
|
91
|
+
index: number;
|
|
92
|
+
/** The gate that was superseded, kept in the AC history and the audit row. */
|
|
93
|
+
superseded: AcceptanceGate;
|
|
94
|
+
/** False when the new gate equals the current one (nothing was written). */
|
|
95
|
+
changed: boolean;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Replace the typed gate that carries `req` with `gate`, in place (T12988).
|
|
99
|
+
*
|
|
100
|
+
* @remarks
|
|
101
|
+
* The gate keeps its index, its AC row (id and ordinal: a REQ-ID row's id
|
|
102
|
+
* derives from the REQ-ID, `evidenceBoundSourceKey`) and therefore its
|
|
103
|
+
* evidence bindings, which go stale rather than being re-pointed: typed results
|
|
104
|
+
* and criterion links are pinned to the criterion text hash, so the replaced
|
|
105
|
+
* gate must be verified again. The superseded gate is kept as an AC history row
|
|
106
|
+
* (reason `replace`) and in the task audit row, with its last typed result. In
|
|
107
|
+
* a locked pipeline stage the change needs `reason`, exactly as `cleo update
|
|
108
|
+
* --acceptance` does.
|
|
109
|
+
*
|
|
110
|
+
* @param projectRoot - Absolute path to the project root.
|
|
111
|
+
* @param taskId - Target task ID.
|
|
112
|
+
* @param req - REQ-ID of the gate to replace.
|
|
113
|
+
* @param gate - The new gate. Its `req` must be absent or equal `req`.
|
|
114
|
+
* @param options - `reason` for a locked stage; `accessor` for tests.
|
|
115
|
+
* @returns The committed acceptance array and the superseded gate.
|
|
116
|
+
* @throws CleoError E_NOT_FOUND for an unknown task or REQ-ID, E_VALIDATION for
|
|
117
|
+
* an invalid gate or a REQ-ID mismatch, AC_LOCKED in a locked stage without `reason`.
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* await reqReplace(root, 'T42', 'TIMER-01', {
|
|
121
|
+
* kind: 'test', command: 'pnpm', args: ['--filter', 'app', 'exec', 'vitest', 'run'],
|
|
122
|
+
* expect: 'pass', description: 'Timer tests pass', req: 'TIMER-01',
|
|
123
|
+
* });
|
|
124
|
+
* ```
|
|
125
|
+
* @task T12988
|
|
126
|
+
*/
|
|
127
|
+
export declare function reqReplace(projectRoot: string, taskId: string, req: string, gate: AcceptanceGate, options?: {
|
|
128
|
+
reason?: string;
|
|
129
|
+
accessor?: DataAccessor;
|
|
130
|
+
}): Promise<ReqReplaceResult>;
|
|
81
131
|
/**
|
|
82
132
|
* List all REQ-ID–addressed acceptance gates on a task.
|
|
83
133
|
*
|
package/dist/tasks/req.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"req.d.ts","sourceRoot":"","sources":["../../src/tasks/req.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAuB,MAAM,qBAAqB,CAAC;AAI/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"req.d.ts","sourceRoot":"","sources":["../../src/tasks/req.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks/req.js
CHANGED
|
@@ -13,7 +13,8 @@ import { acceptanceGateSchema } from '@cleocode/contracts/acceptance-gate-schema
|
|
|
13
13
|
import { ExitCode } from '@cleocode/contracts/exit-codes.js';
|
|
14
14
|
import { CleoError } from '../errors.js';
|
|
15
15
|
import { getTaskAccessor } from '../store/data-accessor.js';
|
|
16
|
-
import {
|
|
16
|
+
import { enforceAcceptanceImmutability } from './ac-immutability.js';
|
|
17
|
+
import { acItemToText, applyAcPlan, planAcUpdate, replaceAcRowPlan } from './ac-table.js';
|
|
17
18
|
// ─── Heuristic regex patterns ─────────────────────────────────────────────────
|
|
18
19
|
const RE_TEST = /\b(tests?\s+pass(es)?|npm\s+test|pnpm\s+test|yarn\s+test)\b/i;
|
|
19
20
|
const RE_FILE_EXISTS = /^(?:file\s+(?:at\s+)?([^\s]+)|([^\s]+)\s+exists?)$/i;
|
|
@@ -165,6 +166,103 @@ export async function reqAdd(projectRoot, taskId, gate, accessor) {
|
|
|
165
166
|
return { task: { id: taskId, acceptance: updated } };
|
|
166
167
|
});
|
|
167
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Replace the typed gate that carries `req` with `gate`, in place (T12988).
|
|
171
|
+
*
|
|
172
|
+
* @remarks
|
|
173
|
+
* The gate keeps its index, its AC row (id and ordinal: a REQ-ID row's id
|
|
174
|
+
* derives from the REQ-ID, `evidenceBoundSourceKey`) and therefore its
|
|
175
|
+
* evidence bindings, which go stale rather than being re-pointed: typed results
|
|
176
|
+
* and criterion links are pinned to the criterion text hash, so the replaced
|
|
177
|
+
* gate must be verified again. The superseded gate is kept as an AC history row
|
|
178
|
+
* (reason `replace`) and in the task audit row, with its last typed result. In
|
|
179
|
+
* a locked pipeline stage the change needs `reason`, exactly as `cleo update
|
|
180
|
+
* --acceptance` does.
|
|
181
|
+
*
|
|
182
|
+
* @param projectRoot - Absolute path to the project root.
|
|
183
|
+
* @param taskId - Target task ID.
|
|
184
|
+
* @param req - REQ-ID of the gate to replace.
|
|
185
|
+
* @param gate - The new gate. Its `req` must be absent or equal `req`.
|
|
186
|
+
* @param options - `reason` for a locked stage; `accessor` for tests.
|
|
187
|
+
* @returns The committed acceptance array and the superseded gate.
|
|
188
|
+
* @throws CleoError E_NOT_FOUND for an unknown task or REQ-ID, E_VALIDATION for
|
|
189
|
+
* an invalid gate or a REQ-ID mismatch, AC_LOCKED in a locked stage without `reason`.
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* await reqReplace(root, 'T42', 'TIMER-01', {
|
|
193
|
+
* kind: 'test', command: 'pnpm', args: ['--filter', 'app', 'exec', 'vitest', 'run'],
|
|
194
|
+
* expect: 'pass', description: 'Timer tests pass', req: 'TIMER-01',
|
|
195
|
+
* });
|
|
196
|
+
* ```
|
|
197
|
+
* @task T12988
|
|
198
|
+
*/
|
|
199
|
+
export async function reqReplace(projectRoot, taskId, req, gate, options = {}) {
|
|
200
|
+
const reqId = req.trim();
|
|
201
|
+
if (gate.req !== undefined && gate.req !== reqId) {
|
|
202
|
+
// @sync-invariant none:input-shape a gate naming another REQ-ID is refused before any read; nothing is written
|
|
203
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `Gate JSON names REQ-ID "${gate.req}", but it replaces "${reqId}"`, { fix: `Set "req":"${reqId}" in the gate JSON, or omit it` });
|
|
204
|
+
}
|
|
205
|
+
const validated = validateGate({ ...gate, req: reqId });
|
|
206
|
+
const acc = options.accessor ?? (await getTaskAccessor(projectRoot));
|
|
207
|
+
return acc.transaction(async (tx) => {
|
|
208
|
+
const task = await loadTask(acc, taskId);
|
|
209
|
+
const existing = (task.acceptance ?? []);
|
|
210
|
+
const index = existing.findIndex((item) => typeof item === 'object' && item.req === reqId);
|
|
211
|
+
if (index < 0) {
|
|
212
|
+
const known = existing.flatMap((item) => typeof item === 'object' && item.req ? [item.req] : []);
|
|
213
|
+
// @sync-invariant none:input-shape an unknown REQ-ID is refused before any write; nothing is written
|
|
214
|
+
throw new CleoError(ExitCode.NOT_FOUND, `REQ-ID "${reqId}" is not a gate on task ${taskId}`, {
|
|
215
|
+
fix: known.length
|
|
216
|
+
? `REQ-IDs on ${taskId}: ${known.join(', ')} (cleo req list ${taskId})`
|
|
217
|
+
: `${taskId} has no REQ-ID gates; add one with cleo req add ${taskId} --gate '<json>'`,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const superseded = existing[index];
|
|
221
|
+
if (acItemToText(superseded) === acItemToText(validated)) {
|
|
222
|
+
return {
|
|
223
|
+
task: { id: taskId, acceptance: existing },
|
|
224
|
+
req: reqId,
|
|
225
|
+
index,
|
|
226
|
+
superseded,
|
|
227
|
+
changed: false,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
const updated = existing.map((item, i) => (i === index ? validated : item));
|
|
231
|
+
// Same guard as `cleo update --acceptance`: a locked stage needs a reason.
|
|
232
|
+
const authorization = enforceAcceptanceImmutability({
|
|
233
|
+
task,
|
|
234
|
+
newAcceptance: updated,
|
|
235
|
+
reason: options.reason,
|
|
236
|
+
projectRoot,
|
|
237
|
+
});
|
|
238
|
+
const now = new Date().toISOString();
|
|
239
|
+
await tx.updateTaskFields(taskId, { acceptanceJson: JSON.stringify(updated), updatedAt: now });
|
|
240
|
+
const rows = await tx.getAcRows(taskId);
|
|
241
|
+
await applyAcPlan(tx, taskId, replaceAcRowPlan(taskId, rows, index, validated));
|
|
242
|
+
const lastResult = task.verification?.gateResults?.find((r) => r.index === index);
|
|
243
|
+
await tx.appendLog({
|
|
244
|
+
timestamp: now,
|
|
245
|
+
action: 'req_replaced',
|
|
246
|
+
taskId,
|
|
247
|
+
actor: process.env['CLEO_AGENT_ID'] ?? 'cleo',
|
|
248
|
+
details: {
|
|
249
|
+
req: reqId,
|
|
250
|
+
index,
|
|
251
|
+
...(options.reason?.trim() ? { reason: options.reason.trim() } : {}),
|
|
252
|
+
...(authorization ? { acceptanceOverride: { ...authorization, status: 'committed' } } : {}),
|
|
253
|
+
},
|
|
254
|
+
before: { gate: superseded, ...(lastResult ? { lastResult } : {}) },
|
|
255
|
+
after: { gate: validated },
|
|
256
|
+
});
|
|
257
|
+
return {
|
|
258
|
+
task: { id: taskId, acceptance: updated },
|
|
259
|
+
req: reqId,
|
|
260
|
+
index,
|
|
261
|
+
superseded,
|
|
262
|
+
changed: true,
|
|
263
|
+
};
|
|
264
|
+
});
|
|
265
|
+
}
|
|
168
266
|
/**
|
|
169
267
|
* List all REQ-ID–addressed acceptance gates on a task.
|
|
170
268
|
*
|
package/dist/tasks/req.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"req.js","sourceRoot":"","sources":["../../src/tasks/req.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"req.js","sourceRoot":"","sources":["../../src/tasks/req.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
*
|
|
57
57
|
* @task T12965
|
|
58
58
|
*/
|
|
59
|
+
import { type ScopedChangedPaths } from './affected-packages.js';
|
|
59
60
|
/** The parts of a vitest (or jest) JSON report the binding reads. */
|
|
60
61
|
export interface TestRunReport {
|
|
61
62
|
/** Epoch milliseconds the run started. */
|
|
@@ -115,6 +116,34 @@ export type TestRunBinding = {
|
|
|
115
116
|
/** Affected packages with no test file, which no report could cover (sorted). */
|
|
116
117
|
untestedPackages: string[];
|
|
117
118
|
};
|
|
119
|
+
/** What the freshness check of a report or receipt decided. */
|
|
120
|
+
export type ReportFreshness = {
|
|
121
|
+
/** Older than the change. */
|
|
122
|
+
ok: false;
|
|
123
|
+
codeName: 'E_EVIDENCE_STALE';
|
|
124
|
+
reason: string;
|
|
125
|
+
} | {
|
|
126
|
+
ok: true;
|
|
127
|
+
/** False when the report has no run time at all, so nothing is judged. */
|
|
128
|
+
judged: boolean;
|
|
129
|
+
/** The change's scoped paths, or null outside git / with no origin. */
|
|
130
|
+
changes: ScopedChangedPaths | null;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Whether a report (or receipt) ran after every part of the change it claims
|
|
134
|
+
* to speak for — point 1 of the module doc, shared by `test-run:` and
|
|
135
|
+
* `qa-run:` (T13427).
|
|
136
|
+
*
|
|
137
|
+
* @param startTime - The run's own start time (epoch ms), if it states one;
|
|
138
|
+
* else the file's mtime is the run time.
|
|
139
|
+
* @param reportPath - Absolute path of the report file.
|
|
140
|
+
* @param root - The task's checkout.
|
|
141
|
+
* @param atom - The atom kind, named in the remedy.
|
|
142
|
+
* @returns The stale refusal, or the change's scoped paths for the relevance check.
|
|
143
|
+
* @task T12965
|
|
144
|
+
* @task T13427
|
|
145
|
+
*/
|
|
146
|
+
export declare function reportFreshness(startTime: unknown, reportPath: string, root: string, atom: 'test-run' | 'qa-run'): ReportFreshness;
|
|
118
147
|
/**
|
|
119
148
|
* Bind a report to the change it claims to test, or refuse it when it is
|
|
120
149
|
* older than the change or does not cover it (see the module doc for exactly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-binding.d.ts","sourceRoot":"","sources":["../../src/tasks/test-run-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;
|
|
1
|
+
{"version":3,"file":"test-run-binding.d.ts","sourceRoot":"","sources":["../../src/tasks/test-run-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAMH,OAAO,EAKL,KAAK,kBAAkB,EAGxB,MAAM,wBAAwB,CAAC;AAEhC,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,KAAK,CAAC;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAc/C;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9E;AA6LD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAKnF;AAsCD,qCAAqC;AACrC,MAAM,MAAM,cAAc,GACtB;IACE,6BAA6B;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,wEAAwE;IACxE,QAAQ,EAAE,kBAAkB,GAAG,yBAAyB,CAAC;IACzD,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,+BAA+B;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEN,+DAA+D;AAC/D,MAAM,MAAM,eAAe,GACvB;IACE,6BAA6B;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,EAAE,EAAE,IAAI,CAAC;IACT,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC,CAAC;AAEN;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,GAAG,QAAQ,GAC1B,eAAe,CAuDjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,cAAc,CA0EhB"}
|
|
@@ -297,23 +297,23 @@ function someNames(names) {
|
|
|
297
297
|
return `${names.slice(0, 5).join(', ')}${names.length > 5 ? `, … (${names.length} packages)` : ''}`;
|
|
298
298
|
}
|
|
299
299
|
/**
|
|
300
|
-
*
|
|
301
|
-
*
|
|
302
|
-
*
|
|
300
|
+
* Whether a report (or receipt) ran after every part of the change it claims
|
|
301
|
+
* to speak for — point 1 of the module doc, shared by `test-run:` and
|
|
302
|
+
* `qa-run:` (T13427).
|
|
303
303
|
*
|
|
304
|
-
* @param
|
|
304
|
+
* @param startTime - The run's own start time (epoch ms), if it states one;
|
|
305
|
+
* else the file's mtime is the run time.
|
|
305
306
|
* @param reportPath - Absolute path of the report file.
|
|
306
|
-
* @param root - The task's checkout
|
|
307
|
-
* @param
|
|
308
|
-
* @returns The refusal, or the
|
|
307
|
+
* @param root - The task's checkout.
|
|
308
|
+
* @param atom - The atom kind, named in the remedy.
|
|
309
|
+
* @returns The stale refusal, or the change's scoped paths for the relevance check.
|
|
309
310
|
* @task T12965
|
|
311
|
+
* @task T13427
|
|
310
312
|
*/
|
|
311
|
-
export function
|
|
312
|
-
const ranAt = typeof
|
|
313
|
-
? report.startTime
|
|
314
|
-
: mtimeOf(reportPath);
|
|
313
|
+
export function reportFreshness(startTime, reportPath, root, atom) {
|
|
314
|
+
const ranAt = typeof startTime === 'number' && Number.isFinite(startTime) ? startTime : mtimeOf(reportPath);
|
|
315
315
|
if (ranAt === null)
|
|
316
|
-
return { ok: true,
|
|
316
|
+
return { ok: true, judged: false, changes: null };
|
|
317
317
|
const clock = {
|
|
318
318
|
ranAt,
|
|
319
319
|
after: (at) => at > ranAt + MTIME_SLACK_MS,
|
|
@@ -325,29 +325,53 @@ export function bindTestRunReport(report, reportPath, root, testFiles) {
|
|
|
325
325
|
codeName: 'E_EVIDENCE_STALE',
|
|
326
326
|
reason,
|
|
327
327
|
});
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
reason,
|
|
332
|
-
});
|
|
328
|
+
const rerun = atom === 'test-run'
|
|
329
|
+
? RERUN
|
|
330
|
+
: 'Re-run the check and record the fresh receipt (write receipts to a gitignored path or outside the checkout).';
|
|
333
331
|
const commit = newestChangeCommit(root);
|
|
334
332
|
if (commit !== null && clock.after(commit.at)) {
|
|
335
333
|
const unseen = committedAfterRunUnseen(root, clock);
|
|
336
334
|
if (unseen !== null) {
|
|
337
|
-
return stale(staleRefusal(ranAt, `commit ${commit.sha.slice(0, 12)} of the change was made`, commit.at, `It may hold content the run did not see: ${unseen}. Bind
|
|
338
|
-
|
|
335
|
+
return stale(staleRefusal(ranAt, `commit ${commit.sha.slice(0, 12)} of the change was made`, commit.at, `It may hold content the run did not see: ${unseen}. Bind ${atom} before committing ` +
|
|
336
|
+
`(cleo verify right after the run), or ${atom === 'test-run' ? 're-run the tests and record the fresh report' : 're-run the check and record the fresh receipt'}.`));
|
|
339
337
|
}
|
|
340
338
|
}
|
|
341
339
|
const changes = scopedChangedPaths(root);
|
|
342
|
-
const
|
|
343
|
-
const newest = newestModified(root, (changed ?? dirtyTracked(root)).filter((p) => p !== clock.reportRel));
|
|
340
|
+
const newest = newestModified(root, (changes?.paths ?? dirtyTracked(root)).filter((p) => p !== clock.reportRel));
|
|
344
341
|
if (newest !== null && clock.after(newest.at)) {
|
|
345
|
-
return stale(staleRefusal(ranAt, `${newest.path} was modified`, newest.at,
|
|
342
|
+
return stale(staleRefusal(ranAt, `${newest.path} was modified`, newest.at, rerun));
|
|
346
343
|
}
|
|
347
344
|
const removed = deletedAfterRun(root, 'HEAD', clock);
|
|
348
345
|
if (removed) {
|
|
349
|
-
return stale(staleRefusal(ranAt, `${removed.path} was deleted or moved (its directory changed)`, removed.at,
|
|
346
|
+
return stale(staleRefusal(ranAt, `${removed.path} was deleted or moved (its directory changed)`, removed.at, rerun));
|
|
350
347
|
}
|
|
348
|
+
return { ok: true, judged: true, changes };
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Bind a report to the change it claims to test, or refuse it when it is
|
|
352
|
+
* older than the change or does not cover it (see the module doc for exactly
|
|
353
|
+
* what this guarantees).
|
|
354
|
+
*
|
|
355
|
+
* @param report - Parsed report.
|
|
356
|
+
* @param reportPath - Absolute path of the report file.
|
|
357
|
+
* @param root - The task's checkout (a git checkout, or not).
|
|
358
|
+
* @param testFiles - {@link coveredTestFiles} of the report.
|
|
359
|
+
* @returns The refusal, or the binding with the affected packages left untested.
|
|
360
|
+
* @task T12965
|
|
361
|
+
*/
|
|
362
|
+
export function bindTestRunReport(report, reportPath, root, testFiles) {
|
|
363
|
+
const fresh = reportFreshness(report.startTime, reportPath, root, 'test-run');
|
|
364
|
+
if (!fresh.ok)
|
|
365
|
+
return fresh;
|
|
366
|
+
if (!fresh.judged)
|
|
367
|
+
return { ok: true, untestedPackages: [] };
|
|
368
|
+
const changes = fresh.changes;
|
|
369
|
+
const changed = changes?.paths ?? null;
|
|
370
|
+
const refuse = (reason) => ({
|
|
371
|
+
ok: false,
|
|
372
|
+
codeName: 'E_EVIDENCE_INSUFFICIENT',
|
|
373
|
+
reason,
|
|
374
|
+
});
|
|
351
375
|
// T13135: a change whose every path was set aside as out of scope has
|
|
352
376
|
// nothing a targeted report can speak for; it must not pass vacuously.
|
|
353
377
|
if (changes !== null && changes.paths.length === 0 && changes.excluded.length > 0) {
|