perttool 0.9.4 → 0.10.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.
Files changed (231) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/README.md +38 -17
  3. package/dist/application/cli-facade.d.ts +33 -8
  4. package/dist/application/cli-facade.d.ts.map +1 -1
  5. package/dist/application/cli-facade.js +1 -2
  6. package/dist/application/cli-facade.js.map +1 -1
  7. package/dist/application/contract9-assurance-mutation.d.ts +35 -0
  8. package/dist/application/contract9-assurance-mutation.d.ts.map +1 -0
  9. package/dist/application/contract9-assurance-mutation.js +146 -0
  10. package/dist/application/contract9-assurance-mutation.js.map +1 -0
  11. package/dist/application/contract9-assurance.d.ts +23 -0
  12. package/dist/application/contract9-assurance.d.ts.map +1 -0
  13. package/dist/application/contract9-assurance.js +114 -0
  14. package/dist/application/contract9-assurance.js.map +1 -0
  15. package/dist/application/contract9-candidate.d.ts +33 -0
  16. package/dist/application/contract9-candidate.d.ts.map +1 -0
  17. package/dist/application/contract9-candidate.js +39 -0
  18. package/dist/application/contract9-candidate.js.map +1 -0
  19. package/dist/application/contract9-format-migration.d.ts +22 -0
  20. package/dist/application/contract9-format-migration.d.ts.map +1 -0
  21. package/dist/application/contract9-format-migration.js +52 -0
  22. package/dist/application/contract9-format-migration.js.map +1 -0
  23. package/dist/application/contract9-mixed-mutation.d.ts +14 -0
  24. package/dist/application/contract9-mixed-mutation.d.ts.map +1 -0
  25. package/dist/application/contract9-mixed-mutation.js +88 -0
  26. package/dist/application/contract9-mixed-mutation.js.map +1 -0
  27. package/dist/application/contract9-project.d.ts +15 -0
  28. package/dist/application/contract9-project.d.ts.map +1 -0
  29. package/dist/application/contract9-project.js +24 -0
  30. package/dist/application/contract9-project.js.map +1 -0
  31. package/dist/application/contract9-projection.d.ts +23 -0
  32. package/dist/application/contract9-projection.d.ts.map +1 -0
  33. package/dist/application/contract9-projection.js +89 -0
  34. package/dist/application/contract9-projection.js.map +1 -0
  35. package/dist/application/contract9-runtime.d.ts +43 -0
  36. package/dist/application/contract9-runtime.d.ts.map +1 -0
  37. package/dist/application/contract9-runtime.js +36 -0
  38. package/dist/application/contract9-runtime.js.map +1 -0
  39. package/dist/application/contract9-temporal-context.d.ts +15 -0
  40. package/dist/application/contract9-temporal-context.d.ts.map +1 -0
  41. package/dist/application/contract9-temporal-context.js +127 -0
  42. package/dist/application/contract9-temporal-context.js.map +1 -0
  43. package/dist/application/contract9-temporal-mutation.d.ts +20 -0
  44. package/dist/application/contract9-temporal-mutation.d.ts.map +1 -0
  45. package/dist/application/contract9-temporal-mutation.js +78 -0
  46. package/dist/application/contract9-temporal-mutation.js.map +1 -0
  47. package/dist/application/contract9-temporal.d.ts +17 -0
  48. package/dist/application/contract9-temporal.d.ts.map +1 -0
  49. package/dist/application/contract9-temporal.js +65 -0
  50. package/dist/application/contract9-temporal.js.map +1 -0
  51. package/dist/application/contract9-write.d.ts +28 -0
  52. package/dist/application/contract9-write.d.ts.map +1 -0
  53. package/dist/application/contract9-write.js +25 -0
  54. package/dist/application/contract9-write.js.map +1 -0
  55. package/dist/application/editor-milestone-acceptance.d.ts +4 -0
  56. package/dist/application/editor-milestone-acceptance.d.ts.map +1 -1
  57. package/dist/application/editor-milestone-acceptance.js +90 -0
  58. package/dist/application/editor-milestone-acceptance.js.map +1 -1
  59. package/dist/application/editor-repair.d.ts +12 -0
  60. package/dist/application/editor-repair.d.ts.map +1 -0
  61. package/dist/application/editor-repair.js +74 -0
  62. package/dist/application/editor-repair.js.map +1 -0
  63. package/dist/application/target-postdue-analysis.d.ts +18 -0
  64. package/dist/application/target-postdue-analysis.d.ts.map +1 -0
  65. package/dist/application/target-postdue-analysis.js +26 -0
  66. package/dist/application/target-postdue-analysis.js.map +1 -0
  67. package/dist/application/target-postdue-check.d.ts +10 -0
  68. package/dist/application/target-postdue-check.d.ts.map +1 -0
  69. package/dist/application/target-postdue-check.js +18 -0
  70. package/dist/application/target-postdue-check.js.map +1 -0
  71. package/dist/application/target-postdue-next.d.ts +10 -0
  72. package/dist/application/target-postdue-next.d.ts.map +1 -0
  73. package/dist/application/target-postdue-next.js +13 -0
  74. package/dist/application/target-postdue-next.js.map +1 -0
  75. package/dist/application/target-postdue-projection.d.ts +11 -0
  76. package/dist/application/target-postdue-projection.d.ts.map +1 -0
  77. package/dist/application/target-postdue-projection.js +17 -0
  78. package/dist/application/target-postdue-projection.js.map +1 -0
  79. package/dist/assurance/canonical.d.ts +3 -3
  80. package/dist/assurance/canonical.d.ts.map +1 -1
  81. package/dist/assurance/canonical.js +19 -6
  82. package/dist/assurance/canonical.js.map +1 -1
  83. package/dist/assurance/evaluate.d.ts.map +1 -1
  84. package/dist/assurance/evaluate.js +10 -2
  85. package/dist/assurance/evaluate.js.map +1 -1
  86. package/dist/assurance/types.d.ts +11 -1
  87. package/dist/assurance/types.d.ts.map +1 -1
  88. package/dist/cli.js +184 -85
  89. package/dist/cli.js.map +1 -1
  90. package/dist/command/contract9-discovery.d.ts +17 -0
  91. package/dist/command/contract9-discovery.d.ts.map +1 -0
  92. package/dist/command/contract9-discovery.js +126 -0
  93. package/dist/command/contract9-discovery.js.map +1 -0
  94. package/dist/command/contract9-usage.d.ts +24 -0
  95. package/dist/command/contract9-usage.d.ts.map +1 -0
  96. package/dist/command/contract9-usage.js +23 -0
  97. package/dist/command/contract9-usage.js.map +1 -0
  98. package/dist/core/index.d.ts +4 -3
  99. package/dist/core/index.d.ts.map +1 -1
  100. package/dist/core/index.js +1 -1
  101. package/dist/editor/repair.d.ts +95 -0
  102. package/dist/editor/repair.d.ts.map +1 -0
  103. package/dist/editor/repair.js +232 -0
  104. package/dist/editor/repair.js.map +1 -0
  105. package/dist/editor/semantic-fingerprint.d.ts +8 -0
  106. package/dist/editor/semantic-fingerprint.d.ts.map +1 -0
  107. package/dist/editor/semantic-fingerprint.js +177 -0
  108. package/dist/editor/semantic-fingerprint.js.map +1 -0
  109. package/dist/help/assurance-guide.js +7 -7
  110. package/dist/help/assurance-guide.js.map +1 -1
  111. package/dist/help/contract9-guide.d.ts +10 -0
  112. package/dist/help/contract9-guide.d.ts.map +1 -0
  113. package/dist/help/contract9-guide.js +32 -0
  114. package/dist/help/contract9-guide.js.map +1 -0
  115. package/dist/help/guide.d.ts +1 -1
  116. package/dist/help/guide.d.ts.map +1 -1
  117. package/dist/index.d.ts +10 -8
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +4 -4
  120. package/dist/index.js.map +1 -1
  121. package/dist/mutation/advance.d.ts.map +1 -1
  122. package/dist/mutation/advance.js.map +1 -1
  123. package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
  124. package/dist/recommendation/override-types.d.ts +2 -2
  125. package/dist/recommendation/override.js +2 -2
  126. package/dist/schema/registry.d.ts +1 -1
  127. package/dist/schema/registry.js +8 -8
  128. package/dist/session/document-session.d.ts +23 -0
  129. package/dist/session/document-session.d.ts.map +1 -1
  130. package/dist/session/document-session.js +104 -2
  131. package/dist/session/document-session.js.map +1 -1
  132. package/dist/temporal-schedule/alert-types.d.ts +109 -0
  133. package/dist/temporal-schedule/alert-types.d.ts.map +1 -0
  134. package/dist/temporal-schedule/alert-types.js +2 -0
  135. package/dist/temporal-schedule/alert-types.js.map +1 -0
  136. package/dist/temporal-schedule/alert.d.ts +4 -0
  137. package/dist/temporal-schedule/alert.d.ts.map +1 -0
  138. package/dist/temporal-schedule/alert.js +214 -0
  139. package/dist/temporal-schedule/alert.js.map +1 -0
  140. package/dist/temporal-schedule/calendar-mutation.d.ts +11 -0
  141. package/dist/temporal-schedule/calendar-mutation.d.ts.map +1 -0
  142. package/dist/temporal-schedule/calendar-mutation.js +59 -0
  143. package/dist/temporal-schedule/calendar-mutation.js.map +1 -0
  144. package/dist/temporal-schedule/calendar.d.ts +16 -0
  145. package/dist/temporal-schedule/calendar.d.ts.map +1 -0
  146. package/dist/temporal-schedule/calendar.js +179 -0
  147. package/dist/temporal-schedule/calendar.js.map +1 -0
  148. package/dist/temporal-schedule/constraint-types.d.ts +47 -0
  149. package/dist/temporal-schedule/constraint-types.d.ts.map +1 -0
  150. package/dist/temporal-schedule/constraint-types.js +2 -0
  151. package/dist/temporal-schedule/constraint-types.js.map +1 -0
  152. package/dist/temporal-schedule/constraint.d.ts +7 -0
  153. package/dist/temporal-schedule/constraint.d.ts.map +1 -0
  154. package/dist/temporal-schedule/constraint.js +224 -0
  155. package/dist/temporal-schedule/constraint.js.map +1 -0
  156. package/dist/temporal-schedule/entity-mutation.d.ts +31 -0
  157. package/dist/temporal-schedule/entity-mutation.d.ts.map +1 -0
  158. package/dist/temporal-schedule/entity-mutation.js +107 -0
  159. package/dist/temporal-schedule/entity-mutation.js.map +1 -0
  160. package/dist/temporal-schedule/format.d.ts +9 -0
  161. package/dist/temporal-schedule/format.d.ts.map +1 -0
  162. package/dist/temporal-schedule/format.js +183 -0
  163. package/dist/temporal-schedule/format.js.map +1 -0
  164. package/dist/temporal-schedule/required-types.d.ts +68 -0
  165. package/dist/temporal-schedule/required-types.d.ts.map +1 -0
  166. package/dist/temporal-schedule/required-types.js +2 -0
  167. package/dist/temporal-schedule/required-types.js.map +1 -0
  168. package/dist/temporal-schedule/required.d.ts +5 -0
  169. package/dist/temporal-schedule/required.d.ts.map +1 -0
  170. package/dist/temporal-schedule/required.js +183 -0
  171. package/dist/temporal-schedule/required.js.map +1 -0
  172. package/dist/temporal-schedule/schedule-graph.d.ts +8 -0
  173. package/dist/temporal-schedule/schedule-graph.d.ts.map +1 -0
  174. package/dist/temporal-schedule/schedule-graph.js +33 -0
  175. package/dist/temporal-schedule/schedule-graph.js.map +1 -0
  176. package/dist/temporal-schedule/scheduler-types.d.ts +115 -0
  177. package/dist/temporal-schedule/scheduler-types.d.ts.map +1 -0
  178. package/dist/temporal-schedule/scheduler-types.js +2 -0
  179. package/dist/temporal-schedule/scheduler-types.js.map +1 -0
  180. package/dist/temporal-schedule/scheduler.d.ts +12 -0
  181. package/dist/temporal-schedule/scheduler.d.ts.map +1 -0
  182. package/dist/temporal-schedule/scheduler.js +584 -0
  183. package/dist/temporal-schedule/scheduler.js.map +1 -0
  184. package/dist/temporal-schedule/source-lexical.d.ts +30 -0
  185. package/dist/temporal-schedule/source-lexical.d.ts.map +1 -0
  186. package/dist/temporal-schedule/source-lexical.js +166 -0
  187. package/dist/temporal-schedule/source-lexical.js.map +1 -0
  188. package/dist/temporal-schedule/source-types.d.ts +124 -0
  189. package/dist/temporal-schedule/source-types.d.ts.map +1 -0
  190. package/dist/temporal-schedule/source-types.js +2 -0
  191. package/dist/temporal-schedule/source-types.js.map +1 -0
  192. package/dist/temporal-schedule/source-values.d.ts +17 -0
  193. package/dist/temporal-schedule/source-values.d.ts.map +1 -0
  194. package/dist/temporal-schedule/source-values.js +138 -0
  195. package/dist/temporal-schedule/source-values.js.map +1 -0
  196. package/dist/temporal-schedule/source.d.ts +17 -0
  197. package/dist/temporal-schedule/source.d.ts.map +1 -0
  198. package/dist/temporal-schedule/source.js +520 -0
  199. package/dist/temporal-schedule/source.js.map +1 -0
  200. package/dist/temporal-schedule/tzdb-2026c.d.ts +7 -0
  201. package/dist/temporal-schedule/tzdb-2026c.d.ts.map +1 -0
  202. package/dist/temporal-schedule/tzdb-2026c.js +611 -0
  203. package/dist/temporal-schedule/tzdb-2026c.js.map +1 -0
  204. package/dist/version.d.ts +1 -1
  205. package/dist/version.d.ts.map +1 -1
  206. package/dist/version.js +1 -1
  207. package/dist/version.js.map +1 -1
  208. package/package.json +1 -1
  209. package/schemas/Perttool.AdvanceResult.v3.schema.json +1 -1
  210. package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
  211. package/schemas/{Perttool.AnalysisResult.v6.schema.json → Perttool.AnalysisResult.v7.schema.json} +178 -6
  212. package/schemas/{Perttool.CheckResult.v5.schema.json → Perttool.CheckResult.v6.schema.json} +10 -6
  213. package/schemas/Perttool.CliError.v1.schema.json +1 -1
  214. package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
  215. package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
  216. package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
  217. package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
  218. package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +1 -1
  219. package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
  220. package/schemas/Perttool.InitResult.v1.schema.json +1 -1
  221. package/schemas/Perttool.MilestoneAcceptanceMigrationResult.v1.schema.json +1 -1
  222. package/schemas/Perttool.MilestoneAcceptanceResult.v1.schema.json +1 -1
  223. package/schemas/{Perttool.MutationResult.v5.schema.json → Perttool.MutationResult.v6.schema.json} +4 -4
  224. package/schemas/{Perttool.NextResult.v7.schema.json → Perttool.NextResult.v8.schema.json} +10 -6
  225. package/schemas/Perttool.OverrideDecision.v1.schema.json +1 -1
  226. package/schemas/{Perttool.PlanAssuranceResult.v1.schema.json → Perttool.PlanAssuranceResult.v2.schema.json} +5 -5
  227. package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
  228. package/schemas/{Perttool.ProjectResult.v4.schema.json → Perttool.ProjectResult.v5.schema.json} +70 -7
  229. package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
  230. package/schemas/{Perttool.UnitMigrationResult.v3.schema.json → Perttool.UnitMigrationResult.v4.schema.json} +5 -5
  231. package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ This project records its notable changes here. The format is based on [Keep a Ch
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.0] - 2026-08-18
8
+
9
+ Breaking Grammar 8 and CLI Contract 9 beta minor. This version publishes
10
+ calendar-aware temporal scheduling across the public CLI and package surfaces.
11
+
12
+ ### Added
13
+
14
+ - Added reusable weekly calendars, capacity exceptions, generic resource
15
+ availability, event-bound task constraints, pinned zone-data validation,
16
+ and source-preserving maintenance commands.
17
+ - Added forward and backward-required calendar schedules, signed slack,
18
+ infeasibility evidence, and current and forecast POSTDUE projections.
19
+ - Added three calendar command paths and the `temporal-schedule` Guide topic.
20
+
21
+ ### Changed
22
+
23
+ - Activated Grammar 8 and CLI Contract 9 with
24
+ `Perttool.ProjectResult.v5`, `Perttool.CheckResult.v6`,
25
+ `Perttool.AnalysisResult.v7`, `Perttool.NextResult.v8`,
26
+ `Perttool.MutationResult.v6`, `Perttool.PlanAssuranceResult.v2`, and
27
+ `Perttool.UnitMigrationResult.v4`.
28
+ - Retained 23 active command-result root schemas by replacing seven Contract 8
29
+ roots, retained 129 root and Node exports and 45 Core exports, and kept
30
+ `Perttool.AdvanceResult.v3` unchanged.
31
+ - Added source-preserving Grammar 7 to Grammar 8 migration while retaining
32
+ Grammar 1 through 7 reads and existing authorization and persistence guards.
33
+
7
34
  ## [0.9.4] - 2026-08-14
