perttool 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +113 -33
  3. package/dist/application/advance-history.d.ts +2 -0
  4. package/dist/application/advance-history.d.ts.map +1 -1
  5. package/dist/application/advance-history.js +21 -12
  6. package/dist/application/advance-history.js.map +1 -1
  7. package/dist/application/contract7-assurance.d.ts +57 -0
  8. package/dist/application/contract7-assurance.d.ts.map +1 -0
  9. package/dist/application/contract7-assurance.js +248 -0
  10. package/dist/application/contract7-assurance.js.map +1 -0
  11. package/dist/application/contract7-mermaid.d.ts +9 -0
  12. package/dist/application/contract7-mermaid.d.ts.map +1 -0
  13. package/dist/application/contract7-mermaid.js +73 -0
  14. package/dist/application/contract7-mermaid.js.map +1 -0
  15. package/dist/application/contract7-mutation.d.ts +21 -0
  16. package/dist/application/contract7-mutation.d.ts.map +1 -0
  17. package/dist/application/contract7-mutation.js +181 -0
  18. package/dist/application/contract7-mutation.js.map +1 -0
  19. package/dist/application/contract7-project.d.ts +10 -0
  20. package/dist/application/contract7-project.d.ts.map +1 -0
  21. package/dist/application/contract7-project.js +29 -0
  22. package/dist/application/contract7-project.js.map +1 -0
  23. package/dist/application/contract7-projection.d.ts +9 -0
  24. package/dist/application/contract7-projection.d.ts.map +1 -0
  25. package/dist/application/contract7-projection.js +100 -0
  26. package/dist/application/contract7-projection.js.map +1 -0
  27. package/dist/application/contract7-source.d.ts +24 -0
  28. package/dist/application/contract7-source.d.ts.map +1 -0
  29. package/dist/application/contract7-source.js +54 -0
  30. package/dist/application/contract7-source.js.map +1 -0
  31. package/dist/application/contract7-unit-migration.d.ts +13 -0
  32. package/dist/application/contract7-unit-migration.d.ts.map +1 -0
  33. package/dist/application/contract7-unit-migration.js +13 -0
  34. package/dist/application/contract7-unit-migration.js.map +1 -0
  35. package/dist/application/init.d.ts +1 -1
  36. package/dist/application/init.js +3 -3
  37. package/dist/application/mutate.d.ts +5 -1
  38. package/dist/application/mutate.d.ts.map +1 -1
  39. package/dist/application/mutate.js +2 -2
  40. package/dist/application/mutate.js.map +1 -1
  41. package/dist/application/target-actuals-analysis.d.ts +5 -4
  42. package/dist/application/target-actuals-analysis.d.ts.map +1 -1
  43. package/dist/application/target-actuals-analysis.js +18 -11
  44. package/dist/application/target-actuals-analysis.js.map +1 -1
  45. package/dist/application/target-actuals-mutation.d.ts +5 -3
  46. package/dist/application/target-actuals-mutation.d.ts.map +1 -1
  47. package/dist/application/target-actuals-mutation.js +16 -8
  48. package/dist/application/target-actuals-mutation.js.map +1 -1
  49. package/dist/application/target-assurance-advance-history.d.ts +19 -0
  50. package/dist/application/target-assurance-advance-history.d.ts.map +1 -0
  51. package/dist/application/target-assurance-advance-history.js +61 -0
  52. package/dist/application/target-assurance-advance-history.js.map +1 -0
  53. package/dist/application/target-assurance-analysis.d.ts +34 -0
  54. package/dist/application/target-assurance-analysis.d.ts.map +1 -0
  55. package/dist/application/target-assurance-analysis.js +103 -0
  56. package/dist/application/target-assurance-analysis.js.map +1 -0
  57. package/dist/application/target-assurance-inspection.d.ts +38 -0
  58. package/dist/application/target-assurance-inspection.d.ts.map +1 -0
  59. package/dist/application/target-assurance-inspection.js +356 -0
  60. package/dist/application/target-assurance-inspection.js.map +1 -0
  61. package/dist/application/target-assurance-write.d.ts +22 -0
  62. package/dist/application/target-assurance-write.d.ts.map +1 -0
  63. package/dist/application/target-assurance-write.js +73 -0
  64. package/dist/application/target-assurance-write.js.map +1 -0
  65. package/dist/application/target-governance-init.d.ts +3 -3
  66. package/dist/application/target-governance-init.d.ts.map +1 -1
  67. package/dist/application/target-governance-init.js +14 -10
  68. package/dist/application/target-governance-init.js.map +1 -1
  69. package/dist/application/target-governance-project.d.ts +6 -4
  70. package/dist/application/target-governance-project.d.ts.map +1 -1
  71. package/dist/application/target-governance-project.js +18 -4
  72. package/dist/application/target-governance-project.js.map +1 -1
  73. package/dist/application/target-mutate.d.ts +7 -1
  74. package/dist/application/target-mutate.d.ts.map +1 -1
  75. package/dist/application/target-mutate.js +50 -3
  76. package/dist/application/target-mutate.js.map +1 -1
  77. package/dist/application/target-project-history.d.ts +4 -4
  78. package/dist/application/target-project-history.d.ts.map +1 -1
  79. package/dist/application/target-project-history.js +2 -2
  80. package/dist/application/target-project-history.js.map +1 -1
  81. package/dist/application/target-unit-migration-candidate.d.ts +29 -6
  82. package/dist/application/target-unit-migration-candidate.d.ts.map +1 -1
  83. package/dist/application/target-unit-migration-candidate.js +204 -3
  84. package/dist/application/target-unit-migration-candidate.js.map +1 -1
  85. package/dist/application/target-unit-migration-result.d.ts +2 -2
  86. package/dist/application/target-unit-migration-result.d.ts.map +1 -1
  87. package/dist/application/target-unit-migration-result.js +4 -2
  88. package/dist/application/target-unit-migration-result.js.map +1 -1
  89. package/dist/application/target-velocity-observation.d.ts +1 -1
  90. package/dist/application/target-velocity-observation.js +1 -1
  91. package/dist/assurance/advance.d.ts +45 -0
  92. package/dist/assurance/advance.d.ts.map +1 -0
  93. package/dist/assurance/advance.js +507 -0
  94. package/dist/assurance/advance.js.map +1 -0
  95. package/dist/assurance/authority.d.ts +86 -0
  96. package/dist/assurance/authority.d.ts.map +1 -0
  97. package/dist/assurance/authority.js +269 -0
  98. package/dist/assurance/authority.js.map +1 -0
  99. package/dist/assurance/canonical.d.ts +13 -0
  100. package/dist/assurance/canonical.d.ts.map +1 -0
  101. package/dist/assurance/canonical.js +320 -0
  102. package/dist/assurance/canonical.js.map +1 -0
  103. package/dist/assurance/compatibility.d.ts +62 -0
  104. package/dist/assurance/compatibility.d.ts.map +1 -0
  105. package/dist/assurance/compatibility.js +163 -0
  106. package/dist/assurance/compatibility.js.map +1 -0
  107. package/dist/assurance/evaluate.d.ts +4 -0
  108. package/dist/assurance/evaluate.d.ts.map +1 -0
  109. package/dist/assurance/evaluate.js +631 -0
  110. package/dist/assurance/evaluate.js.map +1 -0
  111. package/dist/assurance/governance.d.ts +42 -0
  112. package/dist/assurance/governance.d.ts.map +1 -0
  113. package/dist/assurance/governance.js +95 -0
  114. package/dist/assurance/governance.js.map +1 -0
  115. package/dist/assurance/mermaid.d.ts +40 -0
  116. package/dist/assurance/mermaid.d.ts.map +1 -0
  117. package/dist/assurance/mermaid.js +401 -0
  118. package/dist/assurance/mermaid.js.map +1 -0
  119. package/dist/assurance/mutation.d.ts +96 -0
  120. package/dist/assurance/mutation.d.ts.map +1 -0
  121. package/dist/assurance/mutation.js +757 -0
  122. package/dist/assurance/mutation.js.map +1 -0
  123. package/dist/assurance/source.d.ts +20 -0
  124. package/dist/assurance/source.d.ts.map +1 -0
  125. package/dist/assurance/source.js +313 -0
  126. package/dist/assurance/source.js.map +1 -0
  127. package/dist/assurance/types.d.ts +166 -0
  128. package/dist/assurance/types.d.ts.map +1 -0
  129. package/dist/assurance/types.js +3 -0
  130. package/dist/assurance/types.js.map +1 -0
  131. package/dist/cli.js +356 -60
  132. package/dist/cli.js.map +1 -1
  133. package/dist/command/assurance-discovery.d.ts +17 -0
  134. package/dist/command/assurance-discovery.d.ts.map +1 -0
  135. package/dist/command/assurance-discovery.js +297 -0
  136. package/dist/command/assurance-discovery.js.map +1 -0
  137. package/dist/command/assurance-usage.d.ts +20 -0
  138. package/dist/command/assurance-usage.d.ts.map +1 -0
  139. package/dist/command/assurance-usage.js +66 -0
  140. package/dist/command/assurance-usage.js.map +1 -0
  141. package/dist/conversion/mermaid.d.ts +2 -1
  142. package/dist/conversion/mermaid.d.ts.map +1 -1
  143. package/dist/conversion/mermaid.js +2 -2
  144. package/dist/conversion/mermaid.js.map +1 -1
  145. package/dist/formatter/source-formatter.d.ts +1 -1
  146. package/dist/formatter/source-formatter.d.ts.map +1 -1
  147. package/dist/formatter/source-formatter.js +56 -4
  148. package/dist/formatter/source-formatter.js.map +1 -1
  149. package/dist/formatter/target-source-formatter.d.ts +2 -1
  150. package/dist/formatter/target-source-formatter.d.ts.map +1 -1
  151. package/dist/formatter/target-source-formatter.js +18 -2
  152. package/dist/formatter/target-source-formatter.js.map +1 -1
  153. package/dist/help/assurance-guide.d.ts +10 -0
  154. package/dist/help/assurance-guide.d.ts.map +1 -0
  155. package/dist/help/assurance-guide.js +227 -0
  156. package/dist/help/assurance-guide.js.map +1 -0
  157. package/dist/help/guide.d.ts +1 -1
  158. package/dist/help/guide.d.ts.map +1 -1
  159. package/dist/history/advance-history.d.ts +4 -2
  160. package/dist/history/advance-history.d.ts.map +1 -1
  161. package/dist/history/advance-history.js +47 -1
  162. package/dist/history/advance-history.js.map +1 -1
  163. package/dist/history/project-history.d.ts +14 -5
  164. package/dist/history/project-history.d.ts.map +1 -1
  165. package/dist/history/project-history.js +27 -20
  166. package/dist/history/project-history.js.map +1 -1
  167. package/dist/history/velocity-observation.js +1 -1
  168. package/dist/history/velocity-observation.js.map +1 -1
  169. package/dist/index.d.ts +31 -27
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +12 -15
  172. package/dist/index.js.map +1 -1
  173. package/dist/io/target-safe-write.d.ts +4 -1
  174. package/dist/io/target-safe-write.d.ts.map +1 -1
  175. package/dist/io/target-safe-write.js +19 -1
  176. package/dist/io/target-safe-write.js.map +1 -1
  177. package/dist/migration/grammar-boundary.d.ts +1 -1
  178. package/dist/migration/grammar-boundary.d.ts.map +1 -1
  179. package/dist/migration/grammar-boundary.js +7 -3
  180. package/dist/migration/grammar-boundary.js.map +1 -1
  181. package/dist/model/declaration-fields.d.ts +12 -0
  182. package/dist/model/declaration-fields.d.ts.map +1 -1
  183. package/dist/model/declaration-fields.js +45 -0
  184. package/dist/model/declaration-fields.js.map +1 -1
  185. package/dist/model/syntax.d.ts +17 -1
  186. package/dist/model/syntax.d.ts.map +1 -1
  187. package/dist/model/syntax.js.map +1 -1
  188. package/dist/mutation/actuals.js +1 -1
  189. package/dist/mutation/actuals.js.map +1 -1
  190. package/dist/mutation/advance.d.ts +18 -1
  191. package/dist/mutation/advance.d.ts.map +1 -1
  192. package/dist/mutation/advance.js +20 -0
  193. package/dist/mutation/advance.js.map +1 -1
  194. package/dist/mutation/project.d.ts +2 -1
  195. package/dist/mutation/project.d.ts.map +1 -1
  196. package/dist/mutation/project.js +21 -0
  197. package/dist/mutation/project.js.map +1 -1
  198. package/dist/parser/document-parser.d.ts +7 -0
  199. package/dist/parser/document-parser.d.ts.map +1 -1
  200. package/dist/parser/document-parser.js +227 -12
  201. package/dist/parser/document-parser.js.map +1 -1
  202. package/dist/recommendation/override-types.d.ts +2 -2
  203. package/dist/recommendation/override.d.ts +2 -2
  204. package/dist/recommendation/override.d.ts.map +1 -1
  205. package/dist/recommendation/override.js +13 -5
  206. package/dist/recommendation/override.js.map +1 -1
  207. package/dist/schema/registry.d.ts +1 -1
  208. package/dist/schema/registry.d.ts.map +1 -1
  209. package/dist/schema/registry.js +8 -7
  210. package/dist/schema/registry.js.map +1 -1
  211. package/dist/semantic/target-validator.d.ts +12 -1
  212. package/dist/semantic/target-validator.d.ts.map +1 -1
  213. package/dist/semantic/target-validator.js +47 -2
  214. package/dist/semantic/target-validator.js.map +1 -1
  215. package/dist/semantic/validator.d.ts +1 -0
  216. package/dist/semantic/validator.d.ts.map +1 -1
  217. package/dist/semantic/validator.js +304 -0
  218. package/dist/semantic/validator.js.map +1 -1
  219. package/dist/version.d.ts +1 -1
  220. package/dist/version.js +1 -1
  221. package/package.json +1 -1
  222. package/schemas/{Perttool.AdvanceResult.v1.schema.json → Perttool.AdvanceResult.v2.schema.json} +85 -5
  223. package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
  224. package/schemas/{Perttool.AnalysisResult.v4.schema.json → Perttool.AnalysisResult.v5.schema.json} +10 -6
  225. package/schemas/{Perttool.CheckResult.v3.schema.json → Perttool.CheckResult.v4.schema.json} +14 -6
  226. package/schemas/Perttool.CliError.v1.schema.json +1 -1
  227. package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
  228. package/schemas/Perttool.Common.v1.schema.json +300 -4
  229. package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
  230. package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
  231. package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
  232. package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
  233. package/schemas/Perttool.InitResult.v1.schema.json +1 -1
  234. package/schemas/{Perttool.MutationResult.v3.schema.json → Perttool.MutationResult.v4.schema.json} +16 -5
  235. package/schemas/{Perttool.NextResult.v5.schema.json → Perttool.NextResult.v6.schema.json} +53 -8
  236. package/schemas/Perttool.OverrideDecision.v1.schema.json +1 -1
  237. package/schemas/Perttool.PlanAssuranceResult.v1.schema.json +77 -0
  238. package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
  239. package/schemas/{Perttool.ProjectResult.v3.schema.json → Perttool.ProjectResult.v4.schema.json} +15 -7
  240. package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
  241. package/schemas/Perttool.UnitMigrationResult.v3.schema.json +5 -3
  242. package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
