perttool 0.10.6 → 0.11.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 (241) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +274 -609
  3. package/dist/application/cli-facade.d.ts +4 -10
  4. package/dist/application/cli-facade.d.ts.map +1 -1
  5. package/dist/application/cli-facade.js +1 -1
  6. package/dist/application/cli-facade.js.map +1 -1
  7. package/dist/application/contract10-candidate.d.ts +33 -0
  8. package/dist/application/contract10-candidate.d.ts.map +1 -0
  9. package/dist/application/contract10-candidate.js +38 -0
  10. package/dist/application/contract10-candidate.js.map +1 -0
  11. package/dist/application/contract10-planning-history.d.ts +4 -0
  12. package/dist/application/contract10-planning-history.d.ts.map +1 -0
  13. package/dist/application/contract10-planning-history.js +28 -0
  14. package/dist/application/contract10-planning-history.js.map +1 -0
  15. package/dist/application/contract10-planning.d.ts +61 -0
  16. package/dist/application/contract10-planning.d.ts.map +1 -0
  17. package/dist/application/contract10-planning.js +165 -0
  18. package/dist/application/contract10-planning.js.map +1 -0
  19. package/dist/application/contract10-runtime.d.ts +185 -0
  20. package/dist/application/contract10-runtime.d.ts.map +1 -0
  21. package/dist/application/contract10-runtime.js +236 -0
  22. package/dist/application/contract10-runtime.js.map +1 -0
  23. package/dist/application/contract8-milestone-acceptance.d.ts +6 -22
  24. package/dist/application/contract8-milestone-acceptance.d.ts.map +1 -1
  25. package/dist/application/contract8-milestone-acceptance.js +21 -99
  26. package/dist/application/contract8-milestone-acceptance.js.map +1 -1
  27. package/dist/application/contract8-milestone-read.d.ts +25 -0
  28. package/dist/application/contract8-milestone-read.d.ts.map +1 -0
  29. package/dist/application/contract8-milestone-read.js +111 -0
  30. package/dist/application/contract8-milestone-read.js.map +1 -0
  31. package/dist/application/contract9-assurance-evaluate.d.ts +3 -0
  32. package/dist/application/contract9-assurance-evaluate.d.ts.map +1 -0
  33. package/dist/application/contract9-assurance-evaluate.js +75 -0
  34. package/dist/application/contract9-assurance-evaluate.js.map +1 -0
  35. package/dist/application/contract9-assurance.d.ts +1 -2
  36. package/dist/application/contract9-assurance.d.ts.map +1 -1
  37. package/dist/application/contract9-assurance.js +2 -56
  38. package/dist/application/contract9-assurance.js.map +1 -1
  39. package/dist/application/contract9-candidate.d.ts +8 -0
  40. package/dist/application/contract9-candidate.d.ts.map +1 -1
  41. package/dist/application/contract9-candidate.js +36 -11
  42. package/dist/application/contract9-candidate.js.map +1 -1
  43. package/dist/application/contract9-mixed-mutation.d.ts +3 -0
  44. package/dist/application/contract9-mixed-mutation.d.ts.map +1 -1
  45. package/dist/application/contract9-mixed-mutation.js +5 -4
  46. package/dist/application/contract9-mixed-mutation.js.map +1 -1
  47. package/dist/application/contract9-temporal.js +1 -1
  48. package/dist/application/contract9-temporal.js.map +1 -1
  49. package/dist/application/target-actuals-analysis.d.ts.map +1 -1
  50. package/dist/application/target-actuals-analysis.js +10 -6
  51. package/dist/application/target-actuals-analysis.js.map +1 -1
  52. package/dist/application/target-temporal-analysis.d.ts +1 -0
  53. package/dist/application/target-temporal-analysis.d.ts.map +1 -1
  54. package/dist/application/target-temporal-analysis.js +5 -1
  55. package/dist/application/target-temporal-analysis.js.map +1 -1
  56. package/dist/cli.js +761 -87
  57. package/dist/cli.js.map +1 -1
  58. package/dist/command/contract10-discovery.d.ts +17 -0
  59. package/dist/command/contract10-discovery.d.ts.map +1 -0
  60. package/dist/command/contract10-discovery.js +304 -0
  61. package/dist/command/contract10-discovery.js.map +1 -0
  62. package/dist/command/contract10-usage.d.ts +24 -0
  63. package/dist/command/contract10-usage.d.ts.map +1 -0
  64. package/dist/command/contract10-usage.js +49 -0
  65. package/dist/command/contract10-usage.js.map +1 -0
  66. package/dist/core/index.d.ts +11 -2
  67. package/dist/core/index.d.ts.map +1 -1
  68. package/dist/core/index.js +3 -1
  69. package/dist/core/index.js.map +1 -1
  70. package/dist/help/assurance-guide.js +1 -1
  71. package/dist/help/assurance-guide.js.map +1 -1
  72. package/dist/help/contract10-guide.d.ts +10 -0
  73. package/dist/help/contract10-guide.d.ts.map +1 -0
  74. package/dist/help/contract10-guide.js +244 -0
  75. package/dist/help/contract10-guide.js.map +1 -0
  76. package/dist/index.d.ts +18 -8
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +8 -5
  79. package/dist/index.js.map +1 -1
  80. package/dist/milestone-acceptance/advance.d.ts +9 -0
  81. package/dist/milestone-acceptance/advance.d.ts.map +1 -1
  82. package/dist/milestone-acceptance/advance.js +29 -2
  83. package/dist/milestone-acceptance/advance.js.map +1 -1
  84. package/dist/milestone-acceptance/mutation.d.ts +2 -0
  85. package/dist/milestone-acceptance/mutation.d.ts.map +1 -1
  86. package/dist/milestone-acceptance/mutation.js +48 -12
  87. package/dist/milestone-acceptance/mutation.js.map +1 -1
  88. package/dist/model/source-result.d.ts +12 -0
  89. package/dist/model/source-result.d.ts.map +1 -0
  90. package/dist/model/source-result.js +16 -0
  91. package/dist/model/source-result.js.map +1 -0
  92. package/dist/mutation/advance-deletion.d.ts +1 -0
  93. package/dist/mutation/advance-deletion.d.ts.map +1 -1
  94. package/dist/mutation/advance-deletion.js +4 -1
  95. package/dist/mutation/advance-deletion.js.map +1 -1
  96. package/dist/mutation/validated-source.d.ts +30 -0
  97. package/dist/mutation/validated-source.d.ts.map +1 -0
  98. package/dist/mutation/validated-source.js +58 -0
  99. package/dist/mutation/validated-source.js.map +1 -0
  100. package/dist/node/planning-token-store.d.ts +3 -0
  101. package/dist/node/planning-token-store.d.ts.map +1 -0
  102. package/dist/node/planning-token-store.js +90 -0
  103. package/dist/node/planning-token-store.js.map +1 -0
  104. package/dist/parser/document-parser.d.ts +1 -0
  105. package/dist/parser/document-parser.d.ts.map +1 -1
  106. package/dist/parser/document-parser.js +1 -1
  107. package/dist/parser/document-parser.js.map +1 -1
  108. package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
  109. package/dist/planning-pool/advance.d.ts +10 -0
  110. package/dist/planning-pool/advance.d.ts.map +1 -0
  111. package/dist/planning-pool/advance.js +158 -0
  112. package/dist/planning-pool/advance.js.map +1 -0
  113. package/dist/planning-pool/format.d.ts +12 -0
  114. package/dist/planning-pool/format.d.ts.map +1 -0
  115. package/dist/planning-pool/format.js +199 -0
  116. package/dist/planning-pool/format.js.map +1 -0
  117. package/dist/planning-pool/history-guard.d.ts +19 -0
  118. package/dist/planning-pool/history-guard.d.ts.map +1 -0
  119. package/dist/planning-pool/history-guard.js +123 -0
  120. package/dist/planning-pool/history-guard.js.map +1 -0
  121. package/dist/planning-pool/history-types.d.ts +174 -0
  122. package/dist/planning-pool/history-types.d.ts.map +1 -0
  123. package/dist/planning-pool/history-types.js +2 -0
  124. package/dist/planning-pool/history-types.js.map +1 -0
  125. package/dist/planning-pool/history.d.ts +11 -0
  126. package/dist/planning-pool/history.d.ts.map +1 -0
  127. package/dist/planning-pool/history.js +977 -0
  128. package/dist/planning-pool/history.js.map +1 -0
  129. package/dist/planning-pool/human.d.ts +9 -0
  130. package/dist/planning-pool/human.d.ts.map +1 -0
  131. package/dist/planning-pool/human.js +305 -0
  132. package/dist/planning-pool/human.js.map +1 -0
  133. package/dist/planning-pool/intent-types.d.ts +76 -0
  134. package/dist/planning-pool/intent-types.d.ts.map +1 -0
  135. package/dist/planning-pool/intent-types.js +2 -0
  136. package/dist/planning-pool/intent-types.js.map +1 -0
  137. package/dist/planning-pool/intent.d.ts +7 -0
  138. package/dist/planning-pool/intent.d.ts.map +1 -0
  139. package/dist/planning-pool/intent.js +590 -0
  140. package/dist/planning-pool/intent.js.map +1 -0
  141. package/dist/planning-pool/observation-types.d.ts +143 -0
  142. package/dist/planning-pool/observation-types.d.ts.map +1 -0
  143. package/dist/planning-pool/observation-types.js +2 -0
  144. package/dist/planning-pool/observation-types.js.map +1 -0
  145. package/dist/planning-pool/observation.d.ts +8 -0
  146. package/dist/planning-pool/observation.d.ts.map +1 -0
  147. package/dist/planning-pool/observation.js +582 -0
  148. package/dist/planning-pool/observation.js.map +1 -0
  149. package/dist/planning-pool/projection.d.ts +28 -0
  150. package/dist/planning-pool/projection.d.ts.map +1 -0
  151. package/dist/planning-pool/projection.js +148 -0
  152. package/dist/planning-pool/projection.js.map +1 -0
  153. package/dist/planning-pool/public-core.d.ts +32 -0
  154. package/dist/planning-pool/public-core.d.ts.map +1 -0
  155. package/dist/planning-pool/public-core.js +122 -0
  156. package/dist/planning-pool/public-core.js.map +1 -0
  157. package/dist/planning-pool/reshape-normalize.d.ts +15 -0
  158. package/dist/planning-pool/reshape-normalize.d.ts.map +1 -0
  159. package/dist/planning-pool/reshape-normalize.js +688 -0
  160. package/dist/planning-pool/reshape-normalize.js.map +1 -0
  161. package/dist/planning-pool/reshape-token.d.ts +20 -0
  162. package/dist/planning-pool/reshape-token.d.ts.map +1 -0
  163. package/dist/planning-pool/reshape-token.js +193 -0
  164. package/dist/planning-pool/reshape-token.js.map +1 -0
  165. package/dist/planning-pool/reshape-types.d.ts +183 -0
  166. package/dist/planning-pool/reshape-types.d.ts.map +1 -0
  167. package/dist/planning-pool/reshape-types.js +2 -0
  168. package/dist/planning-pool/reshape-types.js.map +1 -0
  169. package/dist/planning-pool/reshape.d.ts +13 -0
  170. package/dist/planning-pool/reshape.d.ts.map +1 -0
  171. package/dist/planning-pool/reshape.js +1434 -0
  172. package/dist/planning-pool/reshape.js.map +1 -0
  173. package/dist/planning-pool/source-lexical.d.ts +30 -0
  174. package/dist/planning-pool/source-lexical.d.ts.map +1 -0
  175. package/dist/planning-pool/source-lexical.js +158 -0
  176. package/dist/planning-pool/source-lexical.js.map +1 -0
  177. package/dist/planning-pool/source-types.d.ts +169 -0
  178. package/dist/planning-pool/source-types.d.ts.map +1 -0
  179. package/dist/planning-pool/source-types.js +2 -0
  180. package/dist/planning-pool/source-types.js.map +1 -0
  181. package/dist/planning-pool/source-values.d.ts +16 -0
  182. package/dist/planning-pool/source-values.d.ts.map +1 -0
  183. package/dist/planning-pool/source-values.js +120 -0
  184. package/dist/planning-pool/source-values.js.map +1 -0
  185. package/dist/planning-pool/source.d.ts +18 -0
  186. package/dist/planning-pool/source.d.ts.map +1 -0
  187. package/dist/planning-pool/source.js +811 -0
  188. package/dist/planning-pool/source.js.map +1 -0
  189. package/dist/planning-pool/window-types.d.ts +133 -0
  190. package/dist/planning-pool/window-types.d.ts.map +1 -0
  191. package/dist/planning-pool/window-types.js +2 -0
  192. package/dist/planning-pool/window-types.js.map +1 -0
  193. package/dist/planning-pool/window.d.ts +6 -0
  194. package/dist/planning-pool/window.d.ts.map +1 -0
  195. package/dist/planning-pool/window.js +625 -0
  196. package/dist/planning-pool/window.js.map +1 -0
  197. package/dist/schema/registry.d.ts +1 -1
  198. package/dist/schema/registry.d.ts.map +1 -1
  199. package/dist/schema/registry.js +17 -3
  200. package/dist/schema/registry.js.map +1 -1
  201. package/dist/temporal-schedule/format.d.ts.map +1 -1
  202. package/dist/temporal-schedule/format.js +4 -54
  203. package/dist/temporal-schedule/format.js.map +1 -1
  204. package/dist/temporal-schedule/source-lexical.d.ts +9 -0
  205. package/dist/temporal-schedule/source-lexical.d.ts.map +1 -1
  206. package/dist/temporal-schedule/source-lexical.js +21 -10
  207. package/dist/temporal-schedule/source-lexical.js.map +1 -1
  208. package/dist/temporal-schedule/source.d.ts.map +1 -1
  209. package/dist/temporal-schedule/source.js +3 -13
  210. package/dist/temporal-schedule/source.js.map +1 -1
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.js +1 -1
  213. package/package.json +1 -1
  214. package/schemas/{Perttool.AdvanceResult.v3.schema.json → Perttool.AdvanceResult.v4.schema.json} +42 -4
  215. package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
  216. package/schemas/Perttool.AnalysisResult.v7.schema.json +1 -1
  217. package/schemas/Perttool.CheckResult.v6.schema.json +1 -1
  218. package/schemas/Perttool.CliError.v1.schema.json +1 -1
  219. package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
  220. package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
  221. package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
  222. package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
  223. package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +1 -1
  224. package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
  225. package/schemas/Perttool.InitResult.v1.schema.json +1 -1
  226. package/schemas/Perttool.MilestoneAcceptanceMigrationResult.v1.schema.json +1 -1
  227. package/schemas/Perttool.MilestoneAcceptanceResult.v1.schema.json +1 -1
  228. package/schemas/Perttool.MutationResult.v6.schema.json +1 -1
  229. package/schemas/Perttool.NextResult.v8.schema.json +7 -4
  230. package/schemas/Perttool.PlanAssuranceResult.v2.schema.json +1 -1
  231. package/schemas/Perttool.PlanningMutationResult.v1.schema.json +567 -0
  232. package/schemas/Perttool.PlanningObservationRequest.v1.schema.json +6 -0
  233. package/schemas/Perttool.PlanningPoolResult.v1.schema.json +469 -0
  234. package/schemas/Perttool.PlanningReshapePreflightResult.v1.schema.json +906 -0
  235. package/schemas/Perttool.PlanningReshapeRequest.v1.schema.json +19 -0
  236. package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
  237. package/schemas/Perttool.ProjectResult.v5.schema.json +1 -1
  238. package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
  239. package/schemas/{Perttool.UnitMigrationResult.v4.schema.json → Perttool.UnitMigrationResult.v5.schema.json} +42 -17
  240. package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
  241. package/schemas/Perttool.WindowMutationRequest.v1.schema.json +6 -0
