@harmonyos-arkts/d2h 0.1.11 → 0.1.13

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 (126) hide show
  1. package/.claude-plugin/marketplace.json +15 -13
  2. package/.claude-plugin/plugin.json +13 -7
  3. package/AGENTS.md +5 -5
  4. package/README.md +212 -212
  5. package/agents/android-to-hmos-00-orchestrator.md +318 -318
  6. package/agents/d2h.md +157 -157
  7. package/dist/bin/install-opencode.js +30 -30
  8. package/docs/environment-check.md +86 -86
  9. package/install-opencode.sh +160 -160
  10. package/opencode/agents.json +16 -16
  11. package/opencode/vscode-d2h-package.json +7 -7
  12. package/opencode/vscode-d2h-plugin.mjs +29 -29
  13. package/package.json +54 -54
  14. package/schemas/android-source-manifest.schema.json +25 -25
  15. package/schemas/checkpoint-provenance.schema.json +67 -67
  16. package/schemas/final-acceptance.schema.json +29 -29
  17. package/schemas/managed-evidence-index.schema.json +15 -15
  18. package/schemas/managed-evidence.schema.json +114 -114
  19. package/schemas/migration-config.schema.json +51 -51
  20. package/schemas/migration-report-index.schema.json +39 -39
  21. package/schemas/migration-report-item.schema.json +51 -51
  22. package/schemas/migration-report-summary.schema.json +25 -25
  23. package/schemas/migration-status.schema.json +202 -202
  24. package/schemas/preflight.schema.json +60 -60
  25. package/schemas/source-order-audit.schema.json +16 -16
  26. package/schemas/source-provenance-event.schema.json +19 -19
  27. package/schemas/spec-app-shard.schema.json +45 -45
  28. package/schemas/spec-fact-corrections-shard.schema.json +13 -13
  29. package/schemas/spec-features-shard.schema.json +43 -43
  30. package/schemas/spec-index.schema.json +26 -26
  31. package/schemas/spec-interactions-shard.schema.json +40 -40
  32. package/schemas/spec-page.schema.json +98 -98
  33. package/schemas/spec-pages-index.schema.json +1 -1
  34. package/schemas/spec-unresolved-shard.schema.json +1 -1
  35. package/schemas/task-envelope.schema.json +109 -109
  36. package/schemas/task-plan.schema.json +341 -341
  37. package/scripts/check-environment.mjs +320 -320
  38. package/skills/android2hmos_resources_convert/SKILL.md +180 -180
  39. package/skills/android2hmos_resources_convert/references/image-conversion-rules.md +230 -230
  40. package/skills/android2hmos_resources_convert/references/svg-fix-patterns.md +175 -175
  41. package/skills/android2hmos_resources_convert/references/xml-drawable-to-svg-rules.md +513 -513
  42. package/skills/arkts-app-identity/SKILL.md +238 -238
  43. package/skills/arkts-i18n/SKILL.md +496 -496
  44. package/skills/arkts-i18n/evals/evals.json +84 -84
  45. package/skills/arkts-i18n/references/code-examples.md +302 -302
  46. package/skills/arkts-i18n/references/common-pitfalls.md +391 -391
  47. package/skills/arkts-i18n/references/dynamic-language-switch.md +604 -604
  48. package/skills/arkts-i18n/references/hardcoded-string-scanner.md +348 -348
  49. package/skills/arkts-i18n/references/language-codes.md +104 -104
  50. package/skills/arkts-i18n/references/resource-file-structure.md +775 -775
  51. package/skills/arkts-i18n/references/static-vs-dynamic.md +242 -242
  52. package/skills/arkts-i18n/references/v1-compat.md +244 -244
  53. package/skills/arkts-i18n/scripts/audit_i18n_completeness.sh +174 -174
  54. package/skills/arkts-icon-sizing/SKILL.md +211 -211
  55. package/skills/arkts-icon-sizing/scripts/icon_audit.py +131 -131
  56. package/skills/arkts-icon-sizing/scripts/icon_autofix.py +88 -88
  57. package/skills/arkts-icon-sizing/scripts/icon_dims.py +179 -179
  58. package/skills/arkts-icon-sizing/scripts/icon_fix.py +119 -119
  59. package/skills/arkts-mvvm-architecture/SKILL.md +613 -613
  60. package/skills/d2h-hypium-forge/SKILL.md +309 -309
  61. package/skills/d2h-hypium-forge/references/functional-spec-template.md +140 -140
  62. package/skills/d2h-hypium-forge/references/official-api.md +135 -135
  63. package/skills/d2h-hypium-forge/references/pitfalls.md +98 -98
  64. package/skills/d2h-hypium-forge/references/testability-template.md +71 -71
  65. package/skills/d2h-hypium-forge/scripts/_common_template.py +659 -659
  66. package/skills/d2h-hypium-forge/scripts/analyze_results.py +165 -165
  67. package/skills/d2h-hypium-forge/scripts/assert_audit.py +107 -107
  68. package/skills/d2h-hypium-forge/scripts/collect_runtime_pages.py +169 -169
  69. package/skills/d2h-hypium-forge/scripts/forge_report.py +325 -325
  70. package/skills/d2h-hypium-forge/scripts/inject_resource_ids.py +114 -114
  71. package/skills/d2h-hypium-forge/scripts/lint_asserts.py +80 -80
  72. package/skills/d2h-hypium-forge/scripts/lint_locate.py +60 -60
  73. package/skills/d2h-hypium-forge/scripts/merge_appgraph.py +249 -249
  74. package/skills/d2h-hypium-forge/scripts/precondition.py +140 -140
  75. package/skills/d2h-hypium-forge/scripts/preinject_ids.py +232 -232
  76. package/skills/d2h-hypium-forge/scripts/probe.py +197 -197
  77. package/skills/d2h-hypium-forge/scripts/run_direct.py +823 -823
  78. package/skills/d2h-hypium-forge/scripts/run_parallel.py +121 -121
  79. package/skills/d2h-hypium-forge/scripts/scan_features.py +255 -255
  80. package/skills/d2h-hypium-forge/scripts/upgrade_asserts.py +66 -66
  81. package/skills/d2h-hypium-forge/scripts/validate_scenarios.py +84 -84
  82. package/skills/d2h-page-develop/SKILL.md +112 -112
  83. package/skills/d2h-page-develop/agents/openai.yaml +7 -7
  84. package/skills/d2h-page-spec-generate/SKILL.md +206 -206
  85. package/skills/d2h-page-spec-generate/scripts/build_batch_report.py +227 -227
  86. package/skills/d2h-utg-ai-generate/SKILL.md +128 -128
  87. package/skills/d2h-utg-ai-generate/references/click-paths-schema.json +76 -76
  88. package/skills/d2h-utg-ai-generate/references/extraction-guide.md +34 -34
  89. package/skills/d2h-utg-ai-generate/references/facts-contract.md +96 -96
  90. package/skills/d2h-utg-ai-generate/references/page-schema.json +61 -61
  91. package/skills/d2h-utg-ai-generate/references/utg-schema.json +89 -89
  92. package/skills/d2h-utg-ai-generate/scripts/build_page_json.py +314 -314
  93. package/skills/d2h-utg-ai-generate/scripts/build_utg.py +123 -123
  94. package/skills/d2h-utg-ai-generate/scripts/capture_from_page_json.ts +280 -280
  95. package/skills/d2h-utg-ai-generate/scripts/utg_common.py +524 -524
  96. package/skills/d2h-utg-ai-generate/scripts/utg_html.py +489 -489
  97. package/skills/d2h-utg-ai-generate/scripts/validate_utg.py +69 -69
  98. package/skills/d2h-utg-ai-generate/scripts/vendor/D3-LICENSE +13 -13
  99. package/skills/d2h-utg-ai-generate/scripts/vendor/d3-7.9.0.min.js +2 -2
  100. package/skills/d2h-utg-ai-generate/tests/test_pipeline.py +369 -369
  101. package/skills/d2h-utg-static-generate/SKILL.md +73 -73
  102. package/skills/d2h-utg-static-generate/references/discoveries.md +38 -38
  103. package/skills/d2h-utg-static-generate/scripts/generate.py +499 -499
  104. package/skills/d2h-utg-static-generate/tests/test_static.py +335 -335
  105. package/skills/d2h-utg-static-generate/tests/verify-offline-html.py +60 -60
  106. package/skills/d2h-utg-static-generate/tests/verify-produced-fixture.py +131 -131
  107. package/skills/harmonyos-migration-playbook/SKILL.md +83 -83
  108. package/skills/harmonyos-migration-playbook/agents/openai.yaml +7 -7
  109. package/skills/harmonyos-migration-playbook/references/arkts-compile.md +24 -24
  110. package/skills/harmonyos-migration-playbook/references/harmony-runtime.md +53 -53
  111. package/skills/harmonyos-migration-playbook/references/lesson-lifecycle.md +45 -45
  112. package/skills/harmonyos-migration-playbook/references/protocol-e2e.md +23 -23
  113. package/skills/harmonyos-migration-playbook/references/ui-automation.md +53 -53
  114. package/skills/harmonyos-migration-playbook/references/windows-environment.md +38 -38
  115. package/skills/maintaining-migration-report/SKILL.md +144 -144
  116. package/skills/maintaining-migration-report/references/final-acceptance.md +48 -48
  117. package/skills/maintaining-migration-report/references/source-provenance.md +66 -66
  118. package/skills/managing-d2h-toolchain/SKILL.md +24 -24
  119. package/skills/managing-d2h-toolchain/environment-requirements.json +16 -16
  120. package/skills/managing-d2h-toolchain/scripts/manage-toolchain.mjs +98 -98
  121. package/skills/managing-d2h-toolchain/toolchain.json +16 -16
  122. package/skills/native-library-substitution/SKILL.md +384 -384
  123. package/skills/native-library-substitution/references/native-library-substitution.json +56905 -56905
  124. package/skills/native-library-substitution/references/native-library-substitution.md +163 -163
  125. package/skills/preparing-migration-workspace/SKILL.md +131 -131
  126. package/skills/reviewing-migration-process/SKILL.md +62 -62
