perttool 0.10.6 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +273 -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,44 @@
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 `0.11.1` with
9
+ Grammar 9 and CLI Contract 10 for the Work-centered Planning Pool. Both require
10
+ Node.js 22 or later. Exact `0.10.6` remains the compatible Grammar 8 and CLI
11
+ Contract 9 rollback pin that includes the Issue #36 correction.
166
12
 
167
13
  ## Install
168
14
 
169
- Install the Contract 8 CLI globally by exact version when it is used
170
- regularly:
15
+ Install the current release for your user-managed Node.js environment:
171
16
 
172
17
  ```sh
173
- npm install --global perttool@0.9.4
18
+ npm install --global perttool@latest
174
19
  perttool --version
175
20
  ```
176
21
 
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
- ```
22
+ Run it without installing:
212
23
 
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`.
24
+ ```sh
25
+ npx --yes --package=perttool@latest -- perttool --version
26
+ npx --yes --package=perttool@latest -- perttool document check PLAN.pert
27
+ ```
223
28
 
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).
29
+ Use an exact version such as `perttool@0.11.1` when reproducibility matters.
30
+ See [CHANGELOG.md](CHANGELOG.md) and the [release records](docs/process/) for
31
+ older releases and rollback pins.
228
32
 
229
- ## Plan files
33
+ ## Create your first plan
230
34
 
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:
35
+ You can author the current canonical structure directly:
233
36
 
234
- ```text
37
+ ```pert
235
38
  project EXAMPLE:
236
- version 2
39
+ version 9
237
40
  title "Example plan"
238
- as_of 2026-07-26
41
+ as_of 2026-08-21
239
42
  duration_unit point
240
43
  velocity 1p/1d
241
44
  finish DONE
@@ -245,51 +48,24 @@ milestone NOW:
245
48
  state reached
246
49
 
247
50
  milestone DONE:
248
- title "Done"
249
- deadline 2026-07-28
51
+ title "Work completed"
250
52
 
251
53
  task WORK NOW -> DONE:
252
54
  title "Do the work"
253
55
  duration 1p
254
- not_before 2026-07-26
255
- deadline 2026-07-27
56
+ status planned
256
57
  ```
257
58
 
258
- Save it as `PLAN.pert`, then inspect it with:
59
+ Save it as `PLAN.pert`, then validate and canonically format it:
259
60
 
260
61
  ```sh
261
62
  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
63
+ perttool document format PLAN.pert --diff
265
64
  ```
266
65
 
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:
66
+ Alternatively, `project init` can create the smallest valid starter file:
285
67
 
286
68
  ```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
69
  perttool project init EXAMPLE \
294
70
  --title "Example plan" \
295
71
  --initial-milestone NOW \
@@ -298,445 +74,333 @@ perttool project init EXAMPLE \
298
74
  --out PLAN.pert
299
75
  ```
300
76
 
301
- For an existing plan:
77
+ For an existing plan, preview a change, read the current source digest, and
78
+ repeat the reviewed command with `--write` and `--expect-digest`:
302
79
 
303
80
  ```sh
304
- # Preview a source-preserving change.
305
81
  perttool task set PLAN.pert WORK --status active --diff
306
-
307
- # Obtain the current digest for optimistic locking.
308
82
  perttool project show PLAN.pert --format json
309
83
 
310
- # Apply the reviewed change atomically.
311
84
  perttool task set PLAN.pert WORK \
312
85
  --status active \
313
- --not-before 2026-07-26 \
314
- --deadline 2026-07-27 \
315
86
  --write \
316
87
  --expect-digest 'sha256:...'
88
+ ```
317
89
 
318
- # Finish a task, inspect the new frontier, then remove completed history.
319
- perttool task finish PLAN.pert WORK --diff
90
+ `--out` creates a new file exclusively. `--write` atomically replaces the
91
+ input only when the supplied digest still matches. Existing files are never
92
+ silently overwritten.
93
+
94
+ ## Inspect and schedule a plan
95
+
96
+ ```sh
97
+ perttool document check PLAN.pert
98
+ perttool project show PLAN.pert
99
+ perttool dag analyze PLAN.pert
100
+ perttool dag next PLAN.pert
101
+ ```
102
+
103
+ Use JSON for scripts and agents:
104
+
105
+ ```sh
320
106
  perttool dag next PLAN.pert --format json