package/README.md CHANGED
@@ -1,241 +1,45 @@
1
1
  # perttool
2
2
 
3
- `perttool` is a local CLI for keeping PERT/CPM plans in reviewable text files.
4
- It validates an Activity-on-Arrow plan, calculates precedence and
5
- resource-constrained schedules, recommends the next task, and applies
6
- source-preserving changes through preview-first commands.
7
-
8
- Version `0.6.0` implements Grammar 5 and CLI Contract 6,
9
- including explicit task work events, lifecycle commands, read-only Git
10
- history, observed velocity, AnalysisResult v4, and NextResult v5. It adds
11
- complete Draft 2020-12 artifacts for every active Contract 6 result and the
12
- public OverrideDecision result, selectable full and outline schema views,
13
- Git 2.54 UTC compatibility, and scope-bound human-readable confirmation
14
- guidance. It warns when an owner-confirmation assertion is supplied for a
15
- governance-not-applicable candidate and when a governed preview already
16
- carries one. It also protects destructive in-place `dag advance` writes with
17
- exact `HEAD` and stage-0 evidence, returns `Perttool.AdvanceResult.v1`, and
18
- keeps preview, separate output, and written candidates repository-clean and
19
- byte-identical. It remains available as the exact Contract 6 compatibility
20
- pin `perttool@0.6.0`.
21
- Beta releases may contain breaking CLI or schema changes.
22
-
23
- Version `0.7.0` beta atomically activates Grammar 6 and CLI Contract 7
24
- conditional plan assurance. It exposes 44 commands, 20 root schemas,
25
- `Perttool.PlanAssuranceResult.v1`, assurance-aware Check/Project/Analysis/Next/
26
- Mutation/Advance results, `Perttool.GovernanceDecision.v2`, and Mermaid
27
- semantic profile 2. Its package and CLI identity is `0.7.0`. At its publication
28
- boundary, this release does not move npm `latest` from Contract 6 `0.6.0`;
29
- one separately authorized post-publication operation later made
30
- `beta=latest=0.7.0`. These Contract 6 and Contract 7 releases require Node.js
31
- 22 or later.
32
- Version `0.7.1` is a backward-compatible Contract 7 patch that corrects the
33
- installed Guide, command Help examples, and diagnostic navigation. It retains
34
- all 44 command paths, 20 root schemas, result and payload identities,
35
- package-root exports, and authority policies. Its beta publication does not
36
- move npm `latest`; one separately authorized post-publication operation later
37
- made `beta=latest=0.7.1`. Version `0.7.0` remains the exact rollback pin.
38
- The complete-schema Contract 6 artifact remains available by pinning `0.5.2`,
39
- and the first machine-schema Contract 6 artifact remains available by pinning
40
- `0.5.1`; Contract 5, Contract 4, and Contract 3 remain available by pinning
41
- `0.4.0`, `0.3.0`, and `0.2.0`, respectively. npm has no maintained `alpha`
42
- dist-tag; historical `0.1.0-alpha.2` remains available by exact pin.
43
-
44
- Version `0.8.0` adds the public `perttool/core` and `perttool/node` subpaths,
45
- the read-only `dag history` command, `Perttool.HistoricalGraphResult.v1`, and
46
- the declaration-identity correction without changing Grammar 6 or CLI
47
- Contract 7. It exposes 45 commands, 21 root schemas, 122 reference-identical
48
- root and Node runtime exports, and 45 portable Core runtime exports. Its beta
49
- publication moved only npm `beta` and left independently managed
50
- `latest=0.7.1`; one separately authorized post-acceptance operation later made
51
- `beta=latest=0.8.0`. Use `0.7.1` as the exact rollback pin.
52
- The repository-only VSIX also adds separately negotiated historical snapshot,
53
- proved-lineage, and timeline views for trusted local Git workspaces plus
54
- verified read-only immutable source navigation. Those adapter results are not
55
- CLI schemas or public package exports, and no public VSIX release is selected.
56
- The private DAG presentation additionally bundles a deterministic left-to-right
57
- Dagre layout, one-step historical defaults, bounded zoom/fit/scroll/pan, and a
58
- separately negotiated exact current-frontier and NextResult v6 start-authority
59
- focus result. Compact `Mnn`/`Tnn`/`Gnn` graph labels link to original-identity
60
- details, and exact residual, resource-remaining, and task-time summaries keep
61
- qualified Point forecasts distinct. Layout never becomes project semantics.
62
-
63
- Version `0.8.1` is a backward-compatible Contract 7 patch for `dag advance`.
64
- It preserves assurance frontier receipts when all terminal work events belong
65
- to removed tasks, while retaining the `0.8.0` command, schema, package-export,
66
- and authority boundaries. It remains available by exact pin; use `0.8.0` as
67
- the prior Contract 7 rollback pin.
68
-
69
- Version `0.9.0` is the published Grammar 7 and CLI Contract 8
70
- milestone-acceptance beta. It exposes 53
71
- commands, 23 root schemas, 129 root and Node runtime exports,
72
- `Perttool.CheckResult.v5`,
73
- `Perttool.AnalysisResult.v6`, `Perttool.NextResult.v7`,
74
- `Perttool.MutationResult.v5`, `Perttool.AdvanceResult.v3`, committed migration,
75
- criterion-set replacement, caller-asserted receipts, and acceptance-aware
76
- canonical advance. Its accepted release commit, annotated tag, GitHub
77
- prerelease, and npm artifact agree, and npm reports the pre-publication
78
- baseline `latest=beta=0.10.4` with no `alpha`. Version `0.10.0` is the
79
- published Grammar 8 and CLI Contract 9 beta. The compatible `0.10.5` Issue #23
80
- assurance-recovery patch is published. Source is prepared for the
81
- compatible `0.10.6` Issue #36 milestone-acceptance delegate patch. Version
82
- `0.8.1` remains the
83
- exact Grammar 6 and CLI Contract 7 rollback pin.
84
-
85
- Version `0.9.1` is the durably accepted compatible Contract 8 patch for
86
- `ACT-003` and GitHub Issue #8. It makes declared velocity observation use the
87
- exact current operand, including a just-written uncommitted finish, while
88
- keeping Git-recorded evidence bound to the selected first-parent revision. It
89
- retains all 53 commands, 23 root schemas, 129 root and Node exports, 45 Core
90
- exports, result and schema identities, and authority. Release commit, peeled
91
- tag, GitHub prerelease, npm artifact, and installed regression agree; Issue #8
92
- is closed.
93
-
94
- Version `0.9.2` is the durably accepted compatible Contract 8 emergency patch
95
- for `ANALYSIS-001` and GitHub Issue #15. It keeps valid Point plans without a
96
- declared velocity Point-valued through `dag analyze` and `dag next`, leaves
97
- velocity forecasts null, and reports calendar conversion as unavailable
98
- without inventing a rate. It retains all public identities and authority;
99
- Issue #15 is closed, and `0.9.2` remains the exact rollback pin for `0.9.3`.
100
-
101
- Version `0.9.3` is the published compatible Contract 8 emergency patch for
102
- GitHub Issues #14, #16, and #17. It restores Grammar 7 `plan-assurance
103
- show|hash`, composes acceptance-aware terminal deletions without weakening the
104
- shared edit guard, and preserves complete criterion-set/receipt evidence for
105
- retained reached milestones. It retains all public identities and authority.
106
- The accepted release commit, annotated tag, GitHub prerelease, and npm
107
- artifact agree; at its publication npm reported `beta=0.9.3`,
108
- `latest=0.9.0`, and no `alpha`.
109
- Issues #14, #16, and #17 are closed with release evidence. Plan advance,
110
- public VSIX publication, and unrelated work remain separate.
111
-
112
- Version `0.9.4` is the compatible Contract 8 emergency patch for GitHub Issue
113
- #19. It is published and preserves criterion sets and receipts for every milestone retained by
114
- `dag advance`, validates the complete final candidate before history or
115
- persistence decisions, and projects deterministic candidate diagnostics. It
116
- also makes pinned jscpd duplicate and Lizard complexity ratchets part of the
117
- repository and CI static-analysis gate. Grammar 7, CLI Contract 8, all 53
118
- commands, 23 root schemas, 129 root and Node exports, 45 Core exports, public
119
- authority, and force semantics remain unchanged. Its release commit, peeled
120
- tag, Node.js 22 and 24 CI, GitHub prerelease, npm artifact, and common
121
- SHA-256 `63a12ddf...d6fe53b` agree. npm reports `beta=0.9.4`,
122
- `latest=0.9.0`, and no `alpha`; Issue #19 is closed with release evidence.
123
- The completed release plan was migrated with committed provenance, given six
124
- artifact-bound criteria and receipts, and canonically advanced. Its residual
125
- retains only accepted reached `RELEASE_094_ACCEPTED` and has no diagnostic or
126
- task. Version `0.9.3` is the exact rollback pin.
127
-
128
- The private adapters now project that same Contract 8 acceptance model without
129
- adding write authority. The LSP negotiates a separate version-bound milestone
130
- acceptance result, the VSIX presents criteria, blockers, and receipt provenance
131
- with verified source navigation, and the MCP check, analysis, and Next tools
132
- retain acceptance in their unchanged wire v1 envelopes. The public npm package
133
- still excludes all three private adapter workspaces.
134
-
135
- The complete milestone-acceptance cross-surface gate passes. All milestone criteria and
136
- receipts were separately owner-confirmed, and the completed plan was
137
- canonically advanced from its committed pre-advance snapshot. The residual
138
- plan has no diagnostics, remaining task, recommendation, or startable task.
139
- Candidate acceptance, publication, and remote writes remain separate.
140
-
141
- ## Run without installing
142
-
143
- After beta publication, use `npx` for an occasional Contract 8 invocation and
144
- select the version explicitly:
3
+ `perttool` is a local command-line tool for keeping PERT/CPM plans in
4
+ reviewable text files. It validates plans, calculates precedence and
5
+ resource-constrained schedules, recommends the next task, and previews every
6
+ change before writing it.
145
7
 
146
- ```sh
147
- npx --yes --package=perttool@0.9.4 -- perttool --version
148
- npx --yes --package=perttool@0.9.4 -- perttool document check PLAN.pert
149
- npx --yes --package=perttool@0.9.4 -- perttool dag next PLAN.pert --format json
150
- npx --yes --package=perttool@0.9.4 -- perttool plan-assurance show PLAN.pert --format json
151
- ```
152
-
153
- The equivalent explicit `npm exec` form is:
154
-
155
- ```sh
156
- npm exec --yes --package=perttool@0.9.4 -- perttool --version
157
- npm exec --yes --package=perttool@0.9.4 -- perttool document check PLAN.pert
158
- npm exec --yes --package=perttool@0.9.4 -- perttool dag analyze PLAN.pert
159
- npm exec --yes --package=perttool@0.9.4 -- perttool plan-assurance hash PLAN.pert WORK --kind contract
160
- ```
161
-
162
- `npx` and `npm exec` may download the selected package version into the npm
163
- cache. Pinning `0.6.0` selects Contract 6 and omits Grammar 6 assurance;
164
- `0.4.0` selects Contract 5, `0.3.0` selects Contract 4, and `0.2.0` selects
165
- Contract 3.
8
+ The recommended npm `latest` release is `0.10.5`; npm `beta` is the compatible
9
+ `0.10.6` Issue #36 correction. Both require Node.js 22 or later and use Grammar
10
+ 8 and CLI Contract 9. The repository source is prepared as `0.11.0` with
11
+ Grammar 9 and CLI Contract 10 for the Work-centered Planning Pool; candidate
12
+ acceptance and publication remain separate.
166
13
 
167
14
  ## Install
168
15
 
169
- Install the Contract 8 CLI globally by exact version when it is used
170
- regularly:
16
+ Install the current release for your user-managed Node.js environment:
171
17
 
172
18
  ```sh
