perttool 0.1.0 → 0.3.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.
- package/CHANGELOG.md +112 -33
- package/README.md +206 -111
- package/dist/analysis/temporal-deadline.d.ts +59 -0
- package/dist/analysis/temporal-deadline.d.ts.map +1 -0
- package/dist/analysis/temporal-deadline.js +387 -0
- package/dist/analysis/temporal-deadline.js.map +1 -0
- package/dist/analysis/temporal-precedence.d.ts +45 -0
- package/dist/analysis/temporal-precedence.d.ts.map +1 -0
- package/dist/analysis/temporal-precedence.js +123 -0
- package/dist/analysis/temporal-precedence.js.map +1 -0
- package/dist/analysis/temporal-resource.d.ts +66 -0
- package/dist/analysis/temporal-resource.d.ts.map +1 -0
- package/dist/analysis/temporal-resource.js +292 -0
- package/dist/analysis/temporal-resource.js.map +1 -0
- package/dist/application/analyze.js +5 -5
- package/dist/application/analyze.js.map +1 -1
- package/dist/application/check.d.ts +16 -0
- package/dist/application/check.d.ts.map +1 -1
- package/dist/application/check.js +51 -0
- package/dist/application/check.js.map +1 -1
- package/dist/application/contract4.d.ts +17 -0
- package/dist/application/contract4.d.ts.map +1 -0
- package/dist/application/contract4.js +27 -0
- package/dist/application/contract4.js.map +1 -0
- package/dist/application/init.d.ts +43 -0
- package/dist/application/init.d.ts.map +1 -0
- package/dist/application/init.js +226 -0
- package/dist/application/init.js.map +1 -0
- package/dist/application/mutate.d.ts +19 -0
- package/dist/application/mutate.d.ts.map +1 -1
- package/dist/application/mutate.js +47 -25
- package/dist/application/mutate.js.map +1 -1
- package/dist/application/next.d.ts +2 -0
- package/dist/application/next.d.ts.map +1 -1
- package/dist/application/next.js +7 -1
- package/dist/application/next.js.map +1 -1
- package/dist/application/project.d.ts +3 -1
- package/dist/application/project.d.ts.map +1 -1
- package/dist/application/project.js +2 -1
- package/dist/application/project.js.map +1 -1
- package/dist/application/target-check.d.ts +34 -0
- package/dist/application/target-check.d.ts.map +1 -0
- package/dist/application/target-check.js +90 -0
- package/dist/application/target-check.js.map +1 -0
- package/dist/application/target-grammar-boundary.d.ts +22 -0
- package/dist/application/target-grammar-boundary.d.ts.map +1 -0
- package/dist/application/target-grammar-boundary.js +91 -0
- package/dist/application/target-grammar-boundary.js.map +1 -0
- package/dist/application/target-mutate.d.ts +8 -0
- package/dist/application/target-mutate.d.ts.map +1 -0
- package/dist/application/target-mutate.js +56 -0
- package/dist/application/target-mutate.js.map +1 -0
- package/dist/application/target-project.d.ts +28 -0
- package/dist/application/target-project.d.ts.map +1 -0
- package/dist/application/target-project.js +60 -0
- package/dist/application/target-project.js.map +1 -0
- package/dist/application/target-temporal-analysis.d.ts +138 -0
- package/dist/application/target-temporal-analysis.d.ts.map +1 -0
- package/dist/application/target-temporal-analysis.js +409 -0
- package/dist/application/target-temporal-analysis.js.map +1 -0
- package/dist/application/target-temporal-input.d.ts +86 -0
- package/dist/application/target-temporal-input.d.ts.map +1 -0
- package/dist/application/target-temporal-input.js +238 -0
- package/dist/application/target-temporal-input.js.map +1 -0
- package/dist/application/target-unit-migration-candidate.d.ts +60 -0
- package/dist/application/target-unit-migration-candidate.d.ts.map +1 -0
- package/dist/application/target-unit-migration-candidate.js +290 -0
- package/dist/application/target-unit-migration-candidate.js.map +1 -0
- package/dist/application/target-unit-migration-request.d.ts +35 -0
- package/dist/application/target-unit-migration-request.d.ts.map +1 -0
- package/dist/application/target-unit-migration-request.js +68 -0
- package/dist/application/target-unit-migration-request.js.map +1 -0
- package/dist/application/target-unit-migration-result.d.ts +66 -0
- package/dist/application/target-unit-migration-result.d.ts.map +1 -0
- package/dist/application/target-unit-migration-result.js +86 -0
- package/dist/application/target-unit-migration-result.js.map +1 -0
- package/dist/application/unit-migration.d.ts +13 -0
- package/dist/application/unit-migration.d.ts.map +1 -0
- package/dist/application/unit-migration.js +9 -0
- package/dist/application/unit-migration.js.map +1 -0
- package/dist/cli.js +494 -383
- package/dist/cli.js.map +1 -1
- package/dist/command/discovery.d.ts +30 -0
- package/dist/command/discovery.d.ts.map +1 -0
- package/dist/command/discovery.js +752 -0
- package/dist/command/discovery.js.map +1 -0
- package/dist/command/registry.d.ts +84 -0
- package/dist/command/registry.d.ts.map +1 -0
- package/dist/command/registry.js +964 -0
- package/dist/command/registry.js.map +1 -0
- package/dist/command/usage.d.ts +42 -0
- package/dist/command/usage.d.ts.map +1 -0
- package/dist/command/usage.js +337 -0
- package/dist/command/usage.js.map +1 -0
- package/dist/conversion/mermaid-import.js +56 -56
- package/dist/conversion/mermaid-import.js.map +1 -1
- package/dist/conversion/mermaid.js +1 -1
- package/dist/conversion/mermaid.js.map +1 -1
- package/dist/formatter/source-formatter.d.ts +12 -0
- package/dist/formatter/source-formatter.d.ts.map +1 -1
- package/dist/formatter/source-formatter.js +48 -6
- package/dist/formatter/source-formatter.js.map +1 -1
- package/dist/formatter/target-source-formatter.d.ts +8 -0
- package/dist/formatter/target-source-formatter.d.ts.map +1 -0
- package/dist/formatter/target-source-formatter.js +36 -0
- package/dist/formatter/target-source-formatter.js.map +1 -0
- package/dist/help/guide.d.ts +12 -0
- package/dist/help/guide.d.ts.map +1 -0
- package/dist/help/guide.js +103 -0
- package/dist/help/guide.js.map +1 -0
- package/dist/help/registry.d.ts +0 -6
- package/dist/help/registry.d.ts.map +1 -1
- package/dist/help/registry.js +186 -86
- package/dist/help/registry.js.map +1 -1
- package/dist/index.d.ts +20 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/io/safe-write.d.ts +7 -0
- package/dist/io/safe-write.d.ts.map +1 -1
- package/dist/io/safe-write.js +36 -27
- package/dist/io/safe-write.js.map +1 -1
- package/dist/io/target-safe-write.d.ts +7 -0
- package/dist/io/target-safe-write.d.ts.map +1 -0
- package/dist/io/target-safe-write.js +33 -0
- package/dist/io/target-safe-write.js.map +1 -0
- package/dist/migration/conversion.d.ts +40 -0
- package/dist/migration/conversion.d.ts.map +1 -0
- package/dist/migration/conversion.js +106 -0
- package/dist/migration/conversion.js.map +1 -0
- package/dist/migration/grammar-boundary.d.ts +20 -0
- package/dist/migration/grammar-boundary.d.ts.map +1 -0
- package/dist/migration/grammar-boundary.js +92 -0
- package/dist/migration/grammar-boundary.js.map +1 -0
- package/dist/migration/request.d.ts +79 -0
- package/dist/migration/request.d.ts.map +1 -0
- package/dist/migration/request.js +308 -0
- package/dist/migration/request.js.map +1 -0
- package/dist/model/calendar-arithmetic.d.ts +46 -0
- package/dist/model/calendar-arithmetic.d.ts.map +1 -0
- package/dist/model/calendar-arithmetic.js +236 -0
- package/dist/model/calendar-arithmetic.js.map +1 -0
- package/dist/model/calendar.d.ts +22 -0
- package/dist/model/calendar.d.ts.map +1 -0
- package/dist/model/calendar.js +83 -0
- package/dist/model/calendar.js.map +1 -0
- package/dist/model/declaration-fields.d.ts +15 -0
- package/dist/model/declaration-fields.d.ts.map +1 -0
- package/dist/model/declaration-fields.js +54 -0
- package/dist/model/declaration-fields.js.map +1 -0
- package/dist/model/exact-duration-source.d.ts +10 -0
- package/dist/model/exact-duration-source.d.ts.map +1 -0
- package/dist/model/exact-duration-source.js +69 -0
- package/dist/model/exact-duration-source.js.map +1 -0
- package/dist/model/rational.d.ts +2 -2
- package/dist/model/rational.d.ts.map +1 -1
- package/dist/model/rational.js +3 -1
- package/dist/model/rational.js.map +1 -1
- package/dist/model/syntax.d.ts +9 -2
- package/dist/model/syntax.d.ts.map +1 -1
- package/dist/model/syntax.js +20 -4
- package/dist/model/syntax.js.map +1 -1
- package/dist/model/target-calendar.d.ts +25 -0
- package/dist/model/target-calendar.d.ts.map +1 -0
- package/dist/model/target-calendar.js +56 -0
- package/dist/model/target-calendar.js.map +1 -0
- package/dist/mutation/advance.d.ts.map +1 -1
- package/dist/mutation/advance.js +21 -4
- package/dist/mutation/advance.js.map +1 -1
- package/dist/mutation/gate.d.ts +5 -0
- package/dist/mutation/gate.d.ts.map +1 -0
- package/dist/mutation/gate.js +156 -0
- package/dist/mutation/gate.js.map +1 -0
- package/dist/mutation/milestone.d.ts +10 -1
- package/dist/mutation/milestone.d.ts.map +1 -1
- package/dist/mutation/milestone.js +104 -48
- package/dist/mutation/milestone.js.map +1 -1
- package/dist/mutation/project.d.ts +7 -1
- package/dist/mutation/project.d.ts.map +1 -1
- package/dist/mutation/project.js +32 -19
- package/dist/mutation/project.js.map +1 -1
- package/dist/mutation/resource.js +22 -22
- package/dist/mutation/resource.js.map +1 -1
- package/dist/mutation/target-types.d.ts +42 -0
- package/dist/mutation/target-types.d.ts.map +1 -0
- package/dist/mutation/target-types.js +2 -0
- package/dist/mutation/target-types.js.map +1 -0
- package/dist/mutation/task.d.ts +12 -1
- package/dist/mutation/task.d.ts.map +1 -1
- package/dist/mutation/task.js +148 -89
- package/dist/mutation/task.js.map +1 -1
- package/dist/mutation/types.d.ts +34 -3
- package/dist/mutation/types.d.ts.map +1 -1
- package/dist/parser/document-parser.d.ts +14 -0
- package/dist/parser/document-parser.d.ts.map +1 -1
- package/dist/parser/document-parser.js +159 -55
- package/dist/parser/document-parser.js.map +1 -1
- package/dist/recommendation/override-types.d.ts +2 -2
- package/dist/recommendation/override.d.ts +2 -2
- package/dist/recommendation/override.d.ts.map +1 -1
- package/dist/recommendation/override.js +49 -12
- package/dist/recommendation/override.js.map +1 -1
- package/dist/semantic/target-validator.d.ts +36 -0
- package/dist/semantic/target-validator.d.ts.map +1 -0
- package/dist/semantic/target-validator.js +87 -0
- package/dist/semantic/target-validator.js.map +1 -0
- package/dist/semantic/validator.d.ts +2 -0
- package/dist/semantic/validator.d.ts.map +1 -1
- package/dist/semantic/validator.js +90 -45
- package/dist/semantic/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
package/dist/help/registry.js
CHANGED
|
@@ -1,33 +1,20 @@
|
|
|
1
|
-
const agentHelpCommand = {
|
|
2
|
-
operation: "agent.help",
|
|
3
|
-
summary: "Bundled offline profileからprovider別のread-only AI agent guidanceを表示します。",
|
|
4
|
-
syntax: [
|
|
5
|
-
"Usage: perttool agent help [<provider> [<surface>]]",
|
|
6
|
-
" [--level index|quick|detail]",
|
|
7
|
-
" [--format text|json]",
|
|
8
|
-
" [--color auto|always|never]",
|
|
9
|
-
],
|
|
10
|
-
};
|
|
11
|
-
export function getAgentHelpCommandHelp() {
|
|
12
|
-
return agentHelpCommand;
|
|
13
|
-
}
|
|
14
1
|
const nodes = [
|
|
15
2
|
{
|
|
16
3
|
id: "syntax",
|
|
17
4
|
title: "DSL syntax",
|
|
18
|
-
summary: "project
|
|
5
|
+
summary: "Grammar versions 1, 2, and 3 for declaring project, resource, milestone, task, and gate.",
|
|
19
6
|
quick: [
|
|
20
7
|
{
|
|
21
8
|
id: "declarations",
|
|
22
9
|
title: "Declarations",
|
|
23
|
-
body: "project
|
|
10
|
+
body: "Place exactly one project first, followed by resource, milestone, task, and gate declarations.",
|
|
24
11
|
},
|
|
25
12
|
],
|
|
26
13
|
detail: [
|
|
27
14
|
{
|
|
28
15
|
id: "indentation",
|
|
29
16
|
title: "Indentation",
|
|
30
|
-
body: "
|
|
17
|
+
body: "Fields use 2 spaces; child fields in estimate and requires use 4 spaces. Tabs are not allowed.",
|
|
31
18
|
},
|
|
32
19
|
],
|
|
33
20
|
syntax: [
|
|
@@ -52,6 +39,7 @@ const nodes = [
|
|
|
52
39
|
"syntax.gate",
|
|
53
40
|
"syntax.estimate",
|
|
54
41
|
"syntax.velocity",
|
|
42
|
+
"syntax.temporal",
|
|
55
43
|
"analysis",
|
|
56
44
|
"errors",
|
|
57
45
|
],
|
|
@@ -59,19 +47,19 @@ const nodes = [
|
|
|
59
47
|
{
|
|
60
48
|
id: "syntax.project",
|
|
61
49
|
title: "Project syntax",
|
|
62
|
-
summary: "
|
|
50
|
+
summary: "The exactly-one project declaration at the start of a document.",
|
|
63
51
|
quick: [
|
|
64
52
|
{
|
|
65
53
|
id: "required",
|
|
66
54
|
title: "Required fields",
|
|
67
|
-
body: "title
|
|
55
|
+
body: "title, duration_unit, and finish are required. Point documents also require a positive velocity.",
|
|
68
56
|
},
|
|
69
57
|
],
|
|
70
58
|
detail: [
|
|
71
59
|
{
|
|
72
60
|
id: "version",
|
|
73
61
|
title: "Grammar version",
|
|
74
|
-
body: "version
|
|
62
|
+
body: "An omitted version is treated as 1. Version 2 adds temporal fields; version 3 additionally accepts exact Fraction Duration.",
|
|
75
63
|
},
|
|
76
64
|
],
|
|
77
65
|
syntax: [
|
|
@@ -83,17 +71,17 @@ const nodes = [
|
|
|
83
71
|
examples: [
|
|
84
72
|
{ id: "minimal", title: "Minimal project", text: "docs/examples/minimal.pert" },
|
|
85
73
|
],
|
|
86
|
-
related: ["syntax", "syntax.duration", "syntax.velocity", "syntax.text"],
|
|
74
|
+
related: ["syntax", "syntax.duration", "syntax.velocity", "syntax.temporal", "syntax.text"],
|
|
87
75
|
},
|
|
88
76
|
{
|
|
89
77
|
id: "syntax.resource",
|
|
90
78
|
title: "Resource syntax",
|
|
91
|
-
summary: "
|
|
79
|
+
summary: "Declares a renewable resource and its integer capacity for concurrent use.",
|
|
92
80
|
quick: [
|
|
93
81
|
{
|
|
94
82
|
id: "capacity",
|
|
95
83
|
title: "Capacity",
|
|
96
|
-
body: "title
|
|
84
|
+
body: "title and a capacity of at least 1 are required. Tasks reference the resource ID from requires.",
|
|
97
85
|
},
|
|
98
86
|
],
|
|
99
87
|
detail: [],
|
|
@@ -106,12 +94,12 @@ const nodes = [
|
|
|
106
94
|
{
|
|
107
95
|
id: "syntax.milestone",
|
|
108
96
|
title: "Milestone syntax",
|
|
109
|
-
summary: "AoA node
|
|
97
|
+
summary: "Declares an AoA node and its reached state in the current frontier.",
|
|
110
98
|
quick: [
|
|
111
99
|
{
|
|
112
100
|
id: "state",
|
|
113
101
|
title: "Milestone state",
|
|
114
|
-
body: "title
|
|
102
|
+
body: "title is required. state is planned or reached; ready is derived from dependencies and is not stored.",
|
|
115
103
|
},
|
|
116
104
|
],
|
|
117
105
|
detail: [],
|
|
@@ -119,24 +107,24 @@ const nodes = [
|
|
|
119
107
|
examples: [
|
|
120
108
|
{ id: "minimal", title: "Reached frontier", text: "docs/examples/minimal.pert" },
|
|
121
109
|
],
|
|
122
|
-
related: ["syntax", "syntax.task", "syntax.gate", "syntax.tags", "syntax.text"],
|
|
110
|
+
related: ["syntax", "syntax.task", "syntax.gate", "syntax.temporal", "syntax.tags", "syntax.text"],
|
|
123
111
|
},
|
|
124
112
|
{
|
|
125
113
|
id: "syntax.task",
|
|
126
114
|
title: "Task syntax",
|
|
127
|
-
summary: "
|
|
115
|
+
summary: "A task is an AoA edge connecting milestones.",
|
|
128
116
|
quick: [
|
|
129
117
|
{
|
|
130
118
|
id: "required",
|
|
131
119
|
title: "Required fields",
|
|
132
|
-
body: "title
|
|
120
|
+
body: "Specify title and exactly one of duration or estimate.",
|
|
133
121
|
},
|
|
134
122
|
],
|
|
135
123
|
detail: [
|
|
136
124
|
{
|
|
137
125
|
id: "resources",
|
|
138
126
|
title: "Resources",
|
|
139
|
-
body: "requires block
|
|
127
|
+
body: "All resources in the requires block are acquired together and held until the task completes.",
|
|
140
128
|
},
|
|
141
129
|
],
|
|
142
130
|
syntax: ["task ID FROM -> TO:", " title \"...\"", " duration 1d"],
|
|
@@ -151,17 +139,18 @@ const nodes = [
|
|
|
151
139
|
"syntax.text",
|
|
152
140
|
"syntax.tags",
|
|
153
141
|
"analysis.resources",
|
|
142
|
+
"syntax.temporal",
|
|
154
143
|
],
|
|
155
144
|
},
|
|
156
145
|
{
|
|
157
146
|
id: "syntax.gate",
|
|
158
147
|
title: "Gate syntax",
|
|
159
|
-
summary: "
|
|
148
|
+
summary: "Connects milestones with a zero-duration dependency edge.",
|
|
160
149
|
quick: [
|
|
161
150
|
{
|
|
162
151
|
id: "reason",
|
|
163
152
|
title: "Reason",
|
|
164
|
-
body: "reason
|
|
153
|
+
body: "reason is required. A gate requires no resources and has no task duration.",
|
|
165
154
|
},
|
|
166
155
|
],
|
|
167
156
|
detail: [],
|
|
@@ -178,19 +167,19 @@ const nodes = [
|
|
|
178
167
|
{
|
|
179
168
|
id: "syntax.estimate",
|
|
180
169
|
title: "PERT estimate syntax",
|
|
181
|
-
summary: "optimistic
|
|
170
|
+
summary: "Specifies a three-point estimate: optimistic, most_likely, and pessimistic.",
|
|
182
171
|
quick: [
|
|
183
172
|
{
|
|
184
173
|
id: "order",
|
|
185
174
|
title: "Ordering constraint",
|
|
186
|
-
body: "optimistic <= most_likely <= pessimistic
|
|
175
|
+
body: "optimistic <= most_likely <= pessimistic and pessimistic > 0 are required.",
|
|
187
176
|
},
|
|
188
177
|
],
|
|
189
178
|
detail: [
|
|
190
179
|
{
|
|
191
180
|
id: "unit",
|
|
192
181
|
title: "Duration unit",
|
|
193
|
-
body: "
|
|
182
|
+
body: "All three values use the same suffix, matching the project duration_unit (day/hour/point).",
|
|
194
183
|
},
|
|
195
184
|
],
|
|
196
185
|
syntax: [
|
|
@@ -211,34 +200,71 @@ const nodes = [
|
|
|
211
200
|
{
|
|
212
201
|
id: "syntax.duration",
|
|
213
202
|
title: "Duration syntax",
|
|
214
|
-
summary: "
|
|
203
|
+
summary: "An exact Decimal or, in Grammar 3, reduced Fraction followed by d, h, or p.",
|
|
215
204
|
quick: [],
|
|
216
205
|
detail: [],
|
|
217
|
-
syntax: ["1d", "2.5h", "3p", "0d"],
|
|
206
|
+
syntax: ["1d", "2.5h", "3p", "1/3d", "0d"],
|
|
218
207
|
examples: [],
|
|
219
208
|
related: ["syntax.estimate", "syntax.velocity", "analysis"],
|
|
220
209
|
},
|
|
210
|
+
{
|
|
211
|
+
id: "syntax.temporal",
|
|
212
|
+
title: "Temporal syntax",
|
|
213
|
+
summary: "Grammar 2 and 3 add milestone deadline plus task not_before and deadline fields.",
|
|
214
|
+
quick: [
|
|
215
|
+
{
|
|
216
|
+
id: "anchor",
|
|
217
|
+
title: "Explicit anchor",
|
|
218
|
+
body: "Any deadline or not_before requires project.as_of. Date and offset date-time values remain distinct, and perttool never invents a clock or host time zone.",
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
detail: [
|
|
222
|
+
{
|
|
223
|
+
id: "semantics",
|
|
224
|
+
title: "Temporal meaning",
|
|
225
|
+
body: "not_before is a release constraint for a new task start. Deadlines are desired completion or reach times, not dependency edges or hard caps. Mixed valid calendar kinds remain source-valid but may make a projection unavailable.",
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
syntax: [
|
|
229
|
+
"project ID:",
|
|
230
|
+
" version 2|3",
|
|
231
|
+
" as_of DATE|OFFSET_DATE_TIME",
|
|
232
|
+
"milestone ID:",
|
|
233
|
+
" deadline DATE|OFFSET_DATE_TIME",
|
|
234
|
+
"task ID FROM -> TO:",
|
|
235
|
+
" not_before DATE|OFFSET_DATE_TIME",
|
|
236
|
+
" deadline DATE|OFFSET_DATE_TIME",
|
|
237
|
+
],
|
|
238
|
+
examples: [
|
|
239
|
+
{
|
|
240
|
+
id: "temporal-units",
|
|
241
|
+
title: "Normative temporal examples",
|
|
242
|
+
text: "docs/examples/temporal-units.md",
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
related: ["syntax.project", "syntax.task", "syntax.milestone", "analysis.temporal", "editing"],
|
|
246
|
+
},
|
|
221
247
|
{
|
|
222
248
|
id: "syntax.velocity",
|
|
223
249
|
title: "Velocity syntax",
|
|
224
|
-
summary: "
|
|
250
|
+
summary: "Specifies the project-wide velocity for converting between points and days or hours.",
|
|
225
251
|
quick: [
|
|
226
252
|
{
|
|
227
253
|
id: "forecast",
|
|
228
254
|
title: "Velocity forecast",
|
|
229
|
-
body: "duration_unit point
|
|
255
|
+
body: "duration_unit point requires velocity. PERT values are calculated in p and converted values are returned separately as a velocity forecast.",
|
|
230
256
|
},
|
|
231
257
|
],
|
|
232
258
|
detail: [
|
|
233
259
|
{
|
|
234
260
|
id: "units",
|
|
235
261
|
title: "Units",
|
|
236
|
-
body: "20p/10d
|
|
262
|
+
body: "Use the form 20p/10d or 20p/80h. The relationship between day and hour is not inferred implicitly.",
|
|
237
263
|
},
|
|
238
264
|
{
|
|
239
265
|
id: "scope",
|
|
240
266
|
title: "MVP scope",
|
|
241
|
-
body: "velocity
|
|
267
|
+
body: "velocity is constant across the project. Per-team, per-resource, and time-varying velocity are outside the MVP scope.",
|
|
242
268
|
},
|
|
243
269
|
],
|
|
244
270
|
syntax: [
|
|
@@ -258,7 +284,7 @@ const nodes = [
|
|
|
258
284
|
{
|
|
259
285
|
id: "syntax.indentation",
|
|
260
286
|
title: "Indentation",
|
|
261
|
-
summary: "Structural indentation
|
|
287
|
+
summary: "Structural indentation uses ASCII spaces only.",
|
|
262
288
|
quick: [],
|
|
263
289
|
detail: [],
|
|
264
290
|
syntax: ["field: 2 spaces", "nested field: 4 spaces"],
|
|
@@ -268,13 +294,13 @@ const nodes = [
|
|
|
268
294
|
{
|
|
269
295
|
id: "syntax.string",
|
|
270
296
|
title: "String syntax",
|
|
271
|
-
summary: "
|
|
297
|
+
summary: "Uses double-quoted text with the same rules as a JSON string literal.",
|
|
272
298
|
quick: [],
|
|
273
299
|
detail: [
|
|
274
300
|
{
|
|
275
301
|
id: "unicode",
|
|
276
302
|
title: "Unicode and escapes",
|
|
277
|
-
body: "Unicode
|
|
303
|
+
body: "Unicode may be written directly, and escapes use JSON syntax. Unpaired surrogates are not accepted.",
|
|
278
304
|
},
|
|
279
305
|
],
|
|
280
306
|
syntax: ["\"text\"", "\"\\u65e5\\u672c\""],
|
|
@@ -284,13 +310,13 @@ const nodes = [
|
|
|
284
310
|
{
|
|
285
311
|
id: "syntax.text",
|
|
286
312
|
title: "Text field syntax",
|
|
287
|
-
summary: "description
|
|
313
|
+
summary: "description, blocked_reason, and reason accept a String or block text.",
|
|
288
314
|
quick: [],
|
|
289
315
|
detail: [
|
|
290
316
|
{
|
|
291
317
|
id: "block",
|
|
292
318
|
title: "Block text",
|
|
293
|
-
body: "nonblank content
|
|
319
|
+
body: "Removes the common indent from nonblank content while preserving paragraph blanks and remaining indentation.",
|
|
294
320
|
},
|
|
295
321
|
],
|
|
296
322
|
syntax: [" description \"...\"", " description |", " first line"],
|
|
@@ -300,7 +326,7 @@ const nodes = [
|
|
|
300
326
|
{
|
|
301
327
|
id: "syntax.tags",
|
|
302
328
|
title: "Tag list syntax",
|
|
303
|
-
summary: "
|
|
329
|
+
summary: "A comma-separated list of bare Identifiers or Strings in square brackets.",
|
|
304
330
|
quick: [],
|
|
305
331
|
detail: [],
|
|
306
332
|
syntax: [" tags [alpha, \"two words\"]", " tags []"],
|
|
@@ -310,12 +336,12 @@ const nodes = [
|
|
|
310
336
|
{
|
|
311
337
|
id: "syntax.comments",
|
|
312
338
|
title: "Comment syntax",
|
|
313
|
-
summary: "
|
|
339
|
+
summary: "Preserves # and the following text on standalone lines as CST trivia.",
|
|
314
340
|
quick: [
|
|
315
341
|
{
|
|
316
342
|
id: "standalone",
|
|
317
343
|
title: "Standalone only",
|
|
318
|
-
body: "
|
|
344
|
+
body: "Grammar version 1 does not allow inline comments. # within a String or block text is content.",
|
|
319
345
|
},
|
|
320
346
|
],
|
|
321
347
|
detail: [],
|
|
@@ -326,7 +352,7 @@ const nodes = [
|
|
|
326
352
|
{
|
|
327
353
|
id: "syntax.top-level",
|
|
328
354
|
title: "Top-level declaration syntax",
|
|
329
|
-
summary: "
|
|
355
|
+
summary: "Place the project declaration at the start of the document and begin every declaration at column 0.",
|
|
330
356
|
quick: [],
|
|
331
357
|
detail: [],
|
|
332
358
|
syntax: [
|
|
@@ -344,24 +370,24 @@ const nodes = [
|
|
|
344
370
|
{
|
|
345
371
|
id: "analysis",
|
|
346
372
|
title: "Analysis",
|
|
347
|
-
summary: "PERT/CPM precedence
|
|
373
|
+
summary: "Returns PERT/CPM precedence results separately from the resource schedule.",
|
|
348
374
|
quick: [
|
|
349
375
|
{
|
|
350
376
|
id: "results",
|
|
351
377
|
title: "Separated results",
|
|
352
|
-
body: "precedence makespan
|
|
378
|
+
body: "The precedence makespan is a lower bound that ignores resources; the resource makespan is a deterministic heuristic result that respects capacity.",
|
|
353
379
|
},
|
|
354
380
|
],
|
|
355
381
|
detail: [
|
|
356
382
|
{
|
|
357
383
|
id: "exact",
|
|
358
384
|
title: "Exact arithmetic",
|
|
359
|
-
body: "expected
|
|
385
|
+
body: "expected, variance, float, and makespan use exact Rational arithmetic; only display values are rounded with --precision. Point documents also convert velocity forecasts exactly.",
|
|
360
386
|
},
|
|
361
387
|
{
|
|
362
388
|
id: "paths",
|
|
363
389
|
title: "Critical paths",
|
|
364
|
-
body: "near-critical subgraph
|
|
390
|
+
body: "Distinguishes the near-critical subgraph from exact driving paths, and returns the path count independently of the enumeration limit.",
|
|
365
391
|
},
|
|
366
392
|
],
|
|
367
393
|
syntax: [
|
|
@@ -375,29 +401,29 @@ const nodes = [
|
|
|
375
401
|
text: "perttool dag analyze docs/examples/parallel.pert",
|
|
376
402
|
},
|
|
377
403
|
],
|
|
378
|
-
related: ["analysis.resources", "next"],
|
|
404
|
+
related: ["analysis.resources", "analysis.temporal", "next"],
|
|
379
405
|
},
|
|
380
406
|
{
|
|
381
407
|
id: "analysis.resources",
|
|
382
408
|
title: "Resource analysis",
|
|
383
|
-
summary: "
|
|
409
|
+
summary: "A deterministic heuristic schedule that respects renewable capacity.",
|
|
384
410
|
quick: [
|
|
385
411
|
{
|
|
386
412
|
id: "capacity",
|
|
387
413
|
title: "Capacity override",
|
|
388
|
-
body: "--capacity
|
|
414
|
+
body: "--capacity is a what-if input and does not rewrite the source document.",
|
|
389
415
|
},
|
|
390
416
|
],
|
|
391
417
|
detail: [
|
|
392
418
|
{
|
|
393
419
|
id: "algorithm",
|
|
394
420
|
title: "parallel-sgs v1",
|
|
395
|
-
body: "priority
|
|
421
|
+
body: "Scans candidates by priority, precedence float, expected duration, and task ID. optimal=false.",
|
|
396
422
|
},
|
|
397
423
|
{
|
|
398
424
|
id: "witness",
|
|
399
425
|
title: "Resource witness",
|
|
400
|
-
body: "
|
|
426
|
+
body: "Resource waits are explained by analysis-only resource arcs from releasing tasks to starting tasks and are not stored in the authoritative DAG.",
|
|
401
427
|
},
|
|
402
428
|
],
|
|
403
429
|
syntax: [
|
|
@@ -413,47 +439,83 @@ const nodes = [
|
|
|
413
439
|
],
|
|
414
440
|
related: ["analysis", "next"],
|
|
415
441
|
},
|
|
442
|
+
{
|
|
443
|
+
id: "analysis.temporal",
|
|
444
|
+
title: "Temporal analysis",
|
|
445
|
+
summary: "Projects exact calendar schedules and deadline states separately for precedence and heuristic resources.",
|
|
446
|
+
quick: [
|
|
447
|
+
{
|
|
448
|
+
id: "views",
|
|
449
|
+
title: "Separate views",
|
|
450
|
+
body: "AnalysisResult v3 retains base analysis and adds temporal precedence, temporal resource, and deadline evaluations. The resource view remains heuristic and optimal=false.",
|
|
451
|
+
},
|
|
452
|
+
],
|
|
453
|
+
detail: [
|
|
454
|
+
{
|
|
455
|
+
id: "availability",
|
|
456
|
+
title: "Unavailable causes",
|
|
457
|
+
body: "Missing or incomparable calendar relationships, Point/time conversion limits, completed history, and unresolved blocks remain explicit states and causes rather than guessed values.",
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
id: "ranking",
|
|
461
|
+
title: "Ranking boundary",
|
|
462
|
+
body: "Deadline facts are informational for Recommendation version 1. NextResult v4 applies not_before only as a separate release gate after recommendation.",
|
|
463
|
+
},
|
|
464
|
+
],
|
|
465
|
+
syntax: [
|
|
466
|
+
"perttool dag analyze FILE --format json",
|
|
467
|
+
"perttool dag next FILE --format json",
|
|
468
|
+
],
|
|
469
|
+
examples: [
|
|
470
|
+
{
|
|
471
|
+
id: "temporal-units",
|
|
472
|
+
title: "Temporal and deadline cases",
|
|
473
|
+
text: "docs/examples/temporal-units.md",
|
|
474
|
+
},
|
|
475
|
+
],
|
|
476
|
+
related: ["analysis", "analysis.resources", "next", "syntax.temporal"],
|
|
477
|
+
},
|
|
416
478
|
{
|
|
417
479
|
id: "next",
|
|
418
480
|
title: "Next tasks",
|
|
419
|
-
summary: "NextResult.
|
|
481
|
+
summary: "Returns NextResult.v4 recommendations, temporal start authority, and active, ready, runnable_now, blocked_now, and upcoming tasks.",
|
|
420
482
|
quick: [
|
|
421
483
|
{
|
|
422
484
|
id: "classification",
|
|
423
485
|
title: "Task classification",
|
|
424
|
-
body: "ready
|
|
486
|
+
body: "ready consists of planned tasks whose dependencies permit them to start; runnable_now is the subset of ready tasks that can start concurrently after accounting for current active allocations.",
|
|
425
487
|
},
|
|
426
488
|
{
|
|
427
489
|
id: "recommendation",
|
|
428
490
|
title: "Recommendation authority",
|
|
429
|
-
body: "recommendation
|
|
491
|
+
body: "recommendation classifies ready tasks as recommended, allowed, deferred, or discouraged. The recommended set can start concurrently, but is heuristic and optimal=false.",
|
|
430
492
|
},
|
|
431
493
|
],
|
|
432
494
|
detail: [
|
|
433
495
|
{
|
|
434
496
|
id: "consumer-safety",
|
|
435
497
|
title: "Machine-readable explanation",
|
|
436
|
-
body: "--format json
|
|
498
|
+
body: "--format json returns a complete Perttool.NextResult.v4 with the unchanged Recommendation version 1 explanation graph and a separate temporal release gate. Consumers validate every identity and do not start when decisive or temporal authority is unknown.",
|
|
437
499
|
},
|
|
438
500
|
{
|
|
439
501
|
id: "authority-adoption",
|
|
440
502
|
title: "AI task selection authority",
|
|
441
|
-
body: "AI
|
|
503
|
+
body: "AI uses only a known Perttool.NextResult.v4 from --format json, Recommendation interface 1, ranking algorithm 1, reason taxonomy 1.0, explanation/expression/description model 1, locale en, a complete non-truncated trace, and temporal policy recommendation_v1_plus_release_gate. Start only IDs in startable_recommended_task_ids. Stop for unknown, incomplete, malformed, future, or unavailable authority, PTREC diagnostics, and deferred or discouraged selections. Reanalyze after task-state or capacity changes.",
|
|
442
504
|
},
|
|
443
505
|
{
|
|
444
506
|
id: "selection",
|
|
445
507
|
title: "Resource selection",
|
|
446
|
-
body: "runnable_now
|
|
508
|
+
body: "runnable_now is an operational subset selected by the existing scheduler order, while recommendation is the authority selected by a versioned ranking policy; they are not necessarily the same set. The CLI renderer does not reimplement ranking.",
|
|
447
509
|
},
|
|
448
510
|
{
|
|
449
511
|
id: "override-validation",
|
|
450
512
|
title: "Human override validation",
|
|
451
|
-
body: "
|
|
513
|
+
body: "The public Core validateOverride deterministically produces Perttool.OverrideDecision.v1 from a complete NextResult.v4 and an explicit request, and cannot bypass a future or unavailable temporal release gate. This is read-only validation and does not change task state, files, Git, or the network.",
|
|
452
514
|
},
|
|
453
515
|
{
|
|
454
516
|
id: "explanation",
|
|
455
517
|
title: "Upcoming explanation",
|
|
456
|
-
body: "upcoming
|
|
518
|
+
body: "upcoming returns unreached starting milestones and unsatisfied incoming edges. --explain-depth is 0..32; the default is 1.",
|
|
457
519
|
},
|
|
458
520
|
],
|
|
459
521
|
syntax: [
|
|
@@ -467,34 +529,36 @@ const nodes = [
|
|
|
467
529
|
text: "perttool dag next docs/examples/parallel.pert --format json",
|
|
468
530
|
},
|
|
469
531
|
],
|
|
470
|
-
related: ["analysis", "analysis.resources"],
|
|
532
|
+
related: ["analysis", "analysis.resources", "analysis.temporal"],
|
|
471
533
|
},
|
|
472
534
|
{
|
|
473
535
|
id: "editing",
|
|
474
536
|
title: "Safe editing",
|
|
475
|
-
summary: "
|
|
537
|
+
summary: "Preview document formatting, project/task/gate/milestone/resource mutations, atomic batches, and DAG advancement, then safely write validated candidates.",
|
|
476
538
|
quick: [
|
|
477
539
|
{
|
|
478
540
|
id: "current-surface",
|
|
479
541
|
title: "Current surface",
|
|
480
|
-
body: "project show
|
|
542
|
+
body: "project show returns project metadata read-only. project init creates the smallest valid candidate without writing by default. document format projects planFormat; project/entity commands and batch apply project planMutation; and dag advance projects the revalidated candidate from planAdvance, UTF-16 TextEdits, digest, and diff as text/JSON. Direct gate add/set/remove commands and connected atomic batches use the same preview-first mutation path. The default is a preview that does not modify files.",
|
|
481
543
|
},
|
|
482
544
|
],
|
|
483
545
|
detail: [
|
|
484
546
|
{
|
|
485
547
|
id: "write-gate",
|
|
486
548
|
title: "Safe write",
|
|
487
|
-
body: "--write
|
|
549
|
+
body: "--write atomically replaces a file after comparing the initial-read digest with the digest immediately before writing; --expect-digest adds a caller lock. --out creates a new target without overwriting an existing one. --diff is for previews only.",
|
|
488
550
|
},
|
|
489
551
|
],
|
|
490
552
|
syntax: [
|
|
553
|
+
"perttool project init PROJECT_ID --title TITLE --duration-unit UNIT --initial-milestone ID --initial-milestone-title TITLE --finish ID [--out PATH]",
|
|
491
554
|
"perttool project show FILE [--format text|json]",
|
|
492
555
|
"perttool project set FILE [--velocity VELOCITY]... [--write [--expect-digest DIGEST] | --out PATH]",
|
|
493
|
-
"perttool
|
|
556
|
+
"perttool document format FILE [--check] [--diff] [--write [--expect-digest DIGEST] | --out PATH]",
|
|
494
557
|
"perttool task add|set|remove|finish ... [--write [--expect-digest DIGEST] | --out PATH]",
|
|
558
|
+
"perttool gate add|set|remove ... [--write [--expect-digest DIGEST] | --out PATH]",
|
|
495
559
|
"perttool milestone add|set|remove ... [--write [--expect-digest DIGEST] | --out PATH]",
|
|
496
560
|
"perttool resource add|set|remove ... [--write [--expect-digest DIGEST] | --out PATH]",
|
|
497
|
-
"perttool
|
|
561
|
+
"perttool batch apply FILE --request REQUEST.json [--write [--expect-digest DIGEST] | --out PATH]",
|
|
498
562
|
"perttool dag advance FILE [--diff] [--write [--expect-digest DIGEST] | --out PATH]",
|
|
499
563
|
],
|
|
500
564
|
examples: [
|
|
@@ -514,34 +578,70 @@ const nodes = [
|
|
|
514
578
|
text: "perttool task set plan.pert TASK_ID --status active --write --expect-digest sha256:<64 lowercase hex digits>",
|
|
515
579
|
},
|
|
516
580
|
],
|
|
517
|
-
related: ["workflows"],
|
|
581
|
+
related: ["editing.unit-migration", "syntax.temporal", "workflows"],
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
id: "editing.unit-migration",
|
|
585
|
+
title: "Exact unit migration",
|
|
586
|
+
summary: "Migrates the complete Duration inventory between Point and matching day or hour units.",
|
|
587
|
+
quick: [
|
|
588
|
+
{
|
|
589
|
+
id: "directions",
|
|
590
|
+
title: "Exact directions",
|
|
591
|
+
body: "Supported directions are point to day or hour and the matching time unit back to point. A declared or explicit replacement velocity supplies the exact relationship; day-to-hour is never inferred.",
|
|
592
|
+
},
|
|
593
|
+
],
|
|
594
|
+
detail: [
|
|
595
|
+
{
|
|
596
|
+
id: "safety",
|
|
597
|
+
title: "Preview and safe write",
|
|
598
|
+
body: "project migrate-unit previews by default, preserves every absolute temporal token, validates one complete candidate, and shares diff, write, out, digest-lock, race, symlink, and post-write checks with ordinary mutations.",
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
id: "batch",
|
|
602
|
+
title: "Batch exclusion and reversibility",
|
|
603
|
+
body: "Automatic migration is not a batch.apply member. UnitMigrationResult v2 reports exact converted records, grammar and velocity dispositions, qualifications, and whether values and metadata are reversible.",
|
|
604
|
+
},
|
|
605
|
+
],
|
|
606
|
+
syntax: [
|
|
607
|
+
"perttool project migrate-unit FILE --to-unit day|hour|point [--replacement-velocity VELOCITY]",
|
|
608
|
+
" [--diff] [--write [--expect-digest DIGEST] | --out PATH]",
|
|
609
|
+
],
|
|
610
|
+
examples: [
|
|
611
|
+
{
|
|
612
|
+
id: "point-to-day",
|
|
613
|
+
title: "Preview Point-to-day migration",
|
|
614
|
+
text: "perttool project migrate-unit plan.pert --to-unit day --diff",
|
|
615
|
+
},
|
|
616
|
+
],
|
|
617
|
+
related: ["editing", "syntax.duration", "syntax.velocity", "syntax.temporal"],
|
|
518
618
|
},
|
|
519
619
|
{
|
|
520
620
|
id: "mermaid",
|
|
521
621
|
title: "Mermaid conversion",
|
|
522
|
-
summary: "dag render
|
|
622
|
+
summary: "Round-trip a lossless Mermaid profile with dag render and dag import, and explicitly report plain-import loss.",
|
|
523
623
|
quick: [
|
|
524
624
|
{
|
|
525
625
|
id: "authority",
|
|
526
626
|
title: "Profile authority",
|
|
527
|
-
body: "%% perttool: semantic
|
|
627
|
+
body: "%% perttool: semantic records are the authoritative source for restoring the normalized DSL semantic model; flowchart nodes and edges are a human-facing projection.",
|
|
528
628
|
},
|
|
529
629
|
],
|
|
530
630
|
detail: [
|
|
531
631
|
{
|
|
532
632
|
id: "fidelity",
|
|
533
633
|
title: "Lossless boundary",
|
|
534
|
-
body: "
|
|
634
|
+
body: "Lossless means normalized semantic equivalence for grammar v1. Byte identity for comments, blank lines, field/declaration order, escape spelling, and line endings is out of scope.",
|
|
535
635
|
},
|
|
536
636
|
{
|
|
537
637
|
id: "integrity",
|
|
538
638
|
title: "Fail-closed validation",
|
|
539
|
-
body: "canonical JSON record
|
|
639
|
+
body: "Validates canonical JSON records, record count, metadata/projection SHA-256 values, and node/edge correspondence. Corruption detected after a profile header is not silently downgraded to plain import.",
|
|
540
640
|
},
|
|
541
641
|
{
|
|
542
642
|
id: "availability",
|
|
543
643
|
title: "Current availability",
|
|
544
|
-
body: "exportMermaid/importMermaid Core
|
|
644
|
+
body: "The exportMermaid/importMermaid Core and dag render/import are available. The perttool profile fail-closed validates restoration metadata, and plain import/export returns stable PTCNV losses. SVG and JSON targets are later slices.",
|
|
545
645
|
},
|
|
546
646
|
],
|
|
547
647
|
syntax: [
|
|
@@ -565,7 +665,7 @@ const nodes = [
|
|
|
565
665
|
{
|
|
566
666
|
id: "workflows",
|
|
567
667
|
title: "Workflows",
|
|
568
|
-
summary: "check
|
|
668
|
+
summary: "Operate in the order check, analyze, next, preview, and Git commit.",
|
|
569
669
|
quick: [],
|
|
570
670
|
detail: [],
|
|
571
671
|
syntax: [],
|
|
@@ -575,28 +675,28 @@ const nodes = [
|
|
|
575
675
|
{
|
|
576
676
|
id: "errors",
|
|
577
677
|
title: "Diagnostics",
|
|
578
|
-
summary: "
|
|
678
|
+
summary: "Reports problems with stable codes, source spans, and local help topics.",
|
|
579
679
|
quick: [
|
|
580
680
|
{
|
|
581
681
|
id: "recovery",
|
|
582
682
|
title: "Error recovery",
|
|
583
|
-
body: "
|
|
683
|
+
body: "Returns multiple independent syntax errors where possible, and suppresses child lines in the same invalid block as one error region.",
|
|
584
684
|
},
|
|
585
685
|
],
|
|
586
686
|
detail: [
|
|
587
687
|
{
|
|
588
688
|
id: "phases",
|
|
589
689
|
title: "Phase suppression",
|
|
590
|
-
body: "parse
|
|
690
|
+
body: "For documents with parse errors, field/graph validation does not run, so derived PTSEM/PTDAG diagnostics are not returned before the cause is fixed.",
|
|
591
691
|
},
|
|
592
692
|
{
|
|
593
693
|
id: "limit",
|
|
594
694
|
title: "Diagnostic limit",
|
|
595
|
-
body: "--max-diagnostics
|
|
695
|
+
body: "--max-diagnostics is 1..1000, with a default of 100. diagnostics_truncated indicates when the limit is exceeded.",
|
|
596
696
|
},
|
|
597
697
|
],
|
|
598
698
|
syntax: [
|
|
599
|
-
"perttool
|
|
699
|
+
"perttool document check FILE --max-diagnostics 20 --format json",
|
|
600
700
|
"perttool dag analyze FILE --max-diagnostics 20 --format json",
|
|
601
701
|
"perttool dag next FILE --max-diagnostics 20 --format json",
|
|
602
702
|
],
|
|
@@ -606,7 +706,7 @@ const nodes = [
|
|
|
606
706
|
{
|
|
607
707
|
id: "samples",
|
|
608
708
|
title: "Samples",
|
|
609
|
-
summary: "
|
|
709
|
+
summary: "Lists the repository's normative sample IDs.",
|
|
610
710
|
quick: [],
|
|
611
711
|
detail: [],
|
|
612
712
|
syntax: [],
|
|
@@ -626,7 +726,7 @@ export function getHelp(topicId, level) {
|
|
|
626
726
|
topicId: null,
|
|
627
727
|
level: "index",
|
|
628
728
|
title: "perttool DSL help",
|
|
629
|
-
summary: "
|
|
729
|
+
summary: "Select a topic to use.",
|
|
630
730
|
sections: [],
|
|
631
731
|
syntax: [],
|
|
632
732
|
examples: [],
|
|
@@ -644,7 +744,7 @@ export function getHelp(topicId, level) {
|
|
|
644
744
|
topicId,
|
|
645
745
|
level,
|
|
646
746
|
title: "Unknown help topic",
|
|
647
|
-
summary: "
|
|
747
|
+
summary: "The specified help topic does not exist.",
|
|
648
748
|
sections: [],
|
|
649
749
|
syntax: [],
|
|
650
750
|
examples: [],
|