release-skill 0.9.17 → 0.9.18

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 (257) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.cursor-plugin/plugin.json +10 -0
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/.qoder-plugin/plugin.json +1 -1
  7. package/CHANGELOG.md +36 -2
  8. package/INSTALL.md +56 -9
  9. package/INSTALL.zh-CN.md +41 -7
  10. package/README.md +31 -20
  11. package/README.zh-CN.md +29 -19
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/consumer-contract-vectors.json +7 -7
  14. package/adapters/claude/bin/error-codes.json +1 -1
  15. package/adapters/claude/bin/foundation-resource-binding.json +1 -1
  16. package/adapters/claude/bin/prebuild-manifest.json +8 -4
  17. package/adapters/claude/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  18. package/adapters/claude/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  19. package/adapters/claude/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  20. package/adapters/claude/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  21. package/adapters/claude/bin/registry.json +1 -1
  22. package/adapters/claude/bin/release-skill.bundle.mjs +3560 -1200
  23. package/adapters/claude/bin/rules.json +1 -1
  24. package/adapters/claude/data/hosts/cursor/host-descriptor.json +34 -0
  25. package/adapters/claude/data/hosts/registry.json +1 -0
  26. package/adapters/claude/schemas/release-plan.schema.json +255 -25
  27. package/adapters/claude/schemas/release-project.schema.json +228 -26
  28. package/adapters/claude/skills/release-finish/SKILL.md +17 -4
  29. package/adapters/claude/skills/release-help/SKILL.md +40 -39
  30. package/adapters/claude/src/schemas/host-descriptor.schema.json +9 -2
  31. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  32. package/adapters/codex/bin/consumer-contract-vectors.json +7 -7
  33. package/adapters/codex/bin/error-codes.json +1 -1
  34. package/adapters/codex/bin/foundation-resource-binding.json +1 -1
  35. package/adapters/codex/bin/prebuild-manifest.json +8 -4
  36. package/adapters/codex/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  37. package/adapters/codex/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  38. package/adapters/codex/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  39. package/adapters/codex/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  40. package/adapters/codex/bin/registry.json +1 -1
  41. package/adapters/codex/bin/release-skill.bundle.mjs +3560 -1200
  42. package/adapters/codex/bin/rules.json +1 -1
  43. package/adapters/codex/data/hosts/cursor/host-descriptor.json +34 -0
  44. package/adapters/codex/data/hosts/registry.json +1 -0
  45. package/adapters/codex/schemas/release-plan.schema.json +255 -25
  46. package/adapters/codex/schemas/release-project.schema.json +228 -26
  47. package/adapters/codex/skills/release-finish/SKILL.md +17 -4
  48. package/adapters/codex/skills/release-help/SKILL.md +40 -39
  49. package/adapters/codex/src/schemas/host-descriptor.schema.json +9 -2
  50. package/adapters/cursor/.cursor-plugin/plugin.json +10 -0
  51. package/adapters/cursor/bin/consumer-contract-vectors.json +110 -0
  52. package/adapters/cursor/bin/error-codes.json +161 -0
  53. package/adapters/cursor/bin/foundation-legal/skill-family-contracts/LICENSE +202 -0
  54. package/adapters/cursor/bin/foundation-legal/skill-family-contracts/NOTICE +10 -0
  55. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/LICENSE +202 -0
  56. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/NOTICE +10 -0
  57. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/THIRD_PARTY_NOTICES +142 -0
  58. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/LICENSE +202 -0
  59. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/NOTICE +10 -0
  60. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/native-NOTICE +2 -0
  61. package/adapters/cursor/bin/foundation-resource-binding.json +1 -0
  62. package/adapters/cursor/bin/kernel-protocol.json +60 -0
  63. package/adapters/cursor/bin/license-texts/Apache-2.0.txt +201 -0
  64. package/adapters/cursor/bin/license-texts/MIT.txt +21 -0
  65. package/adapters/cursor/bin/prebuild-manifest.json +83 -0
  66. package/adapters/cursor/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  67. package/adapters/cursor/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  68. package/adapters/cursor/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  69. package/adapters/cursor/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  70. package/adapters/cursor/bin/registry.json +347 -0
  71. package/adapters/cursor/bin/release-skill-local-finish.mjs +4 -0
  72. package/adapters/cursor/bin/release-skill.bundle.mjs +151806 -0
  73. package/adapters/cursor/bin/release-skill.mjs +54 -0
  74. package/adapters/cursor/bin/rules.json +104 -0
  75. package/adapters/cursor/bin/schemas/consumer-contract-vector.schema.json +149 -0
  76. package/adapters/cursor/data/hosts/claude/host-descriptor.json +45 -0
  77. package/adapters/cursor/data/hosts/codebuddy/host-descriptor.json +26 -0
  78. package/adapters/cursor/data/hosts/codex/host-descriptor.json +45 -0
  79. package/adapters/cursor/data/hosts/cursor/host-descriptor.json +34 -0
  80. package/adapters/cursor/data/hosts/deepseek-harness/host-descriptor.json +23 -0
  81. package/adapters/cursor/data/hosts/kimi-code/host-descriptor.json +36 -0
  82. package/adapters/cursor/data/hosts/qoder/host-descriptor.json +26 -0
  83. package/adapters/cursor/data/hosts/registry.json +14 -0
  84. package/adapters/cursor/data/hosts/workbuddy/host-descriptor.json +34 -0
  85. package/adapters/cursor/data/licensing/registry.json +211 -0
  86. package/adapters/cursor/data/licensing/schema.json +207 -0
  87. package/adapters/cursor/native/safe-write/binding.gyp +41 -0
  88. package/adapters/cursor/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  89. package/adapters/cursor/native/safe-write/prebuilds.json +24 -0
  90. package/adapters/cursor/native/safe-write/src/safe_write.cc +2032 -0
  91. package/adapters/cursor/schemas/.render-manifest.json +41 -0
  92. package/adapters/cursor/schemas/approval-record.schema.json +115 -0
  93. package/adapters/cursor/schemas/artifact-lock.schema.json +111 -0
  94. package/adapters/cursor/schemas/artifact-plan.schema.json +52 -0
  95. package/adapters/cursor/schemas/artifact-policy.schema.json +76 -0
  96. package/adapters/cursor/schemas/evidence-event-v2.schema.json +164 -0
  97. package/adapters/cursor/schemas/evidence-event.schema.json +89 -0
  98. package/adapters/cursor/schemas/postpublish-approval-record.schema.json +47 -0
  99. package/adapters/cursor/schemas/release-plan.schema.json +2226 -0
  100. package/adapters/cursor/schemas/release-project.schema.json +1815 -0
  101. package/adapters/cursor/schemas/release-run.schema.json +777 -0
  102. package/adapters/cursor/skills/release-assess/SKILL.md +61 -0
  103. package/adapters/cursor/skills/release-config/SKILL.md +151 -0
  104. package/adapters/cursor/skills/release-docs/SKILL.md +120 -0
  105. package/adapters/cursor/skills/release-finish/SKILL.md +155 -0
  106. package/adapters/cursor/skills/release-help/SKILL.md +155 -0
  107. package/adapters/cursor/skills/release-marketplace/SKILL.md +157 -0
  108. package/adapters/cursor/skills/release-prepare/SKILL.md +136 -0
  109. package/adapters/cursor/skills/release-publish/SKILL.md +92 -0
  110. package/adapters/cursor/skills/release-reconcile/SKILL.md +81 -0
  111. package/adapters/cursor/skills/release-setup/SKILL.md +132 -0
  112. package/adapters/cursor/skills/release-verify/SKILL.md +110 -0
  113. package/adapters/cursor/src/schemas/adapter-build-manifest.schema.json +41 -0
  114. package/adapters/cursor/src/schemas/adapter-peer-verification-request.schema.json +54 -0
  115. package/adapters/cursor/src/schemas/adapter-peer-verification-result.schema.json +54 -0
  116. package/adapters/cursor/src/schemas/adapter-source.schema.json +47 -0
  117. package/adapters/cursor/src/schemas/audit-baseline-pin.schema.json +163 -0
  118. package/adapters/cursor/src/schemas/declared-read-surface-result.schema.json +61 -0
  119. package/adapters/cursor/src/schemas/engineering-baseline.schema.json +77 -0
  120. package/adapters/cursor/src/schemas/executable-identity-observation.schema.json +162 -0
  121. package/adapters/cursor/src/schemas/filesystem-root-binding.schema.json +14 -0
  122. package/adapters/cursor/src/schemas/filesystem-tree-observation.schema.json +71 -0
  123. package/adapters/cursor/src/schemas/fixed-set-publication-manifest.schema.json +108 -0
  124. package/adapters/cursor/src/schemas/fixed-set-publication-receipt.schema.json +148 -0
  125. package/adapters/cursor/src/schemas/host-capability-fact.schema.json +31 -0
  126. package/adapters/cursor/src/schemas/host-descriptor.schema.json +144 -0
  127. package/adapters/cursor/src/schemas/host-operation-plan.schema.json +57 -0
  128. package/adapters/cursor/src/schemas/host-operation-receipt.schema.json +81 -0
  129. package/adapters/cursor/src/schemas/host-probe-result.schema.json +30 -0
  130. package/adapters/cursor/src/schemas/host-registry.schema.json +18 -0
  131. package/adapters/cursor/src/schemas/host-verification-request.schema.json +67 -0
  132. package/adapters/cursor/src/schemas/host-verification-result.schema.json +149 -0
  133. package/adapters/cursor/src/schemas/managed-file-lock.schema.json +77 -0
  134. package/adapters/cursor/src/schemas/migration-manifest.schema.json +412 -0
  135. package/adapters/cursor/src/schemas/observation-scope.schema.json +91 -0
  136. package/adapters/cursor/src/schemas/operation-request.schema.json +58 -0
  137. package/adapters/cursor/src/schemas/operation-result.schema.json +130 -0
  138. package/adapters/cursor/src/schemas/platform-difference-registry.schema.json +110 -0
  139. package/adapters/cursor/src/schemas/plugin-verification-request.schema.json +499 -0
  140. package/adapters/cursor/src/schemas/plugin-verification-result.schema.json +1217 -0
  141. package/adapters/cursor/src/schemas/profile-adoption-declaration.schema.json +111 -0
  142. package/adapters/cursor/src/schemas/profile-descriptor.schema.json +99 -0
  143. package/adapters/cursor/src/schemas/project-manifest.schema.json +67 -0
  144. package/adapters/cursor/src/schemas/project-profile.schema.json +25 -0
  145. package/adapters/cursor/src/schemas/public-boundary-declaration.schema.json +73 -0
  146. package/adapters/cursor/src/schemas/report-binding.schema.json +42 -0
  147. package/adapters/cursor/src/schemas/report-model.schema.json +308 -0
  148. package/adapters/cursor/src/schemas/skill-family-directory-verification-request.schema.json +100 -0
  149. package/adapters/cursor/src/schemas/skill-family-directory-verification-result.schema.json +193 -0
  150. package/adapters/cursor/src/schemas/source-authority-receipt.schema.json +31 -0
  151. package/adapters/cursor/src/schemas/state-event-envelope.schema.json +38 -0
  152. package/adapters/cursor/src/schemas/state-snapshot-metadata.schema.json +25 -0
  153. package/adapters/cursor/src/schemas/structured-scan-policy.schema.json +97 -0
  154. package/adapters/cursor/src/schemas/surface-scan-policy.schema.json +42 -0
  155. package/adapters/cursor/src/schemas/timeout-policy.schema.json +24 -0
  156. package/adapters/cursor/src/schemas/token-estimate-record.schema.json +75 -0
  157. package/adapters/cursor/src/schemas/token-estimate-result.schema.json +43 -0
  158. package/adapters/cursor/src/schemas/watchdog-termination-envelope.schema.json +156 -0
  159. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  160. package/adapters/kimi/bin/consumer-contract-vectors.json +7 -7
  161. package/adapters/kimi/bin/error-codes.json +1 -1
  162. package/adapters/kimi/bin/foundation-resource-binding.json +1 -1
  163. package/adapters/kimi/bin/prebuild-manifest.json +8 -4
  164. package/adapters/kimi/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  165. package/adapters/kimi/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  166. package/adapters/kimi/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  167. package/adapters/kimi/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  168. package/adapters/kimi/bin/registry.json +1 -1
  169. package/adapters/kimi/bin/release-skill.bundle.mjs +3560 -1200
  170. package/adapters/kimi/bin/rules.json +1 -1
  171. package/adapters/kimi/data/hosts/cursor/host-descriptor.json +34 -0
  172. package/adapters/kimi/data/hosts/registry.json +1 -0
  173. package/adapters/kimi/schemas/release-plan.schema.json +255 -25
  174. package/adapters/kimi/schemas/release-project.schema.json +228 -26
  175. package/adapters/kimi/skills/release-finish/SKILL.md +17 -4
  176. package/adapters/kimi/skills/release-help/SKILL.md +40 -39
  177. package/adapters/kimi/src/schemas/host-descriptor.schema.json +9 -2
  178. package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
  179. package/adapters/qoder/bin/consumer-contract-vectors.json +7 -7
  180. package/adapters/qoder/bin/error-codes.json +1 -1
  181. package/adapters/qoder/bin/foundation-resource-binding.json +1 -1
  182. package/adapters/qoder/bin/prebuild-manifest.json +8 -4
  183. package/adapters/qoder/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  184. package/adapters/qoder/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  185. package/adapters/qoder/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  186. package/adapters/qoder/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  187. package/adapters/qoder/bin/registry.json +1 -1
  188. package/adapters/qoder/bin/release-skill.bundle.mjs +3560 -1200
  189. package/adapters/qoder/bin/rules.json +1 -1
  190. package/adapters/qoder/data/hosts/cursor/host-descriptor.json +34 -0
  191. package/adapters/qoder/data/hosts/registry.json +1 -0
  192. package/adapters/qoder/schemas/release-plan.schema.json +255 -25
  193. package/adapters/qoder/schemas/release-project.schema.json +228 -26
  194. package/adapters/qoder/skills/release-finish/SKILL.md +17 -4
  195. package/adapters/qoder/skills/release-help/SKILL.md +40 -39
  196. package/adapters/qoder/src/schemas/host-descriptor.schema.json +9 -2
  197. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  198. package/adapters/workbuddy/bin/consumer-contract-vectors.json +7 -7
  199. package/adapters/workbuddy/bin/error-codes.json +1 -1
  200. package/adapters/workbuddy/bin/foundation-resource-binding.json +1 -1
  201. package/adapters/workbuddy/bin/prebuild-manifest.json +8 -4
  202. package/adapters/workbuddy/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  203. package/adapters/workbuddy/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  204. package/adapters/workbuddy/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  205. package/adapters/workbuddy/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  206. package/adapters/workbuddy/bin/registry.json +1 -1
  207. package/adapters/workbuddy/bin/release-skill.bundle.mjs +3560 -1200
  208. package/adapters/workbuddy/bin/rules.json +1 -1
  209. package/adapters/workbuddy/data/hosts/cursor/host-descriptor.json +34 -0
  210. package/adapters/workbuddy/data/hosts/registry.json +1 -0
  211. package/adapters/workbuddy/schemas/release-plan.schema.json +255 -25
  212. package/adapters/workbuddy/schemas/release-project.schema.json +228 -26
  213. package/adapters/workbuddy/skills/release-finish/SKILL.md +17 -4
  214. package/adapters/workbuddy/skills/release-help/SKILL.md +40 -39
  215. package/adapters/workbuddy/src/schemas/host-descriptor.schema.json +9 -2
  216. package/bin/consumer-contract-vectors.json +7 -7
  217. package/bin/error-codes.json +1 -1
  218. package/bin/foundation-resource-binding.json +1 -1
  219. package/bin/prebuild-manifest.json +8 -4
  220. package/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  221. package/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  222. package/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  223. package/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  224. package/bin/registry.json +1 -1
  225. package/bin/release-skill-cli.mjs +25 -1
  226. package/bin/release-skill.bundle.mjs +3560 -1200
  227. package/bin/rules.json +1 -1
  228. package/data/hosts/cursor/host-descriptor.json +34 -0
  229. package/data/hosts/registry.json +1 -0
  230. package/package.json +7 -5
  231. package/platform-manifest.json +75 -9
  232. package/schemas/release-plan.schema.json +255 -25
  233. package/schemas/release-project.schema.json +228 -26
  234. package/scripts/sync-public-files.mjs +3 -22
  235. package/skills/release-finish/SKILL.md +17 -4
  236. package/skills/release-help/SKILL.md +40 -39
  237. package/skills-src/release-finish/SKILL.md +17 -4
  238. package/skills-src/release-help/SKILL.md +40 -39
  239. package/src/adapters/contract.mjs +1 -0
  240. package/src/adapters/plugin-marketplace.mjs +201 -9
  241. package/src/commands/post-release-local.mjs +290 -34
  242. package/src/commands/prepare.mjs +74 -9
  243. package/src/commands/publish.mjs +4 -1
  244. package/src/commands/ship.mjs +2 -0
  245. package/src/commands/verify.mjs +73 -0
  246. package/src/core/checkpoints.mjs +5 -2
  247. package/src/core/config.mjs +1 -1
  248. package/src/core/foundation-host-verification.mjs +168 -0
  249. package/src/core/plan.mjs +19 -1
  250. package/src/core/postpublish.mjs +9 -1
  251. package/src/core/run-retention.mjs +1 -1
  252. package/src/core/surface-host-bindings.mjs +1 -0
  253. package/src/core/verification-gates.mjs +1 -1
  254. package/src/platforms/registry.mjs +225 -16
  255. package/src/producers/build-adapters.mjs +21 -26
  256. package/src/producers/foundation-resource-projection.mjs +3 -3
  257. package/src/schemas/host-descriptor.schema.json +9 -2