173
- npm install --global perttool@0.9.4
19
+ npm install --global perttool@latest
174
20
  perttool --version
175
21
  ```
176
22
 
177
- The accepted `0.9.0` release was separately promoted to both public tags. The
178
- `0.9.4` publication changes only npm `beta`; until an independent promotion is
179
- authorized, an unqualified global installation continues to select `0.9.0`.
180
- The exact `0.9.4` pin is the reproducible form for the Issue #19 correction.
181
- Version `0.9.3` remains the rollback pin for the Issues #14, #16, and #17
182
- corrections.
183
- Contract 6 remains available by exact pinning `perttool@0.6.0`; the pre-schema
184
- Contract 6 artifact remains available as
185
- `perttool@0.5.0`. Contract 5,
186
- Contract 4, and Contract 3 remain available as exact pins
187
- `perttool@0.4.0`, `perttool@0.3.0`, and `perttool@0.2.0`. The retired alpha
188
- preview remains installable only as the exact pin
189
- `perttool@0.1.0-alpha.2`.
190
-
191
- ## Library subpaths in `0.8.0`
192
-
193
- Version `0.8.0` provides two additive library boundaries:
194
-
195
- ```js
196
- import {
197
- analyzeDocumentSnapshot,
198
- createDocumentSession,
199
- createDocumentSnapshot,
200
- documentOffsetToPosition,
201
- documentPositionToOffset,
202
- formatDocument,
203
- getGuide,
204
- parseDocument,
205
- validateDocument,
206
- } from "perttool/core";
207
- import {
208
- getJsonSchemaCatalog,
209
- readDocumentFile,
210
- } from "perttool/node";
211
- ```
23
+ Run it without installing:
212
24
 
213
- `perttool/core` is the closed platform-neutral Grammar 6 source, graph,
214
- exact-arithmetic, diagnostic, Help, Guide, projection, and document-session
215
- surface. Immutable snapshots and sessions bind exact URI, generation, version,
216
- text digest, parse/semantic state, UTF-16 positions, analysis options, and
217
- cancellation-safe caches without filesystem or editor access. The caller
218
- supplies the SHA-256 function. Its runtime closure has no Node builtin or
219
- external package. `perttool/node` exposes the same 122 runtime values as the
220
- existing `perttool` root, including file, schema, Git, hashing, and safe-write
221
- APIs that still require Node.js 22 or later. Bundled JSON artifacts remain
222
- available through `perttool/schemas/<schema-id>.schema.json`.
25
+ ```sh
26
+ npx --yes --package=perttool@latest -- perttool --version
27
+ npx --yes --package=perttool@latest -- perttool document check PLAN.pert
28
+ ```
223
29
 
224
- These subpaths are absent from the `0.7.1` rollback package. See the
225
- [Shared Library Boundary](docs/specs/shared-library.md).
226
- The protocol-neutral state contract is the
227
- [Document Session Core](docs/specs/document-session.md).
30
+ Use an exact version such as `perttool@0.10.6` when reproducibility matters.
31
+ See [CHANGELOG.md](CHANGELOG.md) and the [release records](docs/process/) for
32
+ older releases and rollback pins.
228
33
 
229
- ## Plan files
34
+ ## Create your first plan
230
35
 
231
- A `.pert` file is the source of truth and is intended to remain directly
232
- readable. This temporal plan has one one-day forecast from a one-Point task:
36
+ You can author the current canonical structure directly:
233
37
 
234
- ```text
38
+ ```pert
235
39
  project EXAMPLE:
236
- version 2
40
+ version 9
237
41
  title "Example plan"
238
- as_of 2026-07-26
42
+ as_of 2026-08-21
239
43
  duration_unit point
240
44
  velocity 1p/1d
241
45
  finish DONE
@@ -245,51 +49,24 @@ milestone NOW:
245
49
  state reached
246
50
 
247
51
  milestone DONE:
248
- title "Done"
249
- deadline 2026-07-28
52
+ title "Work completed"
250
53
 
251
54
  task WORK NOW -> DONE:
252
55
  title "Do the work"
253
56
  duration 1p
254
- not_before 2026-07-26
255
- deadline 2026-07-27
57
+ status planned
256
58
  ```
