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
@@ -0,0 +1,469 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/mako10k/perttool/schemas/Perttool.PlanningPoolResult.v1.schema.json",
4
+ "title": "Perttool.PlanningPoolResult.v1",
5
+ "type": "object",
6
+ "required": ["schema_version", "cli_contract_version", "tool_version", "operation", "ok", "document_id", "source", "source_digest", "diagnostics"],
7
+ "properties": {
8
+ "schema_version": { "const": "Perttool.PlanningPoolResult.v1" },
9
+ "cli_contract_version": { "const": 10 },
10
+ "tool_version": { "type": "string" },
11
+ "operation": { "enum": ["work.list", "work.show", "work.observe", "event.list", "event.show", "activity.list", "activity.show", "window.list", "window.show", "window.observe"] },
12
+ "ok": { "type": "boolean" },
13
+ "document_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
14
+ "source": { "type": "string" },
15
+ "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
16
+ "diagnostics": { "$ref": "Perttool.Common.v1.schema.json#/$defs/diagnostics" },
17
+ "query": { "$ref": "#/$defs/query" },
18
+ "work_order": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
19
+ "works": { "type": "array", "items": { "oneOf": [{ "$ref": "#/$defs/workSource" }, { "$ref": "#/$defs/workObservation" }] } },
20
+ "events": { "type": "array", "items": { "$ref": "#/$defs/eventSource" } },
21
+ "activities": { "type": "array", "items": { "$ref": "#/$defs/activitySource" } },
22
+ "windows": { "type": "array", "items": { "$ref": "#/$defs/windowSource" } },
23
+ "observation_capability": { "const": "perttool.planning-observation-core@1" },
24
+ "history_capability": { "const": "perttool.planning-history-core@1" },
25
+ "normalized_request": { "oneOf": [{ "$ref": "#/$defs/request" }, { "type": "null" }] },
26
+ "evidence": { "oneOf": [{ "$ref": "#/$defs/currentEvidence" }, { "$ref": "#/$defs/historicalEvidence" }] },
27
+ "selected_work_order": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
28
+ "window": { "oneOf": [{ "$ref": "#/$defs/windowObservation" }, { "type": "null" }] },
29
+ "membership_occurrences": { "type": "array", "items": { "$ref": "#/$defs/membership" } },
30
+ "aggregates": { "$ref": "#/$defs/aggregates" },
31
+ "global_execution": { "$ref": "#/$defs/globalExecution" },
32
+ "current": { "$ref": "#/$defs/currentAuthority" },
33
+ "axis_states": { "$ref": "#/$defs/axisStates" },
34
+ "snapshots": { "type": "array", "items": { "$ref": "#/$defs/snapshot" } },
35
+ "lineage": { "oneOf": [{ "$ref": "#/$defs/lineage" }, { "type": "null" }] }
36
+ },
37
+ "oneOf": [
38
+ {
39
+ "required": ["query", "work_order", "works", "events", "activities", "windows"],
40
+ "properties": {
41
+ "operation": { "enum": ["work.list", "work.show", "event.list", "event.show", "activity.list", "activity.show", "window.list", "window.show"] },
42
+ "query": {}, "work_order": {}, "works": {}, "events": {}, "activities": {}, "windows": {}
43
+ }
44
+ },
45
+ {
46
+ "required": ["observation_capability", "normalized_request", "evidence", "selected_work_order", "works", "window", "membership_occurrences", "aggregates", "global_execution"],
47
+ "properties": {
48
+ "operation": { "enum": ["work.observe", "window.observe"] },
49
+ "observation_capability": {}, "normalized_request": {},
50
+ "evidence": { "$ref": "#/$defs/currentEvidence" },
51
+ "selected_work_order": {}, "works": {}, "window": {},
52
+ "membership_occurrences": {}, "aggregates": {}, "global_execution": {}
53
+ }
54
+ },
55
+ {
56
+ "required": ["history_capability", "normalized_request", "current", "evidence", "axis_states", "snapshots", "lineage"],
57
+ "properties": {
58
+ "operation": { "enum": ["work.observe", "window.observe"] },
59
+ "history_capability": {}, "normalized_request": {}, "current": {},
60
+ "evidence": { "$ref": "#/$defs/historicalEvidence" },
61
+ "axis_states": {}, "snapshots": {}, "lineage": {}
62
+ }
63
+ }
64
+ ],
65
+ "additionalProperties": false,
66
+ "$defs": {
67
+ "query": {
68
+ "type": "object", "required": ["id"],
69
+ "properties": { "id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" } },
70
+ "additionalProperties": false
71
+ },
72
+ "reference": {
73
+ "type": "object", "required": ["id", "qualified_id", "span"],
74
+ "properties": { "id": { "type": "string" }, "qualified_id": { "type": "string" }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" } },
75
+ "additionalProperties": false
76
+ },
77
+ "description": {
78
+ "type": "object", "required": ["value", "style", "span", "content_span"],
79
+ "properties": {
80
+ "value": { "type": "string" }, "style": { "enum": ["quoted", "block"] },
81
+ "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" },
82
+ "content_span": { "oneOf": [{ "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, { "type": "null" }] }
83
+ },
84
+ "additionalProperties": false
85
+ },
86
+ "workSource": {
87
+ "type": "object",
88
+ "required": ["kind", "id", "qualified_id", "title", "description", "events", "activities", "milestone_links", "task_links", "depends_on", "span", "id_span", "title_span"],
89
+ "properties": {
90
+ "kind": { "const": "work" }, "id": { "type": "string" }, "qualified_id": { "type": "string" }, "title": { "type": "string" },
91
+ "description": { "oneOf": [{ "$ref": "#/$defs/description" }, { "type": "null" }] },
92
+ "events": { "$ref": "#/$defs/references" }, "activities": { "$ref": "#/$defs/references" },
93
+ "milestone_links": { "$ref": "#/$defs/references" }, "task_links": { "$ref": "#/$defs/references" }, "depends_on": { "$ref": "#/$defs/references" },
94
+ "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "id_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "title_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
95
+ },
96
+ "additionalProperties": false
97
+ },
98
+ "eventSource": {
99
+ "type": "object",
100
+ "required": ["kind", "id", "qualified_id", "title", "description", "tags", "source", "span", "id_span", "title_span"],
101
+ "properties": {
102
+ "kind": { "const": "event" }, "id": { "type": "string" }, "qualified_id": { "type": "string" }, "title": { "type": "string" },
103
+ "description": { "oneOf": [{ "$ref": "#/$defs/description" }, { "type": "null" }] },
104
+ "tags": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "source": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
105
+ "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "id_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "title_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
106
+ },
107
+ "additionalProperties": false
108
+ },
109
+ "durationSource": {
110
+ "type": "object", "required": ["source_text", "value", "unit", "span"],
111
+ "properties": {
112
+ "source_text": { "type": "string" }, "value": { "$ref": "Perttool.Common.v1.schema.json#/$defs/rational" },
113
+ "unit": { "enum": ["day", "hour", "point"] }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
114
+ }, "additionalProperties": false
115
+ },
116
+ "estimateSource": {
117
+ "type": "object", "required": ["optimistic", "most_likely", "pessimistic", "span"],
118
+ "properties": {
119
+ "optimistic": { "$ref": "#/$defs/durationSource" }, "most_likely": { "$ref": "#/$defs/durationSource" },
120
+ "pessimistic": { "$ref": "#/$defs/durationSource" }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
121
+ }, "additionalProperties": false
122
+ },
123
+ "requirementSource": {
124
+ "type": "object", "required": ["resource_id", "qualified_resource_id", "units", "span"],
125
+ "properties": {
126
+ "resource_id": { "type": "string" }, "qualified_resource_id": { "type": "string" },
127
+ "units": { "type": "integer", "minimum": 1 }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
128
+ }, "additionalProperties": false
129
+ },
130
+ "instantSource": {
131
+ "type": "object", "required": ["source_text", "instant_seconds", "offset_minutes", "span"],
132
+ "properties": {
133
+ "source_text": { "type": "string" }, "instant_seconds": { "$ref": "Perttool.Common.v1.schema.json#/$defs/rational" },
134
+ "offset_minutes": { "type": "integer", "minimum": -1439, "maximum": 1439 }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
135
+ }, "additionalProperties": false
136
+ },
137
+ "whenSource": {
138
+ "type": "object", "required": ["event", "direction", "value", "span"],
139
+ "properties": {
140
+ "event": { "enum": ["start", "finish"] }, "direction": { "enum": ["earliest", "latest"] },
141
+ "value": { "$ref": "#/$defs/instantSource" }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
142
+ }, "additionalProperties": false
143
+ },
144
+ "activitySource": {
145
+ "type": "object",
146
+ "required": ["kind", "id", "qualified_id", "from", "to", "title", "description", "duration", "estimate", "priority", "requirements", "owner", "tags", "source", "calendar_id", "when", "deadline", "span", "id_span", "title_span"],
147
+ "properties": {
148
+ "kind": { "const": "activity" }, "id": { "type": "string" }, "qualified_id": { "type": "string" },
149
+ "from": { "$ref": "#/$defs/reference" }, "to": { "$ref": "#/$defs/reference" }, "title": { "type": "string" },
150
+ "description": { "oneOf": [{ "$ref": "#/$defs/description" }, { "type": "null" }] },
151
+ "duration": { "oneOf": [{ "$ref": "#/$defs/durationSource" }, { "type": "null" }] },
152
+ "estimate": { "oneOf": [{ "$ref": "#/$defs/estimateSource" }, { "type": "null" }] },
153
+ "priority": { "type": ["integer", "null"] }, "requirements": { "type": "array", "items": { "$ref": "#/$defs/requirementSource" } },
154
+ "owner": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "tags": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
155
+ "source": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "calendar_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
156
+ "when": { "type": "array", "items": { "$ref": "#/$defs/whenSource" } }, "deadline": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableCalendarValue" },
157
+ "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "id_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "title_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
158
+ },
159
+ "additionalProperties": false
160
+ },
161
+ "references": { "type": "array", "items": { "$ref": "#/$defs/reference" } },
162
+ "windowSource": {
163
+ "type": "object",
164
+ "required": ["kind", "id", "qualified_id", "title", "objective", "start", "end", "works", "span", "id_span", "title_span", "objective_span"],
165
+ "properties": {
166
+ "kind": { "const": "window" }, "id": { "type": "string" }, "qualified_id": { "type": "string" }, "title": { "type": "string" }, "objective": { "type": "string" },
167
+ "start": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableCalendarValue" }, "end": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableCalendarValue" },
168
+ "works": { "$ref": "#/$defs/references" }, "span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" },
169
+ "id_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "title_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }, "objective_span": { "$ref": "Perttool.Common.v1.schema.json#/$defs/span" }
170
+ },
171
+ "additionalProperties": false
172
+ },
173
+ "selection": {
174
+ "oneOf": [
175
+ { "$ref": "#/$defs/poolSelection" }, { "$ref": "#/$defs/workSelection" },
176
+ { "$ref": "#/$defs/persistedSelection" }, { "$ref": "#/$defs/adHocSelection" }
177
+ ]
178
+ },
179
+ "poolSelection": { "type": "object", "required": ["kind"], "properties": { "kind": { "const": "pool" } }, "additionalProperties": false },
180
+ "workSelection": {
181
+ "type": "object", "required": ["kind", "work_ids"],
182
+ "properties": { "kind": { "const": "work" }, "work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" } }, "additionalProperties": false
183
+ },
184
+ "persistedSelection": {
185
+ "type": "object", "required": ["kind", "window_id"],
186
+ "properties": { "kind": { "const": "persisted" }, "window_id": { "type": "string" } }, "additionalProperties": false
187
+ },
188
+ "adHocSelection": {
189
+ "type": "object", "required": ["kind", "title", "objective", "start", "end", "work_ids"],
190
+ "properties": {
191
+ "kind": { "const": "ad_hoc" }, "title": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
192
+ "objective": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "start": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
193
+ "end": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
194
+ }, "additionalProperties": false
195
+ },
196
+ "closeDisposition": {
197
+ "type": "object", "required": ["work_id", "disposition"],
198
+ "properties": { "work_id": { "type": "string" }, "disposition": { "enum": ["carried_over", "retained_backlog", "archive_requested"] } }, "additionalProperties": false
199
+ },
200
+ "request": {
201
+ "type": "object", "required": ["request_schema_version", "source_digest", "selection", "observation_at", "close_dispositions"],
202
+ "properties": {
203
+ "request_schema_version": { "const": "Perttool.PlanningObservationRequest.v1" }, "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
204
+ "selection": { "$ref": "#/$defs/selection" }, "observation_at": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
205
+ "close_dispositions": { "type": "array", "items": { "$ref": "#/$defs/closeDisposition" } }
206
+ }, "additionalProperties": false
207
+ },
208
+ "currentEvidence": {
209
+ "type": "object", "required": ["mode", "state", "source_digest", "history_requested"],
210
+ "properties": { "mode": { "const": "current" }, "state": { "$ref": "#/$defs/evidenceState" }, "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" }, "history_requested": { "const": false } },
211
+ "additionalProperties": false
212
+ },
213
+ "evidenceState": { "enum": ["complete", "incomplete", "unavailable"] },
214
+ "criterion": {
215
+ "type": "object",
216
+ "required": ["criterion_id", "required", "evidence_kind", "commitment", "state", "effective_receipt_id", "evidence_reference", "evidence_revision", "verifier", "asserted_at", "waiver_reason", "revoked_receipt_ids"],
217
+ "properties": {
218
+ "criterion_id": { "type": "string" }, "required": { "type": "boolean" }, "evidence_kind": { "type": "string" }, "commitment": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
219
+ "state": { "enum": ["pending", "satisfied", "failed", "unavailable", "waived"] }, "effective_receipt_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
220
+ "evidence_reference": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "evidence_revision": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
221
+ "verifier": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "asserted_at": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
222
+ "waiver_reason": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "revoked_receipt_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
223
+ }, "additionalProperties": false
224
+ },
225
+ "taskObservation": {
226
+ "type": "object", "required": ["task_id", "status", "actuals_coverage", "work_event_ids", "complete", "attribution"],
227
+ "properties": {
228
+ "task_id": { "type": "string" }, "status": { "enum": ["planned", "active", "blocked", "suspended", "done"] },
229
+ "actuals_coverage": { "enum": ["complete", "open", "finish_only", "unrecorded", "unavailable"] }, "work_event_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
230
+ "complete": { "type": "boolean" }, "attribution": { "enum": ["exclusive", "non_exclusive"] }
231
+ }, "additionalProperties": false
232
+ },
233
+ "milestoneObservation": {
234
+ "type": "object", "required": ["milestone_id", "closure", "acceptance", "criteria", "evidence_complete", "attribution"],
235
+ "properties": {
236
+ "milestone_id": { "type": "string" }, "closure": { "enum": ["unreached", "reached"] }, "acceptance": { "enum": ["not_declared", "pending", "accepted", "failed", "unavailable"] },
237
+ "criteria": { "type": "array", "items": { "$ref": "#/$defs/criterion" } }, "evidence_complete": { "type": "boolean" }, "attribution": { "enum": ["exclusive", "non_exclusive"] }
238
+ }, "additionalProperties": false
239
+ },
240
+ "refinement": {
241
+ "type": "object", "required": ["residual_description_present", "event_ids", "activity_ids", "milestone_link_ids", "task_link_ids", "uncovered_dependency_ids"],
242
+ "properties": {
243
+ "residual_description_present": { "type": "boolean" }, "event_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
244
+ "activity_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "milestone_link_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
245
+ "task_link_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "uncovered_dependency_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
246
+ }, "additionalProperties": false
247
+ },
248
+ "execution": {
249
+ "type": "object", "required": ["state", "activity_obligation_ids", "unprojected_activity_ids", "tasks"],
250
+ "properties": {
251
+ "state": { "enum": ["complete", "partial", "uncovered", "unknown", "unavailable"] }, "activity_obligation_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
252
+ "unprojected_activity_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "tasks": { "type": "array", "items": { "$ref": "#/$defs/taskObservation" } }
253
+ }, "additionalProperties": false
254
+ },
255
+ "outcome": {
256
+ "type": "object", "required": ["state", "milestones"],
257
+ "properties": { "state": { "$ref": "#/$defs/evidenceState" }, "milestones": { "type": "array", "items": { "$ref": "#/$defs/milestoneObservation" } } }, "additionalProperties": false
258
+ },
259
+ "organization": {
260
+ "type": "object", "required": ["global_rank", "dependency_ids", "dependent_ids", "dependency_cycle_ids", "window_ids", "trace_useful", "archiveable"],
261
+ "properties": {
262
+ "global_rank": { "type": "integer", "minimum": 0 }, "dependency_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
263
+ "dependent_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "dependency_cycle_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
264
+ "window_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "trace_useful": { "type": "boolean" }, "archiveable": { "type": "boolean" }
265
+ }, "additionalProperties": false
266
+ },
267
+ "workObservation": {
268
+ "type": "object", "required": ["work_id", "title", "refinement", "execution", "outcome", "organization", "close_disposition"],
269
+ "properties": {
270
+ "work_id": { "type": "string" }, "title": { "type": "string" }, "refinement": { "$ref": "#/$defs/refinement" },
271
+ "execution": { "$ref": "#/$defs/execution" }, "outcome": { "$ref": "#/$defs/outcome" }, "organization": { "$ref": "#/$defs/organization" },
272
+ "close_disposition": { "enum": ["carried_over", "retained_backlog", "archive_requested", "not_applicable"] }
273
+ }, "additionalProperties": false
274
+ },
275
+ "windowSnapshot": {
276
+ "type": "object", "required": ["kind", "qualified_id", "title", "objective", "start", "end", "work_ids"],
277
+ "properties": {
278
+ "kind": { "enum": ["persisted", "ad_hoc"] }, "qualified_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
279
+ "title": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "objective": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
280
+ "start": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "end": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
281
+ "work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
282
+ }, "additionalProperties": false
283
+ },
284
+ "temporalOverlap": {
285
+ "type": "object", "required": ["window_id", "state", "intersection_start", "intersection_end", "cause"],
286
+ "properties": {
287
+ "window_id": { "type": "string" }, "state": { "enum": ["overlap", "disjoint", "unavailable"] },
288
+ "intersection_start": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "intersection_end": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
289
+ "cause": { "enum": ["incomparable_temporal_kinds", null] }
290
+ }, "additionalProperties": false
291
+ },
292
+ "temporalPosition": {
293
+ "type": "object", "required": ["state", "observation_value", "source", "cause"],
294
+ "properties": {
295
+ "state": { "enum": ["before", "inside", "after", "unbounded", "unavailable"] }, "observation_value": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
296
+ "source": { "enum": ["request", "project_as_of", null] }, "cause": { "enum": ["missing_observation_value", "incomparable_temporal_kinds", null] }
297
+ }, "additionalProperties": false
298
+ },
299
+ "windowObservation": {
300
+ "type": "object", "required": ["window", "objective", "temporal_position", "temporal_overlaps", "selected_execution"],
301
+ "properties": {
302
+ "window": { "$ref": "#/$defs/windowSnapshot" }, "objective": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
303
+ "temporal_position": { "$ref": "#/$defs/temporalPosition" }, "temporal_overlaps": { "type": "array", "items": { "$ref": "#/$defs/temporalOverlap" } },
304
+ "selected_execution": { "enum": ["complete", "partial", "uncovered", "unknown", "unavailable"] }
305
+ }, "additionalProperties": false
306
+ },
307
+ "membership": {
308
+ "type": "object", "required": ["window_id", "work_id", "selected"],
309
+ "properties": { "window_id": { "type": "string" }, "work_id": { "type": "string" }, "selected": { "type": "boolean" } }, "additionalProperties": false
310
+ },
311
+ "aggregates": {
312
+ "type": "object", "required": ["unique_work_ids", "unique_task_ids", "unique_milestone_ids", "unique_work_event_ids", "completed_task_ids", "accepted_milestone_ids", "membership_occurrence_count"],
313
+ "properties": {
314
+ "unique_work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "unique_task_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
315
+ "unique_milestone_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "unique_work_event_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
316
+ "completed_task_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "accepted_milestone_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
317
+ "membership_occurrence_count": { "type": "integer", "minimum": 0 }
318
+ }, "additionalProperties": false
319
+ },
320
+ "globalExecution": {
321
+ "type": "object", "required": ["evidence_state", "recommended_task_ids", "startable_task_ids"],
322
+ "properties": { "evidence_state": { "$ref": "#/$defs/evidenceState" }, "recommended_task_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "startable_task_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" } },
323
+ "additionalProperties": false
324
+ },
325
+ "coreObservation": {
326
+ "type": "object",
327
+ "required": ["schema_version", "observation_capability", "operation", "ok", "document_id", "source_digest", "normalized_request", "evidence", "selected_work_order", "works", "window", "membership_occurrences", "aggregates", "global_execution", "diagnostics"],
328
+ "properties": {
329
+ "schema_version": { "const": "Perttool.PlanningPoolResult.v1" }, "observation_capability": { "const": "perttool.planning-observation-core@1" }, "operation": { "const": "observe" },
330
+ "ok": { "type": "boolean" }, "document_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
331
+ "normalized_request": { "oneOf": [{ "$ref": "#/$defs/request" }, { "type": "null" }] }, "evidence": { "$ref": "#/$defs/currentEvidence" },
332
+ "selected_work_order": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "works": { "type": "array", "items": { "$ref": "#/$defs/workObservation" } },
333
+ "window": { "oneOf": [{ "$ref": "#/$defs/windowObservation" }, { "type": "null" }] }, "membership_occurrences": { "type": "array", "items": { "$ref": "#/$defs/membership" } },
334
+ "aggregates": { "$ref": "#/$defs/aggregates" }, "global_execution": { "$ref": "#/$defs/globalExecution" }, "diagnostics": { "$ref": "Perttool.Common.v1.schema.json#/$defs/diagnostics" }
335
+ }, "additionalProperties": false
336
+ },
337
+ "limits": {
338
+ "type": "object", "required": ["inspected_commits", "raw_bytes_per_snapshot", "aggregate_raw_snapshot_bytes"],
339
+ "properties": { "inspected_commits": { "type": "integer", "minimum": 0 }, "raw_bytes_per_snapshot": { "type": "integer", "minimum": 0 }, "aggregate_raw_snapshot_bytes": { "type": "integer", "minimum": 0 } },
340
+ "additionalProperties": false
341
+ },
342
+ "historicalCause": {
343
+ "type": "object", "required": ["cause", "subject", "commit_id", "limit", "actual"],
344
+ "properties": {
345
+ "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", "hard_limit", "ambiguous_path", "target_changed"] },
346
+ "subject": { "enum": ["repository", "endpoint", "lower_boundary", "target_path", "inspection"] }, "commit_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
347
+ "limit": { "enum": ["inspectedCommits", "rawBytesPerSnapshot", "aggregateRawSnapshotBytes", null] }, "actual": { "type": ["integer", "null"] }
348
+ }, "additionalProperties": false
349
+ },
350
+ "historicalEvidence": {
351
+ "type": "object",
352
+ "required": ["mode", "state", "ancestry_profile", "repository_id", "repository_relative_path", "repository_read_snapshot_id", "requested_endpoint", "resolved_endpoint", "requested_lower_boundary", "resolved_lower_boundary", "current_source_digest", "limits", "causes", "continuity_qualified", "forced_loss_distinguishable"],
353
+ "properties": {
354
+ "mode": { "const": "historical" }, "state": { "$ref": "#/$defs/evidenceState" }, "ancestry_profile": { "const": "first_parent" },
355
+ "repository_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "repository_relative_path": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
356
+ "repository_read_snapshot_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "requested_endpoint": { "type": "string" },
357
+ "resolved_endpoint": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "requested_lower_boundary": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
358
+ "resolved_lower_boundary": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "current_source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
359
+ "limits": { "$ref": "#/$defs/limits" }, "causes": { "type": "array", "items": { "$ref": "#/$defs/historicalCause" } },
360
+ "continuity_qualified": { "type": "boolean" }, "forced_loss_distinguishable": { "const": false }
361
+ }, "additionalProperties": false
362
+ },
363
+ "axisStates": {
364
+ "type": "object", "required": ["refinement", "execution", "outcome", "organization", "temporal", "close_disposition"],
365
+ "properties": {
366
+ "refinement": { "$ref": "#/$defs/axisState" }, "execution": { "$ref": "#/$defs/axisState" }, "outcome": { "$ref": "#/$defs/axisState" },
367
+ "organization": { "$ref": "#/$defs/axisState" }, "temporal": { "$ref": "#/$defs/axisState" }, "close_disposition": { "$ref": "#/$defs/axisState" }
368
+ }, "additionalProperties": false
369
+ },
370
+ "axisState": { "enum": ["complete", "unknown", "unavailable"] },
371
+ "currentAuthority": {
372
+ "type": "object", "required": ["state", "source_digest", "observation", "overrides_historical_facts"],
373
+ "properties": {
374
+ "state": { "enum": ["observed", "selection_absent", "unavailable"] }, "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" },
375
+ "observation": { "oneOf": [{ "$ref": "#/$defs/coreObservation" }, { "type": "null" }] }, "overrides_historical_facts": { "const": true }
376
+ }, "additionalProperties": false
377
+ },
378
+ "snapshotBasis": {
379
+ "type": "object", "required": ["repository_id", "repository_relative_path", "repository_read_snapshot_id", "commit_id", "parent_commit_ids", "blob_id", "source_digest", "recorded_at", "is_merge_commit", "is_endpoint", "is_lower_boundary"],
380
+ "properties": {
381
+ "repository_id": { "type": "string" }, "repository_relative_path": { "type": "string" }, "repository_read_snapshot_id": { "type": "string" }, "commit_id": { "type": "string" },
382
+ "parent_commit_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "blob_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
383
+ "source_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableDigest" }, "recorded_at": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" },
384
+ "is_merge_commit": { "type": "boolean" }, "is_endpoint": { "type": "boolean" }, "is_lower_boundary": { "type": "boolean" }
385
+ }, "additionalProperties": false
386
+ },
387
+ "snapshot": {
388
+ "type": "object", "required": ["basis", "validity", "document_id", "selection_state", "observation", "global_execution_evidence", "diagnostic_codes"],
389
+ "properties": {
390
+ "basis": { "$ref": "#/$defs/snapshotBasis" }, "validity": { "enum": ["planning_valid", "planning_absent", "source_missing", "source_invalid", "source_binding_invalid"] },
391
+ "document_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "selection_state": { "enum": ["observed", "absent", "unavailable"] },
392
+ "observation": { "oneOf": [{ "$ref": "#/$defs/coreObservation" }, { "type": "null" }] }, "global_execution_evidence": { "$ref": "#/$defs/evidenceState" },
393
+ "diagnostic_codes": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
394
+ }, "additionalProperties": false
395
+ },
396
+ "epoch": {
397
+ "type": "object", "required": ["ordinal", "first_observed_commit_id", "last_observed_commit_id", "value_digest"],
398
+ "properties": { "ordinal": { "type": "integer", "minimum": 0 }, "first_observed_commit_id": { "type": "string" }, "last_observed_commit_id": { "type": "string" }, "value_digest": { "$ref": "Perttool.Common.v1.schema.json#/$defs/digest" } },
399
+ "additionalProperties": false
400
+ },
401
+ "workOccurrence": { "$ref": "#/$defs/workOccurrenceObject" },
402
+ "workOccurrenceObject": {
403
+ "type": "object", "required": ["occurrence_id", "work_id", "first_observed_commit_id", "last_observed_commit_id", "retired_at_commit_id", "ended_by", "observed_commit_ids", "semantic_epochs"],
404
+ "properties": {
405
+ "occurrence_id": { "type": "string" }, "work_id": { "type": "string" }, "first_observed_commit_id": { "type": "string" }, "last_observed_commit_id": { "type": "string" },
406
+ "retired_at_commit_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "ended_by": { "$ref": "#/$defs/occurrenceEnd" },
407
+ "observed_commit_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "semantic_epochs": { "type": "array", "items": { "$ref": "#/$defs/epoch" } }
408
+ }, "additionalProperties": false
409
+ },
410
+ "windowOccurrence": {
411
+ "type": "object", "required": ["occurrence_id", "window_id", "first_observed_commit_id", "last_observed_commit_id", "retired_at_commit_id", "ended_by", "observed_commit_ids", "semantic_epochs"],
412
+ "properties": {
413
+ "occurrence_id": { "type": "string" }, "window_id": { "type": "string" }, "first_observed_commit_id": { "type": "string" }, "last_observed_commit_id": { "type": "string" },
414
+ "retired_at_commit_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "ended_by": { "$ref": "#/$defs/occurrenceEnd" },
415
+ "observed_commit_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "semantic_epochs": { "type": "array", "items": { "$ref": "#/$defs/epoch" } }
416
+ }, "additionalProperties": false
417
+ },
418
+ "occurrenceEnd": { "enum": ["current_endpoint", "removed", "gap", "historical_endpoint"] },
419
+ "relationOccurrence": {
420
+ "type": "object", "required": ["occurrence_id", "kind", "owner_id", "target_id", "first_observed_commit_id", "last_observed_commit_id", "retired_at_commit_id", "ended_by", "observed_commit_ids", "fact_epochs"],
421
+ "properties": {
422
+ "occurrence_id": { "type": "string" }, "kind": { "enum": ["work_event", "work_activity", "work_milestone_projection", "work_task_projection", "work_dependency", "window_membership"] },
423
+ "owner_id": { "type": "string" }, "target_id": { "type": "string" }, "first_observed_commit_id": { "type": "string" }, "last_observed_commit_id": { "type": "string" },
424
+ "retired_at_commit_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "ended_by": { "$ref": "#/$defs/occurrenceEnd" },
425
+ "observed_commit_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "fact_epochs": { "type": "array", "items": { "$ref": "#/$defs/epoch" } }
426
+ }, "additionalProperties": false
427
+ },
428
+ "transition": {
429
+ "type": "object", "required": ["from_commit_id", "to_commit_id", "kind", "source_changed", "semantic_changed", "added_work_ids", "removed_work_ids", "added_window_ids", "removed_window_ids", "added_relation_keys", "removed_relation_keys", "removed_task_ids", "removed_milestone_ids", "strict_canonical_advance", "continuity"],
430
+ "properties": {
431
+ "from_commit_id": { "$ref": "Perttool.Common.v1.schema.json#/$defs/nullableString" }, "to_commit_id": { "type": "string" },
432
+ "kind": { "enum": ["baseline", "representation", "planning_change", "contraction", "window_close", "canonical_advance", "gap"] }, "source_changed": { "type": "boolean" }, "semantic_changed": { "type": "boolean" },
433
+ "added_work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "removed_work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
434
+ "added_window_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "removed_window_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
435
+ "added_relation_keys": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "removed_relation_keys": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
436
+ "removed_task_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "removed_milestone_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" },
437
+ "strict_canonical_advance": { "type": "boolean" }, "continuity": { "enum": ["continuous", "gap"] }
438
+ }, "additionalProperties": false
439
+ },
440
+ "carry": {
441
+ "type": "object", "required": ["work_id", "target_window_id"],
442
+ "properties": { "work_id": { "type": "string" }, "target_window_id": { "type": "string" } }, "additionalProperties": false
443
+ },
444
+ "windowClose": {
445
+ "type": "object", "required": ["window_id", "from_commit_id", "to_commit_id", "member_work_ids", "carried_over", "unrecorded_disposition_work_ids", "exact_mutation_request_available"],
446
+ "properties": {
447
+ "window_id": { "type": "string" }, "from_commit_id": { "type": "string" }, "to_commit_id": { "type": "string" },
448
+ "member_work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "carried_over": { "type": "array", "items": { "$ref": "#/$defs/carry" } },
449
+ "unrecorded_disposition_work_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }, "exact_mutation_request_available": { "const": false }
450
+ }, "additionalProperties": false
451
+ },
452
+ "gap": {
453
+ "type": "object", "required": ["commit_id", "cause", "axis_states"],
454
+ "properties": {
455
+ "commit_id": { "type": "string" }, "cause": { "enum": ["planning_absent", "source_missing", "source_invalid", "source_binding_invalid", "project_discontinuity", "missing_or_forced_loss"] },
456
+ "axis_states": { "$ref": "#/$defs/axisStates" }
457
+ }, "additionalProperties": false
458
+ },
459
+ "lineage": {
460
+ "type": "object", "required": ["project_id", "work_occurrences", "window_occurrences", "relation_occurrences", "transitions", "window_closes", "gaps", "ambiguous_identity_ids"],
461
+ "properties": {
462
+ "project_id": { "type": "string" }, "work_occurrences": { "type": "array", "items": { "$ref": "#/$defs/workOccurrence" } },
463
+ "window_occurrences": { "type": "array", "items": { "$ref": "#/$defs/windowOccurrence" } }, "relation_occurrences": { "type": "array", "items": { "$ref": "#/$defs/relationOccurrence" } },
464
+ "transitions": { "type": "array", "items": { "$ref": "#/$defs/transition" } }, "window_closes": { "type": "array", "items": { "$ref": "#/$defs/windowClose" } },
465
+ "gaps": { "type": "array", "items": { "$ref": "#/$defs/gap" } }, "ambiguous_identity_ids": { "$ref": "Perttool.Common.v1.schema.json#/$defs/stringArray" }
466
+ }, "additionalProperties": false
467
+ }
468
+ }
469
+ }