@sema-agent/settings-schema 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/CHANGELOG.md +229 -0
  2. package/README.md +35 -4
  3. package/conformance/VERSION +1 -0
  4. package/conformance/baseline.json +55 -0
  5. package/conformance/cases/c01-entry-salvage-then-typo/expected.json +105 -0
  6. package/conformance/cases/c01-entry-salvage-then-typo/input.json +22 -0
  7. package/conformance/cases/c01-entry-salvage-then-typo/meta.json +10 -0
  8. package/conformance/cases/c02-hosts-clamp-stacked/expected.json +96 -0
  9. package/conformance/cases/c02-hosts-clamp-stacked/input.json +21 -0
  10. package/conformance/cases/c02-hosts-clamp-stacked/meta.json +10 -0
  11. package/conformance/cases/c03-literal-dotted-top-key/expected.json +112 -0
  12. package/conformance/cases/c03-literal-dotted-top-key/input.json +26 -0
  13. package/conformance/cases/c03-literal-dotted-top-key/meta.json +5 -0
  14. package/conformance/cases/c04-all-bad-collection-not-salvaged/expected.json +77 -0
  15. package/conformance/cases/c04-all-bad-collection-not-salvaged/input.json +18 -0
  16. package/conformance/cases/c04-all-bad-collection-not-salvaged/meta.json +5 -0
  17. package/conformance/cases/c05-gate-domain-bad-entry-throws/expected.json +16 -0
  18. package/conformance/cases/c05-gate-domain-bad-entry-throws/input.json +18 -0
  19. package/conformance/cases/c05-gate-domain-bad-entry-throws/meta.json +5 -0
  20. package/conformance/cases/c06-legacy-governance-lift/expected.json +99 -0
  21. package/conformance/cases/c06-legacy-governance-lift/input.json +20 -0
  22. package/conformance/cases/c06-legacy-governance-lift/meta.json +9 -0
  23. package/conformance/cases/c07-hooks-is-not-a-config-domain/expected.json +72 -0
  24. package/conformance/cases/c07-hooks-is-not-a-config-domain/input.json +43 -0
  25. package/conformance/cases/c07-hooks-is-not-a-config-domain/meta.json +6 -0
  26. package/conformance/cases/c08-limits-unknown-carried-64/expected.json +336 -0
  27. package/conformance/cases/c08-limits-unknown-carried-64/input.json +74 -0
  28. package/conformance/cases/c08-limits-unknown-carried-64/meta.json +5 -0
  29. package/conformance/cases/c09-limits-unknown-carried-65/expected.json +338 -0
  30. package/conformance/cases/c09-limits-unknown-carried-65/input.json +75 -0
  31. package/conformance/cases/c09-limits-unknown-carried-65/meta.json +7 -0
  32. package/conformance/cases/c10-record-key-secret-redacted-twice/expected.json +106 -0
  33. package/conformance/cases/c10-record-key-secret-redacted-twice/input.json +29 -0
  34. package/conformance/cases/c10-record-key-secret-redacted-twice/meta.json +13 -0
  35. package/conformance/cases/c11-unicode-unknown-keys/expected.json +88 -0
  36. package/conformance/cases/c11-unicode-unknown-keys/input.json +13 -0
  37. package/conformance/cases/c11-unicode-unknown-keys/meta.json +5 -0
  38. package/conformance/cases/c12-prototype-name-top-keys/expected.json +72 -0
  39. package/conformance/cases/c12-prototype-name-top-keys/input.json +20 -0
  40. package/conformance/cases/c12-prototype-name-top-keys/meta.json +11 -0
  41. package/conformance/cases/c13-models-field-null/expected.json +77 -0
  42. package/conformance/cases/c13-models-field-null/input.json +11 -0
  43. package/conformance/cases/c13-models-field-null/meta.json +5 -0
  44. package/conformance/cases/c14-models-field-empty-array/expected.json +72 -0
  45. package/conformance/cases/c14-models-field-empty-array/input.json +11 -0
  46. package/conformance/cases/c14-models-field-empty-array/meta.json +5 -0
  47. package/conformance/cases/c15-models-field-number/expected.json +77 -0
  48. package/conformance/cases/c15-models-field-number/input.json +11 -0
  49. package/conformance/cases/c15-models-field-number/meta.json +5 -0
  50. package/conformance/cases/c16-deep-nesting-205/expected.json +83 -0
  51. package/conformance/cases/c16-deep-nesting-205/input.json +421 -0
  52. package/conformance/cases/c16-deep-nesting-205/meta.json +5 -0
  53. package/conformance/cases/c17-empty-domain-file/expected.json +73 -0
  54. package/conformance/cases/c17-empty-domain-file/input.json +10 -0
  55. package/conformance/cases/c17-empty-domain-file/meta.json +5 -0
  56. package/conformance/cases/c18-wire-envelope-not-an-object/expected.json +74 -0
  57. package/conformance/cases/c18-wire-envelope-not-an-object/input.json +8 -0
  58. package/conformance/cases/c18-wire-envelope-not-an-object/meta.json +5 -0
  59. package/conformance/cases/c19-wire-envelope-no-version/expected.json +74 -0
  60. package/conformance/cases/c19-wire-envelope-no-version/input.json +13 -0
  61. package/conformance/cases/c19-wire-envelope-no-version/meta.json +5 -0
  62. package/conformance/cases/c20-governance-absent-lifts/expected.json +84 -0
  63. package/conformance/cases/c20-governance-absent-lifts/input.json +11 -0
  64. package/conformance/cases/c20-governance-absent-lifts/meta.json +9 -0
  65. package/conformance/cases/c21-governance-empty-object-wins/expected.json +72 -0
  66. package/conformance/cases/c21-governance-empty-object-wins/input.json +12 -0
  67. package/conformance/cases/c21-governance-empty-object-wins/meta.json +5 -0
  68. package/conformance/cases/c22-governance-null-throws/expected.json +16 -0
  69. package/conformance/cases/c22-governance-null-throws/input.json +9 -0
  70. package/conformance/cases/c22-governance-null-throws/meta.json +5 -0
  71. package/conformance/cases/c23-mixed-validity-models/expected.json +106 -0
  72. package/conformance/cases/c23-mixed-validity-models/input.json +27 -0
  73. package/conformance/cases/c23-mixed-validity-models/meta.json +9 -0
  74. package/conformance/cases/c24-valid-entries-with-unknown-keys/expected.json +100 -0
  75. package/conformance/cases/c24-valid-entries-with-unknown-keys/input.json +25 -0
  76. package/conformance/cases/c24-valid-entries-with-unknown-keys/meta.json +5 -0
  77. package/conformance/cases/c25-published-roundtrip-zero-warnings/expected.json +89 -0
  78. package/conformance/cases/c25-published-roundtrip-zero-warnings/input.json +24 -0
  79. package/conformance/cases/c25-published-roundtrip-zero-warnings/meta.json +5 -0
  80. package/conformance/cases/c26-hosts-array-1024/expected.json +7241 -0
  81. package/conformance/cases/c26-hosts-array-1024/input.json +3084 -0
  82. package/conformance/cases/c26-hosts-array-1024/meta.json +5 -0
  83. package/conformance/cases/c27-hosts-array-1025/expected.json +7248 -0
  84. package/conformance/cases/c27-hosts-array-1025/input.json +3087 -0
  85. package/conformance/cases/c27-hosts-array-1025/meta.json +5 -0
  86. package/conformance/cases/c28-large-document-over-1mb/expected.json +82 -0
  87. package/conformance/cases/c28-large-document-over-1mb/input.json +11 -0
  88. package/conformance/cases/c28-large-document-over-1mb/meta.json +5 -0
  89. package/conformance/cases/c29-salvage-then-domain-refine-fails/expected.json +77 -0
  90. package/conformance/cases/c29-salvage-then-domain-refine-fails/input.json +27 -0
  91. package/conformance/cases/c29-salvage-then-domain-refine-fails/meta.json +5 -0
  92. package/conformance/cases/c30-version-triple-a-first/expected.json +85 -0
  93. package/conformance/cases/c30-version-triple-a-first/input.json +18 -0
  94. package/conformance/cases/c30-version-triple-a-first/meta.json +5 -0
  95. package/conformance/cases/c31-version-triple-b-changed/expected.json +85 -0
  96. package/conformance/cases/c31-version-triple-b-changed/input.json +18 -0
  97. package/conformance/cases/c31-version-triple-b-changed/meta.json +5 -0
  98. package/conformance/cases/c32-version-triple-a-restored/expected.json +85 -0
  99. package/conformance/cases/c32-version-triple-a-restored/input.json +18 -0
  100. package/conformance/cases/c32-version-triple-a-restored/meta.json +5 -0
  101. package/conformance/cases/c33-limits-nested-carried-key/expected.json +91 -0
  102. package/conformance/cases/c33-limits-nested-carried-key/input.json +14 -0
  103. package/conformance/cases/c33-limits-nested-carried-key/meta.json +5 -0
  104. package/conformance/cases/c34-skills-content-vs-manifest/expected.json +160 -0
  105. package/conformance/cases/c34-skills-content-vs-manifest/input.json +18 -0
  106. package/conformance/cases/c34-skills-content-vs-manifest/meta.json +5 -0
  107. package/conformance/cases/c35-portable-domain-file-is-null/expected.json +76 -0
  108. package/conformance/cases/c35-portable-domain-file-is-null/input.json +9 -0
  109. package/conformance/cases/c35-portable-domain-file-is-null/meta.json +5 -0
  110. package/conformance/cases/c36-skills-entry-without-content/expected.json +144 -0
  111. package/conformance/cases/c36-skills-entry-without-content/input.json +16 -0
  112. package/conformance/cases/c36-skills-entry-without-content/meta.json +5 -0
  113. package/conformance/cases/c37-skills-field-null/expected.json +134 -0
  114. package/conformance/cases/c37-skills-field-null/input.json +9 -0
  115. package/conformance/cases/c37-skills-field-null/meta.json +5 -0
  116. package/conformance/cases/c38-remote-exec-is-a-non-domain-file/expected.json +72 -0
  117. package/conformance/cases/c38-remote-exec-is-a-non-domain-file/input.json +11 -0
  118. package/conformance/cases/c38-remote-exec-is-a-non-domain-file/meta.json +5 -0
  119. package/conformance/cases/c39-hidden-file-in-config-d/expected.json +72 -0
  120. package/conformance/cases/c39-hidden-file-in-config-d/input.json +11 -0
  121. package/conformance/cases/c39-hidden-file-in-config-d/meta.json +5 -0
  122. package/conformance/cases/cc01-mcp-toolfaces-non-object/expected.json +112 -0
  123. package/conformance/cases/cc01-mcp-toolfaces-non-object/input.json +39 -0
  124. package/conformance/cases/cc01-mcp-toolfaces-non-object/meta.json +8 -0
  125. package/conformance/cases/cc02-mcp-source-key-is-transported/expected.json +85 -0
  126. package/conformance/cases/cc02-mcp-source-key-is-transported/input.json +20 -0
  127. package/conformance/cases/cc02-mcp-source-key-is-transported/meta.json +8 -0
  128. package/conformance/cases/cc03-model-compat-unknown-subkey/expected.json +89 -0
  129. package/conformance/cases/cc03-model-compat-unknown-subkey/input.json +22 -0
  130. package/conformance/cases/cc03-model-compat-unknown-subkey/meta.json +8 -0
  131. package/conformance/cases/cli01-model-name-nfc-vs-nfd/expected.json +102 -0
  132. package/conformance/cases/cli01-model-name-nfc-vs-nfd/input.json +30 -0
  133. package/conformance/cases/cli01-model-name-nfc-vs-nfd/meta.json +9 -0
  134. package/conformance/cases/cli02-control-and-zero-width-chars/expected.json +115 -0
  135. package/conformance/cases/cli02-control-and-zero-width-chars/input.json +42 -0
  136. package/conformance/cases/cli02-control-and-zero-width-chars/meta.json +9 -0
  137. package/conformance/cases/cli03-credential-pasted-into-unknown-key/expected.json +92 -0
  138. package/conformance/cases/cli03-credential-pasted-into-unknown-key/input.json +16 -0
  139. package/conformance/cases/cli03-credential-pasted-into-unknown-key/meta.json +9 -0
  140. package/conformance/cases/cli04-env-value-with-newline/expected.json +93 -0
  141. package/conformance/cases/cli04-env-value-with-newline/input.json +23 -0
  142. package/conformance/cases/cli04-env-value-with-newline/meta.json +5 -0
  143. package/conformance/cases/cli05-long-and-prefix-colliding-names/expected.json +109 -0
  144. package/conformance/cases/cli05-long-and-prefix-colliding-names/input.json +30 -0
  145. package/conformance/cases/cli05-long-and-prefix-colliding-names/meta.json +5 -0
  146. package/conformance/cases/z01-every-domain-empty-object/expected.json +72 -0
  147. package/conformance/cases/z01-every-domain-empty-object/input.json +25 -0
  148. package/conformance/cases/z01-every-domain-empty-object/meta.json +5 -0
  149. package/conformance/cases/z02-every-domain-unknown-key/expected.json +228 -0
  150. package/conformance/cases/z02-every-domain-unknown-key/input.json +59 -0
  151. package/conformance/cases/z02-every-domain-unknown-key/meta.json +5 -0
  152. package/conformance/historical/settings-schema@1.0.0.json +999 -0
  153. package/conformance/historical/settings-schema@1.10.0.json +999 -0
  154. package/conformance/historical/settings-schema@1.5.0.json +999 -0
  155. package/conformance/historical/settings-schema@2.0.0.json +999 -0
  156. package/conformance/historical/settings-schema@2.1.0.json +999 -0
  157. package/dist/api/auth.d.ts +42 -1
  158. package/dist/api/auth.js +71 -4
  159. package/dist/api/scopes.d.ts +9 -1
  160. package/dist/api/scopes.js +8 -2
  161. package/dist/config-fns.d.ts +56 -24
  162. package/dist/config-fns.js +89 -72
  163. package/dist/conformance/canonical.d.ts +36 -0
  164. package/dist/conformance/canonical.js +114 -0
  165. package/dist/conformance/contract-adapter.d.ts +20 -0
  166. package/dist/conformance/contract-adapter.js +74 -0
  167. package/dist/conformance/corpus.d.ts +73 -0
  168. package/dist/conformance/corpus.js +99 -0
  169. package/dist/conformance/derive.d.ts +48 -0
  170. package/dist/conformance/derive.js +136 -0
  171. package/dist/conformance/index.d.ts +22 -0
  172. package/dist/conformance/index.js +22 -0
  173. package/dist/conformance/run.d.ts +27 -0
  174. package/dist/conformance/run.js +424 -0
  175. package/dist/conformance/types.d.ts +288 -0
  176. package/dist/conformance/types.js +4 -0
  177. package/dist/conformance/warnings.d.ts +88 -0
  178. package/dist/conformance/warnings.js +144 -0
  179. package/dist/file-store.d.ts +7 -0
  180. package/dist/file-store.js +6 -2
  181. package/package.json +7 -5
  182. package/dist/api/wire.d.ts +0 -60
  183. package/dist/api/wire.js +0 -89