257
59
 
258
- Save it as `PLAN.pert`, then inspect it with:
60
+ Save it as `PLAN.pert`, then validate and canonically format it:
259
61
 
260
62
  ```sh
261
63
  perttool document check PLAN.pert
262
- perttool project show PLAN.pert
263
- perttool dag analyze PLAN.pert
264
- perttool dag next PLAN.pert --format json
64
+ perttool document format PLAN.pert --diff
265
65
  ```
266
66
 
267
- Task estimates default to relative `point` units. A Point plan may declare a
268
- project-wide velocity such as `20p/10d`; analysis then keeps the exact Point
269
- result and reports the time conversion separately as a velocity forecast.
270
- Without velocity, Point analysis remains available without a time forecast.
271
- The compatible `day` and `hour` units are deprecated and emit `PTSEM-114` with
272
- `project migrate-unit --to-unit point` guidance. Grammar version 3 also accepts
273
- an exact Fraction such as `1/3p`;
274
- versions 1 and 2 continue to accept Decimal duration tokens. Grammar version 5
275
- adds explicit task-owned work events and the `suspended` lifecycle state.
276
- Grammar version 6 adds conditional plan assurance records and the separate
277
- planning-dependency modes `both`, `execution_only`, and `planning_only`.
278
-
279
- ## Maintain a plan through the CLI
280
-
281
- Read the file for its complete human-facing state. Use CLI maintenance commands
282
- so that each candidate is parsed and semantically checked before it can be
283
- written. To bootstrap a plan without hand-authoring syntax, preview the
284
- smallest valid document and then create a new file exclusively:
67
+ Alternatively, `project init` can create the smallest valid starter file:
285
68
 
286
69
  ```sh
287
- perttool project init EXAMPLE \
288
- --title "Example plan" \
289
- --initial-milestone NOW \
290
- --initial-milestone-title "Current frontier" \
291
- --finish NOW
292
-
293
70
  perttool project init EXAMPLE \
294
71
  --title "Example plan" \
295
72
  --initial-milestone NOW \
@@ -298,445 +75,333 @@ perttool project init EXAMPLE \
298
75
  --out PLAN.pert
299
76
  ```
300
77
 
301
- For an existing plan:
78
+ For an existing plan, preview a change, read the current source digest, and
79
+ repeat the reviewed command with `--write` and `--expect-digest`:
302
80
 
303
81
  ```sh
304
- # Preview a source-preserving change.
305
82
  perttool task set PLAN.pert WORK --status active --diff
306
-
307
- # Obtain the current digest for optimistic locking.
308
83
  perttool project show PLAN.pert --format json
309
84
 
310
- # Apply the reviewed change atomically.
311
85
  perttool task set PLAN.pert WORK \
312
86
  --status active \
313
- --not-before 2026-07-26 \
314
- --deadline 2026-07-27 \
315
87
  --write \
316
88
  --expect-digest 'sha256:...'
89
+ ```
317
90
 
318
- # Finish a task, inspect the new frontier, then remove completed history.
319
- perttool task finish PLAN.pert WORK --diff
91
+ `--out` creates a new file exclusively. `--write` atomically replaces the
92
+ input only when the supplied digest still matches. Existing files are never
93
+ silently overwritten.
94
+
95
+ ## Inspect and schedule a plan
96
+
97
+ ```sh
98
+ perttool document check PLAN.pert
99
+ perttool project show PLAN.pert
100
+ perttool dag analyze PLAN.pert
101
+ perttool dag next PLAN.pert
102
+ ```
103
+
104
+ Use JSON for scripts and agents:
105
+
106
+ ```sh
320
107
  perttool dag next PLAN.pert --format json
108
+ ```
109
+
110
+ Only `temporal.authority.startable_recommended_task_ids` grants new-start
111
+ authority. Every ID in that set is also in `groups.runnable_now`; a raw
112
+ recommendation outside that group is informational and non-executable in the
113
+ current result. Do not treat a raw recommendation or a ready task as
114
+ equivalent to permission to start it.
115
+
116
+ Task estimates use Point values by default. A plan can declare a velocity such
117
+ as `20p/10d` to add time forecasts. Point analysis still works when no velocity
118
+ is declared; only the time forecast is unavailable.
119
+
120
+ ## Update work safely
121
+
122
+ Mutation commands preview by default:
123
+
124
+ ```sh
125
+ perttool task set PLAN.pert WORK --status active --diff
126
+ perttool task finish PLAN.pert WORK --diff
321
127
  perttool dag advance PLAN.pert --diff
322
- perttool dag advance PLAN.pert \
323
- --write \
324
- --expect-digest 'sha256:...'
325
128
  ```
