@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,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
+ ".hidden": {
8
+ "a": 1
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "`config.d/` 里的**隐藏文件**(含原子写留下的 `.<域>.json.*.tmp` 中间态)被扫描忽略,不报未知文件 —— 否则每一次并发写盘都会在审计流里炸出一条假告警。同 T6 的另一半正例;wire 腿照样逐字承运这个顶层键(open-world 不认识文件名这回事)。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,112 @@
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
+ "elicitation": false,
29
+ "enabled": true,
30
+ "name": "s-null",
31
+ "rosters": [],
32
+ "scenarios": [],
33
+ "toolFaces": null,
34
+ "transport": {
35
+ "kind": "http",
36
+ "url": "https://a.example"
37
+ }
38
+ },
39
+ {
40
+ "elicitation": false,
41
+ "enabled": true,
42
+ "name": "s-array",
43
+ "rosters": [],
44
+ "scenarios": [],
45
+ "toolFaces": [
46
+ 1,
47
+ 2
48
+ ],
49
+ "transport": {
50
+ "kind": "http",
51
+ "url": "https://b.example"
52
+ }
53
+ },
54
+ {
55
+ "elicitation": false,
56
+ "enabled": true,
57
+ "name": "s-string",
58
+ "rosters": [],
59
+ "scenarios": [],
60
+ "toolFaces": "not-an-object",
61
+ "transport": {
62
+ "kind": "http",
63
+ "url": "https://c.example"
64
+ }
65
+ }
66
+ ]
67
+ },
68
+ "models": {
69
+ "models": [],
70
+ "roles": {},
71
+ "tierGroups": []
72
+ },
73
+ "plugins": {
74
+ "plugins": []
75
+ },
76
+ "projects": {
77
+ "projects": {}
78
+ },
79
+ "prompts": {
80
+ "bindings": []
81
+ },
82
+ "rosters": {
83
+ "rosters": []
84
+ },
85
+ "runtime": {},
86
+ "scenarios": {
87
+ "scenarios": []
88
+ },
89
+ "skills": {
90
+ "skills": []
91
+ },
92
+ "systems": {
93
+ "systems": []
94
+ },
95
+ "workers": {
96
+ "workers": []
97
+ }
98
+ },
99
+ "warnings": [],
100
+ "metadata": {
101
+ "version": 7,
102
+ "updatedAt": "2026-09-16T00:00:00.000Z"
103
+ }
104
+ },
105
+ "wire": {
106
+ "derive": true
107
+ },
108
+ "localRoot": {
109
+ "derive": true,
110
+ "localVersion": 197807763204275
111
+ }
112
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "mcp": {
8
+ "servers": [
9
+ {
10
+ "name": "s-null",
11
+ "transport": {
12
+ "kind": "http",
13
+ "url": "https://a.example"
14
+ },
15
+ "toolFaces": null
16
+ },
17
+ {
18
+ "name": "s-array",
19
+ "transport": {
20
+ "kind": "http",
21
+ "url": "https://b.example"
22
+ },
23
+ "toolFaces": [
24
+ 1,
25
+ 2
26
+ ]
27
+ },
28
+ {
29
+ "name": "s-string",
30
+ "transport": {
31
+ "kind": "http",
32
+ "url": "https://c.example"
33
+ },
34
+ "toolFaces": "not-an-object"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "contributor": "client-core",
3
+ "claim": "client-core ①:`mcp[].toolFaces` 是**解析透明**键(z.unknown)。喂它数组 / null / 串 ⇒ 四读腿要么逐字同形透传、要么同形丢键,**不许一腿丢一腿留**。真读数 = 三形全部逐字透传(含 null),形归引擎校验。",
4
+ "firstRedOn": [
5
+ "settings-schema@1.0.0",
6
+ "settings-schema@1.5.0"
7
+ ]
8
+ }
@@ -0,0 +1,85 @@
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
+ "elicitation": false,
29
+ "enabled": true,
30
+ "name": "s1",
31
+ "rosters": [],
32
+ "scenarios": [],
33
+ "source": "plugin",
34
+ "transport": {
35
+ "kind": "http",
36
+ "url": "https://x.example"
37
+ }
38
+ }
39
+ ]
40
+ },
41
+ "models": {
42
+ "models": [],
43
+ "roles": {},
44
+ "tierGroups": []
45
+ },
46
+ "plugins": {
47
+ "plugins": []
48
+ },
49
+ "projects": {
50
+ "projects": {}
51
+ },
52
+ "prompts": {
53
+ "bindings": []
54
+ },
55
+ "rosters": {
56
+ "rosters": []
57
+ },
58
+ "runtime": {},
59
+ "scenarios": {
60
+ "scenarios": []
61
+ },
62
+ "skills": {
63
+ "skills": []
64
+ },
65
+ "systems": {
66
+ "systems": []
67
+ },
68
+ "workers": {
69
+ "workers": []
70
+ }
71
+ },
72
+ "warnings": [],
73
+ "metadata": {
74
+ "version": 7,
75
+ "updatedAt": "2026-09-16T00:00:00.000Z"
76
+ }
77
+ },
78
+ "wire": {
79
+ "derive": true
80
+ },
81
+ "localRoot": {
82
+ "derive": true,
83
+ "localVersion": 2482576595667034
84
+ }
85
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "mcp": {
8
+ "servers": [
9
+ {
10
+ "name": "s1",
11
+ "transport": {
12
+ "kind": "http",
13
+ "url": "https://x.example"
14
+ },
15
+ "source": "plugin"
16
+ }
17
+ ]
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "contributor": "client-core",
3
+ "claim": "client-core ②:提案说「`source` 是记账键,四读腿的 wire 产物都**不含**它」。**真读数推翻了这一半**:`source` 是 `z.unknown().optional()` 的解析透明键,三腿**都**逐字透传。本条把真相钉成金样 —— 消费方按「不含」去写投影,就会在 wire 上丢掉运维的分组标签。",
4
+ "firstRedOn": [
5
+ "settings-schema@1.0.0",
6
+ "settings-schema@1.5.0"
7
+ ]
8
+ }
@@ -0,0 +1,89 @@
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
+ {
31
+ "api": "openai-completions",
32
+ "apiKeyEnv": "OPENAI_API_KEY",
33
+ "compat": {
34
+ "thinkingFormat": "anthropic",
35
+ "zzz": 1
36
+ },
37
+ "enabled": true,
38
+ "id": "m0-id",
39
+ "name": "m0",
40
+ "provider": "openai",
41
+ "quotaWeight": 1,
42
+ "reasoning": false,
43
+ "tier": "standard",
44
+ "vision": false
45
+ }
46
+ ],
47
+ "roles": {},
48
+ "tierGroups": []
49
+ },
50
+ "plugins": {
51
+ "plugins": []
52
+ },
53
+ "projects": {
54
+ "projects": {}
55
+ },
56
+ "prompts": {
57
+ "bindings": []
58
+ },
59
+ "rosters": {
60
+ "rosters": []
61
+ },
62
+ "runtime": {},
63
+ "scenarios": {
64
+ "scenarios": []
65
+ },
66
+ "skills": {
67
+ "skills": []
68
+ },
69
+ "systems": {
70
+ "systems": []
71
+ },
72
+ "workers": {
73
+ "workers": []
74
+ }
75
+ },
76
+ "warnings": [],
77
+ "metadata": {
78
+ "version": 7,
79
+ "updatedAt": "2026-09-16T00:00:00.000Z"
80
+ }
81
+ },
82
+ "wire": {
83
+ "derive": true
84
+ },
85
+ "localRoot": {
86
+ "derive": true,
87
+ "localVersion": 4345724001787046
88
+ }
89
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "models": {
8
+ "models": [
9
+ {
10
+ "name": "m0",
11
+ "provider": "openai",
12
+ "id": "m0-id",
13
+ "apiKeyEnv": "OPENAI_API_KEY",
14
+ "compat": {
15
+ "thinkingFormat": "anthropic",
16
+ "zzz": 1
17
+ }
18
+ }
19
+ ]
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "contributor": "client-core",
3
+ "claim": "client-core ③:`models[].compat` 带未知子键(`compat.zzz`)⇒ 四读腿**同形保留**而不是静默剥。那张词表随引擎走,本包复述一份必漂,所以这里是自由形 + 安全判据;任一腿把子键剥掉,引擎就少收一个 wire-compat 声明且零告警。",
4
+ "firstRedOn": [
5
+ "settings-schema@1.0.0",
6
+ "settings-schema@1.5.0"
7
+ ]
8
+ }
@@ -0,0 +1,102 @@
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
+ {
31
+ "api": "openai-completions",
32
+ "apiKeyEnv": "OPENAI_API_KEY",
33
+ "enabled": true,
34
+ "id": "ascii-ok-id",
35
+ "name": "ascii-ok",
36
+ "provider": "openai",
37
+ "quotaWeight": 1,
38
+ "reasoning": false,
39
+ "tier": "standard",
40
+ "vision": false
41
+ }
42
+ ],
43
+ "roles": {},
44
+ "tierGroups": []
45
+ },
46
+ "plugins": {
47
+ "plugins": []
48
+ },
49
+ "projects": {
50
+ "projects": {}
51
+ },
52
+ "prompts": {
53
+ "bindings": []
54
+ },
55
+ "rosters": {
56
+ "rosters": []
57
+ },
58
+ "runtime": {},
59
+ "scenarios": {
60
+ "scenarios": []
61
+ },
62
+ "skills": {
63
+ "skills": []
64
+ },
65
+ "systems": {
66
+ "systems": []
67
+ },
68
+ "workers": {
69
+ "workers": []
70
+ }
71
+ },
72
+ "warnings": [
73
+ {
74
+ "domain": "models",
75
+ "kind": "entry-dropped",
76
+ "path": [
77
+ "models",
78
+ 0
79
+ ]
80
+ },
81
+ {
82
+ "domain": "models",
83
+ "kind": "entry-dropped",
84
+ "path": [
85
+ "models",
86
+ 1
87
+ ]
88
+ }
89
+ ],
90
+ "metadata": {
91
+ "version": 7,
92
+ "updatedAt": "2026-09-16T00:00:00.000Z"
93
+ }
94
+ },
95
+ "wire": {
96
+ "derive": true
97
+ },
98
+ "localRoot": {
99
+ "derive": true,
100
+ "localVersion": 694685728514477
101
+ }
102
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-09-16T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "models": {
8
+ "models": [
9
+ {
10
+ "name": "café",
11
+ "provider": "openai",
12
+ "id": "café-id",
13
+ "apiKeyEnv": "OPENAI_API_KEY"
14
+ },
15
+ {
16
+ "name": "café",
17
+ "provider": "openai",
18
+ "id": "café-id",
19
+ "apiKeyEnv": "OPENAI_API_KEY"
20
+ },
21
+ {
22
+ "name": "ascii-ok",
23
+ "provider": "openai",
24
+ "id": "ascii-ok-id",
25
+ "apiKeyEnv": "OPENAI_API_KEY"
26
+ }
27
+ ]
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "contributor": "cli",
3
+ "claim": "壳视角①:两条 models[].name 只差 Unicode 规范化(NFC 的 é vs NFD 的 e+组合符)。**真读数与提案不同**:name 的字符集是 letters/digits/._-,两条都过不了条目校验,于是**两条都被逐条丢掉并各自点名下标** —— 读侧既不合并也不归一,壳的「渲两行同名」病在契约层就不成立。三腿必须丢同样两条。",
4
+ "firstRedOn": [
5
+ "settings-schema@1.0.0",
6
+ "settings-schema@1.10.0",
7
+ "settings-schema@1.5.0"
8
+ ]
9
+ }