perttool 0.5.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +71 -1
- package/README.md +128 -30
- package/dist/application/advance-history.d.ts +48 -0
- package/dist/application/advance-history.d.ts.map +1 -0
- package/dist/application/advance-history.js +263 -0
- package/dist/application/advance-history.js.map +1 -0
- package/dist/application/contract6-mutation.d.ts +3 -2
- package/dist/application/contract6-mutation.d.ts.map +1 -1
- package/dist/application/contract6-mutation.js +2 -1
- package/dist/application/contract6-mutation.js.map +1 -1
- package/dist/application/contract6-projection.d.ts +2 -1
- package/dist/application/contract6-projection.d.ts.map +1 -1
- package/dist/application/contract6-projection.js +31 -1
- package/dist/application/contract6-projection.js.map +1 -1
- package/dist/application/contract7-assurance.d.ts +57 -0
- package/dist/application/contract7-assurance.d.ts.map +1 -0
- package/dist/application/contract7-assurance.js +248 -0
- package/dist/application/contract7-assurance.js.map +1 -0
- package/dist/application/contract7-mermaid.d.ts +9 -0
- package/dist/application/contract7-mermaid.d.ts.map +1 -0
- package/dist/application/contract7-mermaid.js +73 -0
- package/dist/application/contract7-mermaid.js.map +1 -0
- package/dist/application/contract7-mutation.d.ts +21 -0
- package/dist/application/contract7-mutation.d.ts.map +1 -0
- package/dist/application/contract7-mutation.js +181 -0
- package/dist/application/contract7-mutation.js.map +1 -0
- package/dist/application/contract7-project.d.ts +10 -0
- package/dist/application/contract7-project.d.ts.map +1 -0
- package/dist/application/contract7-project.js +29 -0
- package/dist/application/contract7-project.js.map +1 -0
- package/dist/application/contract7-projection.d.ts +9 -0
- package/dist/application/contract7-projection.d.ts.map +1 -0
- package/dist/application/contract7-projection.js +100 -0
- package/dist/application/contract7-projection.js.map +1 -0
- package/dist/application/contract7-source.d.ts +24 -0
- package/dist/application/contract7-source.d.ts.map +1 -0
- package/dist/application/contract7-source.js +54 -0
- package/dist/application/contract7-source.js.map +1 -0
- package/dist/application/contract7-unit-migration.d.ts +13 -0
- package/dist/application/contract7-unit-migration.d.ts.map +1 -0
- package/dist/application/contract7-unit-migration.js +13 -0
- package/dist/application/contract7-unit-migration.js.map +1 -0
- package/dist/application/init.d.ts +1 -1
- package/dist/application/init.js +3 -3
- package/dist/application/mutate.d.ts +5 -1
- package/dist/application/mutate.d.ts.map +1 -1
- package/dist/application/mutate.js +2 -2
- package/dist/application/mutate.js.map +1 -1
- package/dist/application/target-actuals-analysis.d.ts +5 -4
- package/dist/application/target-actuals-analysis.d.ts.map +1 -1
- package/dist/application/target-actuals-analysis.js +18 -11
- package/dist/application/target-actuals-analysis.js.map +1 -1
- package/dist/application/target-actuals-mutation.d.ts +5 -3
- package/dist/application/target-actuals-mutation.d.ts.map +1 -1
- package/dist/application/target-actuals-mutation.js +16 -8
- package/dist/application/target-actuals-mutation.js.map +1 -1
- package/dist/application/target-actuals-write.d.ts +2 -1
- package/dist/application/target-actuals-write.d.ts.map +1 -1
- package/dist/application/target-actuals-write.js.map +1 -1
- package/dist/application/target-assurance-advance-history.d.ts +19 -0
- package/dist/application/target-assurance-advance-history.d.ts.map +1 -0
- package/dist/application/target-assurance-advance-history.js +61 -0
- package/dist/application/target-assurance-advance-history.js.map +1 -0
- package/dist/application/target-assurance-analysis.d.ts +34 -0
- package/dist/application/target-assurance-analysis.d.ts.map +1 -0
- package/dist/application/target-assurance-analysis.js +103 -0
- package/dist/application/target-assurance-analysis.js.map +1 -0
- package/dist/application/target-assurance-inspection.d.ts +38 -0
- package/dist/application/target-assurance-inspection.d.ts.map +1 -0
- package/dist/application/target-assurance-inspection.js +356 -0
- package/dist/application/target-assurance-inspection.js.map +1 -0
- package/dist/application/target-assurance-write.d.ts +22 -0
- package/dist/application/target-assurance-write.d.ts.map +1 -0
- package/dist/application/target-assurance-write.js +73 -0
- package/dist/application/target-assurance-write.js.map +1 -0
- package/dist/application/target-governance-init.d.ts +3 -3
- package/dist/application/target-governance-init.d.ts.map +1 -1
- package/dist/application/target-governance-init.js +14 -10
- package/dist/application/target-governance-init.js.map +1 -1
- package/dist/application/target-governance-project.d.ts +6 -4
- package/dist/application/target-governance-project.d.ts.map +1 -1
- package/dist/application/target-governance-project.js +18 -4
- package/dist/application/target-governance-project.js.map +1 -1
- package/dist/application/target-mutate.d.ts +7 -1
- package/dist/application/target-mutate.d.ts.map +1 -1
- package/dist/application/target-mutate.js +50 -3
- package/dist/application/target-mutate.js.map +1 -1
- package/dist/application/target-project-history.d.ts +4 -4
- package/dist/application/target-project-history.d.ts.map +1 -1
- package/dist/application/target-project-history.js +1 -1
- package/dist/application/target-project-history.js.map +1 -1
- package/dist/application/target-unit-migration-candidate.d.ts +29 -6
- package/dist/application/target-unit-migration-candidate.d.ts.map +1 -1
- package/dist/application/target-unit-migration-candidate.js +204 -3
- package/dist/application/target-unit-migration-candidate.js.map +1 -1
- package/dist/application/target-unit-migration-result.d.ts +2 -2
- package/dist/application/target-unit-migration-result.d.ts.map +1 -1
- package/dist/application/target-unit-migration-result.js +4 -2
- package/dist/application/target-unit-migration-result.js.map +1 -1
- package/dist/application/target-velocity-observation.d.ts +1 -1
- package/dist/application/target-velocity-observation.js +1 -1
- package/dist/assurance/advance.d.ts +45 -0
- package/dist/assurance/advance.d.ts.map +1 -0
- package/dist/assurance/advance.js +507 -0
- package/dist/assurance/advance.js.map +1 -0
- package/dist/assurance/authority.d.ts +86 -0
- package/dist/assurance/authority.d.ts.map +1 -0
- package/dist/assurance/authority.js +269 -0
- package/dist/assurance/authority.js.map +1 -0
- package/dist/assurance/canonical.d.ts +13 -0
- package/dist/assurance/canonical.d.ts.map +1 -0
- package/dist/assurance/canonical.js +320 -0
- package/dist/assurance/canonical.js.map +1 -0
- package/dist/assurance/compatibility.d.ts +62 -0
- package/dist/assurance/compatibility.d.ts.map +1 -0
- package/dist/assurance/compatibility.js +163 -0
- package/dist/assurance/compatibility.js.map +1 -0
- package/dist/assurance/evaluate.d.ts +4 -0
- package/dist/assurance/evaluate.d.ts.map +1 -0
- package/dist/assurance/evaluate.js +631 -0
- package/dist/assurance/evaluate.js.map +1 -0
- package/dist/assurance/governance.d.ts +42 -0
- package/dist/assurance/governance.d.ts.map +1 -0
- package/dist/assurance/governance.js +95 -0
- package/dist/assurance/governance.js.map +1 -0
- package/dist/assurance/mermaid.d.ts +40 -0
- package/dist/assurance/mermaid.d.ts.map +1 -0
- package/dist/assurance/mermaid.js +401 -0
- package/dist/assurance/mermaid.js.map +1 -0
- package/dist/assurance/mutation.d.ts +96 -0
- package/dist/assurance/mutation.d.ts.map +1 -0
- package/dist/assurance/mutation.js +757 -0
- package/dist/assurance/mutation.js.map +1 -0
- package/dist/assurance/source.d.ts +20 -0
- package/dist/assurance/source.d.ts.map +1 -0
- package/dist/assurance/source.js +313 -0
- package/dist/assurance/source.js.map +1 -0
- package/dist/assurance/types.d.ts +166 -0
- package/dist/assurance/types.d.ts.map +1 -0
- package/dist/assurance/types.js +3 -0
- package/dist/assurance/types.js.map +1 -0
- package/dist/cli.js +431 -72
- package/dist/cli.js.map +1 -1
- package/dist/command/actuals-discovery.d.ts.map +1 -1
- package/dist/command/actuals-discovery.js +50 -4
- package/dist/command/actuals-discovery.js.map +1 -1
- package/dist/command/assurance-discovery.d.ts +17 -0
- package/dist/command/assurance-discovery.d.ts.map +1 -0
- package/dist/command/assurance-discovery.js +287 -0
- package/dist/command/assurance-discovery.js.map +1 -0
- package/dist/command/assurance-usage.d.ts +20 -0
- package/dist/command/assurance-usage.d.ts.map +1 -0
- package/dist/command/assurance-usage.js +66 -0
- package/dist/command/assurance-usage.js.map +1 -0
- package/dist/conversion/mermaid.d.ts +2 -1
- package/dist/conversion/mermaid.d.ts.map +1 -1
- package/dist/conversion/mermaid.js +2 -2
- package/dist/conversion/mermaid.js.map +1 -1
- package/dist/formatter/source-formatter.d.ts +1 -1
- package/dist/formatter/source-formatter.d.ts.map +1 -1
- package/dist/formatter/source-formatter.js +56 -4
- package/dist/formatter/source-formatter.js.map +1 -1
- package/dist/formatter/target-source-formatter.d.ts +2 -1
- package/dist/formatter/target-source-formatter.d.ts.map +1 -1
- package/dist/formatter/target-source-formatter.js +18 -2
- package/dist/formatter/target-source-formatter.js.map +1 -1
- package/dist/help/assurance-guide.d.ts +10 -0
- package/dist/help/assurance-guide.d.ts.map +1 -0
- package/dist/help/assurance-guide.js +115 -0
- package/dist/help/assurance-guide.js.map +1 -0
- package/dist/help/guide.d.ts +1 -1
- package/dist/help/guide.d.ts.map +1 -1
- package/dist/help/registry.d.ts.map +1 -1
- package/dist/help/registry.js +11 -1
- package/dist/help/registry.js.map +1 -1
- package/dist/history/advance-history.d.ts +46 -0
- package/dist/history/advance-history.d.ts.map +1 -0
- package/dist/history/advance-history.js +425 -0
- package/dist/history/advance-history.js.map +1 -0
- package/dist/history/git-probe.d.ts +40 -0
- package/dist/history/git-probe.d.ts.map +1 -1
- package/dist/history/git-probe.js +330 -0
- package/dist/history/git-probe.js.map +1 -1
- package/dist/history/project-history.d.ts +14 -5
- package/dist/history/project-history.d.ts.map +1 -1
- package/dist/history/project-history.js +25 -18
- package/dist/history/project-history.js.map +1 -1
- package/dist/index.d.ts +31 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -14
- package/dist/index.js.map +1 -1
- package/dist/io/target-safe-write.d.ts +4 -1
- package/dist/io/target-safe-write.d.ts.map +1 -1
- package/dist/io/target-safe-write.js +19 -1
- package/dist/io/target-safe-write.js.map +1 -1
- package/dist/migration/grammar-boundary.d.ts +1 -1
- package/dist/migration/grammar-boundary.d.ts.map +1 -1
- package/dist/migration/grammar-boundary.js +7 -3
- package/dist/migration/grammar-boundary.js.map +1 -1
- package/dist/model/declaration-fields.d.ts +12 -0
- package/dist/model/declaration-fields.d.ts.map +1 -1
- package/dist/model/declaration-fields.js +45 -0
- package/dist/model/declaration-fields.js.map +1 -1
- package/dist/model/syntax.d.ts +17 -1
- package/dist/model/syntax.d.ts.map +1 -1
- package/dist/model/syntax.js.map +1 -1
- package/dist/mutation/actuals.js +1 -1
- package/dist/mutation/actuals.js.map +1 -1
- package/dist/mutation/advance-deletion.d.ts +14 -0
- package/dist/mutation/advance-deletion.d.ts.map +1 -0
- package/dist/mutation/advance-deletion.js +53 -0
- package/dist/mutation/advance-deletion.js.map +1 -0
- package/dist/mutation/advance.d.ts +18 -1
- package/dist/mutation/advance.d.ts.map +1 -1
- package/dist/mutation/advance.js +28 -25
- package/dist/mutation/advance.js.map +1 -1
- package/dist/mutation/project.d.ts +2 -1
- package/dist/mutation/project.d.ts.map +1 -1
- package/dist/mutation/project.js +21 -0
- package/dist/mutation/project.js.map +1 -1
- package/dist/parser/document-parser.d.ts +7 -0
- package/dist/parser/document-parser.d.ts.map +1 -1
- package/dist/parser/document-parser.js +227 -12
- package/dist/parser/document-parser.js.map +1 -1
- package/dist/recommendation/override-types.d.ts +2 -2
- package/dist/recommendation/override.d.ts +2 -2
- package/dist/recommendation/override.d.ts.map +1 -1
- package/dist/recommendation/override.js +13 -5
- package/dist/recommendation/override.js.map +1 -1
- package/dist/schema/registry.d.ts +1 -1
- package/dist/schema/registry.d.ts.map +1 -1
- package/dist/schema/registry.js +8 -6
- package/dist/schema/registry.js.map +1 -1
- package/dist/semantic/target-validator.d.ts +12 -1
- package/dist/semantic/target-validator.d.ts.map +1 -1
- package/dist/semantic/target-validator.js +47 -2
- package/dist/semantic/target-validator.js.map +1 -1
- package/dist/semantic/validator.d.ts +1 -0
- package/dist/semantic/validator.d.ts.map +1 -1
- package/dist/semantic/validator.js +304 -0
- package/dist/semantic/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/schemas/Perttool.AdvanceResult.v2.schema.json +334 -0
- package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
- package/schemas/{Perttool.AnalysisResult.v4.schema.json → Perttool.AnalysisResult.v5.schema.json} +10 -6
- package/schemas/{Perttool.CheckResult.v3.schema.json → Perttool.CheckResult.v4.schema.json} +14 -6
- package/schemas/Perttool.CliError.v1.schema.json +1 -1
- package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
- package/schemas/Perttool.Common.v1.schema.json +300 -4
- package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
- package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
- package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
- package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
- package/schemas/Perttool.InitResult.v1.schema.json +1 -1
- package/schemas/{Perttool.MutationResult.v3.schema.json → Perttool.MutationResult.v4.schema.json} +16 -5
- package/schemas/{Perttool.NextResult.v5.schema.json → Perttool.NextResult.v6.schema.json} +53 -8
- package/schemas/Perttool.OverrideDecision.v1.schema.json +1 -1
- package/schemas/Perttool.PlanAssuranceResult.v1.schema.json +77 -0
- package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
- package/schemas/{Perttool.ProjectResult.v3.schema.json → Perttool.ProjectResult.v4.schema.json} +15 -7
- package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
- package/schemas/Perttool.UnitMigrationResult.v3.schema.json +5 -3
- package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { validateStoredLifecycleState } from "../actuals/lifecycle.js";
|
|
3
|
+
import { createUnifiedDiff } from "../editing/unified-diff.js";
|
|
4
|
+
import { classifyGovernanceScopes } from "../governance/authority.js";
|
|
5
|
+
import { governanceMetadataFromDocument } from "../governance/source.js";
|
|
6
|
+
import { compareStableStrings, limitDiagnostics, normalizeMaxDiagnostics, sortDiagnostics, } from "../model/diagnostics.js";
|
|
7
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
8
|
+
import { planValidatedAdvance, } from "../mutation/advance.js";
|
|
9
|
+
import { EntityEditor } from "../mutation/entity-editor.js";
|
|
10
|
+
import { appendDeclarationEdit, contentTextEndOffset, leadingCommentStart, majorLineEnding, splitPhysicalLines, } from "../mutation/source.js";
|
|
11
|
+
import { validateTargetGrammar6Document, } from "../semantic/target-validator.js";
|
|
12
|
+
import { hashFrontierAssuranceReceipt, isSha256Digest, } from "./canonical.js";
|
|
13
|
+
import { evaluatePlanAssurance } from "./evaluate.js";
|
|
14
|
+
import { evaluatePlanAssuranceGovernance, normalizePlanAssuranceGovernanceRequest, planAssuranceGovernanceDiagnostics, } from "./governance.js";
|
|
15
|
+
import { projectPlanAssuranceInput } from "./source.js";
|
|
16
|
+
export const PLAN_ASSURANCE_ADVANCE_RESULT_SCHEMA_VERSION = "Perttool.AdvanceResult.v2";
|
|
17
|
+
const receiptFieldOrder = [
|
|
18
|
+
"model",
|
|
19
|
+
"receipt_hash",
|
|
20
|
+
"producer",
|
|
21
|
+
"producer_contract_hash",
|
|
22
|
+
"producer_assurance_hash",
|
|
23
|
+
"outcome",
|
|
24
|
+
"source_milestone",
|
|
25
|
+
"consumers",
|
|
26
|
+
];
|
|
27
|
+
function digest(text) {
|
|
28
|
+
return `sha256:${createHash("sha256").update(text, "utf8").digest("hex")}`;
|
|
29
|
+
}
|
|
30
|
+
function assuranceAdvanceDiagnostic(message, entityId, cause, data = {}) {
|
|
31
|
+
return Object.freeze({
|
|
32
|
+
code: "PTASSURE-306",
|
|
33
|
+
severity: "error",
|
|
34
|
+
message,
|
|
35
|
+
...(entityId === null ? {} : { entityId }),
|
|
36
|
+
helpTopic: "plan-assurance",
|
|
37
|
+
data: Object.freeze({ cause, ...data }),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function grammar6AdvanceValidator(capability) {
|
|
41
|
+
return (text, maxDiagnostics) => {
|
|
42
|
+
const checked = validateTargetGrammar6Document(text, capability, { maxDiagnostics });
|
|
43
|
+
const lifecycleDiagnostics = checked.validatedDocument === null
|
|
44
|
+
? []
|
|
45
|
+
: validateStoredLifecycleState(checked.validatedDocument);
|
|
46
|
+
const diagnostics = sortDiagnostics([
|
|
47
|
+
...checked.diagnostics,
|
|
48
|
+
...lifecycleDiagnostics,
|
|
49
|
+
]);
|
|
50
|
+
return {
|
|
51
|
+
ok: checked.ok && lifecycleDiagnostics.length === 0,
|
|
52
|
+
document: checked.document,
|
|
53
|
+
documentId: checked.documentId,
|
|
54
|
+
diagnostics,
|
|
55
|
+
diagnosticsTruncated: checked.diagnosticsTruncated,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function requiredString(declaration, name) {
|
|
60
|
+
const value = fieldNamed(declaration, name)?.value;
|
|
61
|
+
if (typeof value !== "string") {
|
|
62
|
+
throw new Error(`validated ${declaration.kind} ${declaration.id} lost ${name}`);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function receiptContract(declaration, consumers) {
|
|
67
|
+
const values = consumers ?? fieldNamed(declaration, "consumers")?.value;
|
|
68
|
+
return {
|
|
69
|
+
model: "Perttool.FrontierAssuranceReceipt.v1",
|
|
70
|
+
producerTaskId: requiredString(declaration, "producer"),
|
|
71
|
+
producerTaskContractHash: requiredString(declaration, "producer_contract_hash"),
|
|
72
|
+
producerAssuranceHash: requiredString(declaration, "producer_assurance_hash"),
|
|
73
|
+
outcome: requiredString(declaration, "outcome"),
|
|
74
|
+
consumers: values.map((consumer) => ({
|
|
75
|
+
consumerTaskId: consumer.consumerTaskId,
|
|
76
|
+
relationMode: consumer.relationMode,
|
|
77
|
+
})),
|
|
78
|
+
sourceMilestoneId: fieldNamed(declaration, "source_milestone")?.value ??
|
|
79
|
+
null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function serializeConsumers(consumers, lineEnding) {
|
|
83
|
+
return [
|
|
84
|
+
" consumers:",
|
|
85
|
+
...consumers.map(({ consumerTaskId, relationMode }) => ` ${consumerTaskId} ${relationMode}`),
|
|
86
|
+
].join(lineEnding);
|
|
87
|
+
}
|
|
88
|
+
function serializeReceipt(receipt, lineEnding) {
|
|
89
|
+
const { contract } = receipt;
|
|
90
|
+
return [
|
|
91
|
+
`assurance_receipt ${receipt.id}:`,
|
|
92
|
+
" model 1",
|
|
93
|
+
` receipt_hash ${receipt.hash}`,
|
|
94
|
+
` producer ${contract.producerTaskId}`,
|
|
95
|
+
` producer_contract_hash ${contract.producerTaskContractHash}`,
|
|
96
|
+
` producer_assurance_hash ${contract.producerAssuranceHash}`,
|
|
97
|
+
` outcome ${contract.outcome}`,
|
|
98
|
+
...(contract.sourceMilestoneId === null
|
|
99
|
+
? []
|
|
100
|
+
: [` source_milestone ${contract.sourceMilestoneId}`]),
|
|
101
|
+
serializeConsumers(contract.consumers, lineEnding),
|
|
102
|
+
].join(lineEnding);
|
|
103
|
+
}
|
|
104
|
+
function allocateReceiptId(producerTaskId, reserved) {
|
|
105
|
+
const base = `AR_${producerTaskId}`;
|
|
106
|
+
if (!reserved.has(base)) {
|
|
107
|
+
reserved.add(base);
|
|
108
|
+
return base;
|
|
109
|
+
}
|
|
110
|
+
for (let suffix = 2;; suffix += 1) {
|
|
111
|
+
const candidate = `${base}_${suffix}`;
|
|
112
|
+
if (!reserved.has(candidate)) {
|
|
113
|
+
reserved.add(candidate);
|
|
114
|
+
return candidate;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function receiptInsertions(text, document, removed, receipts) {
|
|
119
|
+
if (receipts.length === 0)
|
|
120
|
+
return [];
|
|
121
|
+
const lineEnding = majorLineEnding(text);
|
|
122
|
+
const lines = splitPhysicalLines(text);
|
|
123
|
+
const retainedReceipts = document.declarations
|
|
124
|
+
.filter((declaration) => declaration.kind === "assurance_receipt" && !removed.has(declaration))
|
|
125
|
+
.sort((left, right) => compareStableStrings(left.id, right.id));
|
|
126
|
+
const firstRetainedEvent = document.declarations.find((declaration) => declaration.kind === "work_event" && !removed.has(declaration));
|
|
127
|
+
const groups = new Map();
|
|
128
|
+
for (const receipt of [...receipts].sort((left, right) => compareStableStrings(left.id, right.id))) {
|
|
129
|
+
const later = retainedReceipts.find((candidate) => compareStableStrings(candidate.id, receipt.id) > 0);
|
|
130
|
+
const target = later ?? firstRetainedEvent;
|
|
131
|
+
const offset = target === undefined
|
|
132
|
+
? text.length
|
|
133
|
+
: leadingCommentStart(lines, target.headerSpan.start.offset, 0);
|
|
134
|
+
groups.set(offset, [...(groups.get(offset) ?? []), receipt]);
|
|
135
|
+
}
|
|
136
|
+
return [...groups.entries()]
|
|
137
|
+
.sort(([left], [right]) => left - right)
|
|
138
|
+
.map(([offset, values]) => {
|
|
139
|
+
const serialized = values
|
|
140
|
+
.sort((left, right) => compareStableStrings(left.id, right.id))
|
|
141
|
+
.map((receipt) => serializeReceipt(receipt, lineEnding))
|
|
142
|
+
.join(`${lineEnding}${lineEnding}`);
|
|
143
|
+
if (offset === text.length) {
|
|
144
|
+
return appendDeclarationEdit(text, serialized, lineEnding);
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
startOffset: offset,
|
|
148
|
+
endOffset: offset,
|
|
149
|
+
replacement: `${serialized}${lineEnding}${lineEnding}`,
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function receiptUpdateEdits(text, declaration, contract) {
|
|
154
|
+
const editor = new EntityEditor(text, declaration, receiptFieldOrder);
|
|
155
|
+
editor.setScalar("receipt_hash", hashFrontierAssuranceReceipt(contract));
|
|
156
|
+
const consumers = fieldNamed(declaration, "consumers");
|
|
157
|
+
if (consumers === undefined) {
|
|
158
|
+
throw new Error("validated assurance receipt lost consumers");
|
|
159
|
+
}
|
|
160
|
+
return [
|
|
161
|
+
...editor.finish(),
|
|
162
|
+
{
|
|
163
|
+
startOffset: consumers.span.start.offset,
|
|
164
|
+
endOffset: contentTextEndOffset(consumers, splitPhysicalLines(text)),
|
|
165
|
+
replacement: serializeConsumers(contract.consumers, editor.lineEnding),
|
|
166
|
+
},
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
function extensionFor(capability, summary) {
|
|
170
|
+
let captured = false;
|
|
171
|
+
return (text, document, context) => {
|
|
172
|
+
const checked = validateTargetGrammar6Document(text, capability);
|
|
173
|
+
if (!checked.ok || checked.validatedDocument === null) {
|
|
174
|
+
throw new Error("validated assurance advance source lost Grammar 6 validation");
|
|
175
|
+
}
|
|
176
|
+
const input = projectPlanAssuranceInput(checked.validatedDocument);
|
|
177
|
+
if (input.modelVersion === null && input.hashModelVersion === null)
|
|
178
|
+
return {};
|
|
179
|
+
const evaluation = evaluatePlanAssurance(input);
|
|
180
|
+
if (!evaluation.ok) {
|
|
181
|
+
return {
|
|
182
|
+
diagnostics: evaluation.diagnostics.map((item) => assuranceAdvanceDiagnostic(item.message, item.entityId, "crossing_commitment_unavailable", item.data)),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const removedTaskIds = new Set(context.removedTasks.map(({ id }) => id));
|
|
186
|
+
const keptTaskIds = new Set(context.keptTasks.map(({ id }) => id));
|
|
187
|
+
const removedDeclarations = [];
|
|
188
|
+
for (const declaration of document.declarations) {
|
|
189
|
+
if (declaration.kind === "task_relation" &&
|
|
190
|
+
(removedTaskIds.has(declaration.from) || removedTaskIds.has(declaration.to)))
|
|
191
|
+
removedDeclarations.push(declaration);
|
|
192
|
+
if (declaration.kind === "plan_seal" && removedTaskIds.has(declaration.id)) {
|
|
193
|
+
removedDeclarations.push(declaration);
|
|
194
|
+
}
|
|
195
|
+
if (declaration.kind === "task_outcome" &&
|
|
196
|
+
removedTaskIds.has(fieldNamed(declaration, "task")?.value))
|
|
197
|
+
removedDeclarations.push(declaration);
|
|
198
|
+
}
|
|
199
|
+
const edits = [];
|
|
200
|
+
const retainedReceiptIds = new Set();
|
|
201
|
+
for (const receipt of document.declarations.filter((declaration) => declaration.kind === "assurance_receipt")) {
|
|
202
|
+
const originalConsumers = fieldNamed(receipt, "consumers")
|
|
203
|
+
.value;
|
|
204
|
+
const consumers = originalConsumers.filter(({ consumerTaskId }) => keptTaskIds.has(consumerTaskId));
|
|
205
|
+
if (consumers.length === 0) {
|
|
206
|
+
removedDeclarations.push(receipt);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
retainedReceiptIds.add(receipt.id);
|
|
210
|
+
const contract = receiptContract(receipt, consumers);
|
|
211
|
+
const storedHash = requiredString(receipt, "receipt_hash");
|
|
212
|
+
if (fieldNamed(receipt, "model")?.value !== 1 ||
|
|
213
|
+
!isSha256Digest(storedHash) ||
|
|
214
|
+
hashFrontierAssuranceReceipt(receiptContract(receipt)) !== storedHash) {
|
|
215
|
+
return {
|
|
216
|
+
diagnostics: [assuranceAdvanceDiagnostic(`retained assurance receipt ${receipt.id} is unavailable`, receipt.id, "retained_receipt_unavailable")],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (consumers.length !== originalConsumers.length) {
|
|
220
|
+
edits.push(...receiptUpdateEdits(text, receipt, contract));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const crossings = evaluation.effectiveDependencies.filter((relation) => removedTaskIds.has(relation.predecessorTaskId) &&
|
|
224
|
+
keptTaskIds.has(relation.successorTaskId) &&
|
|
225
|
+
relation.mode !== "execution_only");
|
|
226
|
+
const byProducer = new Map();
|
|
227
|
+
for (const crossing of crossings) {
|
|
228
|
+
byProducer.set(crossing.predecessorTaskId, [
|
|
229
|
+
...(byProducer.get(crossing.predecessorTaskId) ?? []),
|
|
230
|
+
crossing,
|
|
231
|
+
]);
|
|
232
|
+
}
|
|
233
|
+
const resultById = new Map(evaluation.taskResults.map((result) => [result.taskId, result]));
|
|
234
|
+
const inputById = new Map(input.tasks.map((task) => [task.contract.taskId, task]));
|
|
235
|
+
const taskById = new Map(document.declarations
|
|
236
|
+
.filter((declaration) => declaration.kind === "task")
|
|
237
|
+
.map((task) => [task.id, task]));
|
|
238
|
+
const baseRemoved = new Set([
|
|
239
|
+
...context.removedTasks,
|
|
240
|
+
...context.removedGates,
|
|
241
|
+
...context.removedMilestones,
|
|
242
|
+
...context.removedWorkEvents,
|
|
243
|
+
...removedDeclarations,
|
|
244
|
+
]);
|
|
245
|
+
const reserved = new Set(document.declarations
|
|
246
|
+
.filter((declaration) => declaration.kind !== "plan_seal")
|
|
247
|
+
.filter((declaration) => !baseRemoved.has(declaration))
|
|
248
|
+
.map(({ id }) => id));
|
|
249
|
+
const plannedReceipts = [];
|
|
250
|
+
const capture = (plannedReceipts = [], updatedReceiptIds = []) => {
|
|
251
|
+
if (captured)
|
|
252
|
+
return;
|
|
253
|
+
captured = true;
|
|
254
|
+
Object.assign(summary, {
|
|
255
|
+
crossingProducerTaskIds: Object.freeze([...byProducer.keys()].sort(compareStableStrings)),
|
|
256
|
+
createdReceiptIds: Object.freeze(plannedReceipts.map(({ id }) => id).sort(compareStableStrings)),
|
|
257
|
+
updatedReceiptIds: Object.freeze([...updatedReceiptIds].sort(compareStableStrings)),
|
|
258
|
+
removedReceiptIds: Object.freeze(removedDeclarations
|
|
259
|
+
.filter(({ kind }) => kind === "assurance_receipt")
|
|
260
|
+
.map(({ id }) => id)
|
|
261
|
+
.sort(compareStableStrings)),
|
|
262
|
+
removedAssuranceRecordIds: Object.freeze(removedDeclarations.map(({ id }) => id).sort(compareStableStrings)),
|
|
263
|
+
updatedAssuranceReceiptIds: Object.freeze([...updatedReceiptIds].sort(compareStableStrings)),
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
for (const producerTaskId of [...byProducer.keys()].sort(compareStableStrings)) {
|
|
267
|
+
const producer = resultById.get(producerTaskId);
|
|
268
|
+
const producerTask = taskById.get(producerTaskId);
|
|
269
|
+
if (producer === undefined ||
|
|
270
|
+
producerTask === undefined ||
|
|
271
|
+
producer.status !== "verified" ||
|
|
272
|
+
producer.contractHash === null ||
|
|
273
|
+
producer.exportedAssuranceHash === null ||
|
|
274
|
+
(producer.outcomeStatus !== "conformant" &&
|
|
275
|
+
producer.outcomeStatus !== "changed")) {
|
|
276
|
+
capture();
|
|
277
|
+
return {
|
|
278
|
+
diagnostics: [assuranceAdvanceDiagnostic(`cross-frontier producer ${producerTaskId} has no usable accepted commitment`, producerTaskId, "crossing_commitment_unavailable")],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const consumers = byProducer.get(producerTaskId)
|
|
282
|
+
.map((relation) => ({
|
|
283
|
+
consumerTaskId: relation.successorTaskId,
|
|
284
|
+
relationMode: relation.mode,
|
|
285
|
+
}))
|
|
286
|
+
.sort((left, right) => compareStableStrings(left.consumerTaskId, right.consumerTaskId));
|
|
287
|
+
if (producer.outcomeStatus === "changed") {
|
|
288
|
+
for (const consumer of consumers) {
|
|
289
|
+
const accepted = inputById.get(consumer.consumerTaskId)?.seal
|
|
290
|
+
?.acceptedInputs.find((candidate) => candidate.predecessorTaskId === producerTaskId &&
|
|
291
|
+
candidate.relationMode === consumer.relationMode);
|
|
292
|
+
if (accepted?.assuranceHash !== producer.exportedAssuranceHash) {
|
|
293
|
+
capture();
|
|
294
|
+
return {
|
|
295
|
+
diagnostics: [assuranceAdvanceDiagnostic(`consumer ${consumer.consumerTaskId} has not accepted changed outcome commitment from ${producerTaskId}`, consumer.consumerTaskId, "changed_outcome_not_accepted", { producer_task_id: producerTaskId })],
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const contract = {
|
|
301
|
+
model: "Perttool.FrontierAssuranceReceipt.v1",
|
|
302
|
+
producerTaskId,
|
|
303
|
+
producerTaskContractHash: producer.contractHash,
|
|
304
|
+
producerAssuranceHash: producer.exportedAssuranceHash,
|
|
305
|
+
outcome: producer.outcomeStatus,
|
|
306
|
+
consumers,
|
|
307
|
+
sourceMilestoneId: producerTask.to ?? null,
|
|
308
|
+
};
|
|
309
|
+
const id = allocateReceiptId(producerTaskId, reserved);
|
|
310
|
+
plannedReceipts.push({
|
|
311
|
+
id,
|
|
312
|
+
contract,
|
|
313
|
+
hash: hashFrontierAssuranceReceipt(contract),
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
edits.push(...receiptInsertions(text, document, baseRemoved, plannedReceipts));
|
|
317
|
+
const updatedReceiptIds = [...retainedReceiptIds].filter((id) => {
|
|
318
|
+
const declaration = document.declarations.find((item) => item.id === id);
|
|
319
|
+
const consumers = fieldNamed(declaration, "consumers")
|
|
320
|
+
.value;
|
|
321
|
+
return consumers.some(({ consumerTaskId }) => removedTaskIds.has(consumerTaskId));
|
|
322
|
+
});
|
|
323
|
+
capture(plannedReceipts, updatedReceiptIds);
|
|
324
|
+
return {
|
|
325
|
+
removedDeclarations: Object.freeze(removedDeclarations),
|
|
326
|
+
edits: Object.freeze(edits),
|
|
327
|
+
};
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function failure(text, documentId, diagnostics, maximum, alreadyTruncated = false) {
|
|
331
|
+
const limited = limitDiagnostics(sortDiagnostics(diagnostics), maximum);
|
|
332
|
+
return Object.freeze({
|
|
333
|
+
schemaVersion: PLAN_ASSURANCE_ADVANCE_RESULT_SCHEMA_VERSION,
|
|
334
|
+
ok: false,
|
|
335
|
+
documentId,
|
|
336
|
+
changed: false,
|
|
337
|
+
originalDigest: digest(text),
|
|
338
|
+
updatedDigest: null,
|
|
339
|
+
updatedText: null,
|
|
340
|
+
diff: null,
|
|
341
|
+
edits: Object.freeze([]),
|
|
342
|
+
governance: null,
|
|
343
|
+
lifecycle: null,
|
|
344
|
+
assuranceGuard: null,
|
|
345
|
+
historyGuard: null,
|
|
346
|
+
advance: null,
|
|
347
|
+
diagnostics: limited.diagnostics,
|
|
348
|
+
diagnosticsTruncated: alreadyTruncated || limited.truncated,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
function blockedCause(diagnostics) {
|
|
352
|
+
const value = diagnostics.find(({ code }) => code === "PTASSURE-306")
|
|
353
|
+
?.data?.["cause"];
|
|
354
|
+
return typeof value === "string"
|
|
355
|
+
? value
|
|
356
|
+
: "crossing_commitment_unavailable";
|
|
357
|
+
}
|
|
358
|
+
function receiptGuardSummary(summary) {
|
|
359
|
+
return {
|
|
360
|
+
crossingProducerTaskIds: summary.crossingProducerTaskIds,
|
|
361
|
+
createdReceiptIds: summary.createdReceiptIds,
|
|
362
|
+
updatedReceiptIds: summary.updatedReceiptIds,
|
|
363
|
+
removedReceiptIds: summary.removedReceiptIds,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
function baseResult(base, assuranceGuard, summary) {
|
|
367
|
+
return Object.freeze({
|
|
368
|
+
...base,
|
|
369
|
+
schemaVersion: PLAN_ASSURANCE_ADVANCE_RESULT_SCHEMA_VERSION,
|
|
370
|
+
governance: null,
|
|
371
|
+
lifecycle: null,
|
|
372
|
+
assuranceGuard,
|
|
373
|
+
historyGuard: null,
|
|
374
|
+
advance: base.advance === null
|
|
375
|
+
? null
|
|
376
|
+
: {
|
|
377
|
+
...base.advance,
|
|
378
|
+
removedAssuranceRecordIds: Object.freeze([
|
|
379
|
+
...summary.removedAssuranceRecordIds,
|
|
380
|
+
]),
|
|
381
|
+
updatedAssuranceReceiptIds: Object.freeze([
|
|
382
|
+
...summary.updatedAssuranceReceiptIds,
|
|
383
|
+
]),
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
export function planTargetPlanAssuranceAdvance(text, capability, options = {}) {
|
|
388
|
+
const maximum = normalizeMaxDiagnostics(options.maxDiagnostics);
|
|
389
|
+
const original = validateTargetGrammar6Document(text, capability, { maxDiagnostics: maximum });
|
|
390
|
+
if (!original.ok || original.validatedDocument === null) {
|
|
391
|
+
return failure(text, original.documentId, original.diagnostics, maximum, original.diagnosticsTruncated);
|
|
392
|
+
}
|
|
393
|
+
const normalized = normalizePlanAssuranceGovernanceRequest(options.governance);
|
|
394
|
+
if (!normalized.ok) {
|
|
395
|
+
return failure(text, original.documentId, [...original.diagnostics, ...normalized.diagnostics], maximum, original.diagnosticsTruncated);
|
|
396
|
+
}
|
|
397
|
+
const before = evaluatePlanAssurance(projectPlanAssuranceInput(original.validatedDocument));
|
|
398
|
+
const enabled = before.modelVersion !== null || before.hashModelVersion !== null;
|
|
399
|
+
const summary = {
|
|
400
|
+
crossingProducerTaskIds: Object.freeze([]),
|
|
401
|
+
createdReceiptIds: Object.freeze([]),
|
|
402
|
+
updatedReceiptIds: Object.freeze([]),
|
|
403
|
+
removedReceiptIds: Object.freeze([]),
|
|
404
|
+
removedAssuranceRecordIds: Object.freeze([]),
|
|
405
|
+
updatedAssuranceReceiptIds: Object.freeze([]),
|
|
406
|
+
};
|
|
407
|
+
const base = planValidatedAdvance(text, grammar6AdvanceValidator(capability), options, {
|
|
408
|
+
removeTaskOwnedWorkEvents: true,
|
|
409
|
+
extendPlan: extensionFor(capability, summary),
|
|
410
|
+
});
|
|
411
|
+
if (!base.ok || base.updatedText === null || base.advance === null) {
|
|
412
|
+
const guard = base.diagnostics.some(({ code }) => code === "PTASSURE-306")
|
|
413
|
+
? Object.freeze({
|
|
414
|
+
modelVersion: 1,
|
|
415
|
+
status: "blocked",
|
|
416
|
+
cause: blockedCause(base.diagnostics),
|
|
417
|
+
...receiptGuardSummary(summary),
|
|
418
|
+
retainedBasisChecks: Object.freeze([]),
|
|
419
|
+
})
|
|
420
|
+
: null;
|
|
421
|
+
return baseResult(base, guard, summary);
|
|
422
|
+
}
|
|
423
|
+
const candidate = validateTargetGrammar6Document(base.updatedText, capability, { maxDiagnostics: maximum });
|
|
424
|
+
if (!candidate.ok || candidate.validatedDocument === null) {
|
|
425
|
+
throw new Error("assurance advance candidate lost Grammar 6 validation");
|
|
426
|
+
}
|
|
427
|
+
const after = evaluatePlanAssurance(projectPlanAssuranceInput(candidate.validatedDocument));
|
|
428
|
+
const beforeById = new Map(before.taskResults.map((item) => [item.taskId, item]));
|
|
429
|
+
const retainedBasisChecks = after.taskResults.map((item) => {
|
|
430
|
+
const beforeBasisHash = beforeById.get(item.taskId)?.computedBasisHash ?? null;
|
|
431
|
+
return Object.freeze({
|
|
432
|
+
taskId: item.taskId,
|
|
433
|
+
beforeBasisHash,
|
|
434
|
+
afterBasisHash: item.computedBasisHash,
|
|
435
|
+
equal: beforeBasisHash === item.computedBasisHash,
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
const mismatch = retainedBasisChecks.find(({ equal }) => !equal);
|
|
439
|
+
if (enabled && mismatch !== undefined) {
|
|
440
|
+
const diagnostic = assuranceAdvanceDiagnostic(`advance changed retained planning basis for ${mismatch.taskId}`, mismatch.taskId, "retained_basis_changed", {
|
|
441
|
+
before_basis_hash: mismatch.beforeBasisHash,
|
|
442
|
+
after_basis_hash: mismatch.afterBasisHash,
|
|
443
|
+
});
|
|
444
|
+
const limited = limitDiagnostics(sortDiagnostics([...base.diagnostics, diagnostic]), maximum);
|
|
445
|
+
return Object.freeze({
|
|
446
|
+
...baseResult(base, Object.freeze({
|
|
447
|
+
modelVersion: 1,
|
|
448
|
+
status: "blocked",
|
|
449
|
+
cause: "retained_basis_changed",
|
|
450
|
+
...receiptGuardSummary(summary),
|
|
451
|
+
retainedBasisChecks: Object.freeze(retainedBasisChecks),
|
|
452
|
+
}), summary),
|
|
453
|
+
ok: false,
|
|
454
|
+
diagnostics: limited.diagnostics,
|
|
455
|
+
diagnosticsTruncated: base.diagnosticsTruncated || limited.truncated,
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
const metadata = governanceMetadataFromDocument(original.validatedDocument.document);
|
|
459
|
+
const ordinaryScopes = classifyGovernanceScopes(original.validatedDocument.document, candidate.validatedDocument.document);
|
|
460
|
+
const scopes = base.changed
|
|
461
|
+
? Object.freeze([
|
|
462
|
+
...ordinaryScopes,
|
|
463
|
+
...(enabled ? ["plan_assurance"] : []),
|
|
464
|
+
].filter((scope, index, values) => values.indexOf(scope) === index))
|
|
465
|
+
: Object.freeze([]);
|
|
466
|
+
const governance = evaluatePlanAssuranceGovernance({
|
|
467
|
+
sourceDigest: base.originalDigest,
|
|
468
|
+
goalOwner: metadata.effective.goalOwner,
|
|
469
|
+
goalDelegates: metadata.effective.goalDelegates,
|
|
470
|
+
dagOwner: metadata.effective.dagOwner,
|
|
471
|
+
dagDelegates: metadata.effective.dagDelegates,
|
|
472
|
+
}, scopes, normalized.request);
|
|
473
|
+
const assuranceGuard = Object.freeze({
|
|
474
|
+
modelVersion: 1,
|
|
475
|
+
status: enabled ? "passed" : "not_applicable",
|
|
476
|
+
cause: enabled
|
|
477
|
+
? base.changed ? "basis_preserved" : "no_change"
|
|
478
|
+
: "not_enabled",
|
|
479
|
+
...receiptGuardSummary(summary),
|
|
480
|
+
retainedBasisChecks: Object.freeze(retainedBasisChecks),
|
|
481
|
+
});
|
|
482
|
+
const diagnostics = [
|
|
483
|
+
...base.diagnostics,
|
|
484
|
+
...planAssuranceGovernanceDiagnostics(governance),
|
|
485
|
+
];
|
|
486
|
+
const hasError = diagnostics.some(({ severity }) => severity === "error");
|
|
487
|
+
const warningFailure = options.warningsAsErrors === true &&
|
|
488
|
+
diagnostics.some(({ severity }) => severity === "warning");
|
|
489
|
+
const limited = limitDiagnostics(sortDiagnostics(diagnostics), maximum);
|
|
490
|
+
return Object.freeze({
|
|
491
|
+
...base,
|
|
492
|
+
schemaVersion: PLAN_ASSURANCE_ADVANCE_RESULT_SCHEMA_VERSION,
|
|
493
|
+
ok: !hasError && !warningFailure,
|
|
494
|
+
governance,
|
|
495
|
+
lifecycle: null,
|
|
496
|
+
assuranceGuard,
|
|
497
|
+
historyGuard: null,
|
|
498
|
+
advance: baseResult(base, assuranceGuard, summary).advance,
|
|
499
|
+
diff: createUnifiedDiff(text, base.updatedText, {
|
|
500
|
+
originalLabel: options.originalLabel ?? "original",
|
|
501
|
+
updatedLabel: options.updatedLabel ?? "updated",
|
|
502
|
+
}),
|
|
503
|
+
diagnostics: limited.diagnostics,
|
|
504
|
+
diagnosticsTruncated: base.diagnosticsTruncated || candidate.diagnosticsTruncated || limited.truncated,
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=advance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance.js","sourceRoot":"","sources":["../../src/assurance/advance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type Diagnostic } from "../model/diagnostics.js";
|
|
2
|
+
import type { PlanAssuranceEvaluationV1, PlanAssuranceOutcomeStatus, PlanAssuranceTaskResultV1, PlanAssuranceTaskStatus } from "./types.js";
|
|
3
|
+
export declare const PLAN_ASSURANCE_AUTHORITY_POLICY: "recommendation_v1_plus_release_gate_plus_plan_assurance_v1";
|
|
4
|
+
export type PlanAssuranceRequiredActionKind = "initial_seal" | "replan_and_reseal" | "restore_assurance_evidence";
|
|
5
|
+
export interface PlanAssuranceRequiredActionV1 {
|
|
6
|
+
readonly kind: PlanAssuranceRequiredActionKind;
|
|
7
|
+
readonly rootTaskIds: readonly string[];
|
|
8
|
+
readonly affectedTaskIds: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export interface PlanAssuranceProjectionV1 {
|
|
11
|
+
readonly modelVersion: number | null;
|
|
12
|
+
readonly hashModelVersion: number | null;
|
|
13
|
+
readonly coverage: PlanAssuranceEvaluationV1["coverage"];
|
|
14
|
+
readonly taskResults: readonly PlanAssuranceTaskResultV1[];
|
|
15
|
+
readonly directMismatchTaskIds: readonly string[];
|
|
16
|
+
readonly inheritedMismatchTaskIds: readonly string[];
|
|
17
|
+
readonly replanRequiredTaskIds: readonly string[];
|
|
18
|
+
readonly activeAttentionRequiredTaskIds: readonly string[];
|
|
19
|
+
readonly requiredActions: readonly PlanAssuranceRequiredActionV1[];
|
|
20
|
+
}
|
|
21
|
+
export interface PlanAssuranceStateCountsV1 {
|
|
22
|
+
readonly task: Readonly<Record<PlanAssuranceTaskStatus, number>>;
|
|
23
|
+
readonly outcome: Readonly<Record<PlanAssuranceOutcomeStatus, number>>;
|
|
24
|
+
}
|
|
25
|
+
export interface PlanAssuranceCheckCompositionV1 {
|
|
26
|
+
readonly ok: boolean;
|
|
27
|
+
readonly assurance: PlanAssuranceProjectionV1 | null;
|
|
28
|
+
readonly stateCounts: PlanAssuranceStateCountsV1;
|
|
29
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
30
|
+
}
|
|
31
|
+
export interface PlanAssuranceAnalysisCompositionV1 {
|
|
32
|
+
readonly ok: boolean;
|
|
33
|
+
readonly assurance: PlanAssuranceProjectionV1 | null;
|
|
34
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
35
|
+
}
|
|
36
|
+
export interface PlanAssuranceBaseAuthorityInputV1 {
|
|
37
|
+
readonly recommendationInterfaceVersion: number;
|
|
38
|
+
readonly rankingAlgorithm: {
|
|
39
|
+
readonly id: string;
|
|
40
|
+
readonly version: number;
|
|
41
|
+
};
|
|
42
|
+
readonly reasonTaxonomyVersion: string;
|
|
43
|
+
readonly explanationModelVersion: number;
|
|
44
|
+
readonly expressionVersion: number;
|
|
45
|
+
readonly descriptionRegistryVersion: number;
|
|
46
|
+
readonly descriptionLocale: string;
|
|
47
|
+
readonly temporalPolicy: string;
|
|
48
|
+
readonly traceComplete: boolean;
|
|
49
|
+
readonly diagnosticsTruncated: boolean;
|
|
50
|
+
readonly rawRecommendedTaskIds: readonly string[];
|
|
51
|
+
readonly temporalStartableRecommendedTaskIds: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
export type PlanAssuranceAuthoritySafeStopReason = "unknown_recommendation_interface" | "unknown_ranking_algorithm" | "unknown_recommendation_contract" | "unknown_temporal_authority_policy" | "incomplete_recommendation_trace" | "invalid_recommendation_authority" | "invalid_assurance_evaluation" | "unknown_assurance_model" | "missing_assurance_task_result";
|
|
54
|
+
export interface PlanAssuranceStartAuthorityV1 {
|
|
55
|
+
readonly policy: typeof PLAN_ASSURANCE_AUTHORITY_POLICY;
|
|
56
|
+
readonly complete: boolean;
|
|
57
|
+
readonly recommendationAlgorithm: {
|
|
58
|
+
readonly id: string;
|
|
59
|
+
readonly version: number;
|
|
60
|
+
};
|
|
61
|
+
readonly rawRecommendedTaskIds: readonly string[];
|
|
62
|
+
readonly temporalStartableRecommendedTaskIds: readonly string[];
|
|
63
|
+
readonly assuranceEligibleTaskIds: readonly string[];
|
|
64
|
+
readonly startableRecommendedTaskIds: readonly string[];
|
|
65
|
+
readonly assuranceWithheldRecommendedTaskIds: readonly string[];
|
|
66
|
+
readonly assuranceUnavailableRecommendedTaskIds: readonly string[];
|
|
67
|
+
readonly safeStopReasons: readonly PlanAssuranceAuthoritySafeStopReason[];
|
|
68
|
+
}
|
|
69
|
+
export interface PlanAssuranceNextCompositionV1 {
|
|
70
|
+
readonly ok: boolean;
|
|
71
|
+
readonly assurance: PlanAssuranceProjectionV1 | null;
|
|
72
|
+
readonly authority: PlanAssuranceStartAuthorityV1;
|
|
73
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
74
|
+
}
|
|
75
|
+
export interface PlanAssuranceMutationImpactCompositionV1 {
|
|
76
|
+
readonly modelVersion: 1;
|
|
77
|
+
readonly affectedTaskIds: readonly string[];
|
|
78
|
+
readonly before: PlanAssuranceProjectionV1 | null;
|
|
79
|
+
readonly after: PlanAssuranceProjectionV1 | null;
|
|
80
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
81
|
+
}
|
|
82
|
+
export declare function projectPlanAssuranceCheck(evaluation: PlanAssuranceEvaluationV1, activeTaskIds?: readonly string[]): PlanAssuranceCheckCompositionV1;
|
|
83
|
+
export declare function projectPlanAssuranceAnalysis(evaluation: PlanAssuranceEvaluationV1, activeTaskIds?: readonly string[]): PlanAssuranceAnalysisCompositionV1;
|
|
84
|
+
export declare function composePlanAssuranceNextAuthority(evaluation: PlanAssuranceEvaluationV1, base: PlanAssuranceBaseAuthorityInputV1, activeTaskIds?: readonly string[]): PlanAssuranceNextCompositionV1;
|
|
85
|
+
export declare function composePlanAssuranceMutationImpact(affectedTaskIds: readonly string[], before: PlanAssuranceEvaluationV1, after: PlanAssuranceEvaluationV1, activeTaskIdsBefore?: readonly string[], activeTaskIdsAfter?: readonly string[]): PlanAssuranceMutationImpactCompositionV1;
|
|
86
|
+
//# sourceMappingURL=authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/assurance/authority.ts"],"names":[],"mappings":"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"}
|