perttool 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +94 -18
  3. package/dist/actuals/lifecycle.d.ts +6 -20
  4. package/dist/actuals/lifecycle.d.ts.map +1 -1
  5. package/dist/actuals/lifecycle.js +5 -176
  6. package/dist/actuals/lifecycle.js.map +1 -1
  7. package/dist/actuals/reduction.d.ts +20 -0
  8. package/dist/actuals/reduction.d.ts.map +1 -0
  9. package/dist/actuals/reduction.js +175 -0
  10. package/dist/actuals/reduction.js.map +1 -0
  11. package/dist/analysis/service.d.ts +33 -0
  12. package/dist/analysis/service.d.ts.map +1 -0
  13. package/dist/analysis/service.js +153 -0
  14. package/dist/analysis/service.js.map +1 -0
  15. package/dist/analysis/target-temporal-input.d.ts +88 -0
  16. package/dist/analysis/target-temporal-input.d.ts.map +1 -0
  17. package/dist/analysis/target-temporal-input.js +249 -0
  18. package/dist/analysis/target-temporal-input.js.map +1 -0
  19. package/dist/analysis/temporal-deadline.d.ts +1 -1
  20. package/dist/analysis/temporal-deadline.d.ts.map +1 -1
  21. package/dist/analysis/temporal-precedence.d.ts +1 -1
  22. package/dist/analysis/temporal-precedence.d.ts.map +1 -1
  23. package/dist/analysis/temporal-precedence.js +1 -1
  24. package/dist/analysis/temporal-precedence.js.map +1 -1
  25. package/dist/analysis/temporal-resource.d.ts +1 -1
  26. package/dist/analysis/temporal-resource.d.ts.map +1 -1
  27. package/dist/analysis/temporal-resource.js +1 -1
  28. package/dist/analysis/temporal-resource.js.map +1 -1
  29. package/dist/application/advance-history.d.ts +2 -1
  30. package/dist/application/advance-history.d.ts.map +1 -1
  31. package/dist/application/advance-history.js +1 -1
  32. package/dist/application/advance-history.js.map +1 -1
  33. package/dist/application/analyze.d.ts +1 -32
  34. package/dist/application/analyze.d.ts.map +1 -1
  35. package/dist/application/analyze.js +1 -152
  36. package/dist/application/analyze.js.map +1 -1
  37. package/dist/application/check.d.ts +1 -42
  38. package/dist/application/check.d.ts.map +1 -1
  39. package/dist/application/check.js +1 -109
  40. package/dist/application/check.js.map +1 -1
  41. package/dist/application/cli-facade.d.ts +85 -0
  42. package/dist/application/cli-facade.d.ts.map +1 -0
  43. package/dist/application/cli-facade.js +108 -0
  44. package/dist/application/cli-facade.js.map +1 -0
  45. package/dist/application/contract6-mutation.js +2 -2
  46. package/dist/application/contract6-mutation.js.map +1 -1
  47. package/dist/application/contract7-mermaid.d.ts.map +1 -1
  48. package/dist/application/contract7-mermaid.js +3 -3
  49. package/dist/application/contract7-mermaid.js.map +1 -1
  50. package/dist/application/contract7-source.d.ts +1 -7
  51. package/dist/application/contract7-source.d.ts.map +1 -1
  52. package/dist/application/contract7-source.js +4 -12
  53. package/dist/application/contract7-source.js.map +1 -1
  54. package/dist/application/editor-dag-focus.d.ts +52 -0
  55. package/dist/application/editor-dag-focus.d.ts.map +1 -0
  56. package/dist/application/editor-dag-focus.js +132 -0
  57. package/dist/application/editor-dag-focus.js.map +1 -0
  58. package/dist/application/format.js +2 -2
  59. package/dist/application/format.js.map +1 -1
  60. package/dist/application/mutate.d.ts +1 -26
  61. package/dist/application/mutate.d.ts.map +1 -1
  62. package/dist/application/mutate.js +1 -205
  63. package/dist/application/mutate.js.map +1 -1
  64. package/dist/application/next.js +2 -2
  65. package/dist/application/next.js.map +1 -1
  66. package/dist/application/target-actuals-advance.js +2 -2
  67. package/dist/application/target-actuals-advance.js.map +1 -1
  68. package/dist/application/target-actuals-analysis.js +2 -2
  69. package/dist/application/target-actuals-analysis.js.map +1 -1
  70. package/dist/application/target-actuals-mutation.d.ts.map +1 -1
  71. package/dist/application/target-actuals-mutation.js +6 -5
  72. package/dist/application/target-actuals-mutation.js.map +1 -1
  73. package/dist/application/target-assurance-analysis.js +2 -2
  74. package/dist/application/target-assurance-analysis.js.map +1 -1
  75. package/dist/application/target-assurance-write.d.ts +2 -1
  76. package/dist/application/target-assurance-write.d.ts.map +1 -1
  77. package/dist/application/target-assurance-write.js +36 -12
  78. package/dist/application/target-assurance-write.js.map +1 -1
  79. package/dist/application/target-governance-mutation.js +2 -2
  80. package/dist/application/target-governance-mutation.js.map +1 -1
  81. package/dist/application/target-historical-graph.d.ts +124 -0
  82. package/dist/application/target-historical-graph.d.ts.map +1 -0
  83. package/dist/application/target-historical-graph.js +547 -0
  84. package/dist/application/target-historical-graph.js.map +1 -0
  85. package/dist/application/target-mutate.d.ts +1 -17
  86. package/dist/application/target-mutate.d.ts.map +1 -1
  87. package/dist/application/target-mutate.js +1 -159
  88. package/dist/application/target-mutate.js.map +1 -1
  89. package/dist/application/target-project-history.d.ts +2 -1
  90. package/dist/application/target-project-history.d.ts.map +1 -1
  91. package/dist/application/target-project-history.js +3 -3
  92. package/dist/application/target-project-history.js.map +1 -1
  93. package/dist/application/target-temporal-analysis.js +2 -2
  94. package/dist/application/target-temporal-analysis.js.map +1 -1
  95. package/dist/application/target-temporal-input.d.ts +1 -87
  96. package/dist/application/target-temporal-input.d.ts.map +1 -1
  97. package/dist/application/target-temporal-input.js +1 -248
  98. package/dist/application/target-temporal-input.js.map +1 -1
  99. package/dist/application/target-unit-migration-candidate.js +2 -2
  100. package/dist/application/target-unit-migration-candidate.js.map +1 -1
  101. package/dist/assurance/advance.js +2 -2
  102. package/dist/assurance/advance.js.map +1 -1
  103. package/dist/assurance/canonical.js +2 -2
  104. package/dist/assurance/canonical.js.map +1 -1
  105. package/dist/assurance/compatibility.js +2 -2
  106. package/dist/assurance/compatibility.js.map +1 -1
  107. package/dist/assurance/mermaid.d.ts +4 -2
  108. package/dist/assurance/mermaid.d.ts.map +1 -1
  109. package/dist/assurance/mermaid.js +11 -7
  110. package/dist/assurance/mermaid.js.map +1 -1
  111. package/dist/assurance/mutation.d.ts.map +1 -1
  112. package/dist/assurance/mutation.js +9 -23
  113. package/dist/assurance/mutation.js.map +1 -1
  114. package/dist/cli.js +66 -26
  115. package/dist/cli.js.map +1 -1
  116. package/dist/command/assurance-discovery.d.ts.map +1 -1
  117. package/dist/command/assurance-discovery.js +62 -2
  118. package/dist/command/assurance-discovery.js.map +1 -1
  119. package/dist/command/assurance-usage.d.ts.map +1 -1
  120. package/dist/command/assurance-usage.js +11 -0
  121. package/dist/command/assurance-usage.js.map +1 -1
  122. package/dist/conversion/mermaid-import.js +3 -3
  123. package/dist/conversion/mermaid-import.js.map +1 -1
  124. package/dist/conversion/mermaid.d.ts +1 -1
  125. package/dist/conversion/mermaid.d.ts.map +1 -1
  126. package/dist/conversion/mermaid.js +4 -4
  127. package/dist/conversion/mermaid.js.map +1 -1
  128. package/dist/core/index.d.ts +33 -0
  129. package/dist/core/index.d.ts.map +1 -0
  130. package/dist/core/index.js +13 -0
  131. package/dist/core/index.js.map +1 -0
  132. package/dist/core/source.d.ts +8 -0
  133. package/dist/core/source.d.ts.map +1 -0
  134. package/dist/core/source.js +11 -0
  135. package/dist/core/source.js.map +1 -0
  136. package/dist/formatter/source-formatter.d.ts +1 -1
  137. package/dist/formatter/source-formatter.d.ts.map +1 -1
  138. package/dist/formatter/source-formatter.js +1 -1
  139. package/dist/formatter/source-formatter.js.map +1 -1
  140. package/dist/guidance/validator.js +2 -2
  141. package/dist/guidance/validator.js.map +1 -1
  142. package/dist/help/assurance-guide.d.ts.map +1 -1
  143. package/dist/help/assurance-guide.js +78 -0
  144. package/dist/help/assurance-guide.js.map +1 -1
  145. package/dist/history/git-probe.d.ts +71 -0
  146. package/dist/history/git-probe.d.ts.map +1 -1
  147. package/dist/history/git-probe.js +517 -0
  148. package/dist/history/git-probe.js.map +1 -1
  149. package/dist/history/historical-graph.d.ts +174 -0
  150. package/dist/history/historical-graph.d.ts.map +1 -0
  151. package/dist/history/historical-graph.js +870 -0
  152. package/dist/history/historical-graph.js.map +1 -0
  153. package/dist/history/historical-transition.d.ts +311 -0
  154. package/dist/history/historical-transition.d.ts.map +1 -0
  155. package/dist/history/historical-transition.js +998 -0
  156. package/dist/history/historical-transition.js.map +1 -0
  157. package/dist/history/project-history.d.ts.map +1 -1
  158. package/dist/history/project-history.js +2 -2
  159. package/dist/history/project-history.js.map +1 -1
  160. package/dist/index.d.ts +2 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +1 -0
  163. package/dist/index.js.map +1 -1
  164. package/dist/io/document-file.js +2 -2
  165. package/dist/io/document-file.js.map +1 -1
  166. package/dist/io/safe-write.js +1 -1
  167. package/dist/io/safe-write.js.map +1 -1
  168. package/dist/model/sha256.d.ts +5 -0
  169. package/dist/model/sha256.d.ts.map +1 -0
  170. package/dist/model/sha256.js +105 -0
  171. package/dist/model/sha256.js.map +1 -0
  172. package/dist/mutation/advance.js +3 -3
  173. package/dist/mutation/advance.js.map +1 -1
  174. package/dist/mutation/diagnostics.d.ts +2 -2
  175. package/dist/mutation/diagnostics.d.ts.map +1 -1
  176. package/dist/mutation/diagnostics.js.map +1 -1
  177. package/dist/mutation/planner.d.ts +27 -0
  178. package/dist/mutation/planner.d.ts.map +1 -0
  179. package/dist/mutation/planner.js +206 -0
  180. package/dist/mutation/planner.js.map +1 -0
  181. package/dist/mutation/source.d.ts +2 -1
  182. package/dist/mutation/source.d.ts.map +1 -1
  183. package/dist/mutation/source.js +14 -0
  184. package/dist/mutation/source.js.map +1 -1
  185. package/dist/mutation/target-planner.d.ts +18 -0
  186. package/dist/mutation/target-planner.d.ts.map +1 -0
  187. package/dist/mutation/target-planner.js +160 -0
  188. package/dist/mutation/target-planner.js.map +1 -0
  189. package/dist/mutation/task.d.ts.map +1 -1
  190. package/dist/mutation/task.js +19 -11
  191. package/dist/mutation/task.js.map +1 -1
  192. package/dist/mutation/types.d.ts +1 -1
  193. package/dist/mutation/types.d.ts.map +1 -1
  194. package/dist/node/historical-host.d.ts +6 -0
  195. package/dist/node/historical-host.d.ts.map +1 -0
  196. package/dist/node/historical-host.js +8 -0
  197. package/dist/node/historical-host.js.map +1 -0
  198. package/dist/node/host.d.ts +3 -0
  199. package/dist/node/host.d.ts.map +1 -0
  200. package/dist/node/host.js +48 -0
  201. package/dist/node/host.js.map +1 -0
  202. package/dist/node/index.d.ts +2 -0
  203. package/dist/node/index.d.ts.map +1 -0
  204. package/dist/node/index.js +2 -0
  205. package/dist/node/index.js.map +1 -0
  206. package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
  207. package/dist/ports/node-host.d.ts +41 -0
  208. package/dist/ports/node-host.d.ts.map +1 -0
  209. package/dist/ports/node-host.js +2 -0
  210. package/dist/ports/node-host.js.map +1 -0
  211. package/dist/recommendation/override.d.ts +40 -2
  212. package/dist/recommendation/override.d.ts.map +1 -1
  213. package/dist/recommendation/override.js +5 -6
  214. package/dist/recommendation/override.js.map +1 -1
  215. package/dist/schema/registry.d.ts.map +1 -1
  216. package/dist/schema/registry.js +1 -0
  217. package/dist/schema/registry.js.map +1 -1
  218. package/dist/semantic/check.d.ts +43 -0
  219. package/dist/semantic/check.d.ts.map +1 -0
  220. package/dist/semantic/check.js +110 -0
  221. package/dist/semantic/check.js.map +1 -0
  222. package/dist/session/document-session.d.ts +109 -0
  223. package/dist/session/document-session.d.ts.map +1 -0
  224. package/dist/session/document-session.js +432 -0
  225. package/dist/session/document-session.js.map +1 -0
  226. package/dist/version.d.ts +1 -1
  227. package/dist/version.js +1 -1
  228. package/package.json +18 -4
  229. package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +654 -0