@@ -0,0 +1,77 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.skill-family.example/v1/managed-file-lock.json",
4
+ "title": "ManagedFileLock",
5
+ "description": "Locks the managed files of one project: each entry binds a relative path to a content hash and the generator that owns it, so drift between generated and hand-edited state can be detected mechanically.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "kind", "lockVersion", "entries"],
9
+ "properties": {
10
+ "schemaVersion": {
11
+ "const": 1
12
+ },
13
+ "kind": {
14
+ "const": "skill-family.managed-file-lock"
15
+ },
16
+ "lockVersion": {
17
+ "type": "integer",
18
+ "minimum": 1,
19
+ "description": "Monotonic lock generation; bumped whenever the locked set is re-projected."
20
+ },
21
+ "entries": {
22
+ "type": "array",
23
+ "minItems": 1,
24
+ "items": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["path", "hash", "generator"],
28
+ "properties": {
29
+ "path": {
30
+ "type": "string",
31
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$",
32
+ "description": "Relative POSIX path of the managed file. Path containment beyond shape is a mechanism concern owned by the harness."
33
+ },
34
+ "hash": {
35
+ "type": "object",
36
+ "additionalProperties": false,
37
+ "required": ["algorithm", "value"],
38
+ "properties": {
39
+ "algorithm": {
40
+ "enum": ["sha256"],
41
+ "description": "v1 freezes a single hash algorithm."
42
+ },
43
+ "value": {
44
+ "type": "string",
45
+ "pattern": "^[0-9a-f]{64}$",
46
+ "description": "Lowercase hex digest of the managed file content."
47
+ }
48
+ }
49
+ },
50
+ "generator": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": ["tool", "version"],
54
+ "properties": {
55
+ "tool": {
56
+ "type": "string",
57
+ "minLength": 1
58
+ },
59
+ "version": {
60
+ "type": "string",
61
+ "minLength": 1
62
+ },
63
+ "entrypoint": {
64
+ "type": "string",
65
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$"
66
+ }
67
+ }
68
+ },
69
+ "policy": {
70
+ "enum": ["managed"],
71
+ "description": "v1 freezes a single policy class."
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,412 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.skill-family.example/v1/migration-manifest.json",
4
+ "title": "MigrationManifest",
5
+ "description": "Declares the migration state of one adoption target: the legacy infrastructure entries that must exit, each bound to its replacement, and any temporary exceptions. Every temporary exception carries exactly four mandatory fields (owner, reason, deadline, migrationTarget); an incomplete exception is never accepted. Path containment beyond shape is a mechanism concern owned by the harness: user-provided paths are only ever read inside the target root.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "kind"],
9
+ "properties": {
10
+ "schemaVersion": {
11
+ "const": 1
12
+ },
13
+ "kind": {
14
+ "const": "skill-family.migration-manifest"
15
+ },
16
+ "capabilityUseContext": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["scope", "locale"],
20
+ "properties": {
21
+ "scope": {
22
+ "type": "string",
23
+ "enum": ["contracts", "harness", "engineering-kit", "profile", "all"]
24
+ },
25
+ "locale": {
26
+ "type": "string",
27
+ "enum": ["en", "zh-CN"]
28
+ }
29
+ }
30
+ },
31
+ "capabilityUses": {
32
+ "type": "array",
33
+ "minItems": 1,
34
+ "maxItems": 200,
35
+ "items": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": ["useId", "problemStatement", "constraints", "retainedGuarantees"],
39
+ "properties": {
40
+ "useId": {
41
+ "type": "string",
42
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
43
+ "maxLength": 80
44
+ },
45
+ "problemStatement": {
46
+ "allOf": [
47
+ { "$ref": "#/$defs/trimmedCapabilityUseText" },
48
+ { "type": "string", "maxLength": 1000 }
49
+ ]
50
+ },
51
+ "constraints": {
52
+ "type": "array",
53
+ "maxItems": 20,
54
+ "uniqueItems": true,
55
+ "items": {
56
+ "allOf": [
57
+ { "$ref": "#/$defs/trimmedCapabilityUseText" },
58
+ { "type": "string", "maxLength": 500 }
59
+ ]
60
+ }
61
+ },
62
+ "retainedGuarantees": {
63
+ "type": "array",
64
+ "minItems": 1,
65
+ "maxItems": 20,
66
+ "uniqueItems": true,
67
+ "items": {
68
+ "allOf": [
69
+ { "$ref": "#/$defs/trimmedCapabilityUseText" },
70
+ { "type": "string", "maxLength": 500 }
71
+ ]
72
+ }
73
+ },
74
+ "catalogFilters": {
75
+ "type": "array",
76
+ "maxItems": 20,
77
+ "uniqueItems": true,
78
+ "items": {
79
+ "allOf": [
80
+ { "$ref": "#/$defs/trimmedCapabilityUseText" },
81
+ { "type": "string", "maxLength": 200 }
82
+ ]
83
+ }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "capabilityDecisions": {
89
+ "type": "array",
90
+ "items": {
91
+ "type": "object",
92
+ "additionalProperties": false,
93
+ "required": ["useId", "disposition", "reason"],
94
+ "properties": {
95
+ "useId": {
96
+ "type": "string",
97
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
98
+ "maxLength": 80
99
+ },
100
+ "disposition": {
101
+ "type": "string",
102
+ "enum": ["direct-adoption", "compatibility-layer", "keep-business", "foundation-gap"]
103
+ },
104
+ "targetCapability": {
105
+ "type": "string",
106
+ "pattern": "^foundation\\.[a-z0-9\\-]+(\\.[a-z0-9\\-]+)+$"
107
+ },
108
+ "reason": {
109
+ "type": "string",
110
+ "minLength": 1,
111
+ "maxLength": 1000
112
+ }
113
+ },
114
+ "allOf": [
115
+ {
116
+ "if": {
117
+ "required": ["disposition"],
118
+ "properties": {
119
+ "disposition": {
120
+ "enum": ["direct-adoption", "compatibility-layer"]
121
+ }
122
+ }
123
+ },
124
+ "then": {
125
+ "required": ["targetCapability"],
126
+ "properties": { "targetCapability": { "type": "string" } }
127
+ }
128
+ },
129
+ {
130
+ "if": {
131
+ "required": ["disposition"],
132
+ "properties": {
133
+ "disposition": {
134
+ "enum": ["keep-business", "foundation-gap"]
135
+ }
136
+ }
137
+ },
138
+ "then": {
139
+ "not": {
140
+ "required": ["targetCapability"],
141
+ "properties": { "targetCapability": { "type": "string" } }
142
+ }
143
+ }
144
+ }
145
+ ]
146
+ }
147
+ },
148
+ "manifestVersion": {
149
+ "type": "integer",
150
+ "minimum": 1,
151
+ "description": "Monotonic manifest generation; bumped whenever the declared legacy/exception set changes."
152
+ },
153
+ "legacyInfra": {
154
+ "type": "array",
155
+ "items": {
156
+ "type": "object",
157
+ "additionalProperties": false,
158
+ "required": ["path", "replacedBy"],
159
+ "properties": {
160
+ "path": {
161
+ "type": "string",
162
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$",
163
+ "description": "Relative POSIX path of one legacy implementation. Shape only: absolute paths, traversal, UNC/drive forms and symlink escapes are rejected by harness containment at assessment time, fail-closed."
164
+ },
165
+ "replacedBy": {
166
+ "oneOf": [
167
+ { "type": "string", "minLength": 1 },
168
+ { "type": "null" }
169
+ ],
170
+ "description": "The replacement facility (tool/command/module) that supersedes this legacy entry. An empty replacement is never a valid exit claim."
171
+ },
172
+ "useId": {
173
+ "type": "string",
174
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
175
+ "maxLength": 80
176
+ },
177
+ "recoveryRef": {
178
+ "type": "string",
179
+ "minLength": 1
180
+ }
181
+ },
182
+ "allOf": [
183
+ {
184
+ "if": {
185
+ "required": ["replacedBy"],
186
+ "properties": { "replacedBy": { "type": "null" } }
187
+ },
188
+ "then": {
189
+ "required": ["useId"],
190
+ "properties": { "useId": { "type": "string" } }
191
+ }
192
+ }
193
+ ]
194
+ }
195
+ },
196
+ "legacyReferences": {
197
+ "type": "array",
198
+ "description": "Legacy text references that must exit from retained files: each entry declares a file that is kept for other purposes, a literal text that must no longer appear in it, and the facility that replaces the old usage. The file itself is never deleted by this mechanism — only the old text must be absent.",
199
+ "items": {
200
+ "type": "object",
201
+ "additionalProperties": false,
202
+ "required": ["path", "text", "replacedBy"],
203
+ "properties": {
204
+ "path": {
205
+ "type": "string",
206
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$",
207
+ "description": "Relative POSIX path of a retained file. Shape only: containment is enforced at assessment time."
208
+ },
209
+ "text": {
210
+ "type": "string",
211
+ "minLength": 1,
212
+ "description": "Exact literal text that must be absent from the file. No regex; byte-exact UTF-8 match."
213
+ },
214
+ "replacedBy": {
215
+ "oneOf": [
216
+ { "type": "string", "minLength": 1 },
217
+ { "type": "null" }
218
+ ],
219
+ "description": "The replacement facility that supersedes this old reference. Empty is never valid."
220
+ },
221
+ "useId": {
222
+ "type": "string",
223
+ "pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",
224
+ "maxLength": 80
225
+ }
226
+ },
227
+ "allOf": [
228
+ {
229
+ "if": {
230
+ "required": ["replacedBy"],
231
+ "properties": { "replacedBy": { "type": "null" } }
232
+ },
233
+ "then": {
234
+ "required": ["useId"],
235
+ "properties": { "useId": { "type": "string" } }
236
+ }
237
+ }
238
+ ]
239
+ }
240
+ },
241
+ "exceptions": {
242
+ "type": "array",
243
+ "items": {
244
+ "type": "object",
245
+ "additionalProperties": false,
246
+ "required": ["owner", "reason", "deadline", "migrationTarget"],
247
+ "properties": {
248
+ "owner": {
249
+ "type": "string",
250
+ "minLength": 1
251
+ },
252
+ "reason": {
253
+ "type": "string",
254
+ "minLength": 1
255
+ },
256
+ "deadline": {
257
+ "type": "string",
258
+ "minLength": 1,
259
+ "description": "Parseable deadline; expiry is judged by the planning clock and never auto-renewed. Structural shape only — semantic parseability is a runtime finding."
260
+ },
261
+ "migrationTarget": {
262
+ "type": "string",
263
+ "minLength": 1
264
+ }
265
+ }
266
+ }
267
+ },
268
+ "targetProfile": {
269
+ "type": "string",
270
+ "minLength": 1,
271
+ "description": "The profile id this target adopts. Completion requires it to equal the profile id of the adoption plan; a missing or mismatched binding is never completion."
272
+ },
273
+ "foundationPackages": {
274
+ "type": "array",
275
+ "description": "Exact Foundation package bindings: every entry pins a published name to an exact version and a sha256 tarball/content digest. Ranges, tags and floating aliases are not bindings.",
276
+ "items": {
277
+ "type": "object",
278
+ "additionalProperties": false,
279
+ "required": ["name", "version", "digest"],
280
+ "properties": {
281
+ "name": {
282
+ "type": "string",
283
+ "minLength": 1
284
+ },
285
+ "version": {
286
+ "type": "string",
287
+ "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
288
+ "description": "Exact semver; no range operators."
289
+ },
290
+ "digest": {
291
+ "type": "string",
292
+ "pattern": "^sha256:[a-f0-9]{64}$",
293
+ "description": "Content digest as sha256:<64 lowercase hex>."
294
+ }
295
+ }
296
+ }
297
+ },
298
+ "verification": {
299
+ "type": "object",
300
+ "additionalProperties": false,
301
+ "description": "Evidence documents proving the adoption is verified: unit, integration, consumer and independent-audit evidence. Every value is a relative POSIX path inside the target root; existence and identity matching are judged by the completion gate, fail-closed.",
302
+ "properties": {
303
+ "unit": {
304
+ "type": "string",
305
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$"
306
+ },
307
+ "integration": {
308
+ "type": "string",
309
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$"
310
+ },
311
+ "consumer": {
312
+ "type": "string",
313
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$"
314
+ },
315
+ "independentAudit": {
316
+ "type": "string",
317
+ "pattern": "^[A-Za-z0-9._-]+(/[A-Za-z0-9._-]+)*$"
318
+ }
319
+ }
320
+ }
321
+ },
322
+ "$defs": {
323
+ "trimmedCapabilityUseText": {
324
+ "type": "string",
325
+ "minLength": 1,
326
+ "pattern": "^(?!\\s)(?![\\s\\S]*\\s$)(?![\\s\\S]*\\u0000)[\\s\\S]+$"
327
+ }
328
+ },
329
+ "allOf": [
330
+ {
331
+ "if": {
332
+ "required": ["capabilityUses"],
333
+ "properties": { "capabilityUses": { "type": "array" } }
334
+ },
335
+ "then": {
336
+ "required": ["capabilityUseContext"],
337
+ "properties": { "capabilityUseContext": { "type": "object" } }
338
+ },
339
+ "else": {
340
+ "not": {
341
+ "anyOf": [
342
+ {
343
+ "required": ["capabilityUseContext"],
344
+ "properties": { "capabilityUseContext": { "type": "object" } }
345
+ },
346
+ {
347
+ "required": ["capabilityDecisions"],
348
+ "properties": { "capabilityDecisions": { "type": "array" } }
349
+ }
350
+ ]
351
+ }
352
+ }
353
+ },
354
+ {
355
+ "if": {
356
+ "required": ["capabilityDecisions"],
357
+ "properties": { "capabilityDecisions": { "type": "array" } }
358
+ },
359
+ "then": {
360
+ "required": ["capabilityUses", "capabilityUseContext"],
361
+ "properties": {
362
+ "capabilityUses": { "type": "array" },
363
+ "capabilityUseContext": { "type": "object" }
364
+ }
365
+ }
366
+ },
367
+ {
368
+ "if": {
369
+ "required": ["legacyInfra"],
370
+ "properties": {
371
+ "legacyInfra": {
372
+ "type": "array",
373
+ "contains": {
374
+ "type": "object",
375
+ "required": ["useId"],
376
+ "properties": { "useId": { "type": "string" } }
377
+ }
378
+ }
379
+ }
380
+ },
381
+ "then": {
382
+ "required": ["capabilityUses", "capabilityUseContext"],
383
+ "properties": {
384
+ "capabilityUses": { "type": "array" },
385
+ "capabilityUseContext": { "type": "object" }
386
+ }
387
+ }
388
+ },
389
+ {
390
+ "if": {
391
+ "required": ["legacyReferences"],
392
+ "properties": {
393
+ "legacyReferences": {
394
+ "type": "array",
395
+ "contains": {
396
+ "type": "object",
397
+ "required": ["useId"],
398
+ "properties": { "useId": { "type": "string" } }
399
+ }
400
+ }
401
+ }
402
+ },
403
+ "then": {
404
+ "required": ["capabilityUses", "capabilityUseContext"],
405
+ "properties": {
406
+ "capabilityUses": { "type": "array" },
407
+ "capabilityUseContext": { "type": "object" }
408
+ }
409
+ }
410
+ }
411
+ ]
412
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.skill-family.example/v1/observation-scope.json",
4
+ "title": "ObservationScope",
5
+ "description": "Observation scope extension (aligned with the audit-side plugin-project observation schema v2). Freezes the controlled vocabularies an observation record may use: observation scopes, the standard platform set (including the qoder/dsh extensions), severity levels, foundation adoption statuses, the path basis, token measurement subjects, missing-platform intents, and consumption forms. An observation record is conformant only when every vocabulary value it uses is contained in the frozen sets declared here; this object is the single mechanical reference so the two repositories never restate the vocabularies independently.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "kind",
11
+ "scopeVocabulary",
12
+ "standardPlatforms",
13
+ "severityLevels",
14
+ "adoptionStatuses",
15
+ "pathBasisVocabulary",
16
+ "measurementSubjects",
17
+ "missingPlatformIntents",
18
+ "consumptionForms"
19
+ ],
20
+ "properties": {
21
+ "schemaVersion": { "const": 1 },
22
+ "kind": { "const": "skill-family.observation-scope" },
23
+ "alignedObservationSchemaVersions": {
24
+ "type": "array",
25
+ "minItems": 1,
26
+ "uniqueItems": true,
27
+ "items": { "type": "string", "minLength": 1 },
28
+ "description": "Observation contract document versions these vocabularies align with (e.g. 1.0.0-candidate, 2.0.0-candidate)."
29
+ },
30
+ "scopeVocabulary": {
31
+ "type": "array",
32
+ "minItems": 1,
33
+ "uniqueItems": true,
34
+ "items": { "enum": ["skill", "plugin", "release"] }
35
+ },
36
+ "standardPlatforms": {
37
+ "type": "array",
38
+ "minItems": 1,
39
+ "uniqueItems": true,
40
+ "items": {
41
+ "enum": ["claude-code", "codex", "kimi-code", "workbuddy", "qoder", "dsh"]
42
+ }
43
+ },
44
+ "severityLevels": {
45
+ "type": "array",
46
+ "minItems": 1,
47
+ "uniqueItems": true,
48
+ "items": { "enum": ["block", "error", "warning", "observe"] }
49
+ },
50
+ "adoptionStatuses": {
51
+ "type": "array",
52
+ "minItems": 1,
53
+ "uniqueItems": true,
54
+ "items": {
55
+ "enum": ["foundation-adopted", "self-built", "exempted", "not-adopted", "unknown"]
56
+ }
57
+ },
58
+ "pathBasisVocabulary": {
59
+ "type": "array",
60
+ "minItems": 1,
61
+ "uniqueItems": true,
62
+ "items": { "enum": ["project-root-relative"] }
63
+ },
64
+ "measurementSubjects": {
65
+ "type": "array",
66
+ "minItems": 1,
67
+ "uniqueItems": true,
68
+ "items": { "enum": ["logical-source", "worst-projection"] }
69
+ },
70
+ "missingPlatformIntents": {
71
+ "type": "array",
72
+ "minItems": 1,
73
+ "uniqueItems": true,
74
+ "items": {
75
+ "enum": ["unsupported", "planned", "experimental", "deprecated-host"]
76
+ }
77
+ },
78
+ "consumptionForms": {
79
+ "type": "array",
80
+ "minItems": 1,
81
+ "uniqueItems": true,
82
+ "items": {
83
+ "enum": ["dependencies", "vendored-bundle", "tarball-pin", "none", "other"]
84
+ }
85
+ },
86
+ "note": {
87
+ "type": "string",
88
+ "description": "Optional human rationale; not consumed mechanically."
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.skill-family.example/v1/operation-request.json",
4
+ "title": "OperationRequest",
5
+ "description": "One kernel protocol request: a named operation with params, addressed to a registered protocol name/version. Envelope shape is frozen; the operation vocabulary is registered in the kernel protocol definition.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "kind", "protocol", "operationId", "operation", "params"],
9
+ "properties": {
10
+ "schemaVersion": {
11
+ "const": 1
12
+ },
13
+ "kind": {
14
+ "const": "skill-family.operation-request"
15
+ },
16
+ "protocol": {
17
+ "$ref": "#/$defs/protocolRef"
18
+ },
19
+ "operationId": {
20
+ "type": "string",
21
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$",
22
+ "description": "Caller-chosen identifier; unique per caller, echoed by the result."
23
+ },
24
+ "operation": {
25
+ "type": "string",
26
+ "pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*$",
27
+ "description": "Operation name; must be in the frozen vocabulary of the referenced protocol version."
28
+ },
29
+ "params": {
30
+ "type": "object",
31
+ "description": "Operation-specific params. The frozen params contract of each operation lives in the kernel protocol definition, not here."
32
+ },
33
+ "requestedAt": {
34
+ "type": "string",
35
+ "format": "date-time",
36
+ "description": "Optional RFC 3339 date-time when the request was created."
37
+ }
38
+ },
39
+ "$defs": {
40
+ "protocolRef": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "required": ["name", "version"],
44
+ "properties": {
45
+ "name": {
46
+ "type": "string",
47
+ "pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*(\\.[a-z][a-z0-9]*(-[a-z0-9]+)*)*$",
48
+ "description": "Registered protocol name (dot-separated kebab-case segments)."
49
+ },
50
+ "version": {
51
+ "type": "integer",
52
+ "minimum": 1,
53
+ "description": "Registered protocol version."
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }