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