107
+ ```
108
+
109
+ Only `temporal.authority.startable_recommended_task_ids` grants new-start
110
+ authority. Every ID in that set is also in `groups.runnable_now`; a raw
111
+ recommendation outside that group is informational and non-executable in the
112
+ current result. Do not treat a raw recommendation or a ready task as
113
+ equivalent to permission to start it.
114
+
115
+ Task estimates use Point values by default. A plan can declare a velocity such
116
+ as `20p/10d` to add time forecasts. Point analysis still works when no velocity
117
+ is declared; only the time forecast is unavailable.
118
+
119
+ ## Update work safely
120
+
121
+ Mutation commands preview by default:
122
+
123
+ ```sh
124
+ perttool task set PLAN.pert WORK --status active --diff
125
+ perttool task finish PLAN.pert WORK --diff
321
126
  perttool dag advance PLAN.pert --diff
322
- perttool dag advance PLAN.pert \
323
- --write \
324
- --expect-digest 'sha256:...'
325
127
  ```
326
128
 
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:
129
+ After review, apply the exact candidate with optimistic locking:
350
130
 
351
131
  ```sh
352
- perttool gate add PLAN.pert APPROVAL NOW DONE \
353
- --reason "Approval required" \
354
- --diff
132
+ perttool task set PLAN.pert WORK \
133
+ --status active \
134
+ --write \
135
+ --expect-digest 'sha256:...'
355
136
  ```
356
137
 
138
+ `dag advance` also protects removed history with Git `HEAD` and index evidence.
139
+ Commit the plan before advancing it. If local changes overlap history that the
140
+ candidate would remove, the command fails without writing. The exceptional
141
+ `--force-history-loss` option bypasses only the initial history-loss block; it
142
+ does not bypass governance, digest, race, or atomic-write checks.
143
+
357
144
  Use `batch apply` when several changes must become valid atomically:
358
145
 
359
146
  ```sh
360
147
  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
148
  ```
366
149
 
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:
150
+ ## Record actual work
151
+
152
+ Lifecycle commands record explicit event times and can include active time and
153
+ effort:
412
154
 
413
155
  ```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:...'
156
+ perttool task start PLAN.pert WORK \
157
+ --at 2026-08-21T09:00:00+09:00 --diff
158
+ perttool task suspend PLAN.pert WORK \
159
+ --at 2026-08-21T11:00:00+09:00 --reason "review" --diff
160
+ perttool task resume PLAN.pert WORK \
161
+ --at 2026-08-21T12:00:00+09:00 --diff
162
+ perttool task finish PLAN.pert WORK \
163
+ --at 2026-08-21T15:00:00+09:00 \
164
+ --active-time 5 --effort 6 --diff
422
165
  ```
423
166
 
424
- Generated Contract 6 source projects carry this maintenance warning:
167
+ `perttool` never substitutes the system clock for a missing event time.
168
+ Project history is read-only:
425
169
 
426
- ```pert
427
- # Existing .pert plans should normally be maintained through perttool commands; direct DSL editing bypasses goal/DAG owner-confirmation checks.
170
+ ```sh
171
+ perttool project history PLAN.pert --task WORK --format json
172
+ perttool project observe-velocity PLAN.pert \
173
+ --task WORK --evidence all --format json
174
+ perttool dag history PLAN.pert --view timeline --format json
428
175
  ```
429
176
 
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.
177
+ Observed velocity is evidence only. Adopting it is a separate reviewed
178
+ `project set --velocity` change.
433
179
 
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:
180
+ ## Migrate an existing plan
181
+
182
+ Check the file first. Diagnostics include the applicable migration route:
437
183
 
438
184
  ```sh
439
- perttool project migrate-unit PLAN.pert --to-unit day --diff
440
- perttool project migrate-unit PLAN.pert \
441
- --to-unit day \
185
+ perttool document check PLAN.pert
186
+ ```
187
+
188
+ Preview a complete migration to the current Grammar 9 form:
189
+
190
+ ```sh
191
+ perttool document migrate PLAN.pert --target-grammar 9 --diff
192
+ ```
193
+
194
+ Then apply the reviewed candidate:
195
+
196
+ ```sh
197
+ perttool document migrate PLAN.pert \
198
+ --target-grammar 9 \
442
199
  --write \
443
200
  --expect-digest 'sha256:...'
201
+ ```
444
202
 
445
- # A time-to-Point conversion requires an explicit relationship when needed.
203
+ For deprecated `day` or `hour` plans, migrate duration values to Points
204
+ separately:
205
+
206
+ ```sh
207
+ perttool project migrate-unit PLAN.pert --to-unit point --diff
446
208
  perttool project migrate-unit PLAN.pert \
447
209
  --to-unit point \
448
210
  --replacement-velocity 20p/10d \
449
- --diff
211
+ --write \
212
+ --expect-digest 'sha256:...'
450
213
  ```
451
214
 