8
35
 
9
36
  Backward-compatible Grammar 7 and CLI Contract 8 emergency beta patch. This
@@ -516,7 +543,8 @@ First public development preview. Intended to evaluate the DSL and CLI, read-onl
516
543
  - Not published to the npm registry; use the GitHub Release asset
517
544
  - Requires Node.js 24 or later
518
545
 
519
- [Unreleased]: https://github.com/mako10k/perttool/compare/v0.9.4...HEAD
546
+ [Unreleased]: https://github.com/mako10k/perttool/compare/v0.10.0...HEAD
547
+ [0.10.0]: https://github.com/mako10k/perttool/compare/v0.9.4...v0.10.0
520
548
  [0.9.4]: https://github.com/mako10k/perttool/compare/v0.9.3...v0.9.4
521
549
  [0.9.3]: https://github.com/mako10k/perttool/compare/v0.9.2...v0.9.3
522
550
  [0.9.2]: https://github.com/mako10k/perttool/compare/v0.9.1...v0.9.2
package/README.md CHANGED
@@ -75,23 +75,25 @@ commands, 23 root schemas, 129 root and Node runtime exports,
75
75
  criterion-set replacement, caller-asserted receipts, and acceptance-aware
76
76
  canonical advance. Its accepted release commit, annotated tag, GitHub