@@ -0,0 +1,42 @@
1
+ import { type GovernanceRequestNormalization } from "../governance/authority.js";
2
+ import type { PrincipalId } from "../governance/source.js";
3
+ import type { GovernanceDenialCause, GovernanceRequest, GovernanceRequestInput } from "../governance/types.js";
4
+ import type { Diagnostic } from "../model/diagnostics.js";
5
+ export type PlanAssuranceGovernanceScope = "goal" | "dag" | "plan_assurance";
6
+ export interface PlanAssuranceGovernanceScopeDecisionV2 {
7
+ readonly scope: PlanAssuranceGovernanceScope;
8
+ readonly requiredOwner: PrincipalId;
9
+ readonly effectiveDelegates: readonly PrincipalId[];
10
+ readonly actorDirect: boolean;
11
+ readonly ownerConfirmationRequired: boolean;
12
+ readonly ownerConfirmationPresent: boolean;
13
+ readonly scopeAuthorized: boolean;
14
+ readonly denialCause: GovernanceDenialCause | null;
15
+ }
16
+ export interface PlanAssuranceGovernanceDecisionV2 {
17
+ readonly schemaVersion: "Perttool.GovernanceDecision.v2";
18
+ readonly governanceInterfaceVersion: 2;
19
+ readonly governanceSourceContractVersion: 1;
20
+ readonly governanceSemanticsVersion: 2;
21
+ readonly sourceDigest: string;
22
+ readonly intent: GovernanceRequest["intent"];
23
+ readonly applicable: boolean;
24
+ readonly actor: PrincipalId | null;
25
+ readonly acceptedByOwner: readonly PrincipalId[];
26
+ readonly affectedScopes: readonly PlanAssuranceGovernanceScope[];
27
+ readonly requiredOwnerConfirmations: readonly PrincipalId[];
28
+ readonly ownerConfirmationRequired: boolean;
29
+ readonly writeAuthorized: boolean;
30
+ readonly scopes: readonly PlanAssuranceGovernanceScopeDecisionV2[];
31
+ }
32
+ export interface PlanAssuranceGovernanceSource {
33
+ readonly sourceDigest: string;
34
+ readonly goalOwner: PrincipalId;
35
+ readonly goalDelegates: ReadonlySet<PrincipalId>;
36
+ readonly dagOwner: PrincipalId;
37
+ readonly dagDelegates: ReadonlySet<PrincipalId>;
38
+ }
39
+ export declare function normalizePlanAssuranceGovernanceRequest(input: GovernanceRequestInput | undefined): GovernanceRequestNormalization;
40
+ export declare function evaluatePlanAssuranceGovernance(source: PlanAssuranceGovernanceSource, affectedScopes: readonly PlanAssuranceGovernanceScope[], request: GovernanceRequest): PlanAssuranceGovernanceDecisionV2;
41
+ export declare function planAssuranceGovernanceDiagnostics(decision: PlanAssuranceGovernanceDecisionV2): readonly Diagnostic[];
42
+ //# sourceMappingURL=governance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/assurance/governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,KAAK,GAAG,gBAAgB,CAAC;AAE7E,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACzD,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,+BAA+B,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,WAAW,EAAE,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,SAAS,4BAA4B,EAAE,CAAC;IACjE,QAAQ,CAAC,0BAA0B,EAAE,SAAS,WAAW,EAAE,CAAC;IAC5D,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,sCAAsC,EAAE,CAAC;CACpE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CACjD;AAED,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,sBAAsB,GAAG,SAAS,GACxC,8BAA8B,CAEhC;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,6BAA6B,EACrC,cAAc,EAAE,SAAS,4BAA4B,EAAE,EACvD,OAAO,EAAE,iBAAiB,GACzB,iCAAiC,CAkEnC;AAwBD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,iCAAiC,GAC1C,SAAS,UAAU,EAAE,CAkCvB"}
@@ -0,0 +1,95 @@
1
+ import { normalizeGovernanceRequest, } from "../governance/authority.js";
2
+ import { compareStableStrings } from "../model/diagnostics.js";
3
+ export function normalizePlanAssuranceGovernanceRequest(input) {
4
+ return normalizeGovernanceRequest(input);
5
+ }
6
+ export function evaluatePlanAssuranceGovernance(source, affectedScopes, request) {
7
+ const canonical = ["goal", "dag", "plan_assurance"]
8
+ .filter((scope) => affectedScopes.includes(scope));
9
+ const scopes = Object.freeze(canonical.map((scope) => {
10
+ const goalScope = scope === "goal";
11
+ const requiredOwner = goalScope ? source.goalOwner : source.dagOwner;
12
+ const delegateSet = goalScope
13
+ ? source.goalDelegates
14
+ : source.dagDelegates;
15
+ const effectiveDelegates = Object.freeze([...delegateSet].sort(compareStableStrings));
16
+ const actorDirect = request.actor !== null &&
17
+ (request.actor === requiredOwner || delegateSet.has(request.actor));
18
+ const ownerConfirmationRequired = !actorDirect;
19
+ const ownerConfirmationPresent = request.acceptedByOwner.includes(requiredOwner);
20
+ const scopeAuthorized = request.actor !== null && (actorDirect || ownerConfirmationPresent);
21
+ const denialCause = scopeAuthorized
22
+ ? null
23
+ : request.actor === null
24
+ ? "actor_required"
25
+ : request.acceptedByOwner.length === 0
26
+ ? "owner_confirmation_required"
27
+ : "owner_confirmation_mismatch";
28
+ return Object.freeze({
29
+ scope,
30
+ requiredOwner,
31
+ effectiveDelegates,
32
+ actorDirect,
33
+ ownerConfirmationRequired,
34
+ ownerConfirmationPresent,
35
+ scopeAuthorized,
36
+ denialCause,
37
+ });
38
+ }));
39
+ const requiredOwnerConfirmations = [];
40
+ for (const decision of scopes) {
41
+ if (decision.ownerConfirmationRequired &&
42
+ !requiredOwnerConfirmations.includes(decision.requiredOwner))
43
+ requiredOwnerConfirmations.push(decision.requiredOwner);
44
+ }
45
+ const applicable = scopes.length > 0;
46
+ return Object.freeze({
47
+ schemaVersion: "Perttool.GovernanceDecision.v2",
48
+ governanceInterfaceVersion: 2,
49
+ governanceSourceContractVersion: 1,
50
+ governanceSemanticsVersion: 2,
51
+ sourceDigest: source.sourceDigest,
52
+ intent: request.intent,
53
+ applicable,
54
+ actor: request.actor,
55
+ acceptedByOwner: request.acceptedByOwner,
56
+ affectedScopes: Object.freeze(canonical),
57
+ requiredOwnerConfirmations: Object.freeze(requiredOwnerConfirmations),
58
+ ownerConfirmationRequired: scopes.some(({ ownerConfirmationRequired }) => ownerConfirmationRequired),
59
+ writeAuthorized: scopes.every(({ scopeAuthorized }) => scopeAuthorized),
60
+ scopes,
61
+ });
62
+ }
63
+ function diagnostic(code, severity, message, decision) {
64
+ return Object.freeze({
65
+ code,
66
+ severity,
67
+ message,
68
+ helpTopic: "editing",
69
+ data: Object.freeze({
70
+ governance_semantics_version: 2,
71
+ source_digest: decision.sourceDigest,
72
+ actor: decision.actor,
73
+ accepted_by_owner: decision.acceptedByOwner,
74
+ affected_scopes: decision.affectedScopes,
75
+ required_owner_confirmations: decision.requiredOwnerConfirmations,
76
+ }),
77
+ });
78
+ }
79
+ export function planAssuranceGovernanceDiagnostics(decision) {
80
+ if (decision.intent === "persist" &&
81
+ decision.applicable &&
82
+ !decision.writeAuthorized) {
83
+ return Object.freeze([diagnostic("PTGOV-101", "error", "required plan-assurance owner authority was not established against the pre-change document", decision)]);
84
+ }
85
+ if (!decision.applicable && decision.acceptedByOwner.length > 0) {
86
+ return Object.freeze([diagnostic("PTGOV-103", "warning", "owner confirmation assertion is unused because governance is not applicable", decision)]);
87
+ }
88
+ if (decision.intent === "preview" &&
89
+ decision.applicable &&
90
+ decision.acceptedByOwner.length > 0) {
91
+ return Object.freeze([diagnostic("PTGOV-104", "warning", "owner confirmation assertion was supplied to a preview and is not persistent authority", decision)]);
92
+ }
93
+ return Object.freeze([]);
94
+ }
95
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/assurance/governance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { ConversionLossReport, MermaidAnalysisMode } from "../conversion/mermaid.js";
2
+ import type { Diagnostic } from "../model/diagnostics.js";
3
+ import type { TargetGrammar6Capability } from "../parser/document-parser.js";
4
+ export declare const PLAN_ASSURANCE_MERMAID_PROFILE_VERSION: 2;
5
+ export type PlanAssuranceMermaidProfile = 2 | 1 | "plain";
6
+ export interface PlanAssuranceMermaidExportOptions {
7
+ readonly profile?: PlanAssuranceMermaidProfile;
8
+ readonly allowLoss?: boolean;
9
+ readonly analysis?: MermaidAnalysisMode;
10
+ readonly capacityOverrides?: ReadonlyMap<string, number>;
11
+ readonly maxDiagnostics?: number;
12
+ }
13
+ export interface PlanAssuranceMermaidExportResultV1 {
14
+ readonly ok: boolean;
15
+ readonly profile: PlanAssuranceMermaidProfile;
16
+ readonly documentId: string | null;
17
+ readonly artifact: string | null;
18
+ readonly artifactDigest: string | null;
19
+ readonly canonicalSource: string | null;
20
+ readonly assuranceSemanticDigest: string | null;
21
+ readonly lossReport: ConversionLossReport;
22
+ readonly diagnostics: readonly Diagnostic[];
23
+ readonly diagnosticsTruncated: boolean;
24
+ }
25
+ export interface PlanAssuranceMermaidImportResultV1 {
26
+ readonly ok: boolean;
27
+ readonly profile: 2;
28
+ readonly analysis: MermaidAnalysisMode;
29
+ readonly capacityOverrides: ReadonlyMap<string, number>;
30
+ readonly documentId: string | null;
31
+ readonly sourceText: string | null;
32
+ readonly sourceDigest: string | null;
33
+ readonly assuranceSemanticDigest: string | null;
34
+ readonly lossReport: ConversionLossReport;
35
+ readonly diagnostics: readonly Diagnostic[];
36
+ readonly diagnosticsTruncated: boolean;
37
+ }
38
+ export declare function exportPlanAssuranceMermaid(text: string, capability: TargetGrammar6Capability, options?: PlanAssuranceMermaidExportOptions): PlanAssuranceMermaidExportResultV1;
39
+ export declare function importPlanAssuranceMermaid(text: string, capability: TargetGrammar6Capability): PlanAssuranceMermaidImportResultV1;
40
+ //# sourceMappingURL=mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/assurance/mermaid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAQlC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAQ1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAO7E,eAAO,MAAM,sCAAsC,EAAG,CAAU,CAAC;AAEjE,MAAM,MAAM,2BAA2B,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAiKD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,wBAAwB,EACpC,OAAO,GAAE,iCAAsC,GAC9C,kCAAkC,CAqLpC;AA8ED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,wBAAwB,GACnC,kCAAkC,CAsFpC"}
@@ -0,0 +1,401 @@
1
+ import { createHash } from "node:crypto";
2
+ import { renderMermaidProjection } from "../conversion/mermaid.js";
3
+ import { analyzeDocument, } from "../application/contract7-assurance.js";
4
+ import { formatTargetGrammar6Document } from "../formatter/target-source-formatter.js";
5
+ import { compareStableStrings } from "../model/diagnostics.js";
6
+ import { fieldNamed } from "../model/syntax.js";
7
+ import { validateTargetGrammar6Document } from "../semantic/target-validator.js";
8
+ import { captureAssuranceOwnedSource, planAssuranceSemanticDigest, } from "./compatibility.js";
9
+ export const PLAN_ASSURANCE_MERMAID_PROFILE_VERSION = 2;
10
+ function sha256(text) {
11
+ return `sha256:${createHash("sha256").update(text).digest("hex")}`;
12
+ }
13
+ function diagnostic(code, message, severity = "error") {
14
+ return Object.freeze({
15
+ code,
16
+ severity,
17
+ message,
18
+ helpTopic: "mermaid",
19
+ });
20
+ }
21
+ function decodedTitle(declaration) {
22
+ const value = fieldNamed(declaration, "title")?.value;
23
+ return typeof value === "string" ? value : declaration.id;
24
+ }
25
+ function escapeLabel(value) {
26
+ let result = "";
27
+ for (const character of value) {
28
+ const codePoint = character.codePointAt(0);
29
+ result +=
30
+ character === '"' ||
31
+ character === "#" ||
32
+ character === "&" ||
33
+ character === ";" ||
34
+ character === "<" ||
35
+ character === ">" ||
36
+ character === "\\" ||
37
+ character === "|" ||
38
+ character === "`" ||
39
+ codePoint <= 0x1f ||
40
+ codePoint === 0x7f
41
+ ? `#${codePoint};`
42
+ : character;
43
+ }
44
+ return result;
45
+ }
46
+ function graphProjection(document) {
47
+ const declarations = (kind) => document.declarations
48
+ .filter((declaration) => declaration.kind === kind)
49
+ .sort((left, right) => compareStableStrings(left.id, right.id));
50
+ const lines = [];
51
+ for (const milestone of declarations("milestone")) {
52
+ lines.push(` ptm_${milestone.id}(("${escapeLabel(`${milestone.id}: ${decodedTitle(milestone)}`)}"))`);
53
+ }
54
+ for (const task of declarations("task")) {
55
+ lines.push(` ptm_${task.from} -->|"${escapeLabel(`${task.id}: ${decodedTitle(task)}`)}"| ptm_${task.to}`);
56
+ }
57
+ for (const gate of declarations("gate")) {
58
+ lines.push(` ptm_${gate.from} -.->|"${escapeLabel(`${gate.id}: gate`)}"| ptm_${gate.to}`);
59
+ }
60
+ return Object.freeze(lines);
61
+ }
62
+ function projectionArtifact(projection, profile) {
63
+ return [
64
+ "flowchart LR",
65
+ ...(profile === 1
66
+ ? [" %% perttool:compatibility-profile 1 lossy"]
67
+ : []),
68
+ ...projection,
69
+ "",
70
+ ].join("\n");
71
+ }
72
+ function lossRecords(text, document) {
73
+ return captureAssuranceOwnedSource(text, document).records.map((record) => Object.freeze({
74
+ code: "PTCNV-210",
75
+ severity: "warning",
76
+ message: `${record.kind} ${record.id} is omitted from this Mermaid profile`,
77
+ elementId: record.id,
78
+ span: record.span,
79
+ lossy: true,
80
+ }));
81
+ }
82
+ function profile2Artifact(canonicalSource, assuranceSemanticDigest, projection, analysis, capacityOverrides) {
83
+ const projectionBody = projection.map((line) => `${line}\n`).join("");
84
+ const header = {
85
+ schema_version: "Perttool.MermaidProfile.v2",
86
+ profile: "perttool",
87
+ source_fidelity: "semantic-v2",
88
+ grammar_version: 6,
89
+ source_digest: sha256(canonicalSource),
90
+ assurance_semantic_digest: assuranceSemanticDigest,
91
+ canonical_source_base64: Buffer.from(canonicalSource, "utf8").toString("base64"),
92
+ projection_digest: sha256(projectionBody),
93
+ ...(analysis === "none"
94
+ ? {}
95
+ : {
96
+ analysis,
97
+ capacity_overrides: [...capacityOverrides]
98
+ .sort(([left], [right]) => compareStableStrings(left, right))
99
+ .map(([resourceId, capacity]) => ({
100
+ resource_id: resourceId,
101
+ capacity,
102
+ })),
103
+ }),
104
+ };
105
+ return [
106
+ "flowchart LR",
107
+ ` %% perttool:profile ${JSON.stringify(header)}`,
108
+ " %% perttool:projection-begin",
109
+ ...projection,
110
+ " %% perttool:projection-end",
111
+ "",
112
+ ].join("\n");
113
+ }
114
+ export function exportPlanAssuranceMermaid(text, capability, options = {}) {
115
+ const profile = options.profile ?? 2;
116
+ const analysisMode = options.analysis ?? "none";
117
+ const capacityOverrides = options.capacityOverrides ?? new Map();
118
+ if (capacityOverrides.size > 0 &&
119
+ analysisMode !== "resource" &&
120
+ analysisMode !== "both") {
121
+ throw new RangeError("capacityOverrides require resource or both analysis");
122
+ }
123
+ const checked = validateTargetGrammar6Document(text, capability, {
124
+ ...(options.maxDiagnostics === undefined
125
+ ? {}
126
+ : { maxDiagnostics: options.maxDiagnostics }),
127
+ });
128
+ if (!checked.ok ||
129
+ checked.validatedDocument === null ||
130
+ checked.validatedDocument.grammarVersion !== 6) {
131
+ return Object.freeze({
132
+ ok: false,
133
+ profile,
134
+ documentId: checked.documentId,
135
+ artifact: null,
136
+ artifactDigest: null,
137
+ canonicalSource: null,
138
+ assuranceSemanticDigest: null,
139
+ lossReport: Object.freeze({ lossless: false, records: Object.freeze([]) }),
140
+ diagnostics: checked.diagnostics,
141
+ diagnosticsTruncated: checked.diagnosticsTruncated,
142
+ });
143
+ }
144
+ const analyzed = analysisMode === "none"
145
+ ? null
146
+ : analyzeDocument(text, {
147
+ mode: analysisMode,
148
+ capacityOverrides,
149
+ ...(options.maxDiagnostics === undefined
150
+ ? {}
151
+ : { maxDiagnostics: options.maxDiagnostics }),
152
+ });
153
+ if (analyzed !== null && !analyzed.ok) {
154
+ return Object.freeze({
155
+ ok: false,
156
+ profile,
157
+ documentId: analyzed.documentId,
158
+ artifact: null,
159
+ artifactDigest: null,
160
+ canonicalSource: null,
161
+ assuranceSemanticDigest: null,
162
+ lossReport: Object.freeze({ lossless: false, records: Object.freeze([]) }),
163
+ diagnostics: analyzed.diagnostics,
164
+ diagnosticsTruncated: analyzed.diagnosticsTruncated,
165
+ });
166
+ }
167
+ const projection = analyzed === null
168
+ ? graphProjection(checked.validatedDocument.document)
169
+ : renderMermaidProjection(analyzed.document, analyzed);
170
+ const assuranceSemanticDigest = planAssuranceSemanticDigest(checked.validatedDocument);
171
+ if (profile !== 2) {
172
+ const records = lossRecords(text, checked.validatedDocument);
173
+ if (options.allowLoss !== true) {
174
+ return Object.freeze({
175
+ ok: false,
176
+ profile,
177
+ documentId: checked.documentId,
178
+ artifact: null,
179
+ artifactDigest: null,
180
+ canonicalSource: null,
181
+ assuranceSemanticDigest,
182
+ lossReport: Object.freeze({
183
+ lossless: false,
184
+ records: Object.freeze(records),
185
+ }),
186
+ diagnostics: Object.freeze([
187
+ ...checked.diagnostics,
188
+ diagnostic("PTCNV-210", "strict Mermaid conversion rejects omitted Grammar 6 assurance facts"),
189
+ ]),
190
+ diagnosticsTruncated: checked.diagnosticsTruncated,
191
+ });
192
+ }
193
+ const artifact = projectionArtifact(projection, profile);
194
+ return Object.freeze({
195
+ ok: true,
196
+ profile,
197
+ documentId: checked.documentId,
198
+ artifact,
199
+ artifactDigest: sha256(artifact),
200
+ canonicalSource: null,
201
+ assuranceSemanticDigest,
202
+ lossReport: Object.freeze({
203
+ lossless: false,
204
+ records: Object.freeze(records),
205
+ }),
206
+ diagnostics: checked.diagnostics,
207
+ diagnosticsTruncated: checked.diagnosticsTruncated,
208
+ });
209
+ }
210
+ const formatted = formatTargetGrammar6Document(text, capability, {
211
+ ...(options.maxDiagnostics === undefined
212
+ ? {}
213
+ : { maxDiagnostics: options.maxDiagnostics }),
214
+ });
215
+ if (!formatted.ok || formatted.formattedText === null) {
216
+ return Object.freeze({
217
+ ok: false,
218
+ profile,
219
+ documentId: formatted.documentId,
220
+ artifact: null,
221
+ artifactDigest: null,
222
+ canonicalSource: null,
223
+ assuranceSemanticDigest,
224
+ lossReport: Object.freeze({ lossless: false, records: Object.freeze([]) }),
225
+ diagnostics: formatted.diagnostics,
226
+ diagnosticsTruncated: formatted.diagnosticsTruncated,
227
+ });
228
+ }
229
+ const canonicalChecked = validateTargetGrammar6Document(formatted.formattedText, capability);
230
+ if (!canonicalChecked.ok ||
231
+ canonicalChecked.validatedDocument === null ||
232
+ planAssuranceSemanticDigest(canonicalChecked.validatedDocument) !==
233
+ assuranceSemanticDigest) {
234
+ return Object.freeze({
235
+ ok: false,
236
+ profile,
237
+ documentId: formatted.documentId,
238
+ artifact: null,
239
+ artifactDigest: null,
240
+ canonicalSource: null,
241
+ assuranceSemanticDigest,
242
+ lossReport: Object.freeze({ lossless: false, records: Object.freeze([]) }),
243
+ diagnostics: Object.freeze([
244
+ ...canonicalChecked.diagnostics,
245
+ diagnostic("PTCNV-106", "Grammar 6 formatting changed the assurance semantic projection"),
246
+ ]),
247
+ diagnosticsTruncated: canonicalChecked.diagnosticsTruncated,
248
+ });
249
+ }
250
+ const canonicalProjection = graphProjection(canonicalChecked.validatedDocument.document);
251
+ const projected = analysisMode === "none"
252
+ ? canonicalProjection
253
+ : projection;
254
+ const artifact = profile2Artifact(formatted.formattedText, assuranceSemanticDigest, projected, analysisMode, capacityOverrides);
255
+ return Object.freeze({
256
+ ok: true,
257
+ profile,
258
+ documentId: formatted.documentId,
259
+ artifact,
260
+ artifactDigest: sha256(artifact),
261
+ canonicalSource: formatted.formattedText,
262
+ assuranceSemanticDigest,
263
+ lossReport: Object.freeze({ lossless: true, records: Object.freeze([]) }),
264
+ diagnostics: formatted.diagnostics,
265
+ diagnosticsTruncated: formatted.diagnosticsTruncated,
266
+ });
267
+ }
268
+ function invalidImport(message) {
269
+ return Object.freeze({
270
+ ok: false,
271
+ profile: 2,
272
+ analysis: "none",
273
+ capacityOverrides: new Map(),
274
+ documentId: null,
275
+ sourceText: null,
276
+ sourceDigest: null,
277
+ assuranceSemanticDigest: null,
278
+ lossReport: Object.freeze({ lossless: false, records: Object.freeze([]) }),
279
+ diagnostics: Object.freeze([diagnostic("PTCNV-102", message)]),
280
+ diagnosticsTruncated: false,
281
+ });
282
+ }
283
+ function parseHeader(text) {
284
+ const lines = text.split("\n");
285
+ const prefix = " %% perttool:profile ";
286
+ if (lines[0] !== "flowchart LR" || !lines[1]?.startsWith(prefix)) {
287
+ return null;
288
+ }
289
+ let value;
290
+ try {
291
+ value = JSON.parse(lines[1].slice(prefix.length));
292
+ }
293
+ catch {
294
+ return null;
295
+ }
296
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
297
+ return null;
298
+ }
299
+ const header = value;
300
+ const baseKeys = [
301
+ "schema_version",
302
+ "profile",
303
+ "source_fidelity",
304
+ "grammar_version",
305
+ "source_digest",
306
+ "assurance_semantic_digest",
307
+ "canonical_source_base64",
308
+ "projection_digest",
309
+ ];
310
+ const expectedKeys = header["analysis"] === undefined
311
+ ? baseKeys
312
+ : [...baseKeys, "analysis", "capacity_overrides"];
313
+ if (JSON.stringify(Object.keys(header)) !== JSON.stringify(expectedKeys) ||
314
+ header["schema_version"] !== "Perttool.MermaidProfile.v2" ||
315
+ header["profile"] !== "perttool" ||
316
+ header["source_fidelity"] !== "semantic-v2" ||
317
+ header["grammar_version"] !== 6 ||
318
+ typeof header["source_digest"] !== "string" ||
319
+ typeof header["assurance_semantic_digest"] !== "string" ||
320
+ typeof header["canonical_source_base64"] !== "string" ||
321
+ typeof header["projection_digest"] !== "string" ||
322
+ (header["analysis"] !== undefined &&
323
+ (!["precedence", "resource", "both"].includes(header["analysis"]) ||
324
+ !Array.isArray(header["capacity_overrides"]) ||
325
+ header["capacity_overrides"].some((item) => item === null || typeof item !== "object" || Array.isArray(item) ||
326
+ typeof item["resource_id"] !== "string" ||
327
+ !Number.isSafeInteger(item["capacity"]) ||
328
+ item["capacity"] <= 0)))) {
329
+ return null;
330
+ }
331
+ return header;
332
+ }
333
+ export function importPlanAssuranceMermaid(text, capability) {
334
+ if (!text.endsWith("\n") || text.startsWith("\uFEFF") || text.includes("\r")) {
335
+ return invalidImport("Mermaid profile 2 requires UTF-8 text with LF endings and a trailing newline");
336
+ }
337
+ const header = parseHeader(text);
338
+ if (header === null)
339
+ return invalidImport("Mermaid profile 2 header is invalid");
340
+ const base64 = header.canonical_source_base64;
341
+ let sourceBytes;
342
+ try {
343
+ sourceBytes = Buffer.from(base64, "base64");
344
+ }
345
+ catch {
346
+ return invalidImport("Mermaid profile 2 canonical source is invalid base64");
347
+ }
348
+ if (sourceBytes.toString("base64") !== base64) {
349
+ return invalidImport("Mermaid profile 2 canonical source is not canonical base64");
350
+ }
351
+ let sourceText;
352
+ try {
353
+ sourceText = new TextDecoder("utf-8", { fatal: true }).decode(sourceBytes);
354
+ }
355
+ catch {
356
+ return invalidImport("Mermaid profile 2 canonical source is not UTF-8");
357
+ }
358
+ if (sha256(sourceBytes) !== header.source_digest) {
359
+ return invalidImport("Mermaid profile 2 source digest does not match");
360
+ }
361
+ const checked = validateTargetGrammar6Document(sourceText, capability);
362
+ if (!checked.ok ||
363
+ checked.validatedDocument === null ||
364
+ checked.validatedDocument.grammarVersion !== 6) {
365
+ return Object.freeze({
366
+ ...invalidImport("Mermaid profile 2 canonical source is not valid Grammar 6"),
367
+ diagnostics: checked.diagnostics,
368
+ diagnosticsTruncated: checked.diagnosticsTruncated,
369
+ });
370
+ }
371
+ const assuranceSemanticDigest = planAssuranceSemanticDigest(checked.validatedDocument);
372
+ if (assuranceSemanticDigest !== header.assurance_semantic_digest) {
373
+ return invalidImport("Mermaid profile 2 assurance semantic digest does not match");
374
+ }
375
+ const reproduced = exportPlanAssuranceMermaid(sourceText, capability, {
376
+ profile: 2,
377
+ ...(header.analysis === undefined
378
+ ? {}
379
+ : {
380
+ analysis: header.analysis,
381
+ capacityOverrides: new Map(header.capacity_overrides.map(({ resource_id, capacity }) => [resource_id, capacity])),
382
+ }),
383
+ });
384
+ if (!reproduced.ok || reproduced.artifact !== text) {
385
+ return invalidImport("Mermaid profile 2 projection or artifact reproduction does not match");
386
+ }
387
+ return Object.freeze({
388
+ ok: true,
389
+ profile: 2,
390
+ analysis: header.analysis ?? "none",
391
+ capacityOverrides: new Map((header.capacity_overrides ?? []).map(({ resource_id, capacity }) => [resource_id, capacity])),
392
+ documentId: checked.documentId,
393
+ sourceText,
394
+ sourceDigest: header.source_digest,
395
+ assuranceSemanticDigest,
396
+ lossReport: Object.freeze({ lossless: true, records: Object.freeze([]) }),
397
+ diagnostics: checked.diagnostics,
398
+ diagnosticsTruncated: checked.diagnosticsTruncated,
399
+ });
400
+ }
401
+ //# sourceMappingURL=mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/assurance/mermaid.ts"],"names":[],"mappings":"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"}