452
- Migration is not a `batch apply` member. Re-read and reanalyze the written
453
- candidate before making a separate mutation.
215
+ Automatic migration is not required. You may edit a copy manually, then run
216
+ `perttool document format` and `perttool document check` to obtain and verify
217
+ the canonical target form. Detailed compatibility guidance is in the
218
+ [`0.9.4` to `0.10.0` migration guide](docs/process/0.9.4-to-0.10.0-migration.md)
219
+ and the built-in migration Guide:
220
+
221
+ ```sh
222
+ perttool guide editing unit-migration --level detail
223
+ ```
454
224
 
455
- ### Task actuals and Git history
225
+ ## Start a Planning Pool
456
226
 
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.
227
+ The `0.11.0` Grammar 9 release adds Work and bounded planning Windows without
228
+ changing strict Task execution. Migrate a Grammar 8 document first:
461
229
 
462
230
  ```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
231
+ SOURCE_DIGEST=$(perttool document check PLAN.pert --format json | jq -r .source_digest)
232
+ perttool document migrate PLAN.pert --target-grammar 9 --diff
233
+ perttool document migrate PLAN.pert --target-grammar 9 \
234
+ --write --expect-digest "$SOURCE_DIGEST"
472
235
  ```
473
236
 
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`.
237
+ Exact `perttool@0.10.6` remains the rollback pin for Grammar 8 plans. It cannot
238
+ read Planning Pool declarations and there is no automatic Grammar 9 to 8
239
+ downgrade, so retain the pre-migration Git revision before adopting Work,
240
+ Event, Activity, or Window declarations.
477
241
 
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:
242
+ Routine changes use one closed, source-bound intent request. They still run
243
+ through the same complete reshape preflight and opaque-token binding as a
244
+ low-level request:
481
245
 
482
246
  ```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