77
77
  prerelease, and npm artifact agree, and npm currently reports
78
- `latest=0.9.0`, `beta=0.9.3`, and no `alpha`. Version `0.8.1` remains the
78
+ `latest=0.9.0`, `beta=0.9.4`, and no `alpha`. Source is prepared for the
79
+ unpublished `0.10.0` Grammar 8 and CLI Contract 9 beta candidate. Version `0.8.1` remains the
79
80
  exact Grammar 6 and CLI Contract 7 rollback pin.
80
81
 
81
- Version `0.9.1` is the published compatible Contract 8 patch for `ACT-003` and
82
- GitHub Issue #8. It makes declared velocity observation use the exact current
83
- operand, including a just-written uncommitted finish, while keeping
84
- Git-recorded evidence bound to the selected first-parent revision. It retains
85
- all 53 commands, 23 root schemas, 129 root and Node exports, 45 Core exports,
86
- result and schema identities, and authority. It remains available by exact
87
- pin while `latest` remains `0.9.0`.
88
-
89
- Version `0.9.2` is the published compatible Contract 8 emergency patch for
90
- `ANALYSIS-001` and GitHub Issue #15. It keeps valid Point plans without a
82
+ Version `0.9.1` is the durably accepted compatible Contract 8 patch for
83
+ `ACT-003` and GitHub Issue #8. It makes declared velocity observation use the
84
+ exact current operand, including a just-written uncommitted finish, while
85
+ keeping Git-recorded evidence bound to the selected first-parent revision. It
86
+ retains all 53 commands, 23 root schemas, 129 root and Node exports, 45 Core
87
+ exports, result and schema identities, and authority. Release commit, peeled
88
+ tag, GitHub prerelease, npm artifact, and installed regression agree; Issue #8
89
+ is closed.
90
+
91
+ Version `0.9.2` is the durably accepted compatible Contract 8 emergency patch
92
+ for `ANALYSIS-001` and GitHub Issue #15. It keeps valid Point plans without a
91
93
  declared velocity Point-valued through `dag analyze` and `dag next`, leaves
92
94
  velocity forecasts null, and reports calendar conversion as unavailable
93
- without inventing a rate. It retains all public identities and authority and
94
- remains the exact rollback pin for `0.9.3`.
95
+ without inventing a rate. It retains all public identities and authority;
96
+ Issue #15 is closed, and `0.9.2` remains the exact rollback pin for `0.9.3`.
95
97
 
96
98
  Version `0.9.3` is the published compatible Contract 8 emergency patch for
97
99
  GitHub Issues #14, #16, and #17. It restores Grammar 7 `plan-assurance