@@ -0,0 +1,654 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mako10k/perttool/schemas/Perttool.HistoricalGraphResult.v1.schema.json",
4
+ "title": "Perttool.HistoricalGraphResult.v1",
5
+ "$defs": {
6
+ "nullableString": {
7
+ "type": ["string", "null"]
8
+ },
9
+ "stringArray": {
10
+ "type": "array",
11
+ "items": { "type": "string" }
12
+ },
13
+ "digest": {
14
+ "$ref": "Perttool.Common.v1.schema.json#/$defs/digest"
15
+ },
16
+ "nullableDigest": {
17
+ "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableDigest"
18
+ },
19
+ "exactValue": {
20
+ "type": "object",
21
+ "required": ["numerator", "denominator", "unit"],
22
+ "properties": {
23
+ "numerator": { "type": "string", "pattern": "^-?[0-9]+$" },
24
+ "denominator": { "type": "string", "pattern": "^[1-9][0-9]*$" },
25
+ "unit": { "enum": ["day", "hour", "point", "person_hour"] }
26
+ },
27
+ "additionalProperties": false
28
+ },
29
+ "analysisExactValue": {
30
+ "type": "object",
31
+ "required": ["numerator", "denominator", "unit"],
32
+ "properties": {
33
+ "numerator": { "type": "string", "pattern": "^-?[0-9]+$" },
34
+ "denominator": { "type": "string", "pattern": "^[1-9][0-9]*$" },
35
+ "unit": { "enum": ["day", "hour", "point"] }
36
+ },
37
+ "additionalProperties": false
38
+ },
39
+ "calendarDate": {
40
+ "type": "object",
41
+ "required": ["kind", "year", "month", "day"],
42
+ "properties": {
43
+ "kind": { "const": "date" },
44
+ "year": { "type": "integer" },
45
+ "month": { "type": "integer", "minimum": 1, "maximum": 12 },
46
+ "day": { "type": "integer", "minimum": 1, "maximum": 31 }
47
+ },
48
+ "additionalProperties": false
49
+ },
50
+ "calendarDateTime": {
51
+ "type": "object",
52
+ "required": ["kind", "year", "month", "day", "hour", "minute", "second", "offset_minutes"],
53
+ "properties": {
54
+ "kind": { "const": "date_time" },
55
+ "year": { "type": "integer" },
56
+ "month": { "type": "integer", "minimum": 1, "maximum": 12 },
57
+ "day": { "type": "integer", "minimum": 1, "maximum": 31 },
58
+ "hour": { "type": "integer", "minimum": 0, "maximum": 23 },
59
+ "minute": { "type": "integer", "minimum": 0, "maximum": 59 },
60
+ "second": {
61
+ "type": "object",
62
+ "required": ["numerator", "denominator"],
63
+ "properties": {
64
+ "numerator": { "type": "string", "pattern": "^-?[0-9]+$" },
65
+ "denominator": { "type": "string", "pattern": "^[1-9][0-9]*$" }
66
+ },
67
+ "additionalProperties": false
68
+ },
69
+ "offset_minutes": { "type": "integer" }
70
+ },
71
+ "additionalProperties": false
72
+ },
73
+ "calendarValue": {
74
+ "oneOf": [
75
+ { "$ref": "#/$defs/calendarDate" },
76
+ { "$ref": "#/$defs/calendarDateTime" }
77
+ ]
78
+ },
79
+ "nullableCalendarValue": {
80
+ "oneOf": [
81
+ { "$ref": "#/$defs/calendarValue" },
82
+ { "type": "null" }
83
+ ]
84
+ },
85
+ "timing": {
86
+ "oneOf": [
87
+ {
88
+ "type": "object",
89
+ "required": ["kind", "value"],
90
+ "properties": {
91
+ "kind": { "const": "duration" },
92
+ "value": { "$ref": "#/$defs/exactValue" }
93
+ },
94
+ "additionalProperties": false
95
+ },
96
+ {
97
+ "type": "object",
98
+ "required": ["kind", "optimistic", "most_likely", "pessimistic"],
99
+ "properties": {
100
+ "kind": { "const": "estimate" },
101
+ "optimistic": { "$ref": "#/$defs/exactValue" },
102
+ "most_likely": { "$ref": "#/$defs/exactValue" },
103
+ "pessimistic": { "$ref": "#/$defs/exactValue" }
104
+ },
105
+ "additionalProperties": false
106
+ }
107
+ ]
108
+ },
109
+ "milestoneSemantic": {
110
+ "type": "object",
111
+ "required": ["id", "title", "description", "state", "deadline", "tags"],
112
+ "properties": {
113
+ "id": { "type": "string" },
114
+ "title": { "type": "string" },
115
+ "description": { "$ref": "#/$defs/nullableString" },
116
+ "state": { "enum": ["planned", "reached"] },
117
+ "deadline": { "$ref": "#/$defs/nullableCalendarValue" },
118
+ "tags": { "$ref": "#/$defs/stringArray" }
119
+ },
120
+ "additionalProperties": false
121
+ },
122
+ "taskSemantic": {
123
+ "type": "object",
124
+ "required": ["id", "from_milestone_id", "to_milestone_id", "plan", "lifecycle"],
125
+ "properties": {
126
+ "id": { "type": "string" },
127
+ "from_milestone_id": { "type": "string" },
128
+ "to_milestone_id": { "type": "string" },
129
+ "plan": {
130
+ "type": "object",
131
+ "required": ["title", "description", "timing", "not_before", "deadline", "priority", "requirements", "owner", "tags", "source"],
132
+ "properties": {
133
+ "title": { "type": "string" },
134
+ "description": { "$ref": "#/$defs/nullableString" },
135
+ "timing": { "$ref": "#/$defs/timing" },
136
+ "not_before": { "$ref": "#/$defs/nullableCalendarValue" },
137
+ "deadline": { "$ref": "#/$defs/nullableCalendarValue" },
138
+ "priority": { "type": "integer" },
139
+ "requirements": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "object",
143
+ "required": ["resource_id", "units"],
144
+ "properties": {
145
+ "resource_id": { "type": "string" },
146
+ "units": { "type": "integer", "minimum": 1 }
147
+ },
148
+ "additionalProperties": false
149
+ }
150
+ },
151
+ "owner": { "$ref": "#/$defs/nullableString" },
152
+ "tags": { "$ref": "#/$defs/stringArray" },
153
+ "source": { "$ref": "#/$defs/nullableString" }
154
+ },
155
+ "additionalProperties": false
156
+ },
157
+ "lifecycle": {
158
+ "type": "object",
159
+ "required": ["status", "blocked_reason"],
160
+ "properties": {
161
+ "status": { "enum": ["planned", "active", "blocked", "suspended", "done"] },
162
+ "blocked_reason": { "$ref": "#/$defs/nullableString" }
163
+ },
164
+ "additionalProperties": false
165
+ }
166
+ },
167
+ "additionalProperties": false
168
+ },
169
+ "gateSemantic": {
170
+ "type": "object",
171
+ "required": ["id", "from_milestone_id", "to_milestone_id", "reason"],
172
+ "properties": {
173
+ "id": { "type": "string" },
174
+ "from_milestone_id": { "type": "string" },
175
+ "to_milestone_id": { "type": "string" },
176
+ "reason": { "type": "string" }
177
+ },
178
+ "additionalProperties": false
179
+ },
180
+ "resourceSemantic": {
181
+ "type": "object",
182
+ "required": ["id", "title", "description", "capacity", "tags"],
183
+ "properties": {
184
+ "id": { "type": "string" },
185
+ "title": { "type": "string" },
186
+ "description": { "$ref": "#/$defs/nullableString" },
187
+ "capacity": { "type": "integer", "minimum": 1 },
188
+ "tags": { "$ref": "#/$defs/stringArray" }
189
+ },
190
+ "additionalProperties": false
191
+ },
192
+ "entitySemantic": {
193
+ "oneOf": [
194
+ { "$ref": "#/$defs/milestoneSemantic" },
195
+ { "$ref": "#/$defs/taskSemantic" },
196
+ { "$ref": "#/$defs/gateSemantic" },
197
+ { "$ref": "#/$defs/resourceSemantic" }
198
+ ]
199
+ },
200
+ "transition": {
201
+ "type": "object",
202
+ "required": ["class", "causes", "semantic_changed", "source_changed", "changed_axes", "is_merge_commit", "canonical_advance"],
203
+ "properties": {
204
+ "class": { "enum": ["initial", "representation_only", "evidence_extension", "lifecycle_projection", "future_plan_edit", "canonical_advance", "ambiguous_edit", "conflict"] },
205
+ "causes": {
206
+ "type": "array",
207
+ "items": { "enum": ["event_payload_changed", "identity_ambiguous", "ambiguous_edit", "noncanonical_removal", "topology_conflict"] }
208
+ },
209
+ "semantic_changed": { "type": "boolean" },
210
+ "source_changed": { "type": "boolean" },
211
+ "changed_axes": {
212
+ "type": "array",
213
+ "items": { "enum": ["planning", "lifecycle", "actual_evidence", "governance", "assurance", "topology"] }
214
+ },
215
+ "is_merge_commit": { "type": "boolean" },
216
+ "canonical_advance": {
217
+ "oneOf": [
218
+ {
219
+ "type": "object",
220
+ "required": ["planner_version", "candidate_semantic_digest"],
221
+ "properties": {
222
+ "planner_version": { "type": "string" },
223
+ "candidate_semantic_digest": { "$ref": "#/$defs/digest" }
224
+ },
225
+ "additionalProperties": false
226
+ },
227
+ { "type": "null" }
228
+ ]
229
+ }
230
+ },
231
+ "additionalProperties": false
232
+ },
233
+ "occurrence": {
234
+ "type": "object",
235
+ "required": ["entity_kind", "source_id", "occurrence_id", "value_epoch_ordinal", "semantic", "from_occurrence_id", "to_occurrence_id", "first_observed_commit_id", "last_observed_commit_id", "retired_at_commit_id"],
236
+ "properties": {
237
+ "entity_kind": { "enum": ["milestone", "task", "gate", "resource"] },
238
+ "source_id": { "type": "string" },
239
+ "occurrence_id": { "$ref": "#/$defs/nullableString" },
240
+ "value_epoch_ordinal": { "type": ["integer", "null"], "minimum": 1 },
241
+ "semantic": { "$ref": "#/$defs/entitySemantic" },
242
+ "from_occurrence_id": { "$ref": "#/$defs/nullableString" },
243
+ "to_occurrence_id": { "$ref": "#/$defs/nullableString" },
244
+ "first_observed_commit_id": { "type": "string" },
245
+ "last_observed_commit_id": { "type": "string" },
246
+ "retired_at_commit_id": { "$ref": "#/$defs/nullableString" }
247
+ },
248
+ "additionalProperties": false
249
+ },
250
+ "snapshotGraph": {
251
+ "type": "object",
252
+ "required": ["project_id", "semantic_digest", "topology_epoch_id", "occurrences"],
253
+ "properties": {
254
+ "project_id": { "type": "string" },
255
+ "semantic_digest": { "$ref": "#/$defs/digest" },
256
+ "topology_epoch_id": { "$ref": "#/$defs/nullableString" },
257
+ "occurrences": { "type": "array", "items": { "$ref": "#/$defs/occurrence" } }
258
+ },
259
+ "additionalProperties": false
260
+ },
261
+ "checkpointSummary": {
262
+ "type": "object",
263
+ "required": ["commit_id", "parent_commit_ids", "blob_id", "source_digest", "recorded_at", "is_merge_commit", "segment_ordinal", "assurance", "semantic_digest", "topology_epoch_id", "transition", "occurrence_count", "source_binding_count"],
264
+ "properties": {
265
+ "commit_id": { "type": "string" },
266
+ "parent_commit_ids": { "$ref": "#/$defs/stringArray" },
267
+ "blob_id": { "type": "string" },
268
+ "source_digest": { "$ref": "#/$defs/digest" },
269
+ "recorded_at": { "$ref": "#/$defs/nullableString" },
270
+ "is_merge_commit": { "type": "boolean" },
271
+ "segment_ordinal": { "type": "integer", "minimum": 1 },
272
+ "assurance": { "enum": ["verified", "withheld", "not_enabled", "unavailable"] },
273
+ "semantic_digest": { "$ref": "#/$defs/digest" },
274
+ "topology_epoch_id": { "$ref": "#/$defs/nullableString" },
275
+ "transition": { "$ref": "#/$defs/transition" },
276
+ "occurrence_count": { "type": "integer", "minimum": 0 },
277
+ "source_binding_count": { "type": "integer", "minimum": 0 }
278
+ },
279
+ "additionalProperties": false
280
+ },
281
+ "snapshot": {
282
+ "type": "object",
283
+ "required": ["commit_id", "parent_commit_ids", "blob_id", "source_digest", "recorded_at", "is_merge_commit", "segment_ordinal", "assurance", "semantic_digest", "topology_epoch_id", "transition", "occurrence_count", "source_binding_count", "graph"],
284
+ "properties": {
285
+ "commit_id": { "type": "string" },
286
+ "parent_commit_ids": { "$ref": "#/$defs/stringArray" },
287
+ "blob_id": { "type": "string" },
288
+ "source_digest": { "$ref": "#/$defs/digest" },
289
+ "recorded_at": { "$ref": "#/$defs/nullableString" },
290
+ "is_merge_commit": { "type": "boolean" },
291
+ "segment_ordinal": { "type": "integer", "minimum": 1 },
292
+ "assurance": { "enum": ["verified", "withheld", "not_enabled", "unavailable"] },
293
+ "semantic_digest": { "$ref": "#/$defs/digest" },
294
+ "topology_epoch_id": { "$ref": "#/$defs/nullableString" },
295
+ "transition": { "$ref": "#/$defs/transition" },
296
+ "occurrence_count": { "type": "integer", "minimum": 0 },
297
+ "source_binding_count": { "type": "integer", "minimum": 0 },
298
+ "graph": { "$ref": "#/$defs/snapshotGraph" }
299
+ },
300
+ "additionalProperties": false
301
+ },
302
+ "workEvent": {
303
+ "type": "object",
304
+ "required": ["id", "model", "task_id", "kind", "occurred_at", "planned_value", "active_time", "effort", "reason"],
305
+ "properties": {
306
+ "id": { "type": "string" },
307
+ "model": { "const": 1 },
308
+ "task_id": { "type": "string" },
309
+ "kind": { "enum": ["start", "suspend", "resume", "finish"] },
310
+ "occurred_at": { "$ref": "#/$defs/calendarValue" },
311
+ "planned_value": { "oneOf": [{ "$ref": "#/$defs/exactValue" }, { "type": "null" }] },
312
+ "active_time": { "oneOf": [{ "$ref": "#/$defs/exactValue" }, { "type": "null" }] },
313
+ "effort": { "oneOf": [{ "$ref": "#/$defs/exactValue" }, { "type": "null" }] },
314
+ "reason": { "$ref": "#/$defs/nullableString" }
315
+ },
316
+ "additionalProperties": false
317
+ },
318
+ "lineage": {
319
+ "type": "object",
320
+ "required": ["project_id", "endpoint_checkpoint_id", "occurrences", "current_occurrence_ids", "retired_occurrence_ids", "frozen_work_events", "canonical_advance_proofs"],
321
+ "properties": {
322
+ "project_id": { "type": "string" },
323
+ "endpoint_checkpoint_id": { "type": "string" },
324
+ "occurrences": { "type": "array", "items": { "$ref": "#/$defs/occurrence" } },
325
+ "current_occurrence_ids": { "$ref": "#/$defs/stringArray" },
326
+ "retired_occurrence_ids": { "$ref": "#/$defs/stringArray" },
327
+ "frozen_work_events": {
328
+ "type": "array",
329
+ "items": {
330
+ "type": "object",
331
+ "required": ["id", "task_occurrence_id", "first_observed_commit_id", "last_observed_commit_id", "event"],
332
+ "properties": {
333
+ "id": { "type": "string" },
334
+ "task_occurrence_id": { "type": "string" },
335
+ "first_observed_commit_id": { "type": "string" },
336
+ "last_observed_commit_id": { "type": "string" },
337
+ "event": { "$ref": "#/$defs/workEvent" }
338
+ },
339
+ "additionalProperties": false
340
+ }
341
+ },
342
+ "canonical_advance_proofs": {
343
+ "type": "array",
344
+ "items": {
345
+ "type": "object",
346
+ "required": ["from_commit_id", "to_commit_id", "from_blob_id", "to_blob_id", "from_source_digest", "to_source_digest", "planner_version", "candidate_semantic_digest", "removed_occurrence_ids", "retained_occurrence_ids", "removed_task_ids", "removed_gate_ids", "removed_milestone_ids", "removed_work_event_ids", "removed_assurance_record_ids", "state_changed_milestone_ids"],
347
+ "properties": {
348
+ "from_commit_id": { "type": "string" },
349
+ "to_commit_id": { "type": "string" },
350
+ "from_blob_id": { "type": "string" },
351
+ "to_blob_id": { "type": "string" },
352
+ "from_source_digest": { "$ref": "#/$defs/digest" },
353
+ "to_source_digest": { "$ref": "#/$defs/digest" },
354
+ "planner_version": { "type": "string" },
355
+ "candidate_semantic_digest": { "$ref": "#/$defs/digest" },
356
+ "removed_occurrence_ids": { "$ref": "#/$defs/stringArray" },
357
+ "retained_occurrence_ids": { "$ref": "#/$defs/stringArray" },
358
+ "removed_task_ids": { "$ref": "#/$defs/stringArray" },
359
+ "removed_gate_ids": { "$ref": "#/$defs/stringArray" },
360
+ "removed_milestone_ids": { "$ref": "#/$defs/stringArray" },
361
+ "removed_work_event_ids": { "$ref": "#/$defs/stringArray" },
362
+ "removed_assurance_record_ids": { "$ref": "#/$defs/stringArray" },
363
+ "state_changed_milestone_ids": { "$ref": "#/$defs/stringArray" }
364
+ },
365
+ "additionalProperties": false
366
+ }
367
+ }
368
+ },
369
+ "additionalProperties": false
370
+ },
371
+ "timeline": {
372
+ "type": "object",
373
+ "required": ["entries", "segments"],
374
+ "properties": {
375
+ "entries": {
376
+ "type": "array",
377
+ "items": {
378
+ "type": "object",
379
+ "required": ["commit_id", "parent_commit_ids", "blob_id", "source_digest", "recorded_at", "is_merge_commit", "validity", "assurance", "segment_ordinal", "semantic_digest", "topology_epoch_id", "transition", "graph", "diagnostic_codes"],
380
+ "properties": {
381
+ "commit_id": { "type": "string" },
382
+ "parent_commit_ids": { "$ref": "#/$defs/stringArray" },
383
+ "blob_id": { "$ref": "#/$defs/nullableString" },
384
+ "source_digest": { "$ref": "#/$defs/nullableDigest" },
385
+ "recorded_at": { "$ref": "#/$defs/nullableString" },
386
+ "is_merge_commit": { "type": "boolean" },
387
+ "validity": { "enum": ["source_missing", "source_invalid", "grammar_unsupported", "syntax_invalid", "semantic_invalid", "semantic_valid"] },
388
+ "assurance": { "enum": ["verified", "withheld", "not_enabled", "unavailable"] },
389
+ "segment_ordinal": { "type": ["integer", "null"], "minimum": 1 },
390
+ "semantic_digest": { "$ref": "#/$defs/nullableDigest" },
391
+ "topology_epoch_id": { "$ref": "#/$defs/nullableString" },
392
+ "transition": { "oneOf": [{ "$ref": "#/$defs/transition" }, { "type": "null" }] },
393
+ "graph": { "oneOf": [{ "$ref": "#/$defs/snapshotGraph" }, { "type": "null" }] },
394
+ "diagnostic_codes": { "$ref": "#/$defs/stringArray" }
395
+ },
396
+ "additionalProperties": false
397
+ }
398
+ },
399
+ "segments": {
400
+ "type": "array",
401
+ "items": {
402
+ "type": "object",
403
+ "required": ["ordinal", "first_commit_id", "last_commit_id", "checkpoint_commit_ids"],
404
+ "properties": {
405
+ "ordinal": { "type": "integer", "minimum": 1 },
406
+ "first_commit_id": { "type": "string" },
407
+ "last_commit_id": { "type": "string" },
408
+ "checkpoint_commit_ids": { "$ref": "#/$defs/stringArray" }
409
+ },
410
+ "additionalProperties": false
411
+ }
412
+ }
413
+ },
414
+ "additionalProperties": false
415
+ },
416
+ "sourceBinding": {
417
+ "type": "object",
418
+ "required": ["repository_id", "repository_relative_path", "commit_id", "blob_id", "source_digest", "range", "declaration_kind", "source_id", "owner_path"],
419
+ "properties": {
420
+ "repository_id": { "type": "string" },
421
+ "repository_relative_path": { "type": "string" },
422
+ "commit_id": { "type": "string" },
423
+ "blob_id": { "type": "string" },
424
+ "source_digest": { "$ref": "#/$defs/digest" },
425
+ "range": {
426
+ "type": "object",
427
+ "required": ["start", "end"],
428
+ "properties": {
429
+ "start": { "$ref": "#/$defs/position" },
430
+ "end": { "$ref": "#/$defs/position" }
431
+ },
432
+ "additionalProperties": false
433
+ },
434
+ "declaration_kind": { "type": "string" },
435
+ "source_id": { "type": "string" },
436
+ "owner_path": { "type": "string" }
437
+ },
438
+ "additionalProperties": false
439
+ },
440
+ "position": {
441
+ "type": "object",
442
+ "required": ["offset", "line", "column"],
443
+ "properties": {
444
+ "offset": { "type": "integer", "minimum": 0 },
445
+ "line": { "type": "integer", "minimum": 1 },
446
+ "column": { "type": "integer", "minimum": 0 }
447
+ },
448
+ "additionalProperties": false
449
+ },
450
+ "analysis": {
451
+ "type": "object",
452
+ "required": ["status", "mode", "checkpoint_commit_id", "source_digest", "document_id", "grammar_version", "precision", "duration_unit", "milestones", "edges", "precedence", "resource", "diagnostic_codes"],
453
+ "properties": {
454
+ "status": { "enum": ["not_requested", "complete", "unavailable"] },
455
+ "mode": { "enum": ["none", "precedence", "resource", "both"] },
456
+ "checkpoint_commit_id": { "$ref": "#/$defs/nullableString" },
457
+ "source_digest": { "$ref": "#/$defs/nullableDigest" },
458
+ "document_id": { "$ref": "#/$defs/nullableString" },
459
+ "grammar_version": { "type": ["integer", "null"] },
460
+ "precision": { "type": "integer", "minimum": 0 },
461
+ "duration_unit": { "type": ["string", "null"], "enum": ["day", "hour", "point", null] },
462
+ "milestones": {
463
+ "type": "array",
464
+ "items": {
465
+ "type": "object",
466
+ "required": ["source_id", "occurrence_id", "earliest", "latest", "slack", "critical"],
467
+ "properties": {
468
+ "source_id": { "type": "string" },
469
+ "occurrence_id": { "type": "string" },
470
+ "earliest": { "$ref": "#/$defs/analysisExactValue" },
471
+ "latest": { "$ref": "#/$defs/analysisExactValue" },
472
+ "slack": { "$ref": "#/$defs/analysisExactValue" },
473
+ "critical": { "type": "boolean" }
474
+ },
475
+ "additionalProperties": false
476
+ }
477
+ },
478
+ "edges": {
479
+ "type": "array",
480
+ "items": {
481
+ "type": "object",
482
+ "required": ["source_id", "occurrence_id", "kind", "precedence", "resource"],
483
+ "properties": {
484
+ "source_id": { "type": "string" },
485
+ "occurrence_id": { "type": "string" },
486
+ "kind": { "enum": ["task", "gate"] },
487
+ "precedence": {
488
+ "oneOf": [
489
+ {
490
+ "type": "object",
491
+ "required": ["earliest_start", "earliest_finish", "latest_start", "latest_finish", "total_float", "free_float", "critical", "driving"],
492
+ "properties": {
493
+ "earliest_start": { "$ref": "#/$defs/analysisExactValue" },
494
+ "earliest_finish": { "$ref": "#/$defs/analysisExactValue" },
495
+ "latest_start": { "$ref": "#/$defs/analysisExactValue" },
496
+ "latest_finish": { "$ref": "#/$defs/analysisExactValue" },
497
+ "total_float": { "$ref": "#/$defs/analysisExactValue" },
498
+ "free_float": { "$ref": "#/$defs/analysisExactValue" },
499
+ "critical": { "type": "boolean" },
500
+ "driving": { "type": "boolean" }
501
+ },
502
+ "additionalProperties": false
503
+ },
504
+ { "type": "null" }
505
+ ]
506
+ },
507
+ "resource": {
508
+ "oneOf": [
509
+ {
510
+ "type": "object",
511
+ "required": ["scheduled_start", "scheduled_finish", "resource_delay", "schedule_critical"],
512
+ "properties": {
513
+ "scheduled_start": { "$ref": "#/$defs/analysisExactValue" },
514
+ "scheduled_finish": { "$ref": "#/$defs/analysisExactValue" },
515
+ "resource_delay": { "$ref": "#/$defs/analysisExactValue" },
516
+ "schedule_critical": { "type": "boolean" }
517
+ },
518
+ "additionalProperties": false
519
+ },
520
+ { "type": "null" }
521
+ ]
522
+ }
523
+ },
524
+ "additionalProperties": false
525
+ }
526
+ },
527
+ "precedence": {
528
+ "oneOf": [
529
+ {
530
+ "type": "object",
531
+ "required": ["makespan", "critical_milestone_occurrence_ids", "critical_task_occurrence_ids", "critical_gate_occurrence_ids", "representative_path_occurrence_ids"],
532
+ "properties": {
533
+ "makespan": { "$ref": "#/$defs/analysisExactValue" },
534
+ "critical_milestone_occurrence_ids": { "$ref": "#/$defs/stringArray" },
535
+ "critical_task_occurrence_ids": { "$ref": "#/$defs/stringArray" },
536
+ "critical_gate_occurrence_ids": { "$ref": "#/$defs/stringArray" },
537
+ "representative_path_occurrence_ids": { "$ref": "#/$defs/stringArray" }
538
+ },
539
+ "additionalProperties": false
540
+ },
541
+ { "type": "null" }
542
+ ]
543
+ },
544
+ "resource": {
545
+ "oneOf": [
546
+ {
547
+ "type": "object",
548
+ "required": ["algorithm_id", "algorithm_version", "optimal", "makespan", "resource_delay", "schedule_critical_task_occurrence_ids"],
549
+ "properties": {
550
+ "algorithm_id": { "const": "parallel-sgs" },
551
+ "algorithm_version": { "const": 1 },
552
+ "optimal": { "const": false },
553
+ "makespan": { "$ref": "#/$defs/analysisExactValue" },
554
+ "resource_delay": { "$ref": "#/$defs/analysisExactValue" },
555
+ "schedule_critical_task_occurrence_ids": { "$ref": "#/$defs/stringArray" }
556
+ },
557
+ "additionalProperties": false
558
+ },
559
+ { "type": "null" }
560
+ ]
561
+ },
562
+ "diagnostic_codes": { "$ref": "#/$defs/stringArray" }
563
+ },
564
+ "additionalProperties": false
565
+ },
566
+ "cause": {
567
+ "type": "object",
568
+ "required": ["cause", "commit_id", "subject", "limit", "actual"],
569
+ "properties": {
570
+ "cause": { "enum": ["no_repository", "no_head", "unknown_revision", "ambiguous_revision", "non_commit_revision", "endpoint_path_missing", "lower_path_missing", "lower_not_first_parent_ancestor", "shallow_origin", "unsupported_object_format", "object_read_failed", "repository_race", "source_missing", "source_invalid", "grammar_unsupported", "syntax_invalid", "semantic_invalid", "assurance_withheld", "event_payload_changed", "identity_ambiguous", "ambiguous_edit", "noncanonical_removal", "topology_conflict", "lineage_cycle", "hard_limit", "git_unavailable", "unsupported_ancestry_profile"] },
571
+ "commit_id": { "$ref": "#/$defs/nullableString" },
572
+ "subject": { "enum": ["evidence", "snapshot", "assurance", "transition", "lineage", "limit"] },
573
+ "limit": { "type": ["string", "null"], "enum": ["entityValueEpochs", "transitionRecords", "renderedGraphOccurrences", "historicalSourceBindings", null] },
574
+ "actual": { "type": ["integer", "null"], "minimum": 0 }
575
+ },
576
+ "additionalProperties": false
577
+ }
578
+ },
579
+ "type": "object",
580
+ "required": ["schema_version", "cli_contract_version", "tool_version", "operation", "ok", "document_id", "source", "source_digest", "diagnostics", "diagnostics_truncated", "model", "model_version", "transition_model_version", "status", "request", "evidence", "effective_checkpoint_id", "selected_snapshot_commit_id", "checkpoints", "snapshot", "lineage", "timeline", "analysis", "source_bindings", "causes", "limits"],
581
+ "properties": {
582
+ "schema_version": { "const": "Perttool.HistoricalGraphResult.v1" },
583
+ "cli_contract_version": { "const": 7 },
584
+ "tool_version": { "type": "string" },
585
+ "operation": { "const": "dag.history" },
586
+ "ok": { "type": "boolean" },
587
+ "document_id": { "$ref": "#/$defs/nullableString" },
588
+ "source": { "type": "string" },
589
+ "source_digest": { "$ref": "#/$defs/nullableDigest" },
590
+ "diagnostics": { "$ref": "Perttool.Common.v1.schema.json#/$defs/diagnostics" },
591
+ "diagnostics_truncated": { "type": "boolean" },
592
+ "model": { "const": "Perttool.HistoricalDagModel.v1" },
593
+ "model_version": { "const": 1 },
594
+ "transition_model_version": { "const": 1 },
595
+ "status": { "enum": ["complete", "incomplete", "unavailable"] },
596
+ "request": {
597
+ "type": "object",
598
+ "required": ["requested_endpoint", "requested_lower_boundary", "ancestry_profile", "view", "snapshot_commit_id", "analysis_mode"],
599
+ "properties": {
600
+ "requested_endpoint": { "type": "string" },
601
+ "requested_lower_boundary": { "$ref": "#/$defs/nullableString" },
602
+ "ancestry_profile": { "enum": ["first_parent", "three_way"] },
603
+ "view": { "enum": ["snapshot", "lineage", "timeline"] },
604
+ "snapshot_commit_id": { "$ref": "#/$defs/nullableString" },
605
+ "analysis_mode": { "enum": ["none", "precedence", "resource", "both"] }
606
+ },
607
+ "additionalProperties": false
608
+ },
609
+ "evidence": {
610
+ "type": "object",
611
+ "required": ["status", "ancestry_profile", "object_format", "repository_id", "repository_relative_path", "repository_read_snapshot_id", "requested_endpoint", "resolved_endpoint", "requested_lower_boundary", "resolved_lower_boundary", "oldest_inspected_commit_id", "inspected_commit_ids", "aggregate_raw_snapshot_bytes"],
612
+ "properties": {
613
+ "status": { "enum": ["complete", "incomplete", "unavailable"] },
614
+ "ancestry_profile": { "const": "first_parent" },
615
+ "object_format": { "type": ["string", "null"], "enum": ["sha1", "sha256", null] },
616
+ "repository_id": { "$ref": "#/$defs/nullableString" },
617
+ "repository_relative_path": { "$ref": "#/$defs/nullableString" },
618
+ "repository_read_snapshot_id": { "$ref": "#/$defs/nullableString" },
619
+ "requested_endpoint": { "type": "string" },
620
+ "resolved_endpoint": { "$ref": "#/$defs/nullableString" },
621
+ "requested_lower_boundary": { "$ref": "#/$defs/nullableString" },
622
+ "resolved_lower_boundary": { "$ref": "#/$defs/nullableString" },
623
+ "oldest_inspected_commit_id": { "$ref": "#/$defs/nullableString" },
624
+ "inspected_commit_ids": { "$ref": "#/$defs/stringArray" },
625
+ "aggregate_raw_snapshot_bytes": { "type": "integer", "minimum": 0 }
626
+ },
627
+ "additionalProperties": false
628
+ },
629
+ "effective_checkpoint_id": { "$ref": "#/$defs/nullableString" },
630
+ "selected_snapshot_commit_id": { "type": "string" },
631
+ "checkpoints": { "type": "array", "items": { "$ref": "#/$defs/checkpointSummary" } },
632
+ "snapshot": { "oneOf": [{ "$ref": "#/$defs/snapshot" }, { "type": "null" }] },
633
+ "lineage": { "oneOf": [{ "$ref": "#/$defs/lineage" }, { "type": "null" }] },
634
+ "timeline": { "oneOf": [{ "$ref": "#/$defs/timeline" }, { "type": "null" }] },
635
+ "analysis": { "$ref": "#/$defs/analysis" },
636
+ "source_bindings": { "type": "array", "items": { "$ref": "#/$defs/sourceBinding" } },
637
+ "causes": { "type": "array", "items": { "$ref": "#/$defs/cause" } },
638
+ "limits": {
639
+ "type": "object",
640
+ "required": ["inspected_commits", "raw_bytes_per_snapshot", "aggregate_raw_snapshot_bytes", "entity_value_epochs", "transition_records", "rendered_graph_occurrences", "historical_source_bindings"],
641
+ "properties": {
642
+ "inspected_commits": { "type": "integer", "minimum": 0 },
643
+ "raw_bytes_per_snapshot": { "type": "integer", "minimum": 0 },
644
+ "aggregate_raw_snapshot_bytes": { "type": "integer", "minimum": 0 },
645
+ "entity_value_epochs": { "type": "integer", "minimum": 0 },
646
+ "transition_records": { "type": "integer", "minimum": 0 },
647
+ "rendered_graph_occurrences": { "type": "integer", "minimum": 0 },
648
+ "historical_source_bindings": { "type": "integer", "minimum": 0 }
649
+ },
650
+ "additionalProperties": false
651
+ }
652
+ },
653
+ "additionalProperties": false
654
+ }