247
+ perttool work reshape preflight PLAN.pert \
248
+ --intent-request intent.json --format json > preflight.json
249
+ perttool work reshape apply PLAN.pert \
250
+ --intent-request intent.json \
251
+ --preflight-hash "$(jq -r .preflight_hash preflight.json)" \
252
+ --preflight-token "$(jq -r .preflight_token preflight.json)" \
253
+ --diff
486
254
  ```
487
255
 
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`.
256
+ The intent builder never infers meaning, dependencies, projection, deferral,
257
+ or carry-over. Review the compiled `normalized_request` and the final candidate
258
+ before writing. The complete first-Work, first-Window, projection, deferral,
259
+ carry-over, and recovery workflow is in
260
+ [Planning Pool intent workflows](docs/examples/planning-pool-intents.md).
261
+ Low-level integrations can discover and validate the three closed request
262
+ contracts through `perttool schema`; complete valid documents are in
263
+ [Planning Pool request schema examples](docs/examples/planning-pool-requests.md).
264
+
265
+ Default text output is designed for human review: lists remain compact;
266
+ `work show`, `event show`, `activity show`, and `window show` expose their
267
+ semantic facts; observations split
268
+ refinement, execution, outcome, organization, temporal, and global-execution
269
+ facts, and reshape preflight ends with the required next action. Use
270
+ `--format json` when a script needs the complete stable result contract:
271
+
272
+ ```sh
273
+ perttool work show PLAN.pert WORK_ID
274
+ perttool event show PLAN.pert EVENT_ID
275
+ perttool activity show PLAN.pert ACTIVITY_ID
276
+ perttool window observe PLAN.pert --request observation.json
277
+ perttool work reshape preflight PLAN.pert --intent-request intent.json
278
+ perttool schema Perttool.PlanningReshapeRequest.v1
279
+ ```
493
280
 
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.
281
+ Planning Pool retention is advisory. Remaining Work does not block
282
+ `project.finish`, and Work or Window observations do not prove Final Milestone
283
+ Goal obligation coverage, goal completion, or Window objective achievement.
284
+ Execution scope changes only through an explicit governed strict-DAG candidate.
285
+ The nontechnical retained-Work example is in
286
+ [Planning Pool intent workflows](docs/examples/planning-pool-intents.md);
287
+ [Issue #24](https://github.com/mako10k/perttool/issues/24) separately owns the
288
+ future Goal Obligation, Goal Coverage, and Goal Seal boundary.
499
289
 
500
- ### Conditional plan assurance
290
+ ## Plan assurance
501
291
 
502
- Assurance is opt-in. Initial sealing upgrades the candidate to Grammar 6 and
503
- records reviewed task contracts and recursive planning bases:
292
+ Plan assurance is optional. Initial sealing records reviewed task contracts
293
+ and planning bases atomically:
504
294
 
505
295
  ```sh
506
296
  perttool plan-assurance seal PLAN.pert \
507
297
  --reason "Initial reviewed planning baseline" --diff
508
298
  perttool plan-assurance show PLAN.pert --format json
509
- perttool plan-assurance hash PLAN.pert WORK --kind computed-basis
510
299
  ```
511
300
 
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:
301
+ After changing reviewed work, inspect the affected closure and reseal only the
302
+ selected tasks:
515
303
 
516
304
  ```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
305
+ perttool plan-assurance reseal PLAN.pert \
306
+ --task WORK \
307
+ --reason "Accepted the updated plan" \
308
+ --diff
521
309
  ```
522
310
 
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.
311
+ In `0.10.5`, selected reseal also covers a newly added unsealed task when plan
312
+ assurance is already enabled. A plan with assurance entirely disabled still
313
+ uses the atomic `seal` command. Completed tasks require explicit
314
+ `task-outcome` records; status and Git history do not imply conformance.
528
315
 
529
- ## Command map
316
+ ## Ownership and review
530
317
 
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:
318
+ A plan may declare goal and DAG owners. Preview first without owner assertions.
319
+ If the result reports that governance applies, repeat the exact candidate with
320
+ `--actor` and any required `--accepted-by-owner` values:
564
321
 
565
322
  ```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
323
+ perttool gate add PLAN.pert APPROVAL NOW DONE \
324
+ --reason "Approval required" \
325
+ --diff
326
+
327
+ perttool gate add PLAN.pert APPROVAL NOW DONE \
328
+ --reason "Approval required" \
329
+ --actor user \
330
+ --write \
331
+ --expect-digest 'sha256:...'
574
332
  ```
575
333
 
576
- ### JSON Schema artifacts
334
+ Owner confirmations are caller assertions, not authentication or durable
335
+ approval records. Treat each value as a single-candidate, scope-bound
336
+ assertion. It
337
+ applies only to the exact candidate being reviewed and must not be reused
338
+ automatically.
577
339
 
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`:
340
+ Generated plans include this reminder:
581
341
 
582
- ```sh
583
- perttool schema Perttool.CheckResult.v5 --format json
342
+ ```pert
343
+ # Existing .pert plans should normally be maintained through perttool commands; direct DSL editing bypasses goal/DAG owner-confirmation checks.
584
344
  ```
585
345
 
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:
346
+ This warning is guidance, not technical prevention; Git and human review remain
347
+ external controls.
348
+
349
+ ## Find commands and guidance
350
+
351
+ The CLI is the complete current command reference:
590
352
 
591
353
  ```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
354
+ perttool --help
355
+ perttool task set --help
356
+ perttool help dag next
357
+ perttool help work reshape preflight
358
+ perttool guide workflows --level detail
359
+ perttool schema --format json
595
360
  ```
596
361
 
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)
362
+ Compound command Help accepts the same natural path segments as the command.
363
+ An incomplete prefix such as `perttool help work reshape` fails with
364
+ `PTHLP-003` and lists `apply` and `preflight`; structured callers that already
365
+ pass `reshape preflight` as one action argument remain compatible.
366
+
367
+ Common commands:
368
+
369
+ | Goal | Command |
370
+ | --- | --- |
371
+ | Validate or format | `document check`, `document format` |
372
+ | Create or inspect a project | `project init`, `project show` |
373
+ | Analyze or select work | `dag analyze`, `dag next` |
374
+ | Maintain the graph | `task`, `gate`, `milestone`, `resource` |
375
+ | Record lifecycle events | `task start`, `suspend`, `resume`, `finish` |
376
+ | Inspect history | `project history`, `dag history` |
377
+ | Maintain assurance | `plan-assurance`, `plan-dependency`, `task-outcome` |
378
+ | Migrate documents | `document migrate`, `project migrate-unit` |
379
+ | Discover machine contracts | `help --format json`, `schema` |
380
+
381
+ ## Library use
382
+
383
+ The package exposes a platform-neutral `perttool/core` subpath and a Node.js
384
+ `perttool/node` subpath. JSON Schema artifacts are available through
385
+ `perttool/schemas/<schema-id>.schema.json`.
386
+
387
+ See the [Shared Library Boundary](docs/specs/shared-library.md),
388
+ [Document Session Core](docs/specs/document-session.md), and
389
+ [JSON Schema contract](docs/specs/json-schema.md) for API details. Automation
390
+ must check each result's `schema_version` and `cli_contract_version`; it must
391
+ not infer compatibility from `tool_version` alone.
392
+
393
+ ## More documentation
394
+
727
395
  - [Examples](docs/examples/README.md)
396
+ - [Current changelog and older versions](CHANGELOG.md)
397
+ - [Migration guides and release records](docs/process/)
398
+ - [Normative specifications](docs/specs/)
728
399
  - [Developer guide](docs/development.md)
729
400
  - [Product backlog](docs/backlog.md)
401
+ - [Security policy](SECURITY.md)
402
+
403
+ Repository setup, testing, architecture, contribution, and release procedures
404
+ belong in the developer and process documents rather than this user guide.
730
405
 
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).
406
+ perttool is released under the [MIT License](LICENSE).