@harmonyos-arkts/d2h 0.1.10 → 0.1.12

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,202 +1,202 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://harmonyos-ai.dev/schemas/migration-status.schema.json",
4
- "title": "Derived Migration Kernel Snapshot",
5
- "type": "object",
6
- "required": ["kernelVersion", "policyVersion", "projectRoot", "phase", "workspace", "preflight", "source", "report", "planning", "evidence", "completion", "allowedActions"],
7
- "properties": {
8
- "kernelVersion": { "const": "1.2.0" },
9
- "policyVersion": { "const": "1.2.0" },
10
- "projectRoot": { "type": "string", "minLength": 1 },
11
- "phase": { "enum": ["workspace-preparation", "preflight", "analysis", "report-initialization", "task-planning", "implementation", "verification", "ready-to-complete"] },
12
- "workspace": {
13
- "type": "object",
14
- "required": ["projectPresent", "androidProject", "projectCandidates", "configPresent", "harmonyProject", "harmonyProjectPresent", "gitHead"],
15
- "properties": {
16
- "projectPresent": { "type": "boolean" },
17
- "androidProject": { "type": "string", "minLength": 1 },
18
- "projectCandidates": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
19
- "configPresent": { "type": "boolean" },
20
- "harmonyProject": { "type": "string" },
21
- "harmonyProjectPresent": { "type": "boolean" },
22
- "gitHead": { "type": ["string", "null"] }
23
- },
24
- "additionalProperties": false
25
- },
26
- "preflight": {
27
- "type": "object",
28
- "required": ["present", "result", "harmonyDevice"],
29
- "properties": {
30
- "present": { "type": "boolean" },
31
- "result": { "type": "string" },
32
- "harmonyDevice": { "type": "string" }
33
- },
34
- "additionalProperties": false
35
- },
36
- "source": {
37
- "type": "object",
38
- "required": ["factsSha256", "androidFingerprint", "harmonyFingerprint"],
39
- "properties": {
40
- "factsSha256": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
41
- "androidFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
42
- "harmonyFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
43
- },
44
- "additionalProperties": false
45
- },
46
- "report": {
47
- "type": "object",
48
- "required": ["present", "version", "valid", "complete", "errors", "completionErrors", "warnings", "evidenceLevel", "sourceManifest", "orderAudit", "closureAudit", "literalAudit"],
49
- "properties": {
50
- "present": { "type": "boolean" },
51
- "version": { "type": ["string", "null"] },
52
- "valid": { "type": "boolean" },
53
- "complete": { "type": "boolean" },
54
- "errors": { "type": "array", "items": { "type": "string" } },
55
- "completionErrors": { "type": "array", "items": { "type": "string" } },
56
- "warnings": { "type": "array", "items": { "type": "string" } },
57
- "evidenceLevel": { "type": ["string", "null"], "enum": ["declared-hash-validated", "observed-order-audited", null] },
58
- "sourceManifest": { "anyOf": [{ "$ref": "#/$defs/sourceManifestSummary" }, { "type": "null" }] },
59
- "orderAudit": { "anyOf": [{ "$ref": "#/$defs/orderAudit" }, { "type": "null" }] },
60
- "closureAudit": { "anyOf": [{ "$ref": "#/$defs/closureAudit" }, { "type": "null" }] },
61
- "literalAudit": { "anyOf": [{ "$ref": "#/$defs/literalAudit" }, { "type": "null" }] }
62
- },
63
- "additionalProperties": false
64
- },
65
- "planning": {
66
- "type": "object",
67
- "required": ["present", "valid", "fresh", "taskPlanSha256", "totalTasks", "readyTasks", "blockedTasks", "completedTasks", "recommendedTaskId", "alternatives", "reasons", "ownershipCoverage", "closureCoverage", "orphanFactRefs", "errors", "warnings", "tasks"],
68
- "properties": {
69
- "present": { "type": "boolean" },
70
- "valid": { "type": "boolean" },
71
- "fresh": { "type": "boolean" },
72
- "taskPlanSha256": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
73
- "totalTasks": { "type": "integer", "minimum": 0 },
74
- "readyTasks": { "type": "integer", "minimum": 0 },
75
- "blockedTasks": { "type": "integer", "minimum": 0 },
76
- "completedTasks": { "type": "integer", "minimum": 0 },
77
- "recommendedTaskId": { "type": ["string", "null"], "pattern": "^task:[a-f0-9]{16}$" },
78
- "alternatives": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
79
- "reasons": {
80
- "type": "object",
81
- "additionalProperties": { "type": "array", "items": { "type": "string", "minLength": 1 } }
82
- },
83
- "ownershipCoverage": { "type": "number", "minimum": 0, "maximum": 1 },
84
- "closureCoverage": { "type": "number", "minimum": 0, "maximum": 1 },
85
- "orphanFactRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
86
- "errors": { "type": "array", "items": { "type": "string", "minLength": 1 } },
87
- "warnings": { "type": "array", "items": { "type": "string", "minLength": 1 } },
88
- "tasks": { "type": "array", "items": { "$ref": "#/$defs/taskRuntime" } }
89
- },
90
- "additionalProperties": false
91
- },
92
- "evidence": {
93
- "type": "object",
94
- "required": ["androidAnalysis", "fullRegression", "claimCoverage"],
95
- "properties": {
96
- "androidAnalysis": { "$ref": "#/$defs/evidenceState" },
97
- "fullRegression": { "$ref": "#/$defs/evidenceState" },
98
- "claimCoverage": {
99
- "type": "object",
100
- "required": ["valid", "missing"],
101
- "properties": {
102
- "valid": { "type": "boolean" },
103
- "missing": { "type": "array", "items": { "$ref": "#/$defs/missingClaim" } }
104
- },
105
- "additionalProperties": false
106
- }
107
- },
108
- "additionalProperties": false
109
- },
110
- "completion": {
111
- "type": "object",
112
- "required": ["eligible", "unmet"],
113
- "properties": {
114
- "eligible": { "type": "boolean" },
115
- "unmet": { "type": "array", "items": { "$ref": "#/$defs/unmet" } }
116
- },
117
- "additionalProperties": false
118
- },
119
- "allowedActions": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
120
- },
121
- "$defs": {
122
- "evidenceState": {
123
- "type": "object",
124
- "required": ["reference", "present", "passed", "fresh"],
125
- "properties": {
126
- "reference": { "type": ["string", "null"] },
127
- "present": { "type": "boolean" },
128
- "passed": { "type": "boolean" },
129
- "fresh": { "type": "boolean" }
130
- },
131
- "additionalProperties": false
132
- },
133
- "unmet": {
134
- "type": "object",
135
- "required": ["code", "message"],
136
- "properties": { "code": { "type": "string", "minLength": 1 }, "message": { "type": "string", "minLength": 1 } },
137
- "additionalProperties": false
138
- },
139
- "missingClaim": {
140
- "type": "object",
141
- "required": ["ref", "reason"],
142
- "properties": { "ref": { "type": "string", "minLength": 1 }, "reason": { "type": "string", "minLength": 1 } },
143
- "additionalProperties": false
144
- },
145
- "taskRuntime": {
146
- "type": "object",
147
- "required": ["taskId", "state", "reasons"],
148
- "properties": {
149
- "taskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
150
- "state": { "enum": ["pending", "ready", "blocked", "implemented", "locally-verified", "stale", "globally-verified"] },
151
- "reasons": { "type": "array", "items": { "type": "string", "minLength": 1 } }
152
- },
153
- "additionalProperties": false
154
- },
155
- "orderAudit": {
156
- "type": "object",
157
- "required": ["auditVersion", "status", "eventSource", "auditedRefs", "findings"],
158
- "properties": {
159
- "auditVersion": { "const": "1.0.0" },
160
- "status": { "enum": ["passed", "red-flag", "unavailable"] },
161
- "eventSource": { "type": "string", "minLength": 1 },
162
- "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
163
- "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
164
- },
165
- "additionalProperties": false
166
- },
167
- "sourceManifestSummary": {
168
- "type": "object",
169
- "required": ["path", "manifestSha256", "memberCount"],
170
- "properties": {
171
- "path": { "const": ".migration/audit/android-source-manifest.json" },
172
- "manifestSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
173
- "memberCount": { "type": "integer", "minimum": 0 }
174
- },
175
- "additionalProperties": false
176
- },
177
- "closureAudit": {
178
- "type": "object",
179
- "required": ["auditVersion", "status", "auditedRefs", "findings"],
180
- "properties": {
181
- "auditVersion": { "const": "1.0.0" },
182
- "status": { "enum": ["passed", "red-flag", "unavailable"] },
183
- "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
184
- "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
185
- },
186
- "additionalProperties": false
187
- },
188
- "literalAudit": {
189
- "type": "object",
190
- "required": ["auditVersion", "status", "sampleSeed", "sampledRefs", "warnings"],
191
- "properties": {
192
- "auditVersion": { "const": "1.0.0" },
193
- "status": { "enum": ["passed", "warning", "not-applicable"] },
194
- "sampleSeed": { "type": "string" },
195
- "sampledRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
196
- "warnings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
197
- },
198
- "additionalProperties": false
199
- }
200
- },
201
- "additionalProperties": false
202
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://harmonyos-ai.dev/schemas/migration-status.schema.json",
4
+ "title": "Derived Migration Kernel Snapshot",
5
+ "type": "object",
6
+ "required": ["kernelVersion", "policyVersion", "projectRoot", "phase", "workspace", "preflight", "source", "report", "planning", "evidence", "completion", "allowedActions"],
7
+ "properties": {
8
+ "kernelVersion": { "const": "1.2.0" },
9
+ "policyVersion": { "const": "1.2.0" },
10
+ "projectRoot": { "type": "string", "minLength": 1 },
11
+ "phase": { "enum": ["workspace-preparation", "preflight", "analysis", "report-initialization", "task-planning", "implementation", "verification", "ready-to-complete"] },
12
+ "workspace": {
13
+ "type": "object",
14
+ "required": ["projectPresent", "androidProject", "projectCandidates", "configPresent", "harmonyProject", "harmonyProjectPresent", "gitHead"],
15
+ "properties": {
16
+ "projectPresent": { "type": "boolean" },
17
+ "androidProject": { "type": "string", "minLength": 1 },
18
+ "projectCandidates": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
19
+ "configPresent": { "type": "boolean" },
20
+ "harmonyProject": { "type": "string" },
21
+ "harmonyProjectPresent": { "type": "boolean" },
22
+ "gitHead": { "type": ["string", "null"] }
23
+ },
24
+ "additionalProperties": false
25
+ },
26
+ "preflight": {
27
+ "type": "object",
28
+ "required": ["present", "result", "harmonyDevice"],
29
+ "properties": {
30
+ "present": { "type": "boolean" },
31
+ "result": { "type": "string" },
32
+ "harmonyDevice": { "type": "string" }
33
+ },
34
+ "additionalProperties": false
35
+ },
36
+ "source": {
37
+ "type": "object",
38
+ "required": ["factsSha256", "androidFingerprint", "harmonyFingerprint"],
39
+ "properties": {
40
+ "factsSha256": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
41
+ "androidFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
42
+ "harmonyFingerprint": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" }
43
+ },
44
+ "additionalProperties": false
45
+ },
46
+ "report": {
47
+ "type": "object",
48
+ "required": ["present", "version", "valid", "complete", "errors", "completionErrors", "warnings", "evidenceLevel", "sourceManifest", "orderAudit", "closureAudit", "literalAudit"],
49
+ "properties": {
50
+ "present": { "type": "boolean" },
51
+ "version": { "type": ["string", "null"] },
52
+ "valid": { "type": "boolean" },
53
+ "complete": { "type": "boolean" },
54
+ "errors": { "type": "array", "items": { "type": "string" } },
55
+ "completionErrors": { "type": "array", "items": { "type": "string" } },
56
+ "warnings": { "type": "array", "items": { "type": "string" } },
57
+ "evidenceLevel": { "type": ["string", "null"], "enum": ["declared-hash-validated", "observed-order-audited", null] },
58
+ "sourceManifest": { "anyOf": [{ "$ref": "#/$defs/sourceManifestSummary" }, { "type": "null" }] },
59
+ "orderAudit": { "anyOf": [{ "$ref": "#/$defs/orderAudit" }, { "type": "null" }] },
60
+ "closureAudit": { "anyOf": [{ "$ref": "#/$defs/closureAudit" }, { "type": "null" }] },
61
+ "literalAudit": { "anyOf": [{ "$ref": "#/$defs/literalAudit" }, { "type": "null" }] }
62
+ },
63
+ "additionalProperties": false
64
+ },
65
+ "planning": {
66
+ "type": "object",
67
+ "required": ["present", "valid", "fresh", "taskPlanSha256", "totalTasks", "readyTasks", "blockedTasks", "completedTasks", "recommendedTaskId", "alternatives", "reasons", "ownershipCoverage", "closureCoverage", "orphanFactRefs", "errors", "warnings", "tasks"],
68
+ "properties": {
69
+ "present": { "type": "boolean" },
70
+ "valid": { "type": "boolean" },
71
+ "fresh": { "type": "boolean" },
72
+ "taskPlanSha256": { "type": ["string", "null"], "pattern": "^[a-f0-9]{64}$" },
73
+ "totalTasks": { "type": "integer", "minimum": 0 },
74
+ "readyTasks": { "type": "integer", "minimum": 0 },
75
+ "blockedTasks": { "type": "integer", "minimum": 0 },
76
+ "completedTasks": { "type": "integer", "minimum": 0 },
77
+ "recommendedTaskId": { "type": ["string", "null"], "pattern": "^task:[a-f0-9]{16}$" },
78
+ "alternatives": { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" } },
79
+ "reasons": {
80
+ "type": "object",
81
+ "additionalProperties": { "type": "array", "items": { "type": "string", "minLength": 1 } }
82
+ },
83
+ "ownershipCoverage": { "type": "number", "minimum": 0, "maximum": 1 },
84
+ "closureCoverage": { "type": "number", "minimum": 0, "maximum": 1 },
85
+ "orphanFactRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
86
+ "errors": { "type": "array", "items": { "type": "string", "minLength": 1 } },
87
+ "warnings": { "type": "array", "items": { "type": "string", "minLength": 1 } },
88
+ "tasks": { "type": "array", "items": { "$ref": "#/$defs/taskRuntime" } }
89
+ },
90
+ "additionalProperties": false
91
+ },
92
+ "evidence": {
93
+ "type": "object",
94
+ "required": ["androidAnalysis", "fullRegression", "claimCoverage"],
95
+ "properties": {
96
+ "androidAnalysis": { "$ref": "#/$defs/evidenceState" },
97
+ "fullRegression": { "$ref": "#/$defs/evidenceState" },
98
+ "claimCoverage": {
99
+ "type": "object",
100
+ "required": ["valid", "missing"],
101
+ "properties": {
102
+ "valid": { "type": "boolean" },
103
+ "missing": { "type": "array", "items": { "$ref": "#/$defs/missingClaim" } }
104
+ },
105
+ "additionalProperties": false
106
+ }
107
+ },
108
+ "additionalProperties": false
109
+ },
110
+ "completion": {
111
+ "type": "object",
112
+ "required": ["eligible", "unmet"],
113
+ "properties": {
114
+ "eligible": { "type": "boolean" },
115
+ "unmet": { "type": "array", "items": { "$ref": "#/$defs/unmet" } }
116
+ },
117
+ "additionalProperties": false
118
+ },
119
+ "allowedActions": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } }
120
+ },
121
+ "$defs": {
122
+ "evidenceState": {
123
+ "type": "object",
124
+ "required": ["reference", "present", "passed", "fresh"],
125
+ "properties": {
126
+ "reference": { "type": ["string", "null"] },
127
+ "present": { "type": "boolean" },
128
+ "passed": { "type": "boolean" },
129
+ "fresh": { "type": "boolean" }
130
+ },
131
+ "additionalProperties": false
132
+ },
133
+ "unmet": {
134
+ "type": "object",
135
+ "required": ["code", "message"],
136
+ "properties": { "code": { "type": "string", "minLength": 1 }, "message": { "type": "string", "minLength": 1 } },
137
+ "additionalProperties": false
138
+ },
139
+ "missingClaim": {
140
+ "type": "object",
141
+ "required": ["ref", "reason"],
142
+ "properties": { "ref": { "type": "string", "minLength": 1 }, "reason": { "type": "string", "minLength": 1 } },
143
+ "additionalProperties": false
144
+ },
145
+ "taskRuntime": {
146
+ "type": "object",
147
+ "required": ["taskId", "state", "reasons"],
148
+ "properties": {
149
+ "taskId": { "type": "string", "pattern": "^task:[a-f0-9]{16}$" },
150
+ "state": { "enum": ["pending", "ready", "blocked", "implemented", "locally-verified", "stale", "globally-verified"] },
151
+ "reasons": { "type": "array", "items": { "type": "string", "minLength": 1 } }
152
+ },
153
+ "additionalProperties": false
154
+ },
155
+ "orderAudit": {
156
+ "type": "object",
157
+ "required": ["auditVersion", "status", "eventSource", "auditedRefs", "findings"],
158
+ "properties": {
159
+ "auditVersion": { "const": "1.0.0" },
160
+ "status": { "enum": ["passed", "red-flag", "unavailable"] },
161
+ "eventSource": { "type": "string", "minLength": 1 },
162
+ "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
163
+ "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
164
+ },
165
+ "additionalProperties": false
166
+ },
167
+ "sourceManifestSummary": {
168
+ "type": "object",
169
+ "required": ["path", "manifestSha256", "memberCount"],
170
+ "properties": {
171
+ "path": { "const": ".migration/audit/android-source-manifest.json" },
172
+ "manifestSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
173
+ "memberCount": { "type": "integer", "minimum": 0 }
174
+ },
175
+ "additionalProperties": false
176
+ },
177
+ "closureAudit": {
178
+ "type": "object",
179
+ "required": ["auditVersion", "status", "auditedRefs", "findings"],
180
+ "properties": {
181
+ "auditVersion": { "const": "1.0.0" },
182
+ "status": { "enum": ["passed", "red-flag", "unavailable"] },
183
+ "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
184
+ "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
185
+ },
186
+ "additionalProperties": false
187
+ },
188
+ "literalAudit": {
189
+ "type": "object",
190
+ "required": ["auditVersion", "status", "sampleSeed", "sampledRefs", "warnings"],
191
+ "properties": {
192
+ "auditVersion": { "const": "1.0.0" },
193
+ "status": { "enum": ["passed", "warning", "not-applicable"] },
194
+ "sampleSeed": { "type": "string" },
195
+ "sampledRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
196
+ "warnings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
197
+ },
198
+ "additionalProperties": false
199
+ }
200
+ },
201
+ "additionalProperties": false
202
+ }
@@ -1,60 +1,60 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://chuanqi.dev/schemas/preflight.schema.json",
4
- "title": "Migration Preflight Report",
5
- "type": "object",
6
- "required": ["createdAt", "configRef", "projectRoot", "harmonyProject", "gitHead", "result", "checks"],
7
- "properties": {
8
- "createdAt": { "type": "string" },
9
- "configRef": { "const": ".migration/config.json" },
10
- "projectRoot": { "type": "string" },
11
- "harmonyProject": { "type": "string" },
12
- "gitHead": { "type": "string", "minLength": 1 },
13
- "result": { "enum": ["passed", "failed", "blocked_external"] },
14
- "checks": {
15
- "type": "array",
16
- "items": {
17
- "type": "object",
18
- "required": ["id", "status", "summary"],
19
- "properties": {
20
- "id": { "type": "string", "minLength": 1 },
21
- "status": { "enum": ["passed", "failed", "not_applicable", "blocked_external"] },
22
- "summary": { "type": "string" },
23
- "evidence": { "type": "array", "items": { "type": "string" } }
24
- },
25
- "additionalProperties": false
26
- }
27
- }
28
- },
29
- "allOf": [
30
- {
31
- "properties": {
32
- "checks": {
33
- "contains": {
34
- "type": "object",
35
- "properties": {
36
- "id": { "const": "harmony-device" },
37
- "status": { "const": "passed" }
38
- },
39
- "required": ["id", "status"]
40
- }
41
- }
42
- }
43
- },
44
- {
45
- "properties": {
46
- "checks": {
47
- "contains": {
48
- "type": "object",
49
- "properties": {
50
- "id": { "const": "android-emulator" },
51
- "status": { "enum": ["passed", "not_applicable"] }
52
- },
53
- "required": ["id", "status"]
54
- }
55
- }
56
- }
57
- }
58
- ],
59
- "additionalProperties": false
60
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://chuanqi.dev/schemas/preflight.schema.json",
4
+ "title": "Migration Preflight Report",
5
+ "type": "object",
6
+ "required": ["createdAt", "configRef", "projectRoot", "harmonyProject", "gitHead", "result", "checks"],
7
+ "properties": {
8
+ "createdAt": { "type": "string" },
9
+ "configRef": { "const": ".migration/config.json" },
10
+ "projectRoot": { "type": "string" },
11
+ "harmonyProject": { "type": "string" },
12
+ "gitHead": { "type": "string", "minLength": 1 },
13
+ "result": { "enum": ["passed", "failed", "blocked_external"] },
14
+ "checks": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "required": ["id", "status", "summary"],
19
+ "properties": {
20
+ "id": { "type": "string", "minLength": 1 },
21
+ "status": { "enum": ["passed", "failed", "not_applicable", "blocked_external"] },
22
+ "summary": { "type": "string" },
23
+ "evidence": { "type": "array", "items": { "type": "string" } }
24
+ },
25
+ "additionalProperties": false
26
+ }
27
+ }
28
+ },
29
+ "allOf": [
30
+ {
31
+ "properties": {
32
+ "checks": {
33
+ "contains": {
34
+ "type": "object",
35
+ "properties": {
36
+ "id": { "const": "harmony-device" },
37
+ "status": { "const": "passed" }
38
+ },
39
+ "required": ["id", "status"]
40
+ }
41
+ }
42
+ }
43
+ },
44
+ {
45
+ "properties": {
46
+ "checks": {
47
+ "contains": {
48
+ "type": "object",
49
+ "properties": {
50
+ "id": { "const": "android-emulator" },
51
+ "status": { "enum": ["passed", "not_applicable"] }
52
+ },
53
+ "required": ["id", "status"]
54
+ }
55
+ }
56
+ }
57
+ }
58
+ ],
59
+ "additionalProperties": false
60
+ }
@@ -1,16 +1,16 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://harmonyos-ai.dev/schemas/source-order-audit.schema.json",
4
- "title": "Source read/write order audit result",
5
- "description": "passed is valid only for authenticated runner events grouped within the same sessionId and epochId. Project-authored event files must remain unavailable.",
6
- "type": "object",
7
- "required": ["auditVersion", "status", "eventSource", "auditedRefs", "findings"],
8
- "properties": {
9
- "auditVersion": { "const": "1.0.0" },
10
- "status": { "enum": ["passed", "red-flag", "unavailable"] },
11
- "eventSource": { "const": ".migration/audit/source-events.jsonl" },
12
- "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
13
- "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
14
- },
15
- "additionalProperties": false
16
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://harmonyos-ai.dev/schemas/source-order-audit.schema.json",
4
+ "title": "Source read/write order audit result",
5
+ "description": "passed is valid only for authenticated runner events grouped within the same sessionId and epochId. Project-authored event files must remain unavailable.",
6
+ "type": "object",
7
+ "required": ["auditVersion", "status", "eventSource", "auditedRefs", "findings"],
8
+ "properties": {
9
+ "auditVersion": { "const": "1.0.0" },
10
+ "status": { "enum": ["passed", "red-flag", "unavailable"] },
11
+ "eventSource": { "const": ".migration/audit/source-events.jsonl" },
12
+ "auditedRefs": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
13
+ "findings": { "type": "array", "items": { "type": "string", "minLength": 1 } }
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -1,19 +1,19 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://harmonyos-ai.dev/schemas/source-provenance-event.schema.json",
4
- "title": "Trusted ordered source provenance event",
5
- "description": "Optional host/runner event input. A project-local file is not trusted by itself: only an authenticated runner integration may enable consumption. Its absence must produce an unavailable order audit, never a synthetic pass.",
6
- "type": "object",
7
- "required": ["sourceEventVersion", "sessionId", "epochId", "sequence", "action", "file", "reportRefs", "parallelGroup"],
8
- "properties": {
9
- "sourceEventVersion": { "const": "1.0.0" },
10
- "sessionId": { "type": "string", "minLength": 1 },
11
- "epochId": { "type": "string", "minLength": 1 },
12
- "sequence": { "type": "integer", "minimum": 0 },
13
- "action": { "enum": ["read", "write"] },
14
- "file": { "type": "string", "pattern": "^(?![/\\\\])(?!.*(?:^|[/\\\\])\\.\\.(?:[/\\\\]|$)).+" },
15
- "reportRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
16
- "parallelGroup": { "type": ["string", "null"], "minLength": 1 }
17
- },
18
- "additionalProperties": false
19
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://harmonyos-ai.dev/schemas/source-provenance-event.schema.json",
4
+ "title": "Trusted ordered source provenance event",
5
+ "description": "Optional host/runner event input. A project-local file is not trusted by itself: only an authenticated runner integration may enable consumption. Its absence must produce an unavailable order audit, never a synthetic pass.",
6
+ "type": "object",
7
+ "required": ["sourceEventVersion", "sessionId", "epochId", "sequence", "action", "file", "reportRefs", "parallelGroup"],
8
+ "properties": {
9
+ "sourceEventVersion": { "const": "1.0.0" },
10
+ "sessionId": { "type": "string", "minLength": 1 },
11
+ "epochId": { "type": "string", "minLength": 1 },
12
+ "sequence": { "type": "integer", "minimum": 0 },
13
+ "action": { "enum": ["read", "write"] },
14
+ "file": { "type": "string", "pattern": "^(?![/\\\\])(?!.*(?:^|[/\\\\])\\.\\.(?:[/\\\\]|$)).+" },
15
+ "reportRefs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
16
+ "parallelGroup": { "type": ["string", "null"], "minLength": 1 }
17
+ },
18
+ "additionalProperties": false
19
+ }