@@ -1,341 +1,341 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://harmonyos-ai.dev/schemas/task-plan.schema.json",
4
- "title": "Android to HarmonyOS Execution Plan",
5
- "type": "object",
6
- "required": [
7
- "taskPlanVersion",
8
- "executionPlanVersion",
9
- "planningModelVersion",
10
- "factsAdapterVersion",
11
- "plannerPolicyVersion",
12
- "baseline",
13
- "planningPhase",
14
- "entryResolution",
15
- "behaviorResponsibilities",
16
- "pageWorkPackages",
17
- "tasks",
18
- "ownership",
19
- "behaviorOwnership",
20
- "fileConflictEdges",
21
- "planningWarnings"
22
- ],
23
- "properties": {
24
- "taskPlanVersion": { "const": "2.3.0" },
25
- "executionPlanVersion": { "const": "1.3.0" },
26
- "planningModelVersion": { "const": "2.0.0" },
27
- "factsAdapterVersion": { "const": "1.0.0" },
28
- "plannerPolicyVersion": { "const": "2.3.0" },
29
- "baseline": { "$ref": "#/$defs/baseline" },
30
- "planningPhase": {
31
- "description": "resolution projects each Resolution Behavior 1:1 into a transient Resolution Task; execution is entered only after Resolution is cleared and Coding Work Items are assembled once.",
32
- "enum": ["resolution", "execution"]
33
- },
34
- "entryResolution": { "$ref": "#/$defs/entryResolution" },
35
- "behaviorResponsibilities": {
36
- "type": "array",
37
- "items": { "$ref": "#/$defs/behavior" }
38
- },
39
- "pageWorkPackages": {
40
- "type": "array",
41
- "items": { "$ref": "#/$defs/workPackage" }
42
- },
43
- "tasks": {
44
- "description": "Phase-exclusive tasks: 1:1 Resolution Behavior projections in resolution phase, or frozen Coding Work Items in execution phase.",
45
- "type": "array",
46
- "items": { "$ref": "#/$defs/plannedTask" }
47
- },
48
- "ownership": { "$ref": "#/$defs/taskOwnership" },
49
- "behaviorOwnership": { "$ref": "#/$defs/behaviorOwnership" },
50
- "fileConflictEdges": {
51
- "type": "array",
52
- "items": { "$ref": "#/$defs/fileConflict" }
53
- },
54
- "planningWarnings": {
55
- "type": "array",
56
- "items": { "$ref": "#/$defs/warning" }
57
- }
58
- },
59
- "allOf": [
60
- {
61
- "if": { "properties": { "planningPhase": { "const": "resolution" } } },
62
- "then": {
63
- "properties": {
64
- "tasks": {
65
- "type": "array",
66
- "items": {
67
- "type": "object",
68
- "properties": {
69
- "type": { "const": "resolution" },
70
- "behaviorIds": { "type": "array", "minItems": 1, "maxItems": 1 },
71
- "workPackageId": { "const": null }
72
- }
73
- }
74
- },
75
- "pageWorkPackages": {
76
- "type": "array",
77
- "maxItems": 0
78
- }
79
- }
80
- }
81
- },
82
- {
83
- "if": { "properties": { "planningPhase": { "const": "execution" } } },
84
- "then": {
85
- "properties": {
86
- "tasks": {
87
- "type": "array",
88
- "items": {
89
- "type": "object",
90
- "properties": {
91
- "type": { "not": { "const": "resolution" } },
92
- "workPackageId": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" }
93
- }
94
- }
95
- }
96
- }
97
- }
98
- }
99
- ],
100
- "$defs": {
101
- "refs": {
102
- "type": "array",
103
- "uniqueItems": true,
104
- "items": { "type": "string", "minLength": 1 }
105
- },
106
- "baseline": {
107
- "type": "object",
108
- "required": ["factsSha256", "planningInputSha256", "androidFingerprint", "specVersion", "factsWireVersion"],
109
- "properties": {
110
- "factsSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
111
- "planningInputSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
112
- "androidFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
113
- "specVersion": { "type": "string", "minLength": 1 },
114
- "factsWireVersion": { "const": "2.0.0" }
115
- },
116
- "additionalProperties": false
117
- },
118
- "entryResolution": {
119
- "type": "object",
120
- "required": ["launcherSurfaceRefs", "launcherEntryRefs", "origin"],
121
- "properties": {
122
- "launcherSurfaceRefs": { "$ref": "#/$defs/refs" },
123
- "launcherEntryRefs": { "$ref": "#/$defs/refs" },
124
- "origin": { "enum": ["explicit-fact", "launch-entry-fact", "unresolved"] }
125
- },
126
- "additionalProperties": false
127
- },
128
- "warning": {
129
- "type": "object",
130
- "required": ["code", "message", "relatedRefs"],
131
- "properties": {
132
- "code": { "type": "string", "minLength": 1 },
133
- "message": { "type": "string", "minLength": 1 },
134
- "relatedRefs": { "$ref": "#/$defs/refs" }
135
- },
136
- "additionalProperties": false
137
- },
138
- "evidence": {
139
- "type": "object",
140
- "required": ["file", "symbol", "line", "endLine"],
141
- "properties": {
142
- "file": { "type": "string", "minLength": 1 },
143
- "symbol": { "type": ["string", "null"] },
144
- "line": { "type": ["integer", "null"], "minimum": 1 },
145
- "endLine": { "type": ["integer", "null"], "minimum": 1 }
146
- },
147
- "additionalProperties": false
148
- },
149
- "closure": {
150
- "type": "object",
151
- "required": ["entryRefs", "surfaceRefs", "controlRefs", "interactionRefs", "sourceEvidence", "codeRefs", "unresolvedRefs", "warningRefs", "requiresSourceReview"],
152
- "properties": {
153
- "entryRefs": { "$ref": "#/$defs/refs" },
154
- "surfaceRefs": { "$ref": "#/$defs/refs" },
155
- "controlRefs": { "$ref": "#/$defs/refs" },
156
- "interactionRefs": { "$ref": "#/$defs/refs" },
157
- "sourceEvidence": { "type": "array", "items": { "$ref": "#/$defs/evidence" } },
158
- "codeRefs": { "type": "array", "items": { "type": "object" } },
159
- "unresolvedRefs": { "$ref": "#/$defs/refs" },
160
- "warningRefs": { "$ref": "#/$defs/refs" },
161
- "requiresSourceReview": { "type": "boolean" }
162
- },
163
- "additionalProperties": false
164
- },
165
- "acceptance": {
166
- "type": "object",
167
- "required": ["observableOutcome", "requiredFactRefs", "verificationRequirements", "reportRefs"],
168
- "properties": {
169
- "observableOutcome": { "type": "string", "minLength": 1 },
170
- "observableOutcomes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
171
- "requiredFactRefs": { "$ref": "#/$defs/refs" },
172
- "verificationRequirements": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
173
- "reportRefs": { "$ref": "#/$defs/refs" }
174
- },
175
- "additionalProperties": false
176
- },
177
- "behaviorEstimate": {
178
- "type": "object",
179
- "required": ["factCount", "sourceFileCount", "traceNodeCount", "estimatedFactTokens", "downstreamUnlockCount"],
180
- "properties": {
181
- "factCount": { "type": "integer", "minimum": 0 },
182
- "sourceFileCount": { "type": "integer", "minimum": 0 },
183
- "traceNodeCount": { "type": "integer", "minimum": 0 },
184
- "estimatedFactTokens": { "type": "integer", "minimum": 0 },
185
- "downstreamUnlockCount": { "type": "integer", "minimum": 0 }
186
- },
187
- "additionalProperties": false
188
- },
189
- "behavior": {
190
- "type": "object",
191
- "required": ["id", "type", "title", "primaryFactRefs", "supportingFactRefs", "dependsOnBehaviorIds", "closure", "acceptance", "estimate"],
192
- "properties": {
193
- "id": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" },
194
- "type": { "$ref": "#/$defs/taskType" },
195
- "title": { "type": "string", "minLength": 1 },
196
- "primaryFactRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
197
- "supportingFactRefs": { "$ref": "#/$defs/refs" },
198
- "dependsOnBehaviorIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
199
- "closure": { "$ref": "#/$defs/closure" },
200
- "acceptance": { "$ref": "#/$defs/acceptance" },
201
- "estimate": { "$ref": "#/$defs/behaviorEstimate" }
202
- },
203
- "additionalProperties": false
204
- },
205
- "writeOwnership": {
206
- "type": "object",
207
- "required": ["ownedFiles", "readOnlyFiles", "exclusiveScopes", "forbiddenGlobalFiles"],
208
- "properties": {
209
- "ownedFiles": { "$ref": "#/$defs/refs" },
210
- "readOnlyFiles": { "$ref": "#/$defs/refs" },
211
- "exclusiveScopes": { "$ref": "#/$defs/refs" },
212
- "forbiddenGlobalFiles": { "$ref": "#/$defs/refs" }
213
- },
214
- "additionalProperties": false
215
- },
216
- "dependencyInterface": {
217
- "type": "object",
218
- "required": ["kind", "ref", "providerTaskId", "files", "errorModes", "orderingConstraints"],
219
- "properties": {
220
- "kind": { "enum": ["module", "ordering"] },
221
- "ref": { "type": "string", "minLength": 1 },
222
- "providerTaskId": { "type": ["string", "null"], "pattern": "^task:[a-f0-9]{16}$" },
223
- "files": { "$ref": "#/$defs/refs" },
224
- "errorModes": { "$ref": "#/$defs/refs" },
225
- "orderingConstraints": { "$ref": "#/$defs/refs" }
226
- },
227
- "additionalProperties": false
228
- },
229
- "readyGate": {
230
- "type": "object",
231
- "required": ["semanticsResolved", "dependencyInterfacesStable", "writeOwnershipResolved", "contextWithinBudget", "acceptanceExecutable"],
232
- "properties": {
233
- "semanticsResolved": { "type": "boolean" },
234
- "dependencyInterfacesStable": { "type": "boolean" },
235
- "writeOwnershipResolved": { "type": "boolean" },
236
- "contextWithinBudget": { "type": "boolean" },
237
- "acceptanceExecutable": { "type": "boolean" }
238
- },
239
- "additionalProperties": false
240
- },
241
- "taskEstimate": {
242
- "type": "object",
243
- "required": ["factCount", "sourceFileCount", "traceNodeCount", "estimatedFactTokens", "downstreamUnlockCount", "behaviorCount", "observableOutcomeCount", "productionFileCount", "testFileCount", "capabilityCount"],
244
- "properties": {
245
- "factCount": { "type": "integer", "minimum": 0 },
246
- "sourceFileCount": { "type": "integer", "minimum": 0 },
247
- "traceNodeCount": { "type": "integer", "minimum": 0 },
248
- "estimatedFactTokens": { "type": "integer", "minimum": 0 },
249
- "downstreamUnlockCount": { "type": "integer", "minimum": 0 },
250
- "behaviorCount": { "type": "integer", "minimum": 1 },
251
- "observableOutcomeCount": { "type": "integer", "minimum": 1 },
252
- "productionFileCount": { "type": "integer", "minimum": 0 },
253
- "testFileCount": { "type": "integer", "minimum": 0 },
254
- "capabilityCount": { "type": "integer", "minimum": 0 }
255
- },
256
- "additionalProperties": false
257
- },
258
- "plannedTask": {
259
- "type": "object",
260
- "required": ["id", "type", "title", "workPackageId", "canonicalPageRef", "primaryModule", "behaviorIds", "primaryFactRefs", "supportingFactRefs", "dependsOnTaskIds", "conflictsWithTaskIds", "writeOwnership", "dependencyInterfaces", "readyGate", "closure", "acceptance", "estimate"],
261
- "properties": {
262
- "id": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
263
- "type": { "$ref": "#/$defs/taskType" },
264
- "title": { "type": "string", "minLength": 1 },
265
- "workPackageId": { "type": ["string", "null"], "pattern": "^package:[a-f0-9]{16}$" },
266
- "canonicalPageRef": { "type": ["string", "null"] },
267
- "primaryModule": { "type": "string", "minLength": 1 },
268
- "behaviorIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
269
- "primaryFactRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
270
- "supportingFactRefs": { "$ref": "#/$defs/refs" },
271
- "dependsOnTaskIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
272
- "conflictsWithTaskIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
273
- "writeOwnership": { "$ref": "#/$defs/writeOwnership" },
274
- "dependencyInterfaces": { "type": "array", "items": { "$ref": "#/$defs/dependencyInterface" } },
275
- "readyGate": { "$ref": "#/$defs/readyGate" },
276
- "closure": { "$ref": "#/$defs/closure" },
277
- "acceptance": {
278
- "allOf": [
279
- { "$ref": "#/$defs/acceptance" },
280
- {
281
- "type": "object",
282
- "required": ["observableOutcomes"],
283
- "properties": {
284
- "observableOutcomes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
285
- }
286
- }
287
- ]
288
- },
289
- "estimate": { "$ref": "#/$defs/taskEstimate" }
290
- },
291
- "additionalProperties": false
292
- },
293
- "workPackage": {
294
- "type": "object",
295
- "required": ["id", "canonicalPageRef", "title", "surfaceRefs", "workItemIds", "dependsOnPackageIds", "serialLane", "exclusiveScopes"],
296
- "properties": {
297
- "id": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" },
298
- "canonicalPageRef": { "type": ["string", "null"] },
299
- "title": { "type": "string", "minLength": 1 },
300
- "surfaceRefs": { "$ref": "#/$defs/refs" },
301
- "workItemIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
302
- "dependsOnPackageIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" } },
303
- "serialLane": { "type": "boolean" },
304
- "exclusiveScopes": { "$ref": "#/$defs/refs" }
305
- },
306
- "additionalProperties": false
307
- },
308
- "fileConflict": {
309
- "type": "object",
310
- "required": ["leftTaskId", "rightTaskId", "reasons"],
311
- "properties": {
312
- "leftTaskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
313
- "rightTaskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
314
- "reasons": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
315
- },
316
- "additionalProperties": false
317
- },
318
- "taskOwnership": {
319
- "type": "object",
320
- "required": ["primaryOwnerByFactRef", "supportingTaskIdsByFactRef"],
321
- "properties": {
322
- "primaryOwnerByFactRef": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
323
- "supportingTaskIdsByFactRef": { "type": "object", "additionalProperties": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } } }
324
- },
325
- "additionalProperties": false
326
- },
327
- "behaviorOwnership": {
328
- "type": "object",
329
- "required": ["primaryOwnerByFactRef", "supportingBehaviorIdsByFactRef"],
330
- "properties": {
331
- "primaryOwnerByFactRef": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
332
- "supportingBehaviorIdsByFactRef": { "type": "object", "additionalProperties": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } } }
333
- },
334
- "additionalProperties": false
335
- },
336
- "taskType": {
337
- "enum": ["resolution", "bootstrap", "capability", "journey", "assembly", "regression"]
338
- }
339
- },
340
- "additionalProperties": false
341
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://harmonyos-ai.dev/schemas/task-plan.schema.json",
4
+ "title": "Android to HarmonyOS Execution Plan",
5
+ "type": "object",
6
+ "required": [
7
+ "taskPlanVersion",
8
+ "executionPlanVersion",
9
+ "planningModelVersion",
10
+ "factsAdapterVersion",
11
+ "plannerPolicyVersion",
12
+ "baseline",
13
+ "planningPhase",
14
+ "entryResolution",
15
+ "behaviorResponsibilities",
16
+ "pageWorkPackages",
17
+ "tasks",
18
+ "ownership",
19
+ "behaviorOwnership",
20
+ "fileConflictEdges",
21
+ "planningWarnings"
22
+ ],
23
+ "properties": {
24
+ "taskPlanVersion": { "const": "2.3.0" },
25
+ "executionPlanVersion": { "const": "1.3.0" },
26
+ "planningModelVersion": { "const": "2.0.0" },
27
+ "factsAdapterVersion": { "const": "1.0.0" },
28
+ "plannerPolicyVersion": { "const": "2.3.0" },
29
+ "baseline": { "$ref": "#/$defs/baseline" },
30
+ "planningPhase": {
31
+ "description": "resolution projects each Resolution Behavior 1:1 into a transient Resolution Task; execution is entered only after Resolution is cleared and Coding Work Items are assembled once.",
32
+ "enum": ["resolution", "execution"]
33
+ },
34
+ "entryResolution": { "$ref": "#/$defs/entryResolution" },
35
+ "behaviorResponsibilities": {
36
+ "type": "array",
37
+ "items": { "$ref": "#/$defs/behavior" }
38
+ },
39
+ "pageWorkPackages": {
40
+ "type": "array",
41
+ "items": { "$ref": "#/$defs/workPackage" }
42
+ },
43
+ "tasks": {
44
+ "description": "Phase-exclusive tasks: 1:1 Resolution Behavior projections in resolution phase, or frozen Coding Work Items in execution phase.",
45
+ "type": "array",
46
+ "items": { "$ref": "#/$defs/plannedTask" }
47
+ },
48
+ "ownership": { "$ref": "#/$defs/taskOwnership" },
49
+ "behaviorOwnership": { "$ref": "#/$defs/behaviorOwnership" },
50
+ "fileConflictEdges": {
51
+ "type": "array",
52
+ "items": { "$ref": "#/$defs/fileConflict" }
53
+ },
54
+ "planningWarnings": {
55
+ "type": "array",
56
+ "items": { "$ref": "#/$defs/warning" }
57
+ }
58
+ },
59
+ "allOf": [
60
+ {
61
+ "if": { "properties": { "planningPhase": { "const": "resolution" } } },
62
+ "then": {
63
+ "properties": {
64
+ "tasks": {
65
+ "type": "array",
66
+ "items": {
67
+ "type": "object",
68
+ "properties": {
69
+ "type": { "const": "resolution" },
70
+ "behaviorIds": { "type": "array", "minItems": 1, "maxItems": 1 },
71
+ "workPackageId": { "const": null }
72
+ }
73
+ }
74
+ },
75
+ "pageWorkPackages": {
76
+ "type": "array",
77
+ "maxItems": 0
78
+ }
79
+ }
80
+ }
81
+ },
82
+ {
83
+ "if": { "properties": { "planningPhase": { "const": "execution" } } },
84
+ "then": {
85
+ "properties": {
86
+ "tasks": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "properties": {
91
+ "type": { "not": { "const": "resolution" } },
92
+ "workPackageId": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ],
100
+ "$defs": {
101
+ "refs": {
102
+ "type": "array",
103
+ "uniqueItems": true,
104
+ "items": { "type": "string", "minLength": 1 }
105
+ },
106
+ "baseline": {
107
+ "type": "object",
108
+ "required": ["factsSha256", "planningInputSha256", "androidFingerprint", "specVersion", "factsWireVersion"],
109
+ "properties": {
110
+ "factsSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
111
+ "planningInputSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
112
+ "androidFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
113
+ "specVersion": { "type": "string", "minLength": 1 },
114
+ "factsWireVersion": { "const": "2.0.0" }
115
+ },
116
+ "additionalProperties": false
117
+ },
118
+ "entryResolution": {
119
+ "type": "object",
120
+ "required": ["launcherSurfaceRefs", "launcherEntryRefs", "origin"],
121
+ "properties": {
122
+ "launcherSurfaceRefs": { "$ref": "#/$defs/refs" },
123
+ "launcherEntryRefs": { "$ref": "#/$defs/refs" },
124
+ "origin": { "enum": ["explicit-fact", "launch-entry-fact", "unresolved"] }
125
+ },
126
+ "additionalProperties": false
127
+ },
128
+ "warning": {
129
+ "type": "object",
130
+ "required": ["code", "message", "relatedRefs"],
131
+ "properties": {
132
+ "code": { "type": "string", "minLength": 1 },
133
+ "message": { "type": "string", "minLength": 1 },
134
+ "relatedRefs": { "$ref": "#/$defs/refs" }
135
+ },
136
+ "additionalProperties": false
137
+ },
138
+ "evidence": {
139
+ "type": "object",
140
+ "required": ["file", "symbol", "line", "endLine"],
141
+ "properties": {
142
+ "file": { "type": "string", "minLength": 1 },
143
+ "symbol": { "type": ["string", "null"] },
144
+ "line": { "type": ["integer", "null"], "minimum": 1 },
145
+ "endLine": { "type": ["integer", "null"], "minimum": 1 }
146
+ },
147
+ "additionalProperties": false
148
+ },
149
+ "closure": {
150
+ "type": "object",
151
+ "required": ["entryRefs", "surfaceRefs", "controlRefs", "interactionRefs", "sourceEvidence", "codeRefs", "unresolvedRefs", "warningRefs", "requiresSourceReview"],
152
+ "properties": {
153
+ "entryRefs": { "$ref": "#/$defs/refs" },
154
+ "surfaceRefs": { "$ref": "#/$defs/refs" },
155
+ "controlRefs": { "$ref": "#/$defs/refs" },
156
+ "interactionRefs": { "$ref": "#/$defs/refs" },
157
+ "sourceEvidence": { "type": "array", "items": { "$ref": "#/$defs/evidence" } },
158
+ "codeRefs": { "type": "array", "items": { "type": "object" } },
159
+ "unresolvedRefs": { "$ref": "#/$defs/refs" },
160
+ "warningRefs": { "$ref": "#/$defs/refs" },
161
+ "requiresSourceReview": { "type": "boolean" }
162
+ },
163
+ "additionalProperties": false
164
+ },
165
+ "acceptance": {
166
+ "type": "object",
167
+ "required": ["observableOutcome", "requiredFactRefs", "verificationRequirements", "reportRefs"],
168
+ "properties": {
169
+ "observableOutcome": { "type": "string", "minLength": 1 },
170
+ "observableOutcomes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
171
+ "requiredFactRefs": { "$ref": "#/$defs/refs" },
172
+ "verificationRequirements": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
173
+ "reportRefs": { "$ref": "#/$defs/refs" }
174
+ },
175
+ "additionalProperties": false
176
+ },
177
+ "behaviorEstimate": {
178
+ "type": "object",
179
+ "required": ["factCount", "sourceFileCount", "traceNodeCount", "estimatedFactTokens", "downstreamUnlockCount"],
180
+ "properties": {
181
+ "factCount": { "type": "integer", "minimum": 0 },
182
+ "sourceFileCount": { "type": "integer", "minimum": 0 },
183
+ "traceNodeCount": { "type": "integer", "minimum": 0 },
184
+ "estimatedFactTokens": { "type": "integer", "minimum": 0 },
185
+ "downstreamUnlockCount": { "type": "integer", "minimum": 0 }
186
+ },
187
+ "additionalProperties": false
188
+ },
189
+ "behavior": {
190
+ "type": "object",
191
+ "required": ["id", "type", "title", "primaryFactRefs", "supportingFactRefs", "dependsOnBehaviorIds", "closure", "acceptance", "estimate"],
192
+ "properties": {
193
+ "id": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" },
194
+ "type": { "$ref": "#/$defs/taskType" },
195
+ "title": { "type": "string", "minLength": 1 },
196
+ "primaryFactRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
197
+ "supportingFactRefs": { "$ref": "#/$defs/refs" },
198
+ "dependsOnBehaviorIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
199
+ "closure": { "$ref": "#/$defs/closure" },
200
+ "acceptance": { "$ref": "#/$defs/acceptance" },
201
+ "estimate": { "$ref": "#/$defs/behaviorEstimate" }
202
+ },
203
+ "additionalProperties": false
204
+ },
205
+ "writeOwnership": {
206
+ "type": "object",
207
+ "required": ["ownedFiles", "readOnlyFiles", "exclusiveScopes", "forbiddenGlobalFiles"],
208
+ "properties": {
209
+ "ownedFiles": { "$ref": "#/$defs/refs" },
210
+ "readOnlyFiles": { "$ref": "#/$defs/refs" },
211
+ "exclusiveScopes": { "$ref": "#/$defs/refs" },
212
+ "forbiddenGlobalFiles": { "$ref": "#/$defs/refs" }
213
+ },
214
+ "additionalProperties": false
215
+ },
216
+ "dependencyInterface": {
217
+ "type": "object",
218
+ "required": ["kind", "ref", "providerTaskId", "files", "errorModes", "orderingConstraints"],
219
+ "properties": {
220
+ "kind": { "enum": ["module", "ordering"] },
221
+ "ref": { "type": "string", "minLength": 1 },
222
+ "providerTaskId": { "type": ["string", "null"], "pattern": "^task:[a-f0-9]{16}$" },
223
+ "files": { "$ref": "#/$defs/refs" },
224
+ "errorModes": { "$ref": "#/$defs/refs" },
225
+ "orderingConstraints": { "$ref": "#/$defs/refs" }
226
+ },
227
+ "additionalProperties": false
228
+ },
229
+ "readyGate": {
230
+ "type": "object",
231
+ "required": ["semanticsResolved", "dependencyInterfacesStable", "writeOwnershipResolved", "contextWithinBudget", "acceptanceExecutable"],
232
+ "properties": {
233
+ "semanticsResolved": { "type": "boolean" },
234
+ "dependencyInterfacesStable": { "type": "boolean" },
235
+ "writeOwnershipResolved": { "type": "boolean" },
236
+ "contextWithinBudget": { "type": "boolean" },
237
+ "acceptanceExecutable": { "type": "boolean" }
238
+ },
239
+ "additionalProperties": false
240
+ },
241
+ "taskEstimate": {
242
+ "type": "object",
243
+ "required": ["factCount", "sourceFileCount", "traceNodeCount", "estimatedFactTokens", "downstreamUnlockCount", "behaviorCount", "observableOutcomeCount", "productionFileCount", "testFileCount", "capabilityCount"],
244
+ "properties": {
245
+ "factCount": { "type": "integer", "minimum": 0 },
246
+ "sourceFileCount": { "type": "integer", "minimum": 0 },
247
+ "traceNodeCount": { "type": "integer", "minimum": 0 },
248
+ "estimatedFactTokens": { "type": "integer", "minimum": 0 },
249
+ "downstreamUnlockCount": { "type": "integer", "minimum": 0 },
250
+ "behaviorCount": { "type": "integer", "minimum": 1 },
251
+ "observableOutcomeCount": { "type": "integer", "minimum": 1 },
252
+ "productionFileCount": { "type": "integer", "minimum": 0 },
253
+ "testFileCount": { "type": "integer", "minimum": 0 },
254
+ "capabilityCount": { "type": "integer", "minimum": 0 }
255
+ },
256
+ "additionalProperties": false
257
+ },
258
+ "plannedTask": {
259
+ "type": "object",
260
+ "required": ["id", "type", "title", "workPackageId", "canonicalPageRef", "primaryModule", "behaviorIds", "primaryFactRefs", "supportingFactRefs", "dependsOnTaskIds", "conflictsWithTaskIds", "writeOwnership", "dependencyInterfaces", "readyGate", "closure", "acceptance", "estimate"],
261
+ "properties": {
262
+ "id": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
263
+ "type": { "$ref": "#/$defs/taskType" },
264
+ "title": { "type": "string", "minLength": 1 },
265
+ "workPackageId": { "type": ["string", "null"], "pattern": "^package:[a-f0-9]{16}$" },
266
+ "canonicalPageRef": { "type": ["string", "null"] },
267
+ "primaryModule": { "type": "string", "minLength": 1 },
268
+ "behaviorIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
269
+ "primaryFactRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
270
+ "supportingFactRefs": { "$ref": "#/$defs/refs" },
271
+ "dependsOnTaskIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
272
+ "conflictsWithTaskIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
273
+ "writeOwnership": { "$ref": "#/$defs/writeOwnership" },
274
+ "dependencyInterfaces": { "type": "array", "items": { "$ref": "#/$defs/dependencyInterface" } },
275
+ "readyGate": { "$ref": "#/$defs/readyGate" },
276
+ "closure": { "$ref": "#/$defs/closure" },
277
+ "acceptance": {
278
+ "allOf": [
279
+ { "$ref": "#/$defs/acceptance" },
280
+ {
281
+ "type": "object",
282
+ "required": ["observableOutcomes"],
283
+ "properties": {
284
+ "observableOutcomes": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
285
+ }
286
+ }
287
+ ]
288
+ },
289
+ "estimate": { "$ref": "#/$defs/taskEstimate" }
290
+ },
291
+ "additionalProperties": false
292
+ },
293
+ "workPackage": {
294
+ "type": "object",
295
+ "required": ["id", "canonicalPageRef", "title", "surfaceRefs", "workItemIds", "dependsOnPackageIds", "serialLane", "exclusiveScopes"],
296
+ "properties": {
297
+ "id": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" },
298
+ "canonicalPageRef": { "type": ["string", "null"] },
299
+ "title": { "type": "string", "minLength": 1 },
300
+ "surfaceRefs": { "$ref": "#/$defs/refs" },
301
+ "workItemIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
302
+ "dependsOnPackageIds": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^package:[a-f0-9]{16}$" } },
303
+ "serialLane": { "type": "boolean" },
304
+ "exclusiveScopes": { "$ref": "#/$defs/refs" }
305
+ },
306
+ "additionalProperties": false
307
+ },
308
+ "fileConflict": {
309
+ "type": "object",
310
+ "required": ["leftTaskId", "rightTaskId", "reasons"],
311
+ "properties": {
312
+ "leftTaskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
313
+ "rightTaskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
314
+ "reasons": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
315
+ },
316
+ "additionalProperties": false
317
+ },
318
+ "taskOwnership": {
319
+ "type": "object",
320
+ "required": ["primaryOwnerByFactRef", "supportingTaskIdsByFactRef"],
321
+ "properties": {
322
+ "primaryOwnerByFactRef": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
323
+ "supportingTaskIdsByFactRef": { "type": "object", "additionalProperties": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } } }
324
+ },
325
+ "additionalProperties": false
326
+ },
327
+ "behaviorOwnership": {
328
+ "type": "object",
329
+ "required": ["primaryOwnerByFactRef", "supportingBehaviorIdsByFactRef"],
330
+ "properties": {
331
+ "primaryOwnerByFactRef": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } },
332
+ "supportingBehaviorIdsByFactRef": { "type": "object", "additionalProperties": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^behavior:[a-f0-9]{16}$" } } }
333
+ },
334
+ "additionalProperties": false
335
+ },
336
+ "taskType": {
337
+ "enum": ["resolution", "bootstrap", "capability", "journey", "assembly", "regression"]
338
+ }
339
+ },
340
+ "additionalProperties": false
341
+ }