326
129
 
327
- All formatter and mutation commands preview by default. `--write` replaces the
328
- input through the safe-write path, while `--out` exclusively creates a new
329
- file. A changed in-place `dag advance` additionally verifies removed or
330
- replaced entity ranges against the target path in Git `HEAD` and the stage-0
331
- index. Dirty ranges retained by the candidate are allowed; uncommitted
332
- destructive overlap or unavailable proof returns `PTADV-101` without writing.
333
- `Perttool.AdvanceResult.v3.history_guard` reports the status, modification
334
- time, byte sizes, diff counts, and affected IDs before supplemental digests.
335
- If the source, `HEAD`, or stage-0 index changes after assessment, `PTADV-102`
336
- returns exit 5 without writing.
337
- The exceptional `--force-history-loss` option bypasses only that initial
338
- history block for the exact in-place request, emits `PTADV-103`, and does not
339
- bypass governance, warnings-as-errors, expected digests, source/`HEAD`/index
340
- rechecks, or atomic-write validation.
341
- For a terminal sequence of removed tasks and task-owned work events, the same
342
- candidate also removes only its newly orphaned blank separator prefixes. The
343
- preview, separate output, and in-place write therefore remain byte-identical
344
- and do not require a formatter or a second whitespace edit before
345
- `git diff --check`. Consecutive terminal assurance records and work events are
346
- processed in source order so each separator byte belongs to at most one
347
- deletion range.
348
-
349
- Gate maintenance uses the same base controls:
130
+ After review, apply the exact candidate with optimistic locking:
350
131
 
351
132
  ```sh
352
- perttool gate add PLAN.pert APPROVAL NOW DONE \
353
- --reason "Approval required" \
354
- --diff
133
+ perttool task set PLAN.pert WORK \
134
+ --status active \
135
+ --write \
136
+ --expect-digest 'sha256:...'
355
137
  ```
356
138
 
139
+ `dag advance` also protects removed history with Git `HEAD` and index evidence.
140
+ Commit the plan before advancing it. If local changes overlap history that the
141
+ candidate would remove, the command fails without writing. The exceptional
142
+ `--force-history-loss` option bypasses only the initial history-loss block; it
143
+ does not bypass governance, digest, race, or atomic-write checks.
144
+
357
145
  Use `batch apply` when several changes must become valid atomically:
358
146
 
359
147
  ```sh
360
148
  perttool batch apply PLAN.pert --request changes.json --diff
361
- perttool batch apply PLAN.pert \
362
- --request changes.json \
363
- --write \
364
- --expect-digest 'sha256:...'
365
149
  ```
366
150
 
367
- ### Owner-aware governance
368
-
369
- Moving from `0.3.0` Contract 4 to `0.4.0` Contract 5 changes every JSON
370
- envelope to `cli_contract_version=5`. Project metadata changes from
371
- `Perttool.ProjectResult.v2` to `Perttool.ProjectResult.v3`; mutation and
372
- advance change from `Perttool.MutationResult.v1` to
373
- `Perttool.MutationResult.v2` and include a
374
- `Perttool.GovernanceDecision.v1`. Consumers must reject unknown identities
375
- rather than treating the new fields as optional.
376
-
377
- Grammar 4 adds declared goal/DAG owners and delegates. Persistent goal or DAG
378
- changes require `--actor`; an effective owner or delegate has direct
379
- authority, while another actor supplies repeatable `--accepted-by-owner`
380
- caller assertions for every affected effective owner. The digest-bound
381
- pre-change document determines owners and delegates, and an atomic batch must
382
- satisfy every affected scope. These assertions are not authentication,
383
- verified identity, signatures, or a durable approval audit.
384
-
385
- Treat each `--accepted-by-owner` value as a single-candidate, scope-bound
386
- caller assertion rather than workstream or session authority. First preview
387
- without it. Omit it when the result reports `governance.applicable=false`.
388
- Before a non-direct governed write, identify the operation, affected scopes,
389
- required owners, available modification time, byte size before and after, diff
390
- counts, and semantic candidate summary. Keep source and candidate digests as
391
- supplemental machine identity rather than the primary human explanation;
392
- never copy the assertion to later maintenance, a changed candidate, or the
393
- next `dag advance`. See the
394
- [loose assertion scope experiment](docs/process/governance-assertion-scope-experiment.md).
395
- If a valid candidate is not governance-applicable but still receives an owner
396
- assertion, `PTGOV-103` makes that likely boilerplate visible. It is a warning
397
- and does not change default write authority; `--warnings-as-errors` prevents
398
- the write. If a governed preview already carries an owner assertion,
399
- `PTGOV-104` directs the caller back to an assertion-free first preview. Its
400
- default preview still succeeds; `--warnings-as-errors` exits 1 while retaining
401
- the candidate and governance decision. Persistent governed authority is
402
- unchanged.
403
-
404
- Contract 5 previews may still omit actor and owner confirmation. A Contract 4
405
- runtime fails closed on Grammar 4 and governance options; there is no
406
- `--cli-contract 4` switch, compatibility alias, or environment toggle. Pin
407
- `perttool@0.3.0` when a consumer is not ready to migrate. See the
408
- [Contract 4-to-5 migration guide](docs/process/cli-contract-5-migration.md)
409
- for the complete boundary.
410
-
411
- For example, preview and then persist a DAG change as its effective owner:
151
+ ## Record actual work
152
+
153
+ Lifecycle commands record explicit event times and can include active time and
154
+ effort:
412
155
 
413
156
  ```sh
414
- perttool gate add PLAN.pert APPROVAL NOW DONE \
415
- --reason "Approval required" \
416
- --diff
417
- perttool gate add PLAN.pert APPROVAL NOW DONE \
418
- --reason "Approval required" \
419
- --actor user \
420
- --write \
421
- --expect-digest 'sha256:...'
157
+ perttool task start PLAN.pert WORK \
158
+ --at 2026-08-21T09:00:00+09:00 --diff
159
+ perttool task suspend PLAN.pert WORK \
160
+ --at 2026-08-21T11:00:00+09:00 --reason "review" --diff
161
+ perttool task resume PLAN.pert WORK \
162
+ --at 2026-08-21T12:00:00+09:00 --diff
163
+ perttool task finish PLAN.pert WORK \
164
+ --at 2026-08-21T15:00:00+09:00 \
165
+ --active-time 5 --effort 6 --diff
422
166
  ```
423
167
 
424
- Generated Contract 6 source projects carry this maintenance warning:
168
+ `perttool` never substitutes the system clock for a missing event time.
169
+ Project history is read-only:
425
170
 
426
- ```pert
427
- # Existing .pert plans should normally be maintained through perttool commands; direct DSL editing bypasses goal/DAG owner-confirmation checks.
171
+ ```sh
172
+ perttool project history PLAN.pert --task WORK --format json
173
+ perttool project observe-velocity PLAN.pert \
174
+ --task WORK --evidence all --format json
175
+ perttool dag history PLAN.pert --view timeline --format json
428
176
  ```
429
177
 
430
- The warning is guidance, not technical prevention. A text editor, shell
431
- command, or other program can bypass the tool-mediated check; Git and human
432
- review remain external controls.
178
+ Observed velocity is evidence only. Adopting it is a separate reviewed
179
+ `project set --velocity` change.
433
180
 
434
- Use the dedicated migration route for exact whole-document conversion between
435
- Point and time units. Preview before writing; the result inventories every
436
- converted field and reports grammar upgrades and reversibility:
181
+ ## Migrate an existing plan
182
+
183
+ Check the file first. Diagnostics include the applicable migration route:
437
184
 
438
185
  ```sh
439
- perttool project migrate-unit PLAN.pert --to-unit day --diff
440
- perttool project migrate-unit PLAN.pert \
441
- --to-unit day \
186
+ perttool document check PLAN.pert
187
+ ```
188
+
189
+ Preview a complete migration to the current Grammar 9 form:
190
+
191
+ ```sh
192
+ perttool document migrate PLAN.pert --target-grammar 9 --diff
193
+ ```
194
+
195
+ Then apply the reviewed candidate:
196
+
197
+ ```sh
198
+ perttool document migrate PLAN.pert \
199
+ --target-grammar 9 \
442
200
  --write \
443
201
  --expect-digest 'sha256:...'
202
+ ```
444
203
 
445
- # A time-to-Point conversion requires an explicit relationship when needed.
204
+ For deprecated `day` or `hour` plans, migrate duration values to Points
205
+ separately:
206
+
207
+ ```sh
208
+ perttool project migrate-unit PLAN.pert --to-unit point --diff
446
209
  perttool project migrate-unit PLAN.pert \