@@ -99,19 +101,26 @@ show|hash`, composes acceptance-aware terminal deletions without weakening the
99
101
  shared edit guard, and preserves complete criterion-set/receipt evidence for
100
102
  retained reached milestones. It retains all public identities and authority.
101
103
  The accepted release commit, annotated tag, GitHub prerelease, and npm
102
- artifact agree; npm reports `beta=0.9.3`, `latest=0.9.0`, and no `alpha`.
104
+ artifact agree; at its publication npm reported `beta=0.9.3`,
105
+ `latest=0.9.0`, and no `alpha`.
103
106
  Issues #14, #16, and #17 are closed with release evidence. Plan advance,
104
107
  public VSIX publication, and unrelated work remain separate.
105
108
 
106
109
  Version `0.9.4` is the compatible Contract 8 emergency patch for GitHub Issue
107
- #19. It preserves criterion sets and receipts for every milestone retained by
110
+ #19. It is published and preserves criterion sets and receipts for every milestone retained by
108
111
  `dag advance`, validates the complete final candidate before history or
109
112
  persistence decisions, and projects deterministic candidate diagnostics. It
110
113
  also makes pinned jscpd duplicate and Lizard complexity ratchets part of the
111
114
  repository and CI static-analysis gate. Grammar 7, CLI Contract 8, all 53
112
115
  commands, 23 root schemas, 129 root and Node exports, 45 Core exports, public
113
- authority, and force semantics remain unchanged. Version `0.9.3` is the exact
114
- rollback pin.
116
+ authority, and force semantics remain unchanged. Its release commit, peeled
117
+ tag, Node.js 22 and 24 CI, GitHub prerelease, npm artifact, and common
118
+ SHA-256 `63a12ddf...d6fe53b` agree. npm reports `beta=0.9.4`,
119
+ `latest=0.9.0`, and no `alpha`; Issue #19 is closed with release evidence.
120
+ The completed release plan was migrated with committed provenance, given six
121
+ artifact-bound criteria and receipts, and canonically advanced. Its residual
122
+ retains only accepted reached `RELEASE_094_ACCEPTED` and has no diagnostic or
123
+ task. Version `0.9.3` is the exact rollback pin.
115
124
 
116
125
  The private adapters now project that same Contract 8 acceptance model without
117
126
  adding write authority. The LSP negotiates a separate version-bound milestone
@@ -661,8 +670,13 @@ diagnostics, and future or unavailable temporal eligibility must fail closed.
661
670
  - [`0.8.1` to `0.9.0` migration](docs/process/0.8.1-to-0.9.0-migration.md)
662
671
  - [`v0.9.0` release procedure](docs/process/0.9.0-release.md)
663
672
  - [`v0.9.1` release procedure](docs/process/0.9.1-release.md)
673
+ - [`v0.9.1` durable release acceptance](docs/process/0.9.1-release-acceptance.md)
664
674
  - [`v0.9.2` release procedure](docs/process/0.9.2-release.md)
675
+ - [`v0.9.2` durable release acceptance](docs/process/0.9.2-release-acceptance.md)
665
676
  - [`v0.9.3` release procedure](docs/process/0.9.3-release.md)
677
+ - [`v0.9.3` publication record](docs/process/0.9.3-publish.md)
678
+ - [`v0.9.3` durable release acceptance](docs/process/0.9.3-release-acceptance.md)
679
+ - [`v0.9.4` release procedure](docs/process/0.9.4-release.md)
666
680
  - [Conditional Plan Assurance interface acceptance](docs/process/plan-assurance-interface-acceptance.md)
667
681
  - [Shared Library Boundary](docs/specs/shared-library.md)
668
682
  - [Editor Protocol Contract](docs/specs/editor-protocol.md)
@@ -689,6 +703,7 @@ diagnostics, and future or unavailable temporal eligibility must fail closed.
689
703
  - [`v0.9.1` release plan](plans/release-0.9.1.pert)
690
704
  - [`v0.9.2` release plan](plans/release-0.9.2.pert)
691
705
  - [`v0.9.3` release plan](plans/release-0.9.3.pert)
706
+ - [`v0.9.4` release plan](plans/release-0.9.4.pert)
692
707
  - [JSON Schema Artifact Contract](docs/specs/json-schema.md)
693
708
  - [JSON Schema source acceptance](docs/process/json-schema-acceptance.md)
694
709
  - [Contract 5-to-6 migration](docs/process/cli-contract-6-migration.md)
@@ -709,3 +724,9 @@ diagnostics, and future or unavailable temporal eligibility must fail closed.
709
724
  Report vulnerabilities privately according to [SECURITY.md](SECURITY.md).
710
725
  perttool is released under the [MIT License](LICENSE). See
711
726
  [CHANGELOG.md](CHANGELOG.md) for release changes and known limitations.
727
+ The current repository source identifies `0.10.0` and activates Grammar 8,
728
+ CLI Contract 9, 56 commands, and the seven replacement result identities. It
729
+ is preparation state only: no `v0.10.0` tag, GitHub Release, or npm package is
730
+ claimed until candidate acceptance and separately authorized PUBLISH succeed.
731
+ Migration guidance is in
732
+ [`0.9.4-to-0.10.0-migration.md`](docs/process/0.9.4-to-0.10.0-migration.md).
@@ -1,11 +1,10 @@
1
1
  import type { CreateDocumentOptions, DocumentWriteResult, ReplaceDocumentOptions } from "../io/safe-write.js";
2
2
  import type { TargetGrammar6Capability } from "../parser/document-parser.js";
3
3
  import type { NodeHostPorts } from "../ports/node-host.js";
4
- import { analyzeDocument, checkDocument, getProjectMetadata, planAssuranceMutation, planBatchMutation, planFinishActuals, planFormat, inspectPlanAssurance, planLifecycle, planMutation, planUnitMigration, selectNextTasks } from "./contract8-milestone-acceptance.js";
4
+ import { analyzeDocument, checkDocument, getProjectMetadata, planFormat, inspectPlanAssurance, selectNextTasks, withUnitMigrationWrite } from "./contract9-runtime.js";
5
5
  import { planAdvance } from "./contract7-mutation.js";
6
6
  import { contract7ProjectResultToJson, renderContract7ProjectText } from "./contract7-project.js";
7
7
  import { contract7InspectionResultToJson, contract7MutationResultToJson, contract7SnakeJson } from "./contract7-projection.js";
8
- import { withUnitMigrationWrite } from "./contract7-unit-migration.js";
9
8
  import { contract6WorkEventToJson } from "./contract6-projection.js";
10
9
  import { getAgentHelp } from "./agent-help.js";
11
10
  import { renderAdvanceHistoryGuard, withAdvanceHistoryRace } from "./advance-history.js";
@@ -31,17 +30,43 @@ export declare function createCliApplicationFacade(host: NodeHostPorts, historic
31
30
  projectInitResultToJson: typeof projectInitResultToJson;
32
31
  renderProjectInitResult: typeof renderProjectInitResult;
33
32
  withProjectInitOutput: typeof withProjectInitOutput;
34
- planUnitMigration: typeof planUnitMigration;
33
+ planUnitMigration: (text: string, request: import("../index.js").UnitMigrationRequest, options?: import("./target-unit-migration-candidate.js").TargetUnitMigrationCandidateOptions | undefined) => Omit<import("./target-unit-migration-result.js").TargetUnitMigrationResult, "schemaVersion" | "unitMigration"> & {
34
+ readonly schemaVersion: "Perttool.UnitMigrationResult.v4";
35
+ readonly unitMigration: {
36
+ readonly id: "perttool.unit-migration";
37
+ readonly version: 4;
38
+ };
39
+ };
35
40
  withUnitMigrationWrite: typeof withUnitMigrationWrite;
36
41
  getProjectMetadata: typeof getProjectMetadata;
37
42
  contract7ProjectResultToJson: typeof contract7ProjectResultToJson;
38
43
  renderContract7ProjectText: typeof renderContract7ProjectText;
39
44
  planAdvance: typeof planAdvance;
40
- planAssuranceMutation: typeof planAssuranceMutation;
41
- planBatchMutation: typeof planBatchMutation;
42
- planFinishActuals: typeof planFinishActuals;
43
- planLifecycle: typeof planLifecycle;
44
- planMutation: typeof planMutation;
45
+ planAssuranceMutation: (text: string, mutation: import("../index.js").PlanAssuranceMutation, options?: import("../index.js").PlanAssuranceMutationOptions | undefined) => Omit<Omit<import("../assurance/mutation.js").TargetPlanAssuranceMutationResultV4, "schemaVersion"> & {
46
+ readonly schemaVersion: "Perttool.MutationResult.v5";
47
+ }, "schemaVersion"> & {
48
+ readonly schemaVersion: "Perttool.MutationResult.v6";
49
+ };
50
+ planBatchMutation: (text: string, mutation: import("../index.js").BatchMutation | import("../assurance/mutation.js").PlanAssuranceBatchMutation, options?: import("../index.js").PlanAssuranceMutationOptions | undefined) => Omit<Omit<import("../assurance/mutation.js").TargetPlanAssuranceMutationResultV4, "schemaVersion"> & {
51
+ readonly schemaVersion: "Perttool.MutationResult.v5";
52
+ }, "schemaVersion"> & {
53
+ readonly schemaVersion: "Perttool.MutationResult.v6";
54
+ };
55
+ planFinishActuals: (text: string, mutation: import("../index.js").FinishActualsMutation, options?: import("./contract7-mutation.js").Contract7LifecycleOptions | undefined) => Omit<Omit<import("./contract7-mutation.js").LifecycleResultV4, "schemaVersion"> & {
56
+ readonly schemaVersion: "Perttool.MutationResult.v5";
57
+ }, "schemaVersion"> & {
58
+ readonly schemaVersion: "Perttool.MutationResult.v6";
59
+ };
60
+ planLifecycle: (text: string, mutation: import("../index.js").LifecycleMutation, options?: import("./contract7-mutation.js").Contract7LifecycleOptions | undefined) => Omit<Omit<import("./contract7-mutation.js").LifecycleResultV4, "schemaVersion"> & {
61
+ readonly schemaVersion: "Perttool.MutationResult.v5";
62
+ }, "schemaVersion"> & {
63
+ readonly schemaVersion: "Perttool.MutationResult.v6";
64
+ };
65
+ planMutation: (text: string, mutation: import("../index.js").Mutation, options?: import("../index.js").PlanAssuranceMutationOptions | undefined) => Omit<Omit<import("../assurance/mutation.js").TargetPlanAssuranceMutationResultV4, "schemaVersion"> & {
66
+ readonly schemaVersion: "Perttool.MutationResult.v5";
67
+ }, "schemaVersion"> & {
68
+ readonly schemaVersion: "Perttool.MutationResult.v6";
69
+ };
45
70
  renderTargetGovernanceDecision: typeof renderTargetGovernanceDecision;
46
71
  contract7InspectionResultToJson: typeof contract7InspectionResultToJson;
47
72
  contract7MutationResultToJson: typeof contract7MutationResultToJson;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-facade.d.ts","sourceRoot":"","sources":["../../src/application/cli-facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wCAAwC,EACxC,yCAAyC,EACzC,KAAK,wCAAwC,EAC7C,KAAK,6CAA6C,EACnD,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,qCAAqC,EAC1C,KAAK,iCAAiC,EACvC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,8BAA8B,EAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,kCAAkC,EAElC,8BAA8B,EAC9B,gCAAgC,EAChC,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,EACnC,qCAAqC,EACtC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,+BAA+B,EAC/B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,8BAA8B,CAAC;AAsBtC;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,qBAAqB,CAAC,EAAE,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;qDAoChD,MAAM,UACJ,UAAU,CAAC,OAAO,wCAAwC,CAAC,CAAC,CAAC,CAAC,cAC1D,wBAAwB,WAC3B,wCAAwC;;;;+CAiBzC,iCAAiC,cAC7B,wBAAwB,WAC3B,qCAAqC;;;+CA/BrC,+BAA+B,cAC5B,wBAAwB;;;;;;gDAsC3B,wBAAwB;;;;sCAmDC,UAAU;;;;;gCAnHL,MAAM;;;;;;;;;;+CAGrC,MAAM,iBACC,MAAM,cACT,wBAAwB,YAC3B,qBAAqB,KAC7B,OAAO,CAAC,mBAAmB,CAAC;gDAOrB,MAAM,iBACC,MAAM,cACT,wBAAwB,WAC3B,sBAAsB,KAC9B,OAAO,CAAC,mBAAmB,CAAC;;GA6GhC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAC3C,OAAO,0BAA0B,CAClC,CAAC;AAEF,YAAY,EACV,6CAA6C,GAC9C,CAAC"}
1
+ {"version":3,"file":"cli-facade.d.ts","sourceRoot":"","sources":["../../src/application/cli-facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAIlB,UAAU,EACV,oBAAoB,EAIpB,eAAe,EACf,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wCAAwC,EACxC,yCAAyC,EACzC,KAAK,wCAAwC,EAC7C,KAAK,6CAA6C,EACnD,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,qCAAqC,EAC1C,KAAK,iCAAiC,EACvC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,8BAA8B,EAC/B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,kCAAkC,EAElC,8BAA8B,EAC9B,gCAAgC,EAChC,KAAK,+BAA+B,EACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,EACnC,qCAAqC,EACtC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,+BAA+B,EAC/B,iCAAiC,EACjC,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,8BAA8B,CAAC;AAsBtC;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,aAAa,EACnB,qBAAqB,CAAC,EAAE,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDAoChD,MAAM,UACJ,UAAU,CAAC,OAAO,wCAAwC,CAAC,CAAC,CAAC,CAAC,cAC1D,wBAAwB,WAC3B,wCAAwC;;;;+CAiBzC,iCAAiC,cAC7B,wBAAwB,WAC3B,qCAAqC;;;+CA/BrC,+BAA+B,cAC5B,wBAAwB;;;;;;gDAsC3B,wBAAwB;;;;sCAmDC,UAAU;;;;;gCAnHL,MAAM;;;;;;;;;;+CAGrC,MAAM,iBACC,MAAM,cACT,wBAAwB,YAC3B,qBAAqB,KAC7B,OAAO,CAAC,mBAAmB,CAAC;gDAOrB,MAAM,iBACC,MAAM,cACT,wBAAwB,WAC3B,sBAAsB,KAC9B,OAAO,CAAC,mBAAmB,CAAC;;GA6GhC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAC3C,OAAO,0BAA0B,CAClC,CAAC;AAEF,YAAY,EACV,6CAA6C,GAC9C,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { validateTargetGrammar6Document, } from "../semantic/target-validator.js";
2
- import { analyzeDocument, checkDocument, getProjectMetadata, planAssuranceMutation, planBatchMutation, planFinishActuals, planFormat, inspectPlanAssurance, planLifecycle, planMutation, planUnitMigration, selectNextTasks, } from "./contract8-milestone-acceptance.js";
2
+ import { analyzeDocument, checkDocument, getProjectMetadata, planAssuranceMutation, planBatchMutation, planFinishActuals, planFormat, inspectPlanAssurance, planLifecycle, planMutation, planUnitMigration, selectNextTasks, withUnitMigrationWrite, } from "./contract9-runtime.js";
3
3
  import { planAdvance, } from "./contract7-mutation.js";
4
4
  import { contract7ProjectResultToJson, renderContract7ProjectText, } from "./contract7-project.js";
5
5
  import { contract7InspectionResultToJson, contract7MutationResultToJson, contract7SnakeJson, } from "./contract7-projection.js";
6
- import { withUnitMigrationWrite, } from "./contract7-unit-migration.js";
7
6
  import { contract6WorkEventToJson, } from "./contract6-projection.js";
8
7
  import { getAgentHelp, } from "./agent-help.js";
9
8
  import { prepareAdvanceHistory as prepareGenericAdvanceHistory, renderAdvanceHistoryGuard, withAdvanceHistoryRace, } from "./advance-history.js";
@@ -1 +1 @@
1
- {"version":3,"file":"cli-facade.js","sourceRoot":"","sources":["../../src/application/cli-facade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-facade.js","sourceRoot":"","sources":["../../src/application/cli-facade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { PlanAssuranceEvaluationV1 } from "../assurance/types.js";
2
+ import type { Diagnostic } from "../model/diagnostics.js";
3
+ import { type TextEdit } from "../mutation/text-edits.js";
4
+ import { type PlanAssuranceGovernanceDecisionV2 } from "../assurance/governance.js";
5
+ import type { GovernanceRequestInput } from "../governance/types.js";
6
+ export type Contract9SealMutation = {
7
+ readonly kind: "plan_assurance.seal";
8
+ readonly reason: string;
9
+ } | {
10
+ readonly kind: "plan_assurance.reseal";
11
+ readonly taskIds: readonly string[];
12
+ readonly reason: string;
13
+ };
14
+ export interface Contract9AssuranceMutationResultV6 {
15
+ readonly schemaVersion: "Perttool.MutationResult.v6";
16
+ readonly ok: boolean;
17
+ readonly documentId: string | null;
18
+ readonly changed: boolean;
19
+ readonly originalDigest: string;
20
+ readonly updatedDigest: string | null;
21
+ readonly updatedText: string | null;
22
+ readonly diff: string | null;
23
+ readonly edits: readonly TextEdit[];
24
+ readonly diagnostics: readonly Diagnostic[];
25
+ readonly diagnosticsTruncated: false;
26
+ readonly assuranceImpact: Readonly<{
27
+ before: PlanAssuranceEvaluationV1;
28
+ after: PlanAssuranceEvaluationV1;
29
+ }> | null;
30
+ readonly governance: PlanAssuranceGovernanceDecisionV2 | null;
31
+ }
32
+ export declare function planContract9AssuranceSealMutation(text: string, mutation: Contract9SealMutation, options?: Readonly<{
33
+ governance?: GovernanceRequestInput;
34
+ }>): Contract9AssuranceMutationResultV6;
35
+ //# sourceMappingURL=contract9-assurance-mutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract9-assurance-mutation.d.ts","sourceRoot":"","sources":["../../src/application/contract9-assurance-mutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAA6B,MAAM,uBAAuB,CAAC;AAGlG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAQ9F,OAAO,EAC+B,KAAK,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AACjH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7G,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,4BAA4B,CAAC;IACrD,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,yBAAyB,CAAC;QAAC,KAAK,EAAE,yBAAyB,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACnH,QAAQ,CAAC,UAAU,EAAE,iCAAiC,GAAG,IAAI,CAAC;CAC/D;AAyDD,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAC9F,OAAO,GAAE,QAAQ,CAAC;IAAE,UAAU,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAM,GAAG,kCAAkC,CAwErG"}
@@ -0,0 +1,146 @@
1
+ import { createUnifiedDiff } from "../editing/unified-diff.js";
2
+ import { sha256DigestUtf8 } from "../model/sha256.js";
3
+ import { applyTextEdits, normalizeTextEdits } from "../mutation/text-edits.js";
4
+ import { scanTemporalDeclarationBlocks, temporalScheduleBaseText } from "../temporal-schedule/source-lexical.js";
5
+ import { parseTemporalScheduleSource, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY } from "../temporal-schedule/source.js";
6
+ import { evaluateContract9PlanAssurance } from "./contract9-assurance.js";
7
+ import { milestoneAcceptanceBaseText } from "../milestone-acceptance/source.js";
8
+ import { validateTargetGrammar6Document } from "../semantic/target-validator.js";
9
+ import { TARGET_GRAMMAR_6_CAPABILITY } from "../parser/document-parser.js";
10
+ import { governanceMetadataFromDocument } from "../governance/source.js";
11
+ import { evaluatePlanAssuranceGovernance, normalizePlanAssuranceGovernanceRequest, planAssuranceGovernanceDiagnostics } from "../assurance/governance.js";
12
+ function ending(text) { return text.includes("\r\n") ? "\r\n" : "\n"; }
13
+ function failure(text, documentId, code, message, entityId) {
14
+ return Object.freeze({ schemaVersion: "Perttool.MutationResult.v6", ok: false, documentId, changed: false,
15
+ originalDigest: sha256DigestUtf8(text), updatedDigest: null, updatedText: null, diff: null, edits: Object.freeze([]),
16
+ diagnostics: Object.freeze([Object.freeze({ code, severity: "error", message, ...(entityId === undefined ? {} : { entityId }) })]),
17
+ diagnosticsTruncated: false, assuranceImpact: null, governance: null });
18
+ }
19
+ function sealText(result, reason, lineEnding) {
20
+ if (result.contractHash === null || result.computedBasisHash === null || result.exportedAssuranceHash === null)
21
+ throw new Error(`task ${result.taskId} has no sealable model-2 basis`);
22
+ return [`plan_seal ${result.taskId}:`, ` accepted_contract ${result.contractHash}`, ` accepted_basis ${result.computedBasisHash}`,
23
+ ...(result.computedInputs.length === 0 ? [] : [" accepted_inputs:", ...result.computedInputs.map((input) => ` ${input.predecessorTaskId} ${input.relationMode} ${input.assuranceHash}`)]),
24
+ ` reason ${JSON.stringify(reason)}`].join(lineEnding);
25
+ }
26
+ function enablementEdit(text, project) {
27
+ const before = project.lines.find(({ text: line }) => /^ (?:critical_epsilon|target_duration|time_zone|tzdb|calendar|workday) /u.test(line));
28
+ const offset = before?.start ?? project.lines.at(-1)?.end ?? project.header.end;
29
+ const eol = ending(text);
30
+ return Object.freeze({ startOffset: offset, endOffset: offset,
31
+ replacement: ` plan_assurance_model 1${eol} plan_assurance_hash_model 2${eol}` });
32
+ }
33
+ function declarationInsertion(text, blocks, records) {
34
+ const later = blocks.find(({ header }) => /^(?:task_outcome|assurance_receipt|work_event) /u.test(header.text));
35
+ const offset = later?.header.start ?? text.length;
36
+ const eol = ending(text);
37
+ const prefix = offset > 0 && !text.slice(0, offset).endsWith(`${eol}${eol}`) ? eol : "";
38
+ return Object.freeze({ startOffset: offset, endOffset: offset, replacement: `${prefix}${records.join(`${eol}${eol}`)}${eol}${eol}` });
39
+ }
40
+ function sealRecordEdits(block, result, reason, text) {
41
+ if (result.contractHash === null || result.computedBasisHash === null)
42
+ throw new Error(`task ${result.taskId} has no resealable model-2 basis`);
43
+ const field = (name) => block.lines.find(({ text: line }) => line.startsWith(` ${name} `));
44
+ const scalar = (line, replacement) => Object.freeze({ startOffset: line.start, endOffset: line.contentEnd, replacement });
45
+ const contract = field("accepted_contract");
46
+ const basis = field("accepted_basis");
47
+ const reasonLine = field("reason");
48
+ const edits = [scalar(contract, ` accepted_contract ${result.contractHash}`),
49
+ scalar(basis, ` accepted_basis ${result.computedBasisHash}`), scalar(reasonLine, ` reason ${JSON.stringify(reason)}`)];
50
+ const inputHeader = block.lines.find(({ text: line }) => line === " accepted_inputs:");
51
+ const nested = inputHeader === undefined ? [] : block.lines.filter((line) => line.start > inputHeader.start && line.start < reasonLine.start && line.text.startsWith(" "));
52
+ const inputText = result.computedInputs.length === 0 ? "" : [" accepted_inputs:", ...result.computedInputs.map((input) => ` ${input.predecessorTaskId} ${input.relationMode} ${input.assuranceHash}`)].join(ending(text)) + ending(text);
53
+ if (inputHeader === undefined && inputText !== "")
54
+ edits.push(Object.freeze({ startOffset: reasonLine.start, endOffset: reasonLine.start, replacement: inputText }));
55
+ if (inputHeader !== undefined)
56
+ edits.push(Object.freeze({ startOffset: inputHeader.start,
57
+ endOffset: nested.at(-1)?.end ?? inputHeader.end, replacement: inputText }));
58
+ return Object.freeze(edits);
59
+ }
60
+ export function planContract9AssuranceSealMutation(text, mutation, options = {}) {
61
+ const source = parseTemporalScheduleSource(text, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY);
62
+ if (!source.ok || source.model === null || source.grammarVersion !== 8)
63
+ return failure(text, source.documentId, "PTASSURE-301", "model-2 assurance mutation requires valid Grammar 8 source");
64
+ if (mutation.reason.length === 0)
65
+ return failure(text, source.documentId, "PTASSURE-301", "seal mutation requires a nonempty reason");
66
+ if (mutation.kind === "plan_assurance.reseal" &&
67
+ (mutation.taskIds.length === 0 || new Set(mutation.taskIds).size !== mutation.taskIds.length))
68
+ return failure(text, source.documentId, "PTASSURE-301", "reseal requires unique task IDs");
69
+ const blocks = scanTemporalDeclarationBlocks(text);
70
+ let preparedText = text;
71
+ const preEdits = [];
72
+ const before = evaluateContract9PlanAssurance(text);
73
+ if (before === null)
74
+ return failure(text, source.documentId, "PTASSURE-303", "model-2 assurance basis is unavailable");
75
+ if (before.modelVersion === null && before.hashModelVersion === null) {
76
+ const project = blocks.find(({ kind }) => kind === "project");
77
+ preEdits.push(enablementEdit(text, project));
78
+ preparedText = applyTextEdits(text, preEdits);
79
+ }
80
+ else if (before.modelVersion !== 1 || before.hashModelVersion !== 2) {
81
+ return failure(text, source.documentId, "PTASSURE-303", "Grammar 8 assurance mutation requires model 1 and hash model 2");
82
+ }
83
+ const evaluated = evaluateContract9PlanAssurance(preparedText);
84
+ if (evaluated === null || !evaluated.ok)
85
+ return failure(text, source.documentId, "PTASSURE-303", "model-2 assurance basis is unavailable");
86
+ const selectedIds = mutation.kind === "plan_assurance.seal"
87
+ ? evaluated.taskResults.filter(({ acceptedBasisHash }) => acceptedBasisHash === null).map(({ taskId }) => taskId)
88
+ : [...mutation.taskIds];
89
+ if (selectedIds.length === 0)
90
+ return failure(text, source.documentId, "PTASSURE-304", "seal mutation selects no task");
91
+ const byId = new Map(evaluated.taskResults.map((result) => [result.taskId, result]));
92
+ const preparedBlocks = scanTemporalDeclarationBlocks(preparedText);
93
+ const recordEdits = [];
94
+ const additions = [];
95
+ try {
96
+ for (const taskId of selectedIds) {
97
+ const result = byId.get(taskId);
98
+ if (result === undefined)
99
+ return failure(text, source.documentId, "PTASSURE-304", `task ${taskId} has no sealable current basis`, taskId);
100
+ const serialized = sealText(result, mutation.reason, ending(text));
101
+ const current = preparedBlocks.find(({ header, id }) => id === taskId && header.text.startsWith("plan_seal "));
102
+ if (mutation.kind === "plan_assurance.reseal" && current === undefined)
103
+ return failure(text, source.documentId, "PTASSURE-304", `task ${taskId} has no existing seal`, taskId);
104
+ if (current === undefined)
105
+ additions.push(serialized);
106
+ else
107
+ recordEdits.push(...sealRecordEdits(current, result, mutation.reason, preparedText));
108
+ }
109
+ }
110
+ catch (error) {
111
+ return failure(text, source.documentId, "PTASSURE-304", error instanceof Error ? error.message : "model-2 seal is unavailable");
112
+ }
113
+ if (additions.length > 0)
114
+ recordEdits.push(declarationInsertion(preparedText, preparedBlocks, additions));
115
+ const second = normalizeTextEdits(preparedText, recordEdits, "Contract 9 assurance seal mutation");
116
+ const candidate = applyTextEdits(preparedText, second);
117
+ const checked = parseTemporalScheduleSource(candidate, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY);
118
+ const after = evaluateContract9PlanAssurance(candidate);
119
+ if (!checked.ok || checked.model === null || after === null || !after.ok)
120
+ return failure(text, source.documentId, "PTASSURE-304", "model-2 seal candidate failed complete Grammar 8 validation");
121
+ const edits = normalizeTextEdits(text, [...preEdits, ...second.map((edit) => preEdits.length === 0 ? edit : Object.freeze({
122
+ ...edit, startOffset: edit.startOffset - preEdits[0].replacement.length * Number(edit.startOffset > preEdits[0].startOffset),
123
+ endOffset: edit.endOffset - preEdits[0].replacement.length * Number(edit.endOffset > preEdits[0].startOffset),
124
+ }))], "Contract 9 complete assurance seal mutation");
125
+ const updatedText = applyTextEdits(text, edits);
126
+ if (updatedText !== candidate)
127
+ throw new Error("Contract 9 seal edit composition changed candidate bytes");
128
+ const base = milestoneAcceptanceBaseText(temporalScheduleBaseText(text, blocks));
129
+ const validated = validateTargetGrammar6Document(base, TARGET_GRAMMAR_6_CAPABILITY).validatedDocument;
130
+ if (validated === null)
131
+ throw new Error("validated Grammar 8 base lost governance metadata");
132
+ const metadata = governanceMetadataFromDocument(validated.document);
133
+ const normalized = normalizePlanAssuranceGovernanceRequest(options.governance);
134
+ if (!normalized.ok)
135
+ return failure(text, source.documentId, "PTGOV-101", "invalid governance request");
136
+ const governance = evaluatePlanAssuranceGovernance({ sourceDigest: sha256DigestUtf8(text),
137
+ goalOwner: metadata.effective.goalOwner, goalDelegates: metadata.effective.goalDelegates,
138
+ dagOwner: metadata.effective.dagOwner, dagDelegates: metadata.effective.dagDelegates }, ["plan_assurance"], normalized.request);
139
+ const governanceDiagnostics = planAssuranceGovernanceDiagnostics(governance);
140
+ return Object.freeze({ schemaVersion: "Perttool.MutationResult.v6", ok: !governanceDiagnostics.some(({ severity }) => severity === "error"), documentId: source.documentId, changed: true,
141
+ originalDigest: sha256DigestUtf8(text), updatedDigest: sha256DigestUtf8(candidate), updatedText: candidate,
142
+ diff: createUnifiedDiff(text, candidate, { originalLabel: "original", updatedLabel: "candidate" }), edits,
143
+ diagnostics: governanceDiagnostics, diagnosticsTruncated: false,
144
+ assuranceImpact: Object.freeze({ before, after }), governance });
145
+ }
146
+ //# sourceMappingURL=contract9-assurance-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract9-assurance-mutation.js","sourceRoot":"","sources":["../../src/application/contract9-assurance-mutation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { PlanAssuranceEvaluationV1 } from "../assurance/types.js";
2
+ import type { PlanAssuranceProjectionV1 } from "../assurance/authority.js";
3
+ import type { Diagnostic } from "../model/diagnostics.js";
4
+ import type { PlanAssuranceHashKind, PlanAssuranceInspectionRequest } from "./target-assurance-inspection.js";
5
+ export declare function evaluateContract9PlanAssurance(text: string): PlanAssuranceEvaluationV1 | null;
6
+ export interface Contract9PlanAssuranceResultV2 {
7
+ readonly schemaVersion: "Perttool.PlanAssuranceResult.v2";
8
+ readonly cliContractVersion: 9;
9
+ readonly operation: PlanAssuranceInspectionRequest["operation"];
10
+ readonly ok: boolean;
11
+ readonly documentId: string | null;
12
+ readonly grammarVersion: number | null;
13
+ readonly sourceDigest: string;
14
+ readonly selectedTaskIds: readonly string[];
15
+ readonly taskId: string | null;
16
+ readonly kind: PlanAssuranceHashKind | null;
17
+ readonly selectedHash: string | null;
18
+ readonly assurance: PlanAssuranceProjectionV1 | null;
19
+ readonly diagnostics: readonly Diagnostic[];
20
+ readonly diagnosticsTruncated: boolean;
21
+ }
22
+ export declare function inspectContract9PlanAssurance(text: string, request: PlanAssuranceInspectionRequest): Contract9PlanAssuranceResultV2;
23
+ //# sourceMappingURL=contract9-assurance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract9-assurance.d.ts","sourceRoot":"","sources":["../../src/application/contract9-assurance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA4B,yBAAyB,EAA0C,MAAM,uBAAuB,CAAC;AACzI,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AA+C9G,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,GAAG,IAAI,CAW7F;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,aAAa,EAAE,iCAAiC,CAAC;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAqBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,GAAG,8BAA8B,CA+BnI"}
@@ -0,0 +1,114 @@
1
+ import { evaluatePlanAssurance } from "../assurance/evaluate.js";
2
+ import { projectPlanAssuranceAnalysis } from "../assurance/authority.js";
3
+ import { projectPlanAssuranceInput } from "../assurance/source.js";
4
+ import { sha256DigestUtf8 } from "../model/sha256.js";
5
+ import { inspectPlanAssurance as inspectContract8PlanAssurance } from "./contract8-milestone-acceptance.js";
6
+ import { milestoneAcceptanceBaseText } from "../milestone-acceptance/source.js";
7
+ import { TARGET_GRAMMAR_6_CAPABILITY } from "../parser/document-parser.js";
8
+ import { validateTargetGrammar6Document } from "../semantic/target-validator.js";
9
+ import { scanTemporalDeclarationBlocks, temporalScheduleBaseText } from "../temporal-schedule/source-lexical.js";
10
+ import { parseTemporalScheduleSource, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY } from "../temporal-schedule/source.js";
11
+ function gcd(left, right) {
12
+ let a = left;
13
+ let b = right;
14
+ while (b !== 0n)
15
+ [a, b] = [b, a % b];
16
+ return a;
17
+ }
18
+ function calendar(value) {
19
+ const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|[+-]\d{2}:\d{2})$/u.exec(value.sourceText);
20
+ if (match === null)
21
+ throw new Error("validated Grammar 8 task bound is not canonical date-time source");
22
+ const secondText = match[6];
23
+ const [whole, fraction = ""] = secondText.split(".");
24
+ const denominator = 10n ** BigInt(fraction.length);
25
+ const rawNumerator = BigInt(whole) * denominator + BigInt(fraction || "0");
26
+ const divisor = gcd(rawNumerator, denominator);
27
+ const numerator = rawNumerator / divisor;
28
+ const reducedDenominator = denominator / divisor;
29
+ const offset = match[7] === "Z" ? 0 : (match[7].startsWith("-") ? -1 : 1) *
30
+ (Number(match[7].slice(1, 3)) * 60 + Number(match[7].slice(4, 6)));
31
+ return Object.freeze({ kind: "date_time", year: Number(match[1]), month: Number(match[2]), day: Number(match[3]),
32
+ hour: Number(match[4]), minute: Number(match[5]), second: Object.freeze({ numerator: numerator.toString(), denominator: reducedDenominator.toString() }),
33
+ offsetMinutes: offset });
34
+ }
35
+ function bound(bounds, taskId, event, direction) {
36
+ const value = bounds.find((item) => item.entityId === taskId && item.event === event && item.direction === direction);
37
+ return value === undefined ? null : calendar(value.value);
38
+ }
39
+ function contractV2(contract, bounds) {
40
+ const { notBefore: _notBefore, ...retained } = contract;
41
+ return Object.freeze({ ...retained, model: "Perttool.TaskPlanContract.v2", when: Object.freeze({
42
+ startEarliest: bound(bounds, contract.taskId, "start", "earliest"),
43
+ startLatest: bound(bounds, contract.taskId, "start", "latest"),
44
+ finishEarliest: bound(bounds, contract.taskId, "finish", "earliest"),
45
+ finishLatest: bound(bounds, contract.taskId, "finish", "latest"),
46
+ }) });
47
+ }
48
+ export function evaluateContract9PlanAssurance(text) {
49
+ const temporal = parseTemporalScheduleSource(text, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY);
50
+ if (!temporal.ok || temporal.model === null || temporal.grammarVersion !== 8)
51
+ return null;
52
+ const grammar7 = temporalScheduleBaseText(text, scanTemporalDeclarationBlocks(text));
53
+ const grammar6 = milestoneAcceptanceBaseText(grammar7);
54
+ const checked = validateTargetGrammar6Document(grammar6, TARGET_GRAMMAR_6_CAPABILITY);
55
+ if (!checked.ok || checked.validatedDocument === null)
56
+ return null;
57
+ const input = projectPlanAssuranceInput(checked.validatedDocument);
58
+ const tasks = input.tasks.map((task) => Object.freeze({ ...task,
59
+ contract: contractV2(task.contract, temporal.model.taskBounds) }));
60
+ return evaluatePlanAssurance(Object.freeze({ ...input, tasks: Object.freeze(tasks) }));
61
+ }
62
+ function selectedProjection(value, ids) {
63
+ if (ids.length === 0)
64
+ return value;
65
+ const selected = new Set(ids);
66
+ const filter = (values) => Object.freeze(values.filter((id) => selected.has(id)));
67
+ const actions = Object.freeze(value.requiredActions.flatMap((action) => {
68
+ const affectedTaskIds = filter(action.affectedTaskIds);
69
+ return affectedTaskIds.length === 0 ? [] : [Object.freeze({ ...action, affectedTaskIds })];
70
+ }));
71
+ return Object.freeze({ ...value, taskResults: Object.freeze(value.taskResults.filter(({ taskId }) => selected.has(taskId))),
72
+ directMismatchTaskIds: filter(value.directMismatchTaskIds), inheritedMismatchTaskIds: filter(value.inheritedMismatchTaskIds),
73
+ replanRequiredTaskIds: filter(value.replanRequiredTaskIds), activeAttentionRequiredTaskIds: filter(value.activeAttentionRequiredTaskIds),
74
+ requiredActions: actions });
75
+ }
76
+ function inspectionDiagnostic(code, message, taskId) {
77
+ return Object.freeze({ code, severity: "error", message, entityId: taskId,
78
+ helpTopic: "plan-assurance", data: Object.freeze({ task_id: taskId }) });
79
+ }
80
+ export function inspectContract9PlanAssurance(text, request) {
81
+ const temporal = parseTemporalScheduleSource(text, TEMPORAL_SCHEDULE_SOURCE_CAPABILITY);
82
+ if (temporal.grammarVersion !== 8) {
83
+ const legacy = inspectContract8PlanAssurance(text, request, TARGET_GRAMMAR_6_CAPABILITY);
84
+ return Object.freeze({ ...legacy, schemaVersion: "Perttool.PlanAssuranceResult.v2", cliContractVersion: 9 });
85
+ }
86
+ const evaluation = evaluateContract9PlanAssurance(text);
87
+ const common = { schemaVersion: "Perttool.PlanAssuranceResult.v2", cliContractVersion: 9,
88
+ operation: request.operation, documentId: temporal.documentId, grammarVersion: 8, sourceDigest: sha256DigestUtf8(text) };
89
+ if (evaluation === null)
90
+ return Object.freeze({ ...common, ok: false, selectedTaskIds: Object.freeze([]), taskId: null,
91
+ kind: null, selectedHash: null, assurance: null, diagnostics: Object.freeze(temporal.diagnostics),
92
+ diagnosticsTruncated: temporal.diagnosticsTruncated });
93
+ const projected = projectPlanAssuranceAnalysis(evaluation, []).assurance;
94
+ const requestedIds = request.operation === "plan-assurance.show" ? [...new Set(request.taskIds ?? [])] : [request.taskId];
95
+ const known = new Set(projected.taskResults.map(({ taskId }) => taskId));
96
+ const unknown = requestedIds.find((id) => !known.has(id));
97
+ if (unknown !== undefined)
98
+ return Object.freeze({ ...common, ok: false, selectedTaskIds: Object.freeze(requestedIds),
99
+ taskId: request.operation === "plan-assurance.hash" ? request.taskId : null,
100
+ kind: request.operation === "plan-assurance.hash" ? request.kind : null, selectedHash: null, assurance: null,
101
+ diagnostics: Object.freeze([inspectionDiagnostic("PTASSURE-302", `task ${unknown} does not exist`, unknown)]), diagnosticsTruncated: false });
102
+ const selectedTaskIds = Object.freeze(projected.taskResults.filter(({ taskId }) => requestedIds.length === 0 || requestedIds.includes(taskId)).map(({ taskId }) => taskId));
103
+ const assurance = selectedProjection(projected, selectedTaskIds);
104
+ if (request.operation === "plan-assurance.show")
105
+ return Object.freeze({ ...common, ok: evaluation.ok, selectedTaskIds,
106
+ taskId: null, kind: null, selectedHash: null, assurance, diagnostics: Object.freeze([]), diagnosticsTruncated: false });
107
+ const task = assurance.taskResults[0];
108
+ const selectedHash = request.kind === "contract" ? task.contractHash
109
+ : request.kind === "computed-basis" ? task.computedBasisHash : task.exportedAssuranceHash;
110
+ const diagnostics = selectedHash === null ? Object.freeze([inspectionDiagnostic("PTASSURE-203", `task ${request.taskId} has no available ${request.kind} hash`, request.taskId)]) : Object.freeze([]);
111
+ return Object.freeze({ ...common, ok: selectedHash !== null, selectedTaskIds, taskId: request.taskId,
112
+ kind: request.kind, selectedHash, assurance, diagnostics, diagnosticsTruncated: false });
113
+ }
114
+ //# sourceMappingURL=contract9-assurance.js.map