@@ -0,0 +1,160 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "effective",
4
+ "effective": {
5
+ "collab": {
6
+ "templates": []
7
+ },
8
+ "entitlement": {
9
+ "budgetGroups": [],
10
+ "groupBindings": [],
11
+ "subjects": [],
12
+ "tiers": []
13
+ },
14
+ "execution": {
15
+ "allowedLanes": [
16
+ "host"
17
+ ],
18
+ "required": false
19
+ },
20
+ "governance": {},
21
+ "hosts": {
22
+ "hosts": []
23
+ },
24
+ "limits": {},
25
+ "mcp": {
26
+ "servers": []
27
+ },
28
+ "models": {
29
+ "models": [],
30
+ "roles": {},
31
+ "tierGroups": []
32
+ },
33
+ "plugins": {
34
+ "plugins": []
35
+ },
36
+ "projects": {
37
+ "projects": {}
38
+ },
39
+ "prompts": {
40
+ "bindings": []
41
+ },
42
+ "rosters": {
43
+ "rosters": []
44
+ },
45
+ "runtime": {},
46
+ "scenarios": {
47
+ "scenarios": []
48
+ },
49
+ "skills": {
50
+ "skills": [
51
+ {
52
+ "content": "# hello",
53
+ "description": "d",
54
+ "enabled": true,
55
+ "name": "sk1",
56
+ "rosters": [],
57
+ "scenarios": []
58
+ }
59
+ ]
60
+ },
61
+ "systems": {
62
+ "systems": []
63
+ },
64
+ "workers": {
65
+ "workers": []
66
+ }
67
+ },
68
+ "warnings": [
69
+ {
70
+ "domain": "skills",
71
+ "keys": [
72
+ [
73
+ "skills",
74
+ 0,
75
+ "zzzTypo"
76
+ ]
77
+ ],
78
+ "kind": "unknown-keys-dropped"
79
+ }
80
+ ],
81
+ "metadata": {
82
+ "version": 7,
83
+ "updatedAt": "2026-09-16T00:00:00.000Z"
84
+ }
85
+ },
86
+ "wire": {
87
+ "outcome": "effective",
88
+ "effective": {
89
+ "collab": {
90
+ "templates": []
91
+ },
92
+ "entitlement": {
93
+ "budgetGroups": [],
94
+ "groupBindings": [],
95
+ "subjects": [],
96
+ "tiers": []
97
+ },
98
+ "execution": {
99
+ "allowedLanes": [
100
+ "host"
101
+ ],
102
+ "required": false
103
+ },
104
+ "governance": {},
105
+ "hosts": {
106
+ "hosts": []
107
+ },
108
+ "limits": {},
109
+ "mcp": {
110
+ "servers": []
111
+ },
112
+ "models": {
113
+ "models": [],
114
+ "roles": {},
115
+ "tierGroups": []
116
+ },
117
+ "plugins": {
118
+ "plugins": []
119
+ },
120
+ "projects": {
121
+ "projects": {}
122
+ },
123
+ "rosters": {
124
+ "rosters": []
125
+ },
126
+ "runtime": {},
127
+ "scenarios": {
128
+ "scenarios": []
129
+ },
130
+ "skills": {
131
+ "skills": [
132
+ {
133
+ "contentHash": "sha256:ea67f39f2a707e536439ee31e49fdd586b4a8437d3408f0466112d040cd06681",
134
+ "description": "d",
135
+ "enabled": true,
136
+ "name": "sk1",
137
+ "rosters": [],
138
+ "scenarios": []
139
+ }
140
+ ]
141
+ },
142
+ "systems": {
143
+ "systems": []
144
+ },
145
+ "workers": {
146
+ "workers": []
147
+ }
148
+ },
149
+ "warnings": [],
150
+ "metadata": {
151
+ "version": 7,
152
+ "updatedAt": "2026-09-16T00:00:00.000Z"
153
+ },
154
+ "why": "skills 是五条变换里唯一**算出新值**的那条(content → contentHash);派生会让入参与期望同时用被测的那只哈希,算错也两侧同样错 ⇒ wire 腿写显式金样冻结哈希"
155
+ },
156
+ "localRoot": {
157
+ "derive": true,
158
+ "localVersion": 3769383338762029
159
+ }
160
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "skills": {
8
+ "skills": [
9
+ {
10
+ "name": "sk1",
11
+ "description": "d",
12
+ "content": "# hello",
13
+ "zzzTypo": 1
14
+ }
15
+ ]
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "skills 是三腿之间**唯一**的表示差异(T2):域形/本地形带 `content`,wire 形带 `contentHash`。两侧的条目 schema 必须逐字对应(manifest = 域条目 omit content + contentHash),否则 center 一发 manifest,消费端就整张 skill 清单蒸发(wire 腿用的是另一张 schema,域 schema 会把每一条合法 manifest 都判坏)。条目上的未知键在域腿被点名、在 wire 腿**没有**这条告警(manifest 不走剥键扫描)—— 这处不对称也要写在变换表里,不能靠谁记得。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "effective",
4
+ "effective": {
5
+ "collab": {
6
+ "templates": []
7
+ },
8
+ "entitlement": {
9
+ "budgetGroups": [],
10
+ "groupBindings": [],
11
+ "subjects": [],
12
+ "tiers": []
13
+ },
14
+ "execution": {
15
+ "allowedLanes": [
16
+ "host"
17
+ ],
18
+ "required": false
19
+ },
20
+ "governance": {},
21
+ "hosts": {
22
+ "hosts": []
23
+ },
24
+ "limits": {},
25
+ "mcp": {
26
+ "servers": []
27
+ },
28
+ "models": {
29
+ "models": [],
30
+ "roles": {},
31
+ "tierGroups": []
32
+ },
33
+ "plugins": {
34
+ "plugins": []
35
+ },
36
+ "projects": {
37
+ "projects": {}
38
+ },
39
+ "prompts": {
40
+ "bindings": []
41
+ },
42
+ "rosters": {
43
+ "rosters": []
44
+ },
45
+ "runtime": {},
46
+ "scenarios": {
47
+ "scenarios": []
48
+ },
49
+ "skills": {
50
+ "skills": []
51
+ },
52
+ "systems": {
53
+ "systems": []
54
+ },
55
+ "workers": {
56
+ "workers": []
57
+ }
58
+ },
59
+ "warnings": [
60
+ {
61
+ "domain": "mcp",
62
+ "kind": "domain-defaulted"
63
+ }
64
+ ],
65
+ "metadata": {
66
+ "version": 7,
67
+ "updatedAt": "2026-09-16T00:00:00.000Z"
68
+ }
69
+ },
70
+ "wire": {
71
+ "derive": true
72
+ },
73
+ "localRoot": {
74
+ "derive": true
75
+ }
76
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "mcp": null
8
+ }
9
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "一个**便携**域的文档是 JSON `null`:domains/wire 两腿走域档位(mcp 是 default 档 ⇒ 降级 + 一条告警),local-root 腿却在**文件层**就拒(`config.d/mcp.json` 的内容必须是对象)—— 同一份输入,两种正确结局。把这条差异当故障去「修平」的消费方,会把一次半写文件读成一份空的 MCP 注册表。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,144 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "effective",
4
+ "effective": {
5
+ "collab": {
6
+ "templates": []
7
+ },
8
+ "entitlement": {
9
+ "budgetGroups": [],
10
+ "groupBindings": [],
11
+ "subjects": [],
12
+ "tiers": []
13
+ },
14
+ "execution": {
15
+ "allowedLanes": [
16
+ "host"
17
+ ],
18
+ "required": false
19
+ },
20
+ "governance": {},
21
+ "hosts": {
22
+ "hosts": []
23
+ },
24
+ "limits": {},
25
+ "mcp": {
26
+ "servers": []
27
+ },
28
+ "models": {
29
+ "models": [],
30
+ "roles": {},
31
+ "tierGroups": []
32
+ },
33
+ "plugins": {
34
+ "plugins": []
35
+ },
36
+ "projects": {
37
+ "projects": {}
38
+ },
39
+ "prompts": {
40
+ "bindings": []
41
+ },
42
+ "rosters": {
43
+ "rosters": []
44
+ },
45
+ "runtime": {},
46
+ "scenarios": {
47
+ "scenarios": []
48
+ },
49
+ "skills": {
50
+ "skills": [
51
+ {
52
+ "content": "",
53
+ "description": "d",
54
+ "enabled": true,
55
+ "name": "sk-no-content",
56
+ "rosters": [],
57
+ "scenarios": []
58
+ }
59
+ ]
60
+ },
61
+ "systems": {
62
+ "systems": []
63
+ },
64
+ "workers": {
65
+ "workers": []
66
+ }
67
+ },
68
+ "warnings": [],
69
+ "metadata": {
70
+ "version": 7,
71
+ "updatedAt": "2026-09-16T00:00:00.000Z"
72
+ }
73
+ },
74
+ "wire": {
75
+ "outcome": "effective",
76
+ "effective": {
77
+ "collab": {
78
+ "templates": []
79
+ },
80
+ "entitlement": {
81
+ "budgetGroups": [],
82
+ "groupBindings": [],
83
+ "subjects": [],
84
+ "tiers": []
85
+ },
86
+ "execution": {
87
+ "allowedLanes": [
88
+ "host"
89
+ ],
90
+ "required": false
91
+ },
92
+ "governance": {},
93
+ "hosts": {
94
+ "hosts": []
95
+ },
96
+ "limits": {},
97
+ "mcp": {
98
+ "servers": []
99
+ },
100
+ "models": {
101
+ "models": [],
102
+ "roles": {},
103
+ "tierGroups": []
104
+ },
105
+ "plugins": {
106
+ "plugins": []
107
+ },
108
+ "projects": {
109
+ "projects": {}
110
+ },
111
+ "rosters": {
112
+ "rosters": []
113
+ },
114
+ "runtime": {},
115
+ "scenarios": {
116
+ "scenarios": []
117
+ },
118
+ "skills": {
119
+ "skills": []
120
+ },
121
+ "systems": {
122
+ "systems": []
123
+ },
124
+ "workers": {
125
+ "workers": []
126
+ }
127
+ },
128
+ "warnings": [
129
+ {
130
+ "domain": "skills",
131
+ "kind": "domain-defaulted"
132
+ }
133
+ ],
134
+ "metadata": {
135
+ "version": 7,
136
+ "updatedAt": "2026-09-16T00:00:00.000Z"
137
+ },
138
+ "why": "skills 表示变换在这条上非恒等(域腿补了默认 content,wire 入参没有)⇒ 不派生,写显式金样"
139
+ },
140
+ "localRoot": {
141
+ "derive": true,
142
+ "localVersion": 4186654769350880
143
+ }
144
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "skills": {
8
+ "skills": [
9
+ {
10
+ "name": "sk-no-content",
11
+ "description": "d"
12
+ }
13
+ ]
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "skills 条目**不写 content**:域腿把它补成空串(合法条目),而 wire 入参是从**原文档**结构变换出来的 —— 没有 content 就没有 contentHash,manifest schema 判它坏,整条 skill 消失并发 domain-defaulted。同一份文档在两条腿上一条活一条死,而这**不是**表示变换能解释的差异:它是「派生看原文档、期望看已解析文档」这层不对称的真实后果。语料把它钉成显式金样,消费方照着写投影时才不会以为「缺 content 也没事」。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "effective",
4
+ "effective": {
5
+ "collab": {
6
+ "templates": []
7
+ },
8
+ "entitlement": {
9
+ "budgetGroups": [],
10
+ "groupBindings": [],
11
+ "subjects": [],
12
+ "tiers": []
13
+ },
14
+ "execution": {
15
+ "allowedLanes": [
16
+ "host"
17
+ ],
18
+ "required": false
19
+ },
20
+ "governance": {},
21
+ "hosts": {
22
+ "hosts": []
23
+ },
24
+ "limits": {},
25
+ "mcp": {
26
+ "servers": []
27
+ },
28
+ "models": {
29
+ "models": [],
30
+ "roles": {},
31
+ "tierGroups": []
32
+ },
33
+ "plugins": {
34
+ "plugins": []
35
+ },
36
+ "projects": {
37
+ "projects": {}
38
+ },
39
+ "prompts": {
40
+ "bindings": []
41
+ },
42
+ "rosters": {
43
+ "rosters": []
44
+ },
45
+ "runtime": {},
46
+ "scenarios": {
47
+ "scenarios": []
48
+ },
49
+ "skills": {
50
+ "skills": []
51
+ },
52
+ "systems": {
53
+ "systems": []
54
+ },
55
+ "workers": {
56
+ "workers": []
57
+ }
58
+ },
59
+ "warnings": [
60
+ {
61
+ "domain": "skills",
62
+ "kind": "domain-defaulted"
63
+ }
64
+ ],
65
+ "metadata": {
66
+ "version": 7,
67
+ "updatedAt": "2026-09-16T00:00:00.000Z"
68
+ }
69
+ },
70
+ "wire": {
71
+ "outcome": "effective",
72
+ "effective": {
73
+ "collab": {
74
+ "templates": []
75
+ },
76
+ "entitlement": {
77
+ "budgetGroups": [],
78
+ "groupBindings": [],
79
+ "subjects": [],
80
+ "tiers": []
81
+ },
82
+ "execution": {
83
+ "allowedLanes": [
84
+ "host"
85
+ ],
86
+ "required": false
87
+ },
88
+ "governance": {},
89
+ "hosts": {
90
+ "hosts": []
91
+ },
92
+ "limits": {},
93
+ "mcp": {
94
+ "servers": []
95
+ },
96
+ "models": {
97
+ "models": [],
98
+ "roles": {},
99
+ "tierGroups": []
100
+ },
101
+ "plugins": {
102
+ "plugins": []
103
+ },
104
+ "projects": {
105
+ "projects": {}
106
+ },
107
+ "rosters": {
108
+ "rosters": []
109
+ },
110
+ "runtime": {},
111
+ "scenarios": {
112
+ "scenarios": []
113
+ },
114
+ "skills": {
115
+ "skills": []
116
+ },
117
+ "systems": {
118
+ "systems": []
119
+ },
120
+ "workers": {
121
+ "workers": []
122
+ }
123
+ },
124
+ "warnings": [],
125
+ "metadata": {
126
+ "version": 7,
127
+ "updatedAt": "2026-09-16T00:00:00.000Z"
128
+ },
129
+ "why": "wire 腿的 `r.skills ?? {}` 把 null 读成缺席(域腿读成坏形),告警多重集因此不同 ⇒ 不派生,写显式金样"
130
+ },
131
+ "localRoot": {
132
+ "derive": true
133
+ }
134
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "skills": null
8
+ }
9
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "`skills: null`:域腿判它坏形 ⇒ 降级 + 一条 domain-defaulted;wire 腿走 `r.skills ?? {}`,**null 被当成缺席** ⇒ 解析出空清单、**零告警**。同一份输入,一条腿出声一条腿不出声 —— 消费方把两条腿的告警折进同一个面板时,这条差异会变成「有时候有、有时候没有」的幽灵。钉成显式金样。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "effective",
4
+ "effective": {
5
+ "collab": {
6
+ "templates": []
7
+ },
8
+ "entitlement": {
9
+ "budgetGroups": [],
10
+ "groupBindings": [],
11
+ "subjects": [],
12
+ "tiers": []
13
+ },
14
+ "execution": {
15
+ "allowedLanes": [
16
+ "host"
17
+ ],
18
+ "required": false
19
+ },
20
+ "governance": {},
21
+ "hosts": {
22
+ "hosts": []
23
+ },
24
+ "limits": {},
25
+ "mcp": {
26
+ "servers": []
27
+ },
28
+ "models": {
29
+ "models": [],
30
+ "roles": {},
31
+ "tierGroups": []
32
+ },
33
+ "plugins": {
34
+ "plugins": []
35
+ },
36
+ "projects": {
37
+ "projects": {}
38
+ },
39
+ "prompts": {
40
+ "bindings": []
41
+ },
42
+ "rosters": {
43
+ "rosters": []
44
+ },
45
+ "runtime": {},
46
+ "scenarios": {
47
+ "scenarios": []
48
+ },
49
+ "skills": {
50
+ "skills": []
51
+ },
52
+ "systems": {
53
+ "systems": []
54
+ },
55
+ "workers": {
56
+ "workers": []
57
+ }
58
+ },
59
+ "warnings": [],
60
+ "metadata": {
61
+ "version": 7,
62
+ "updatedAt": "2026-09-16T00:00:00.000Z"
63
+ }
64
+ },
65
+ "wire": {
66
+ "derive": true
67
+ },
68
+ "localRoot": {
69
+ "derive": true,
70
+ "localVersion": 2617555914511015
71
+ }
72
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "remote-exec": {
8
+ "provider": "host"
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "`remote-exec` **不是域、也不是未知文件**:它按表决住在 `config.d/` 里,有自己的读取与校验路径(`loadRemoteExec`),所以本地腿的未知文件扫描**刻意豁免**它。wire 腿把它当 open-world 顶层键逐字承运,域腿根本不问它。把它报成 `not-a-domain` 的门,会对着一份完全合法的单机部署喊错 —— 这条是登记表第六条(T6 文件名分类)的正例。",
4
+ "firstRedOn": []
5
+ }