447
210
  --to-unit point \
448
211
  --replacement-velocity 20p/10d \
449
- --diff
212
+ --write \
213
+ --expect-digest 'sha256:...'
450
214
  ```
451
215
 
452
- Migration is not a `batch apply` member. Re-read and reanalyze the written
453
- candidate before making a separate mutation.
216
+ Automatic migration is not required. You may edit a copy manually, then run
217
+ `perttool document format` and `perttool document check` to obtain and verify
218
+ the canonical target form. Detailed compatibility guidance is in the
219
+ [`0.9.4` to `0.10.0` migration guide](docs/process/0.9.4-to-0.10.0-migration.md)
220
+ and the built-in migration Guide:
221
+
222
+ ```sh
223
+ perttool guide editing unit-migration --level detail
224
+ ```
454
225
 
455
- ### Task actuals and Git history
226
+ ## Start a Planning Pool
456
227
 
457
- Grammar 5 records each lifecycle transition as a task state change and a
458
- task-owned work event in one preview-first candidate. Event time is always an
459
- explicit caller input; perttool does not substitute the system clock or Git
460
- commit time.
228
+ The prepared `0.11.0` Grammar 9 source adds Work and bounded planning Windows
229
+ without changing strict Task execution. Migrate a Grammar 8 document first:
461
230
 
462
231
  ```sh
463
- perttool task start PLAN.pert WORK \
464
- --at 2026-07-29T09:00:00+09:00 --diff
465
- perttool task suspend PLAN.pert WORK \
466
- --at 2026-07-29T11:00:00+09:00 --reason "review" --diff
467
- perttool task resume PLAN.pert WORK \
468
- --at 2026-07-29T12:00:00+09:00 --diff
469
- perttool task finish PLAN.pert WORK \
470
- --at 2026-07-29T15:00:00+09:00 \
471
- --active-time 5 --effort 6 --diff
232
+ SOURCE_DIGEST=$(perttool document check PLAN.pert --format json | jq -r .source_digest)
233
+ perttool document migrate PLAN.pert --target-grammar 9 --diff
234
+ perttool document migrate PLAN.pert --target-grammar 9 \
235
+ --write --expect-digest "$SOURCE_DIGEST"
472
236
  ```
473
237
 
474
- Use the ordinary governance, `--write`, and `--expect-digest` controls after
475
- reviewing each candidate. `--active-time` is hours and `--effort` is
476
- person-hours; suffix-free CLI values are normalized to `h` and `ph`.
238
+ Exact `perttool@0.10.6` remains the rollback pin for Grammar 8 plans. It cannot
239
+ read Planning Pool declarations and there is no automatic Grammar 9 to 8
240
+ downgrade, so retain the pre-migration Git revision before adopting Work,
241
+ Event, Activity, or Window declarations.
477
242
 
478
- History is a read-only first-parent Git reconstruction. It distinguishes
479
- explicit actual event time from Git-recorded transition time and never changes
480
- Git or declared project velocity:
243
+ Routine changes use one closed, source-bound intent request. They still run
244
+ through the same complete reshape preflight and opaque-token binding as a
245
+ low-level request:
481
246
 
482
247
  ```sh
483
- perttool project history PLAN.pert --task WORK --format json
484
- perttool project observe-velocity PLAN.pert \
485
- --task WORK --evidence declared --format json
248
+ perttool work reshape preflight PLAN.pert \
249
+ --intent-request intent.json --format json > preflight.json
250
+ perttool work reshape apply PLAN.pert \
251
+ --intent-request intent.json \
252
+ --preflight-hash "$(jq -r .preflight_hash preflight.json)" \
253
+ --preflight-token "$(jq -r .preflight_token preflight.json)" \
254
+ --diff
486
255
  ```
487
256
 
488
- Declared observations use the exact current `PLAN.pert` bytes, so a valid
489
- uncommitted lifecycle write is visible immediately. Git-recorded observations
490
- remain bound to the selected revision; `--evidence all` returns both as
491
- separate candidates. JSON exposes the current operand as `source_digest` and
492
- the selected revision as `history.source_digest`.
257
+ The intent builder never infers meaning, dependencies, projection, deferral,
258
+ or carry-over. Review the compiled `normalized_request` and the final candidate
259
+ before writing. The complete first-Work, first-Window, projection, deferral,
260
+ carry-over, and recovery workflow is in
261
+ [Planning Pool intent workflows](docs/examples/planning-pool-intents.md).
262
+ Low-level integrations can discover and validate the three closed request
263
+ contracts through `perttool schema`; complete valid documents are in
264
+ [Planning Pool request schema examples](docs/examples/planning-pool-requests.md).
265
+
266
+ Default text output is designed for human review: lists remain compact;
267
+ `work show`, `event show`, `activity show`, and `window show` expose their
268
+ semantic facts; observations split
269
+ refinement, execution, outcome, organization, temporal, and global-execution
270
+ facts, and reshape preflight ends with the required next action. Use
271
+ `--format json` when a script needs the complete stable result contract:
272
+
273
+ ```sh
274
+ perttool work show PLAN.pert WORK_ID
275
+ perttool event show PLAN.pert EVENT_ID
276
+ perttool activity show PLAN.pert ACTIVITY_ID
277
+ perttool window observe PLAN.pert --request observation.json
278
+ perttool work reshape preflight PLAN.pert --intent-request intent.json
279
+ perttool schema Perttool.PlanningReshapeRequest.v1
280
+ ```
493
281
 
494
- Observed candidates are evidence, not automatic project metadata changes.
495
- Adoption, if desired, is a separate reviewed `project set --velocity` write.
496
- See the [Contract 5-to-6 migration
497
- guide](docs/process/cli-contract-6-migration.md) for schema and compatibility
498
- details.
282
+ Planning Pool retention is advisory. Remaining Work does not block
283
+ `project.finish`, and Work or Window observations do not prove Final Milestone
284
+ Goal obligation coverage, goal completion, or Window objective achievement.
285
+ Execution scope changes only through an explicit governed strict-DAG candidate.
286
+ The nontechnical retained-Work example is in
287
+ [Planning Pool intent workflows](docs/examples/planning-pool-intents.md);
288
+ [Issue #24](https://github.com/mako10k/perttool/issues/24) separately owns the
289
+ future Goal Obligation, Goal Coverage, and Goal Seal boundary.
499
290
 
500
- ### Conditional plan assurance
291
+ ## Plan assurance
501
292
 
502
- Assurance is opt-in. Initial sealing upgrades the candidate to Grammar 6 and
503
- records reviewed task contracts and recursive planning bases:
293
+ Plan assurance is optional. Initial sealing records reviewed task contracts
294
+ and planning bases atomically:
504
295
 
505
296
  ```sh
506
297
  perttool plan-assurance seal PLAN.pert \
507
298
  --reason "Initial reviewed planning baseline" --diff
508
299
  perttool plan-assurance show PLAN.pert --format json
509
- perttool plan-assurance hash PLAN.pert WORK --kind computed-basis
510
300
  ```
511
301
 
512
- The hash command writes exactly one `sha256:` digest plus LF on text success;
513
- it does not edit or accept a seal. Use `plan-dependency` to qualify the default
514
- execution-and-planning relation, or to add a planning-only relation:
302
+ After changing reviewed work, inspect the affected closure and reseal only the
303
+ selected tasks:
515
304
 
516
305
  ```sh
