openplanr 1.19.0 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/backlog.d.ts.map +1 -1
- package/dist/cli/commands/backlog.js +3 -0
- package/dist/cli/commands/backlog.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +3 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +2 -0
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/feature.d.ts.map +1 -1
- package/dist/cli/commands/feature.js +2 -0
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/operate.d.ts +5 -2
- package/dist/cli/commands/operate.d.ts.map +1 -1
- package/dist/cli/commands/operate.js +10 -101
- package/dist/cli/commands/operate.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +2 -0
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/quick.d.ts.map +1 -1
- package/dist/cli/commands/quick.js +2 -0
- package/dist/cli/commands/quick.js.map +1 -1
- package/dist/cli/commands/refine.d.ts.map +1 -1
- package/dist/cli/commands/refine.js +2 -0
- package/dist/cli/commands/refine.js.map +1 -1
- package/dist/cli/commands/revise.d.ts.map +1 -1
- package/dist/cli/commands/revise.js +2 -0
- package/dist/cli/commands/revise.js.map +1 -1
- package/dist/cli/commands/spec.d.ts.map +1 -1
- package/dist/cli/commands/spec.js +2 -0
- package/dist/cli/commands/spec.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +2 -0
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/story.d.ts.map +1 -1
- package/dist/cli/commands/story.js +3 -0
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +3 -0
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/services/ai-service.d.ts +3 -5
- package/dist/services/ai-service.d.ts.map +1 -1
- package/dist/services/ai-service.js +7 -1
- package/dist/services/ai-service.js.map +1 -1
- package/dist/services/credentials-service.d.ts.map +1 -1
- package/dist/services/credentials-service.js +2 -0
- package/dist/services/credentials-service.js.map +1 -1
- package/dist/services/deprecation-notices.d.ts +5 -0
- package/dist/services/deprecation-notices.d.ts.map +1 -0
- package/dist/services/deprecation-notices.js +6 -0
- package/dist/services/deprecation-notices.js.map +1 -0
- package/dist/services/operate/advisors.d.ts +144 -166
- package/dist/services/operate/advisors.d.ts.map +1 -1
- package/dist/services/operate/advisors.js +178 -543
- package/dist/services/operate/advisors.js.map +1 -1
- package/dist/services/operate/citation-resolution.d.ts.map +1 -1
- package/dist/services/operate/citation-resolution.js +50 -1
- package/dist/services/operate/citation-resolution.js.map +1 -1
- package/dist/services/operate/config.d.ts +18 -52
- package/dist/services/operate/config.d.ts.map +1 -1
- package/dist/services/operate/config.js +24 -206
- package/dist/services/operate/config.js.map +1 -1
- package/dist/services/operate/doctor.d.ts +15 -0
- package/dist/services/operate/doctor.d.ts.map +1 -1
- package/dist/services/operate/doctor.js +142 -32
- package/dist/services/operate/doctor.js.map +1 -1
- package/dist/services/operate/engine.d.ts +22 -78
- package/dist/services/operate/engine.d.ts.map +1 -1
- package/dist/services/operate/engine.js +269 -202
- package/dist/services/operate/engine.js.map +1 -1
- package/dist/services/operate/evidence.d.ts +9 -107
- package/dist/services/operate/evidence.d.ts.map +1 -1
- package/dist/services/operate/evidence.js +0 -1403
- package/dist/services/operate/evidence.js.map +1 -1
- package/dist/services/operate/index.d.ts.map +1 -1
- package/dist/services/operate/index.js +10 -231
- package/dist/services/operate/index.js.map +1 -1
- package/dist/services/operate/integrity.d.ts +81 -0
- package/dist/services/operate/integrity.d.ts.map +1 -0
- package/dist/services/operate/integrity.js +152 -0
- package/dist/services/operate/integrity.js.map +1 -0
- package/dist/services/operate/interaction/answer-service.d.ts +0 -10
- package/dist/services/operate/interaction/answer-service.d.ts.map +1 -1
- package/dist/services/operate/interaction/answer-service.js +63 -43
- package/dist/services/operate/interaction/answer-service.js.map +1 -1
- package/dist/services/operate/interaction/question-engine.d.ts.map +1 -1
- package/dist/services/operate/interaction/question-engine.js +105 -21
- package/dist/services/operate/interaction/question-engine.js.map +1 -1
- package/dist/services/operate/interaction/question-registry.d.ts +16 -1
- package/dist/services/operate/interaction/question-registry.d.ts.map +1 -1
- package/dist/services/operate/interaction/question-registry.js +45 -39
- package/dist/services/operate/interaction/question-registry.js.map +1 -1
- package/dist/services/operate/interaction/session-service.d.ts.map +1 -1
- package/dist/services/operate/interaction/session-service.js +16 -11
- package/dist/services/operate/interaction/session-service.js.map +1 -1
- package/dist/services/operate/interaction/terminal-renderer.d.ts.map +1 -1
- package/dist/services/operate/interaction/terminal-renderer.js +16 -6
- package/dist/services/operate/interaction/terminal-renderer.js.map +1 -1
- package/dist/services/operate/maintenance.d.ts +1 -11
- package/dist/services/operate/maintenance.d.ts.map +1 -1
- package/dist/services/operate/maintenance.js +94 -342
- package/dist/services/operate/maintenance.js.map +1 -1
- package/dist/services/operate/mission-dispatch.d.ts +73 -55
- package/dist/services/operate/mission-dispatch.d.ts.map +1 -1
- package/dist/services/operate/mission-dispatch.js +91 -67
- package/dist/services/operate/mission-dispatch.js.map +1 -1
- package/dist/services/operate/projection-persistence.d.ts.map +1 -1
- package/dist/services/operate/projection-persistence.js +22 -2
- package/dist/services/operate/projection-persistence.js.map +1 -1
- package/dist/services/operate/projection.d.ts.map +1 -1
- package/dist/services/operate/projection.js +10 -3
- package/dist/services/operate/projection.js.map +1 -1
- package/dist/services/operate/protocol.d.ts +1 -41
- package/dist/services/operate/protocol.d.ts.map +1 -1
- package/dist/services/operate/protocol.js +7 -45
- package/dist/services/operate/protocol.js.map +1 -1
- package/dist/services/operate/redaction.d.ts +3 -3
- package/dist/services/operate/redaction.js +4 -4
- package/dist/services/operate/redaction.js.map +1 -1
- package/dist/services/operate/reports.d.ts +11 -1
- package/dist/services/operate/reports.d.ts.map +1 -1
- package/dist/services/operate/reports.js +88 -3
- package/dist/services/operate/reports.js.map +1 -1
- package/dist/services/operate/types.d.ts +42 -128
- package/dist/services/operate/types.d.ts.map +1 -1
- package/dist/services/operate/types.js.map +1 -1
- package/dist/services/operate/workspace.d.ts +0 -1
- package/dist/services/operate/workspace.d.ts.map +1 -1
- package/dist/services/operate/workspace.js +0 -2
- package/dist/services/operate/workspace.js.map +1 -1
- package/dist/services/runtime-manager-service.js +2 -2
- package/dist/services/runtime-manager-service.js.map +1 -1
- package/package.json +3 -3
- package/dist/services/operate/evidence-classifications.d.ts +0 -59
- package/dist/services/operate/evidence-classifications.d.ts.map +0 -1
- package/dist/services/operate/evidence-classifications.js +0 -132
- package/dist/services/operate/evidence-classifications.js.map +0 -1
- package/dist/services/operate/evidence-diagnostics.d.ts +0 -23
- package/dist/services/operate/evidence-diagnostics.d.ts.map +0 -1
- package/dist/services/operate/evidence-diagnostics.js +0 -152
- package/dist/services/operate/evidence-diagnostics.js.map +0 -1
- package/dist/services/operate/evidence-readiness.d.ts +0 -18
- package/dist/services/operate/evidence-readiness.d.ts.map +0 -1
- package/dist/services/operate/evidence-readiness.js +0 -94
- package/dist/services/operate/evidence-readiness.js.map +0 -1
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { chmod, mkdir, readdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { resolveGuidedInteractionValidators } from '../pipeline-package-service.js';
|
|
4
|
-
import { canonicalDigest, canonicalize, sha256Digest } from './canonical.js';
|
|
5
|
-
import { createOperatingAction } from './interaction/action-service.js';
|
|
6
|
-
import { currentGuidedSessionBindings } from './interaction/session-service.js';
|
|
7
|
-
import { OperateError } from './types.js';
|
|
8
|
-
import { resolveOperatingPaths } from './workspace.js';
|
|
9
|
-
const CANDIDATE_ID = /^EVC-[A-Za-z0-9._-]{8,128}$/;
|
|
10
|
-
function diagnosticDirectory(projectRoot, localRoot) {
|
|
11
|
-
return path.join(resolveOperatingPaths(projectRoot, { localRoot }).quarantine, 'diagnostics');
|
|
12
|
-
}
|
|
13
|
-
function diagnosticPath(projectRoot, candidateId, localRoot) {
|
|
14
|
-
if (!CANDIDATE_ID.test(candidateId)) {
|
|
15
|
-
throw new OperateError('E_OPERATE_CONFIG_INVALID', 'Evidence candidate ID is invalid.');
|
|
16
|
-
}
|
|
17
|
-
return path.join(diagnosticDirectory(projectRoot, localRoot), `${candidateId}.json`);
|
|
18
|
-
}
|
|
19
|
-
function diagnosticSource(item) {
|
|
20
|
-
if (item.source === 'file-import') {
|
|
21
|
-
return item.location.toLowerCase().endsWith('.csv') ? 'import-csv' : 'import-json';
|
|
22
|
-
}
|
|
23
|
-
if (['repository', 'planr', 'git', 'github', 'linear'].includes(item.source)) {
|
|
24
|
-
return item.source;
|
|
25
|
-
}
|
|
26
|
-
return 'repository';
|
|
27
|
-
}
|
|
28
|
-
function safeLocation(item) {
|
|
29
|
-
const value = item.location.replaceAll('\\', '/').trim();
|
|
30
|
-
if (!value ||
|
|
31
|
-
path.posix.isAbsolute(value) ||
|
|
32
|
-
/^[A-Za-z]:\//.test(value) ||
|
|
33
|
-
value.split('/').includes('..') ||
|
|
34
|
-
/(?:\/Users\/|\/home\/|[A-Za-z]:\/Users\/)/i.test(value)) {
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
return value.slice(0, 4_096);
|
|
38
|
-
}
|
|
39
|
-
async function atomicDiagnosticWrite(projectRoot, diagnostic, localRoot) {
|
|
40
|
-
const validators = await resolveGuidedInteractionValidators();
|
|
41
|
-
if (validators.validateEvidenceDiagnostic(diagnostic).length > 0) {
|
|
42
|
-
throw new OperateError('E_OPERATE_CONFIG_INVALID', `Evidence diagnostic ${diagnostic.candidateId} failed Protocol v1.2 validation.`);
|
|
43
|
-
}
|
|
44
|
-
const target = diagnosticPath(projectRoot, diagnostic.candidateId, localRoot);
|
|
45
|
-
await mkdir(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
46
|
-
const temporary = `${target}.${process.pid}.tmp`;
|
|
47
|
-
await writeFile(temporary, `${canonicalize(diagnostic)}\n`, { mode: 0o600 });
|
|
48
|
-
await rename(temporary, target);
|
|
49
|
-
await chmod(target, 0o600);
|
|
50
|
-
}
|
|
51
|
-
export async function createEvidenceDiagnostic(input) {
|
|
52
|
-
const bindings = await currentGuidedSessionBindings(input.projectRoot);
|
|
53
|
-
const contentDigest = sha256Digest(input.item.content);
|
|
54
|
-
const candidateId = `EVC-${canonicalDigest({
|
|
55
|
-
source: input.item.source,
|
|
56
|
-
componentId: input.item.repository?.componentId ?? 'control',
|
|
57
|
-
location: input.item.location,
|
|
58
|
-
line: input.detection.line,
|
|
59
|
-
ruleId: input.detection.ruleId,
|
|
60
|
-
contentDigest,
|
|
61
|
-
projectHead: bindings.projectHead,
|
|
62
|
-
}).slice('sha256:'.length, 'sha256:'.length + 24)}`;
|
|
63
|
-
const componentId = input.item.repository?.componentId ?? 'control';
|
|
64
|
-
const diagnose = await createOperatingAction({
|
|
65
|
-
id: 'operate.evidence.diagnose',
|
|
66
|
-
label: 'Inspect the safe evidence diagnostic',
|
|
67
|
-
command: `planr operate evidence diagnose ${candidateId}`,
|
|
68
|
-
effect: 'read-only',
|
|
69
|
-
recommended: true,
|
|
70
|
-
});
|
|
71
|
-
const classify = await createOperatingAction({
|
|
72
|
-
id: 'operate.evidence.classify',
|
|
73
|
-
label: 'Review an eligible exact false-positive classification',
|
|
74
|
-
command: `planr operate evidence classify ${candidateId}`,
|
|
75
|
-
effect: 'machine-local-write',
|
|
76
|
-
confirmation: {
|
|
77
|
-
sessionId: `GIS-evidence-${candidateId.slice('EVC-'.length)}`,
|
|
78
|
-
confirmationScope: `operate.evidence.classify:${candidateId}`,
|
|
79
|
-
projectIdentity: bindings.projectIdentity,
|
|
80
|
-
projectHead: bindings.projectHead,
|
|
81
|
-
configHead: bindings.configHead,
|
|
82
|
-
eventHead: null,
|
|
83
|
-
arguments: [
|
|
84
|
-
input.detection.ruleId,
|
|
85
|
-
contentDigest,
|
|
86
|
-
canonicalDigest({ location: safeLocation(input.item) ?? null }),
|
|
87
|
-
],
|
|
88
|
-
destinations: [],
|
|
89
|
-
writes: [`evidence-diagnostics/${candidateId}.json`],
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
const diagnostic = {
|
|
93
|
-
kind: 'evidence-diagnostic',
|
|
94
|
-
schemaVersion: '1.0.0',
|
|
95
|
-
protocolVersion: '1.2.0',
|
|
96
|
-
candidateId,
|
|
97
|
-
source: diagnosticSource(input.item),
|
|
98
|
-
componentId,
|
|
99
|
-
...(safeLocation(input.item) ? { location: safeLocation(input.item) } : {}),
|
|
100
|
-
...(Number.isInteger(input.detection.line) ? { line: input.detection.line } : {}),
|
|
101
|
-
ruleId: input.detection.ruleId,
|
|
102
|
-
category: input.detection.category,
|
|
103
|
-
contentDigest,
|
|
104
|
-
projectHead: bindings.projectHead,
|
|
105
|
-
valueDisclosed: false,
|
|
106
|
-
actions: [diagnose.action, classify.action],
|
|
107
|
-
};
|
|
108
|
-
const existing = await readEvidenceDiagnostic({
|
|
109
|
-
projectRoot: input.projectRoot,
|
|
110
|
-
candidateId,
|
|
111
|
-
localRoot: input.localRoot,
|
|
112
|
-
}).catch(() => null);
|
|
113
|
-
if (existing &&
|
|
114
|
-
existing.ruleId === diagnostic.ruleId &&
|
|
115
|
-
existing.contentDigest === diagnostic.contentDigest &&
|
|
116
|
-
existing.projectHead === diagnostic.projectHead) {
|
|
117
|
-
return existing;
|
|
118
|
-
}
|
|
119
|
-
await atomicDiagnosticWrite(input.projectRoot, diagnostic, input.localRoot);
|
|
120
|
-
return diagnostic;
|
|
121
|
-
}
|
|
122
|
-
export async function readEvidenceDiagnostic(input) {
|
|
123
|
-
const target = diagnosticPath(input.projectRoot, input.candidateId, input.localRoot);
|
|
124
|
-
try {
|
|
125
|
-
const diagnostic = JSON.parse(await readFile(target, 'utf8'));
|
|
126
|
-
const validators = await resolveGuidedInteractionValidators();
|
|
127
|
-
if (validators.validateEvidenceDiagnostic(diagnostic).length > 0)
|
|
128
|
-
throw new Error('invalid');
|
|
129
|
-
return diagnostic;
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
throw new OperateError('E_OPERATE_STATE_INVALID', `Evidence diagnostic ${input.candidateId} is unavailable or invalid.`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
export async function listEvidenceDiagnostics(input) {
|
|
136
|
-
const directory = diagnosticDirectory(input.projectRoot, input.localRoot);
|
|
137
|
-
const names = (await readdir(directory).catch(() => []))
|
|
138
|
-
.filter((name) => /^EVC-[A-Za-z0-9._-]+\.json$/.test(name))
|
|
139
|
-
.sort();
|
|
140
|
-
const diagnostics = [];
|
|
141
|
-
for (const name of names) {
|
|
142
|
-
diagnostics.push(await readEvidenceDiagnostic({
|
|
143
|
-
...input,
|
|
144
|
-
candidateId: name.slice(0, -'.json'.length),
|
|
145
|
-
}));
|
|
146
|
-
}
|
|
147
|
-
return diagnostics;
|
|
148
|
-
}
|
|
149
|
-
export async function writeEvidenceDiagnostic(input) {
|
|
150
|
-
await atomicDiagnosticWrite(input.projectRoot, input.diagnostic, input.localRoot);
|
|
151
|
-
}
|
|
152
|
-
//# sourceMappingURL=evidence-diagnostics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-diagnostics.js","sourceRoot":"","sources":["../../../src/services/operate/evidence-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type OperatingEvidence, type OperatingEvidenceIndexItem, type OperatingEvidenceReadiness, type OperatingRoleId } from './types.js';
|
|
2
|
-
export declare function evaluateEvidenceReadiness(input: {
|
|
3
|
-
cycleId: string;
|
|
4
|
-
evidence: OperatingEvidence;
|
|
5
|
-
enabledRoles: OperatingRoleId[];
|
|
6
|
-
now?: Date;
|
|
7
|
-
/**
|
|
8
|
-
* FR2: the POST-index evidence view a mission-mode role's packet is actually
|
|
9
|
-
* built from. When provided, a `repository` requirement is additionally capped
|
|
10
|
-
* by the number of repository items that survived the mission index — so a role
|
|
11
|
-
* whose repository items were all dropped by the dot-prefixed/pattern filter is
|
|
12
|
-
* gated not-ready instead of dispatching "ready" against a pre-index item set
|
|
13
|
-
* that no bounded mission packet can reference. Omitting it preserves the
|
|
14
|
-
* pre-index behaviour for the standard (pack-mode) engine path.
|
|
15
|
-
*/
|
|
16
|
-
missionEvidenceIndex?: readonly OperatingEvidenceIndexItem[];
|
|
17
|
-
}): Promise<OperatingEvidenceReadiness>;
|
|
18
|
-
//# sourceMappingURL=evidence-readiness.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-readiness.d.ts","sourceRoot":"","sources":["../../../src/services/operate/evidence-readiness.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAgBpB,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC9D,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAyGtC"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { canonicalDigest } from './canonical.js';
|
|
2
|
-
import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
|
|
3
|
-
import { compareSensitivity, prepareAdvisorEvidenceText } from './redaction.js';
|
|
4
|
-
import { OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, } from './types.js';
|
|
5
|
-
function ageHours(iso, now) {
|
|
6
|
-
return Math.max(0, (now.getTime() - Date.parse(iso)) / (60 * 60 * 1_000));
|
|
7
|
-
}
|
|
8
|
-
export async function evaluateEvidenceReadiness(input) {
|
|
9
|
-
const now = input.now ?? new Date();
|
|
10
|
-
const registry = (await loadOperatingProtocol()).listOperatingRoles();
|
|
11
|
-
const postIndexRepositoryCount = input.missionEvidenceIndex
|
|
12
|
-
? input.missionEvidenceIndex.filter((item) => item.source === 'repository').length
|
|
13
|
-
: null;
|
|
14
|
-
const eligibleItems = input.evidence.items.filter((item) => !prepareAdvisorEvidenceText({
|
|
15
|
-
evidenceId: item.id,
|
|
16
|
-
digest: item.digest,
|
|
17
|
-
value: item.summary ?? '',
|
|
18
|
-
}).quarantined);
|
|
19
|
-
let gapNumber = 1;
|
|
20
|
-
const roles = input.enabledRoles.map((roleId) => {
|
|
21
|
-
const role = registry.find((entry) => entry.id === roleId);
|
|
22
|
-
const configured = role?.minimumEvidence.requirements ?? [
|
|
23
|
-
{
|
|
24
|
-
source: 'repository',
|
|
25
|
-
claimTypes: ['code'],
|
|
26
|
-
minimumItems: 1,
|
|
27
|
-
maxAgeHours: 168,
|
|
28
|
-
observationWindow: 'current-state',
|
|
29
|
-
sensitivityCeiling: 'internal',
|
|
30
|
-
},
|
|
31
|
-
];
|
|
32
|
-
const requirements = configured.map((requirement) => {
|
|
33
|
-
const matching = eligibleItems.filter((item) => item.source === requirement.source &&
|
|
34
|
-
requirement.claimTypes.some((claim) => item.claimTypes.includes(claim)) &&
|
|
35
|
-
compareSensitivity(item.sensitivity, requirement.sensitivityCeiling) <= 0);
|
|
36
|
-
const oldestAgeHours = matching.length > 0
|
|
37
|
-
? Math.max(...matching.map((item) => ageHours(item.collectedAt, now)))
|
|
38
|
-
: null;
|
|
39
|
-
// FR2: for a mission-mode evaluation, a `repository` requirement can be
|
|
40
|
-
// satisfied only by repository items the mission index actually retained —
|
|
41
|
-
// dot-prefixed/pattern-dropped repository items are unreachable by a bounded
|
|
42
|
-
// mission packet, so they cannot count toward readiness.
|
|
43
|
-
const observedItems = postIndexRepositoryCount !== null && requirement.source === 'repository'
|
|
44
|
-
? Math.min(matching.length, postIndexRepositoryCount)
|
|
45
|
-
: matching.length;
|
|
46
|
-
const satisfied = observedItems >= requirement.minimumItems &&
|
|
47
|
-
oldestAgeHours !== null &&
|
|
48
|
-
oldestAgeHours <= requirement.maxAgeHours &&
|
|
49
|
-
(requirement.observationWindow === 'current-state' ||
|
|
50
|
-
requirement.observationWindow === 'current-cycle' ||
|
|
51
|
-
matching.some((item) => item.observedFrom && item.observedTo));
|
|
52
|
-
return {
|
|
53
|
-
...structuredClone(requirement),
|
|
54
|
-
observedItems,
|
|
55
|
-
oldestAgeHours,
|
|
56
|
-
satisfied,
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
const ready = (role?.minimumEvidence.match ?? 'all') === 'any'
|
|
60
|
-
? requirements.some((requirement) => requirement.satisfied)
|
|
61
|
-
: requirements.every((requirement) => requirement.satisfied);
|
|
62
|
-
const gapId = ready ? null : `GAP-${String(gapNumber++).padStart(3, '0')}`;
|
|
63
|
-
return {
|
|
64
|
-
roleId,
|
|
65
|
-
readiness: ready ? 'ready' : 'not_evaluated',
|
|
66
|
-
requirements,
|
|
67
|
-
missingEvidence: requirements
|
|
68
|
-
.filter((requirement) => !requirement.satisfied)
|
|
69
|
-
.map((requirement) => `${requirement.source}:${requirement.claimTypes.join('+')} (${requirement.observedItems}/${requirement.minimumItems})`),
|
|
70
|
-
evidenceRefs: eligibleItems
|
|
71
|
-
.filter((item) => requirements.some((requirement) => requirement.source === item.source &&
|
|
72
|
-
requirement.claimTypes.some((claim) => item.claimTypes.includes(claim))))
|
|
73
|
-
.map((item) => item.id)
|
|
74
|
-
.sort(),
|
|
75
|
-
modelCallAllowed: ready,
|
|
76
|
-
gapId,
|
|
77
|
-
};
|
|
78
|
-
});
|
|
79
|
-
const readiness = {
|
|
80
|
-
kind: 'operating-evidence-readiness',
|
|
81
|
-
schemaVersion: OPERATE_SCHEMA_VERSION,
|
|
82
|
-
protocolVersion: OPERATE_PROTOCOL_VERSION,
|
|
83
|
-
cycleId: input.cycleId,
|
|
84
|
-
inputDigest: canonicalDigest({
|
|
85
|
-
evidence: input.evidence.fingerprint,
|
|
86
|
-
roles: input.enabledRoles,
|
|
87
|
-
advisorEligibleEvidenceRefs: eligibleItems.map((item) => item.id).sort(),
|
|
88
|
-
}),
|
|
89
|
-
evaluatedAt: now.toISOString(),
|
|
90
|
-
roles,
|
|
91
|
-
};
|
|
92
|
-
return assertOperatingArtifact('operating-evidence-readiness', readiness);
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=evidence-readiness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-readiness.js","sourceRoot":"","sources":["../../../src/services/operate/evidence-readiness.ts"],"names":[],"mappings":"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"}
|