517
- perttool plan-dependency set PLAN.pert REL_A_B \
518
- --mode execution-only --reason "Execution order only" --diff
519
- perttool plan-dependency add PLAN.pert REL_C_D C D \
520
- --mode planning-only --reason "D consumes C planning output" --diff
306
+ perttool plan-assurance reseal PLAN.pert \
307
+ --task WORK \
308
+ --reason "Accepted the updated plan" \
309
+ --diff
521
310
  ```
522
311
 
523
- After reviewing a reported affected closure, use a separate governed
524
- `plan-assurance reseal` candidate. Completed work needs an explicit
525
- `task-outcome` record; completion status, Git history, and actual duration do
526
- not imply outcome conformance. `dag next` preserves raw ranking and withholds
527
- new-start authority from unsealed, review-required, or unavailable plans.
312
+ In `0.10.5`, selected reseal also covers a newly added unsealed task when plan
313
+ assurance is already enabled. A plan with assurance entirely disabled still
314
+ uses the atomic `seal` command. Completed tasks require explicit
315
+ `task-outcome` records; status and Git history do not imply conformance.
528
316
 
529
- ## Command map
317
+ ## Ownership and review
530
318
 
531
- | Goal | Command |
532
- | --- | --- |
533
- | Discover commands | `perttool help [resource [action]]` |
534
- | Discover or read JSON Schemas | `perttool schema [schema-id]` |
535
- | Read domain guidance | `perttool guide [topic [subtopic]]` |
536
- | Validate a document | `perttool document check <file>` |
537
- | Canonically format it | `perttool document format <file>` |
538
- | Initialize a project | `perttool project init ...` |
539
- | Read project metadata | `perttool project show <file>` |
540
- | Reconstruct task actuals | `perttool project history <file> ...` |
541
- | Observe project performance | `perttool project observe-velocity <file> ...` |
542
- | Change project metadata | `perttool project set <file> ...` |
543
- | Migrate project units exactly | `perttool project migrate-unit <file> ...` |
544
- | Analyze schedules | `perttool dag analyze <file>` |
545
- | Select next work | `perttool dag next <file>` |
546
- | Remove completed history | `perttool dag advance <file>` |
547
- | Reconstruct committed DAG history | `perttool dag history <file> ...` |
548
- | Inspect plan assurance | `perttool plan-assurance show|hash <file> ...` |
549
- | Seal or reseal reviewed plans | `perttool plan-assurance seal|reseal <file> ...` |
550
- | Maintain planning dependencies | `perttool plan-dependency add|set|remove` |
551
- | Maintain task outcomes | `perttool task-outcome add|set|remove` |
552
- | Export or import Mermaid | `perttool dag render`, `perttool dag import` |
553
- | Maintain tasks | `perttool task add|set|remove|start|suspend|resume|finish` |
554
- | Maintain gates | `perttool gate add|set|remove` |
555
- | Maintain milestones | `perttool milestone add|set|remove` |
556
- | Maintain milestone acceptance | `perttool milestone acceptance show|replace|verify|fail|unavailable|revoke|waive` |
557
- | Maintain resources | `perttool resource add|set|remove` |
558
- | Apply an atomic batch | `perttool batch apply` |
559
- | Read coding-agent guidance | `perttool agent help` |
560
-
561
- Run `perttool --help` for the text command catalog. `help` is the complete
562
- command contract for humans and machine consumers, while `guide` explains
563
- domain concepts. Both run without a document:
319
+ A plan may declare goal and DAG owners. Preview first without owner assertions.
320
+ If the result reports that governance applies, repeat the exact candidate with
321
+ `--actor` and any required `--accepted-by-owner` values:
564
322
 
565
323
  ```sh
566
- perttool task set --help
567
- perttool help dag next --format json
568
- perttool help dag history --format json
569
- perttool schema --format json
570
- perttool schema Perttool.NextResult.v7 --format json
571
- perttool schema Perttool.NextResult.v7 --view outline --format json
572
- perttool guide editing --level detail --format json
573
- perttool guide historical-dag --level detail --format json
324
+ perttool gate add PLAN.pert APPROVAL NOW DONE \
325
+ --reason "Approval required" \
326
+ --diff
327
+
328
+ perttool gate add PLAN.pert APPROVAL NOW DONE \
329
+ --reason "Approval required" \
330
+ --actor user \
331
+ --write \
332
+ --expect-digest 'sha256:...'
574
333
  ```
575
334
 
576
- ### JSON Schema artifacts
335
+ Owner confirmations are caller assertions, not authentication or durable
336
+ approval records. Treat each value as a single-candidate, scope-bound
337
+ assertion. It
338
+ applies only to the exact candidate being reviewed and must not be reused
339
+ automatically.
577
340
 
578
- `perttool schema --format json` returns the complete result-schema catalog.
579
- Supplying a schema identity returns its Draft 2020-12 artifact in the
580
- `schema` field of `Perttool.SchemaResult.v1`:
341
+ Generated plans include this reminder:
581
342
 
582
- ```sh
583
- perttool schema Perttool.CheckResult.v5 --format json
343
+ ```pert
344
+ # Existing .pert plans should normally be maintained through perttool commands; direct DSL editing bypasses goal/DAG owner-confirmation checks.
584
345
  ```
585
346
 
586
- The default and `--view full` return the complete artifact. For a shorter
587
- outer shape, `--view outline` replaces complex nested records with absolute
588
- references to the complete bundled artifact. Pass one local, relative, or
589
- copied absolute reference back with `--ref` to display that internal layer:
347
+ This warning is guidance, not technical prevention; Git and human review remain
348
+ external controls.
349
+
350
+ ## Find commands and guidance
351
+
352
+ The CLI is the complete current command reference:
590
353
 
591
354
  ```sh
592
- perttool schema Perttool.NextResult.v7 --view outline --format json
593
- perttool schema Perttool.NextResult.v7 --view outline \
594
- --ref '#/$defs/recommendation' --format json
355
+ perttool --help
356
+ perttool task set --help
357
+ perttool help dag next
358
+ perttool help work reshape preflight
359
+ perttool guide workflows --level detail
360
+ perttool schema --format json
595
361
  ```
596
362
 
597
- Packed installations also expose each artifact at
598
- `perttool/schemas/<schema-id>.schema.json`; relative references resolve
599
- against the bundled `Perttool.Common.v1.schema.json`. The stable `$id` is an
600
- identifier only: validation does not require network access. Consumers must
601
- select compatibility from each result's `schema_version`, not from
602
- `tool_version`. See the
603
- [JSON Schema Artifact Contract](docs/specs/json-schema.md) for the current
604
- 23-root source inventory and versioning rules.
605
-
606
- ## LLM and automation use
607
-
608
- Use `--format json` for machine consumers. The current unreleased source
609
- requires `cli_contract_version == 8`. Published versions `0.7.0`, `0.7.1`,
610
- `0.8.0`, and `0.8.1` require
611
- `cli_contract_version == 7`. Published `0.6.0`, `0.5.5`, `0.5.4`, `0.5.3`,
612
- `0.5.2`, `0.5.1`, and `0.5.0` consumers must check
613
- `cli_contract_version == 6`;
614
- consumers pinned to `0.4.0`
615
- must continue to require Contract 5, and consumers pinned to `0.3.0` must
616
- require Contract 4. Bundled machine-readable result artifacts require
617
- `0.5.1`; complete nested records and outline/detail views require `0.5.2`.
618
- Scope-bound, human-readable loose owner-confirmation guidance requires
619
- `0.5.3`.
620
- Runtime `PTGOV-103` visibility for unused owner assertions requires `0.5.4`.
621
- Runtime `PTGOV-104` visibility for assertions on governed previews requires
622
- `0.5.5`.
623
- `Perttool.AdvanceResult.v1`, history-safety model 1, and the
624
- repository-clean advance candidate require `0.6.0`; see the
625
- [`0.5.5` to `0.6.0` migration](docs/process/0.5.5-to-0.6.0-migration.md).
626
- Version `0.7.0` changes to Grammar 6, CLI Contract 7, and
627
- assurance-aware result identities; see the
628
- [`0.6.0` to `0.7.0` migration](docs/process/0.6.0-to-0.7.0-migration.md).
629
- In every case, check the result-specific `schema_version` before reading the
630
- rest of a result.
631
- Version `0.8.0` adds `dag history`, `Perttool.HistoricalGraphResult.v1`, and
632
- the Core and Node subpaths without changing CLI Contract 7; see the
633
- [`0.7.1` to `0.8.0` migration](docs/process/0.7.1-to-0.8.0-migration.md).
634
- Version `0.8.1` retains those interfaces and corrects assurance-receipt
635
- placement in an advance-owned terminal deletion suffix. Versions `0.9.0`,
636
- `0.9.1`, `0.9.2`, `0.9.3`, and `0.9.4` use CLI Contract 8.
637
- A complete, known, non-truncated `Perttool.NextResult.v7` with policy
638
- `recommendation_v1_plus_release_gate_plus_plan_assurance_v1` is required for
639
- the current source. Start only task IDs in
640
- `temporal.authority.startable_recommended_task_ids`; do not infer start
641
- authority from the raw recommended set, the text summary, or `ready` alone.
642
- Suspended tasks are reported separately and require an explicit `task resume`;
643
- they are not new-start recommendations.
644
-
645
- Mutation JSON returns the candidate text, unified diff, UTF-16 text edits,
646
- source digest, updated digest, diagnostics, and write result in one envelope.
647
- Direct, lifecycle, batch, and assurance mutations use
648
- `Perttool.MutationResult.v5`; milestone acceptance mutations use that same
649
- identity, and `dag advance` uses `Perttool.AdvanceResult.v3`. Current-source
650
- advance requires Grammar 7; migrate a committed older document with
651
- `perttool document migrate --target-grammar 7`, then declare criteria through
652
- the milestone acceptance commands before relying on canonical advance.
653
- Unknown schema versions, incomplete recommendation traces, `PTREC-*`
654
- diagnostics, and future or unavailable temporal eligibility must fail closed.
655
-
656
- ## Documentation
657
-
658
- - [Temporal and Unit Interface Contract (CLI Contract 4)](docs/specs/temporal-unit-interface.md)
659
- - [Owner-Aware Governance Interface Contract (CLI Contract 5)](docs/specs/governance-interface.md)
660
- - [Project Actuals and Git History Contract (CLI Contract 6)](docs/specs/project-actuals.md)
661
- - [Advance History Safety Contract (ADV-001 target)](docs/specs/advance-history-safety.md)
662
- - [Advance History Safety source acceptance](docs/process/advance-history-acceptance.md)
663
- - [Conditional Plan Assurance Contract (retained Grammar 6 / CLI Contract 7 boundary)](docs/specs/plan-assurance.md)
664
- - [Conditional Plan Assurance Interface Contract](docs/specs/plan-assurance-interface.md)
665
- - [Milestone Acceptance Contract (active Grammar 7 / CLI Contract 8 source)](docs/specs/milestone-acceptance.md)
666
- - [Conditional Plan Assurance public-contract acceptance](docs/process/plan-assurance-public-contract-acceptance.md)
667
- - [`0.6.0` to `0.7.0` migration](docs/process/0.6.0-to-0.7.0-migration.md)
668
- - [`v0.7.0` release procedure](docs/process/0.7.0-release.md)
669
- - [`v0.7.1` Help and Guide consistency patch procedure](docs/process/0.7.1-release.md)
670
- - [`0.7.1` to `0.8.0` migration](docs/process/0.7.1-to-0.8.0-migration.md)
671
- - [`v0.8.0` release procedure](docs/process/0.8.0-release.md)
672
- - [`v0.8.1` release procedure](docs/process/0.8.1-release.md)
673
- - [`0.8.1` to `0.9.0` migration](docs/process/0.8.1-to-0.9.0-migration.md)
674
- - [`v0.9.0` release procedure](docs/process/0.9.0-release.md)
675
- - [`v0.9.1` release procedure](docs/process/0.9.1-release.md)
676
- - [`v0.9.1` durable release acceptance](docs/process/0.9.1-release-acceptance.md)
677
- - [`v0.9.2` release procedure](docs/process/0.9.2-release.md)
678
- - [`v0.9.2` durable release acceptance](docs/process/0.9.2-release-acceptance.md)
679
- - [`v0.9.3` release procedure](docs/process/0.9.3-release.md)
680
- - [`v0.9.3` publication record](docs/process/0.9.3-publish.md)
681
- - [`v0.9.3` durable release acceptance](docs/process/0.9.3-release-acceptance.md)
682
- - [`v0.9.4` release procedure](docs/process/0.9.4-release.md)
683
- - [`v0.10.2` release procedure](docs/process/0.10.2-release.md)
684
- - [`v0.10.3` release procedure](docs/process/0.10.3-release.md)
685
- - [`v0.10.4` release procedure](docs/process/0.10.4-release.md)
686
- - [`v0.10.5` release procedure](docs/process/0.10.5-release.md)
687
- - [Conditional Plan Assurance interface acceptance](docs/process/plan-assurance-interface-acceptance.md)
688
- - [Shared Library Boundary](docs/specs/shared-library.md)
689
- - [Editor Protocol Contract](docs/specs/editor-protocol.md)
690
- - [Historical Editor Protocol Contract](docs/specs/historical-editor-protocol.md)
691
- - [DAG Presentation and Focus Contract](docs/specs/dag-presentation.md)
692
- - [DAG presentation and focus acceptance](docs/process/dag-presentation-acceptance.md)
693
- - [DAG Compact Labels and Exact Time Summary Contract](docs/specs/dag-compact-presentation.md)
694
- - [DAG compact presentation acceptance](docs/process/dag-compact-presentation-acceptance.md)
695
- - [Document Session Core](docs/specs/document-session.md)
696
- - [Conditional Plan Assurance internal hash Core acceptance](docs/process/plan-assurance-hash-core-acceptance.md)
697
- - [Conditional Plan Assurance internal source Core acceptance](docs/process/plan-assurance-source-core-acceptance.md)
698
- - [Conditional Plan Assurance internal mutation Core acceptance](docs/process/plan-assurance-mutation-core-acceptance.md)
699
- - [Conditional Plan Assurance internal authority Core acceptance](docs/process/plan-assurance-authority-core-acceptance.md)
700
- - [Conditional Plan Assurance internal advance contraction acceptance](docs/process/plan-assurance-advance-contraction-acceptance.md)
701
- - [Conditional Plan Assurance internal compatibility acceptance](docs/process/plan-assurance-compatibility-acceptance.md)
702
- - [Conditional Plan Assurance internal hash inspection acceptance](docs/process/plan-assurance-hash-inspection-acceptance.md)
703
- - [Conditional Plan Assurance design review](docs/process/plan-assurance-design-review.md)
704
- - [Conditional Plan Assurance implementation plan](plans/plan-assurance.pert)
705
- - [Help and Guide consistency correction](docs/specs/help-guide-consistency.md)
706
- - [Help and Guide consistency implementation plan](plans/help-guide-consistency.pert)
707
- - [`v0.7.1` release plan](plans/release-0.7.1.pert)
708
- - [`v0.8.0` release plan](plans/release-0.8.0.pert)
709
- - [`v0.9.0` release plan](plans/release-0.9.0.pert)
710
- - [`v0.9.1` release plan](plans/release-0.9.1.pert)
711
- - [`v0.9.2` release plan](plans/release-0.9.2.pert)
712
- - [`v0.9.3` release plan](plans/release-0.9.3.pert)
713
- - [`v0.9.4` release plan](plans/release-0.9.4.pert)
714
- - [`v0.10.6` release plan](plans/release-0.10.6.pert)
715
- - [`v0.10.6` release procedure](docs/process/0.10.6-release.md)
716
- - [JSON Schema Artifact Contract](docs/specs/json-schema.md)
717
- - [JSON Schema source acceptance](docs/process/json-schema-acceptance.md)
718
- - [Contract 5-to-6 migration](docs/process/cli-contract-6-migration.md)
719
- - [Contract 4-to-5 migration](docs/process/cli-contract-5-migration.md)
720
- - [Issue #4 governance implementation acceptance](docs/process/governance-acceptance.md)
721
- - [CLI Contract 3 compatibility baseline](docs/specs/cli-contract-3.md)
722
- - [DSL grammar](docs/specs/dsl-grammar.md)
723
- - [Graph semantics](docs/specs/graph-semantics.md)
724
- - [Analysis semantics](docs/specs/analysis.md)
725
- - [Mutation semantics](docs/specs/mutation.md)
726
- - [Recommendation semantics](docs/specs/recommendation.md)
363
+ Compound command Help accepts the same natural path segments as the command.
364
+ An incomplete prefix such as `perttool help work reshape` fails with
365
+ `PTHLP-003` and lists `apply` and `preflight`; structured callers that already
366
+ pass `reshape preflight` as one action argument remain compatible.
367
+
368
+ Common commands:
369
+
370
+ | Goal | Command |
371
+ | --- | --- |
372
+ | Validate or format | `document check`, `document format` |
373
+ | Create or inspect a project | `project init`, `project show` |
374
+ | Analyze or select work | `dag analyze`, `dag next` |
375
+ | Maintain the graph | `task`, `gate`, `milestone`, `resource` |
376
+ | Record lifecycle events | `task start`, `suspend`, `resume`, `finish` |
377
+ | Inspect history | `project history`, `dag history` |
378
+ | Maintain assurance | `plan-assurance`, `plan-dependency`, `task-outcome` |
379
+ | Migrate documents | `document migrate`, `project migrate-unit` |
380
+ | Discover machine contracts | `help --format json`, `schema` |
381
+
382
+ ## Library use
383
+
384
+ The package exposes a platform-neutral `perttool/core` subpath and a Node.js
385
+ `perttool/node` subpath. JSON Schema artifacts are available through
386
+ `perttool/schemas/<schema-id>.schema.json`.
387
+
388
+ See the [Shared Library Boundary](docs/specs/shared-library.md),
389
+ [Document Session Core](docs/specs/document-session.md), and
390
+ [JSON Schema contract](docs/specs/json-schema.md) for API details. Automation
391
+ must check each result's `schema_version` and `cli_contract_version`; it must
392
+ not infer compatibility from `tool_version` alone.
393
+
394
+ ## More documentation
395
+
727
396
  - [Examples](docs/examples/README.md)
397
+ - [Current changelog and older versions](CHANGELOG.md)
398
+ - [Migration guides and release records](docs/process/)
399
+ - [Normative specifications](docs/specs/)
728
400
  - [Developer guide](docs/development.md)
729
401
  - [Product backlog](docs/backlog.md)
402
+ - [Security policy](SECURITY.md)
403
+
404
+ Repository setup, testing, architecture, contribution, and release procedures
405
+ belong in the developer and process documents rather than this user guide.
730
406
 
731
- ## Security and license
732
-
733
- Report vulnerabilities privately according to [SECURITY.md](SECURITY.md).
734
- perttool is released under the [MIT License](LICENSE). See
735
- [CHANGELOG.md](CHANGELOG.md) for release changes and known limitations.
736
- The current repository source identifies `0.10.6` and retains Grammar 8,
737
- CLI Contract 9, 56 commands, and 23 root schemas. It makes canonical bracketed
738
- DAG delegates effective for milestone criterion-set and acceptance-receipt
739
- mutations without weakening fail-closed authority. Version `0.10.5` remains
740
- the exact rollback pin.
741
- Migration guidance is in
742
- [`0.9.4-to-0.10.0-migration.md`](docs/process/0.9.4-to-0.10.0-migration.md).
407
+ perttool is released under the [MIT License](LICENSE).