@sema-agent/settings-schema 10.1.1 → 11.1.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 (240) hide show
  1. package/CHANGELOG.md +469 -1
  2. package/README.md +144 -66
  3. package/bin/settings-schema.mjs +10 -12
  4. package/conformance/VERSION +1 -1
  5. package/conformance/baseline.json +3 -1
  6. package/conformance/cases/c01-entry-salvage-then-typo/expected.json +3 -1
  7. package/conformance/cases/c02-hosts-clamp-stacked/expected.json +12 -5
  8. package/conformance/cases/c02-hosts-clamp-stacked/meta.json +1 -1
  9. package/conformance/cases/c03-literal-dotted-top-key/expected.json +22 -2
  10. package/conformance/cases/c04-all-bad-collection-not-salvaged/expected.json +3 -1
  11. package/conformance/cases/c06-legacy-governance-lift/expected.json +11 -101
  12. package/conformance/cases/c06-legacy-governance-lift/meta.json +1 -1
  13. package/conformance/cases/c07-hooks-is-not-a-config-domain/expected.json +3 -1
  14. package/conformance/cases/c08-limits-unknown-carried-64/expected.json +203 -2
  15. package/conformance/cases/c09-limits-unknown-carried-65/expected.json +204 -2
  16. package/conformance/cases/c10-record-key-secret-redacted-twice/expected.json +3 -1
  17. package/conformance/cases/c11-unicode-unknown-keys/expected.json +20 -2
  18. package/conformance/cases/c12-prototype-name-top-keys/expected.json +3 -1
  19. package/conformance/cases/c13-models-field-null/expected.json +3 -1
  20. package/conformance/cases/c14-models-field-empty-array/expected.json +6 -1
  21. package/conformance/cases/c15-models-field-number/expected.json +3 -1
  22. package/conformance/cases/c16-deep-nesting-205/expected.json +14 -2
  23. package/conformance/cases/c17-empty-domain-file/expected.json +3 -1
  24. package/conformance/cases/c18-wire-envelope-not-an-object/expected.json +3 -1
  25. package/conformance/cases/c19-wire-envelope-no-version/expected.json +3 -1
  26. package/conformance/cases/c20-governance-absent-lifts/expected.json +11 -86
  27. package/conformance/cases/c20-governance-absent-lifts/meta.json +1 -1
  28. package/conformance/cases/c21-governance-empty-object-wins/expected.json +6 -5
  29. package/conformance/cases/c21-governance-empty-object-wins/input.json +1 -4
  30. package/conformance/cases/c21-governance-empty-object-wins/meta.json +1 -1
  31. package/conformance/cases/c23-mixed-validity-models/expected.json +3 -1
  32. package/conformance/cases/c24-valid-entries-with-unknown-keys/expected.json +22 -2
  33. package/conformance/cases/c25-published-roundtrip-zero-warnings/expected.json +6 -1
  34. package/conformance/cases/c26-hosts-array-1024/expected.json +3 -1
  35. package/conformance/cases/c27-hosts-array-1025/expected.json +6 -7175
  36. package/conformance/cases/c27-hosts-array-1025/meta.json +1 -1
  37. package/conformance/cases/c28-large-document-over-1mb/expected.json +14 -2
  38. package/conformance/cases/c29-salvage-then-domain-refine-fails/expected.json +3 -1
  39. package/conformance/cases/c30-version-triple-a-first/expected.json +6 -1
  40. package/conformance/cases/c31-version-triple-b-changed/expected.json +6 -1
  41. package/conformance/cases/c32-version-triple-a-restored/expected.json +6 -1
  42. package/conformance/cases/c33-limits-nested-carried-key/expected.json +18 -2
  43. package/conformance/cases/c34-skills-content-vs-manifest/expected.json +19 -3
  44. package/conformance/cases/c35-portable-domain-file-is-null/expected.json +3 -1
  45. package/conformance/cases/c36-skills-entry-without-content/expected.json +6 -2
  46. package/conformance/cases/c37-skills-field-null/expected.json +6 -2
  47. package/conformance/cases/c38-remote-exec-is-a-non-domain-file/expected.json +3 -1
  48. package/conformance/cases/c39-hidden-file-in-config-d/expected.json +3 -1
  49. package/conformance/cases/c40-s712-identity-only-what-reads-out/expected.json +11 -4
  50. package/conformance/cases/c41-s792-encoded-pem-identity/expected.json +9 -3
  51. package/conformance/cases/c42-s792-unknown-key-secret-redacted/expected.json +39 -2
  52. package/conformance/cases/c43-s792-form-and-deep-encoded-pem/expected.json +4 -1
  53. package/conformance/cases/c44-s792-utf8-escape-glued-token/expected.json +3 -1
  54. package/conformance/cases/c45-s792-identity-bounds-and-decode-depth/expected.json +19 -10
  55. package/conformance/cases/c45-s792-identity-bounds-and-decode-depth/meta.json +1 -1
  56. package/conformance/cases/{c46-s811-host-name-url-userinfo-characterization → c46-s811-host-name-url-userinfo-withheld}/expected.json +12 -5
  57. package/conformance/cases/c46-s811-host-name-url-userinfo-withheld/meta.json +9 -0
  58. package/conformance/cases/{c47-s811-roles-key-url-userinfo-characterization → c47-s811-roles-key-url-userinfo-withheld}/expected.json +23 -3
  59. package/conformance/cases/{c47-s811-roles-key-url-userinfo-characterization → c47-s811-roles-key-url-userinfo-withheld}/input.json +6 -0
  60. package/conformance/cases/c47-s811-roles-key-url-userinfo-withheld/meta.json +10 -0
  61. package/conformance/cases/c48-s935-model-headers-transported/expected.json +6 -1
  62. package/conformance/cases/c49-s935-model-headers-secret-entry-dropped/expected.json +3 -1
  63. package/conformance/cases/c50-s784-lane-host-legal/expected.json +3 -1
  64. package/conformance/cases/c51-s784-lane-e2b-legal/expected.json +3 -1
  65. package/conformance/cases/c52-s784-lane-k8s-legal/expected.json +3 -1
  66. package/conformance/cases/c53-s784-lane-ssh-legal/expected.json +3 -1
  67. package/conformance/cases/c54-s784-lane-adb-legal/expected.json +3 -1
  68. package/conformance/cases/c55-s784-lane-local-docker-legal/expected.json +3 -1
  69. package/conformance/cases/c56-s784-lane-device-legal/expected.json +3 -1
  70. package/conformance/cases/c57-s784-g1-enabled-no-lane/expected.json +3 -1
  71. package/conformance/cases/c58-s784-g2-multitenant-host/expected.json +3 -1
  72. package/conformance/cases/c59-s784-g3-k8s-missing-image/expected.json +3 -1
  73. package/conformance/cases/c60-s784-g3-e2b-missing-key/expected.json +3 -1
  74. package/conformance/cases/c61-s784-g3-other-lane-key/expected.json +3 -1
  75. package/conformance/cases/c62-s784-g7a-session-tidb/expected.json +3 -1
  76. package/conformance/cases/c63-s784-host-two-replicas/expected.json +3 -1
  77. package/conformance/cases/c64-s784-multitenant-local-store/expected.json +3 -1
  78. package/conformance/cases/c65-s784-pg-without-db/expected.json +3 -1
  79. package/conformance/cases/c66-s784-memory-backend-mismatch/expected.json +3 -1
  80. package/conformance/cases/c67-s784-retired-field-loud/expected.json +3 -1
  81. package/conformance/cases/c67-s784-retired-field-loud/meta.json +1 -1
  82. package/conformance/cases/c68-s784-device-local-store/expected.json +3 -1
  83. package/conformance/cases/c69-deep-encoded-token-past-every-reading/expected.json +3 -1
  84. package/conformance/cases/c70-rewritten-token-in-front-of-encoded-pem-header/expected.json +3 -1
  85. package/conformance/cases/c71-one-scanner-write-reads-display-forms/expected.json +119 -0
  86. package/conformance/cases/c71-one-scanner-write-reads-display-forms/input.json +24 -0
  87. package/conformance/cases/c71-one-scanner-write-reads-display-forms/meta.json +10 -0
  88. package/conformance/cases/c72-dangling-reference-write-seat-refuses/expected.json +111 -0
  89. package/conformance/cases/c72-dangling-reference-write-seat-refuses/input.json +26 -0
  90. package/conformance/cases/c72-dangling-reference-write-seat-refuses/meta.json +6 -0
  91. package/conformance/cases/cc01-mcp-toolfaces-non-object/expected.json +3 -1
  92. package/conformance/cases/cc02-mcp-source-key-is-transported/expected.json +3 -1
  93. package/conformance/cases/cc03-model-compat-unknown-subkey/expected.json +6 -1
  94. package/conformance/cases/cli01-model-name-nfc-vs-nfd/expected.json +11 -1
  95. package/conformance/cases/cli02-control-and-zero-width-chars/expected.json +11 -1
  96. package/conformance/cases/cli03-credential-pasted-into-unknown-key/expected.json +16 -2
  97. package/conformance/cases/cli04-env-value-with-newline/expected.json +3 -1
  98. package/conformance/cases/cli05-long-and-prefix-colliding-names/expected.json +6 -1
  99. package/conformance/cases/t01-absent-domain-key-not-null/expected.json +3 -1
  100. package/conformance/cases/t03-prototype-name-key-not-swallowed/expected.json +29 -2
  101. package/conformance/cases/t04-secret-literal-never-in-warning-value/expected.json +3 -1
  102. package/conformance/cases/z01-every-domain-empty-object/expected.json +8 -4
  103. package/conformance/cases/z01-every-domain-empty-object/input.json +0 -1
  104. package/conformance/cases/z01-every-domain-empty-object/meta.json +1 -1
  105. package/conformance/cases/z02-every-domain-unknown-key/expected.json +163 -23
  106. package/conformance/cases/z02-every-domain-unknown-key/input.json +0 -3
  107. package/conformance/cases/z02-every-domain-unknown-key/meta.json +1 -1
  108. package/dist/api/auth-bridge.d.ts +51 -181
  109. package/dist/api/auth-bridge.js +58 -33
  110. package/dist/api/auth.d.ts +37 -146
  111. package/dist/api/auth.js +16 -26
  112. package/dist/api/feedback.d.ts +87 -0
  113. package/dist/api/feedback.js +66 -0
  114. package/dist/api/pull-token.d.ts +32 -0
  115. package/dist/api/pull-token.js +88 -0
  116. package/dist/api/scopes.d.ts +82 -174
  117. package/dist/api/scopes.js +23 -18
  118. package/dist/atomic-write.d.ts +14 -0
  119. package/dist/atomic-write.js +60 -0
  120. package/dist/bundle.d.ts +15 -7
  121. package/dist/bundle.js +28 -27
  122. package/dist/cli.d.ts +3 -1
  123. package/dist/cli.js +149 -80
  124. package/dist/config-d-file.d.ts +14 -0
  125. package/dist/config-d-file.js +67 -0
  126. package/dist/config-fns.d.ts +87 -186
  127. package/dist/config-fns.js +207 -262
  128. package/dist/conformance/contract-adapter.d.ts +9 -2
  129. package/dist/conformance/contract-adapter.js +15 -7
  130. package/dist/conformance/corpus.d.ts +3 -0
  131. package/dist/conformance/corpus.js +5 -0
  132. package/dist/conformance/derive.d.ts +3 -0
  133. package/dist/conformance/index.d.ts +2 -2
  134. package/dist/conformance/index.js +2 -2
  135. package/dist/conformance/run.js +67 -22
  136. package/dist/conformance/types.d.ts +31 -15
  137. package/dist/conformance/types.js +5 -0
  138. package/dist/conformance/warnings.d.ts +1 -1
  139. package/dist/conformance/warnings.js +1 -4
  140. package/dist/cross-domain.d.ts +66 -22
  141. package/dist/cross-domain.js +164 -93
  142. package/dist/cross-session.d.ts +29 -11
  143. package/dist/default-model.d.ts +43 -0
  144. package/dist/default-model.js +34 -0
  145. package/dist/execution-lane-index.d.ts +4 -8
  146. package/dist/execution-lane-index.js +4 -8
  147. package/dist/execution-lanes.d.ts +31 -8
  148. package/dist/execution-lanes.js +23 -5
  149. package/dist/file-edit.d.ts +3 -3
  150. package/dist/file-edit.js +11 -18
  151. package/dist/file-store.d.ts +7 -6
  152. package/dist/file-store.js +37 -50
  153. package/dist/fleet.d.ts +364 -762
  154. package/dist/fleet.js +277 -224
  155. package/dist/hooks.d.ts +1151 -4737
  156. package/dist/hooks.js +59 -15
  157. package/dist/index.d.ts +10 -4
  158. package/dist/index.js +13 -7
  159. package/dist/integer.d.ts +11 -0
  160. package/dist/integer.js +11 -0
  161. package/dist/issue-path.d.ts +10 -0
  162. package/dist/issue-path.js +10 -0
  163. package/dist/local-load.d.ts +1 -1
  164. package/dist/local-load.js +4 -14
  165. package/dist/loopback.d.ts +26 -0
  166. package/dist/loopback.js +54 -0
  167. package/dist/migration-receipt.d.ts +42 -0
  168. package/dist/migration-receipt.js +12 -0
  169. package/dist/one-time-migrations.d.ts +62 -0
  170. package/dist/one-time-migrations.js +828 -0
  171. package/dist/prompts-digest.d.ts +1 -1
  172. package/dist/prompts-digest.js +3 -2
  173. package/dist/reader.d.ts +2 -2
  174. package/dist/remote-exec.d.ts +45 -187
  175. package/dist/remote-exec.js +16 -10
  176. package/dist/resolve-roster.d.ts +18 -3
  177. package/dist/resolve-roster.js +28 -25
  178. package/dist/retired-envs.d.ts +24 -0
  179. package/dist/retired-envs.js +114 -0
  180. package/dist/retired-form.d.ts +31 -0
  181. package/dist/retired-form.js +28 -0
  182. package/dist/safety-merge-spec.d.ts +131 -191
  183. package/dist/safety-merge-spec.js +18 -14
  184. package/dist/scheduler-lifetime.d.ts +5 -0
  185. package/dist/scheduler-lifetime.js +7 -0
  186. package/dist/scheduler-store-migration.d.ts +14 -0
  187. package/dist/scheduler-store-migration.js +14 -0
  188. package/dist/scheduler-store-node.d.ts +28 -12
  189. package/dist/scheduler-store-node.js +32 -23
  190. package/dist/scheduler-store.d.ts +47 -14
  191. package/dist/scheduler-store.js +32 -61
  192. package/dist/secret-refs.d.ts +3 -3
  193. package/dist/secret-refs.js +1 -1
  194. package/dist/secret-scan.d.ts +14 -24
  195. package/dist/secret-scan.js +45 -23
  196. package/dist/sha256-core.d.ts +16 -0
  197. package/dist/sha256-core.js +138 -0
  198. package/dist/sha256.d.ts +6 -1
  199. package/dist/sha256.js +8 -98
  200. package/dist/skills-manifest.js +1 -1
  201. package/dist/types.d.ts +1509 -13536
  202. package/dist/types.js +526 -438
  203. package/dist/url-shape.d.ts +34 -0
  204. package/dist/url-shape.js +61 -0
  205. package/dist/web-admin-credential.d.ts +96 -0
  206. package/dist/{center-credential.js → web-admin-credential.js} +49 -46
  207. package/dist/web-admin-env.d.ts +33 -0
  208. package/dist/web-admin-env.js +33 -0
  209. package/dist/worker-row-verdict.d.ts +16 -0
  210. package/dist/worker-row-verdict.js +31 -0
  211. package/dist/workers-rows.d.ts +34 -0
  212. package/dist/workers-rows.js +42 -0
  213. package/dist/zod-unwrap.d.ts +11 -0
  214. package/dist/zod-unwrap.js +25 -0
  215. package/package.json +17 -9
  216. package/conformance/cases/c46-s811-host-name-url-userinfo-characterization/meta.json +0 -6
  217. package/conformance/cases/c47-s811-roles-key-url-userinfo-characterization/meta.json +0 -6
  218. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/expected.json +0 -49
  219. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/input.json +0 -26
  220. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/meta.json +0 -4
  221. package/conformance/migrate-workers/m02-g5-idempotent/expected.json +0 -38
  222. package/conformance/migrate-workers/m02-g5-idempotent/input.json +0 -33
  223. package/conformance/migrate-workers/m02-g5-idempotent/meta.json +0 -5
  224. package/conformance/migrate-workers/m03-g5-refused-no-lane/expected.json +0 -71
  225. package/conformance/migrate-workers/m03-g5-refused-no-lane/input.json +0 -42
  226. package/conformance/migrate-workers/m03-g5-refused-no-lane/meta.json +0 -4
  227. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/expected.json +0 -52
  228. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/input.json +0 -30
  229. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/meta.json +0 -4
  230. package/conformance/migrate-workers/m05-row-verdict-reserved-env/expected.json +0 -82
  231. package/conformance/migrate-workers/m05-row-verdict-reserved-env/input.json +0 -68
  232. package/conformance/migrate-workers/m05-row-verdict-reserved-env/meta.json +0 -4
  233. package/dist/center-credential.d.ts +0 -116
  234. package/dist/issue-text.d.ts +0 -10
  235. package/dist/issue-text.js +0 -8
  236. package/dist/migrate-workers.d.ts +0 -71
  237. package/dist/migrate-workers.js +0 -351
  238. package/dist/migrate.d.ts +0 -255
  239. package/dist/migrate.js +0 -542
  240. /package/conformance/cases/{c46-s811-host-name-url-userinfo-characterization → c46-s811-host-name-url-userinfo-withheld}/input.json +0 -0
@@ -0,0 +1,119 @@
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": "triple-encoded-benign",
31
+ "rosters": [],
32
+ "scenarios": [],
33
+ "transport": {
34
+ "args": [
35
+ "--label=%252541"
36
+ ],
37
+ "command": "npx",
38
+ "kind": "stdio"
39
+ }
40
+ }
41
+ ]
42
+ },
43
+ "models": {
44
+ "atMention": {
45
+ "mode": "all"
46
+ },
47
+ "models": [],
48
+ "roles": {},
49
+ "tierGroups": []
50
+ },
51
+ "plugins": {
52
+ "plugins": []
53
+ },
54
+ "projects": {
55
+ "projects": {}
56
+ },
57
+ "prompts": {
58
+ "bindings": []
59
+ },
60
+ "rosters": {
61
+ "rosters": []
62
+ },
63
+ "scenarios": {
64
+ "scenarios": []
65
+ },
66
+ "skills": {
67
+ "skills": []
68
+ },
69
+ "systems": {
70
+ "systems": []
71
+ },
72
+ "workers": {
73
+ "workers": []
74
+ }
75
+ },
76
+ "warnings": [
77
+ {
78
+ "domain": "mcp",
79
+ "identity": {
80
+ "name": "plus-spelled-pem-header"
81
+ },
82
+ "kind": "entry-dropped",
83
+ "path": [
84
+ "servers",
85
+ 1
86
+ ],
87
+ "reasonCode": "entry-schema-invalid"
88
+ },
89
+ {
90
+ "domain": "mcp",
91
+ "identity": {
92
+ "name": "encoded-space-short-basic"
93
+ },
94
+ "kind": "entry-dropped",
95
+ "path": [
96
+ "servers",
97
+ 2
98
+ ],
99
+ "reasonCode": "entry-schema-invalid"
100
+ }
101
+ ],
102
+ "metadata": {
103
+ "version": 18,
104
+ "updatedAt": "2026-10-10T00:00:00.000Z"
105
+ }
106
+ },
107
+ "strictWrite": {
108
+ "outcome": "rejected",
109
+ "stage": "validate",
110
+ "why": "拒:mcp 里两条参数是秘密形(`+` 读法下的私钥头、编码空格后的短凭据),读腿逐条丢;严写 ⇒ 整次不受理。"
111
+ },
112
+ "wire": {
113
+ "derive": true
114
+ },
115
+ "localRoot": {
116
+ "derive": true,
117
+ "localVersion": 3222223104537766
118
+ }
119
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "meta": {
3
+ "version": 18,
4
+ "updatedAt": "2026-10-10T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "mcp": {
8
+ "servers": [
9
+ {
10
+ "name": "triple-encoded-benign",
11
+ "transport": { "kind": "stdio", "command": "npx", "args": ["--label=%252541"] }
12
+ },
13
+ {
14
+ "name": "plus-spelled-pem-header",
15
+ "transport": { "kind": "stdio", "command": "npx", "args": ["x -----BEGIN+PRIVATE+KEY-----FAKEC71PLUSPEMBODY0000"] }
16
+ },
17
+ {
18
+ "name": "encoded-space-short-basic",
19
+ "transport": { "kind": "stdio", "command": "npx", "args": ["note:Basic+FAKEc71"] }
20
+ }
21
+ ]
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "11.0.0(一只秘密扫描器,S-1274 + S-797):写侧探测器读展示侧同一组归一化形。mcp stdio 参数三条:① 三重百分号编码的良性串(`%252541`)在解码预算之内 ⇒ 照收(预算少一层就成了「归一化没走完」被拒);② 只在 `+` 读作空格时才是私钥 PEM 头的串 ⇒ 该条被丢(改前写侧只读百分号层,照收进 effective);③ 认证词后接编码空格(`+`)的短凭据 `Basic+…` ⇒ 该条被丢(改前两侧都放行)。告警面零命中语料秘密。",
4
+ "firstRedOn": [],
5
+ "secrets": [
6
+ "FAKEC71PLUSPEMBODY0000",
7
+ "FAKEc71"
8
+ ],
9
+ "note": "变异门杀手:`containsSecretToken` 读形改回只读百分号层(②杀)、S-797 一臂去掉(③杀)、`SECRET_SCAN_DECODE_LAYERS` 3 → 2(①杀)。firstRedOn 为空:不是 historical 阶梯证据。"
10
+ }
@@ -0,0 +1,111 @@
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
+ "atMention": {
30
+ "mode": "all"
31
+ },
32
+ "models": [
33
+ {
34
+ "api": "openai-completions",
35
+ "apiKeyEnv": "OPENAI_API_KEY",
36
+ "enabled": true,
37
+ "id": "m1-id",
38
+ "name": "m1",
39
+ "provider": "openai",
40
+ "quotaWeight": 1,
41
+ "reasoning": false,
42
+ "tier": "standard",
43
+ "vision": false
44
+ }
45
+ ],
46
+ "roles": {},
47
+ "tierGroups": []
48
+ },
49
+ "plugins": {
50
+ "plugins": []
51
+ },
52
+ "projects": {
53
+ "projects": {}
54
+ },
55
+ "prompts": {
56
+ "bindings": []
57
+ },
58
+ "rosters": {
59
+ "rosters": [
60
+ {
61
+ "models": [
62
+ "m1",
63
+ "ghost"
64
+ ],
65
+ "name": "r1"
66
+ }
67
+ ]
68
+ },
69
+ "scenarios": {
70
+ "scenarios": []
71
+ },
72
+ "skills": {
73
+ "skills": []
74
+ },
75
+ "systems": {
76
+ "systems": []
77
+ },
78
+ "workers": {
79
+ "workers": []
80
+ }
81
+ },
82
+ "warnings": [],
83
+ "metadata": {
84
+ "version": 16,
85
+ "updatedAt": "2026-10-10T00:00:00.000Z"
86
+ }
87
+ },
88
+ "strictWrite": {
89
+ "outcome": "rejected",
90
+ "stage": "validate",
91
+ "code": "ref-integrity",
92
+ "refIssues": [
93
+ {
94
+ "path": [
95
+ "rosters",
96
+ 0,
97
+ "models",
98
+ 1
99
+ ]
100
+ }
101
+ ],
102
+ "why": "拒:每个域都解析得了,但 roster r1 点名的模型 ghost 不在目录里 —— 写入席不收悬空引用(读侧容忍、运行期剔掉,写侧拒并点名坐标)。"
103
+ },
104
+ "wire": {
105
+ "derive": true
106
+ },
107
+ "localRoot": {
108
+ "derive": true,
109
+ "localVersion": 3346719867414959
110
+ }
111
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "meta": {
3
+ "version": 16,
4
+ "updatedAt": "2026-10-10T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "models": {
8
+ "models": [
9
+ {
10
+ "name": "m1",
11
+ "provider": "openai",
12
+ "id": "m1-id",
13
+ "apiKeyEnv": "OPENAI_API_KEY"
14
+ }
15
+ ]
16
+ },
17
+ "rosters": {
18
+ "rosters": [
19
+ {
20
+ "name": "r1",
21
+ "models": ["m1", "ghost"]
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "严写腿 = 写入席的两道。一份每个域都解析得了、却有一条悬空跨域引用(roster r1 点名目录里没有的模型 ghost)的文档集:读腿照常读出(引用在读侧是容忍的,运行期解析时剔掉),写入席拒收并点名悬空引用的坐标。打的是「严写腿只逐域解析、不判跨域引用」的写入席 —— 它把这份文档集当成可受理,而判引用完整性的写入席拒(两边在严写格分歧)。",
4
+ "firstRedOn": [],
5
+ "note": "金样的严写格:rejected{validate, code: ref-integrity, refIssues: [[rosters,0,models,1]]};读腿三格照常读出。firstRedOn 为空:严写腿 8.0.0 才有,historical 阶梯不覆盖。"
6
+ }
@@ -66,6 +66,9 @@
66
66
  ]
67
67
  },
68
68
  "models": {
69
+ "atMention": {
70
+ "mode": "all"
71
+ },
69
72
  "models": [],
70
73
  "roles": {},
71
74
  "tierGroups": []
@@ -82,7 +85,6 @@
82
85
  "rosters": {
83
86
  "rosters": []
84
87
  },
85
- "runtime": {},
86
88
  "scenarios": {
87
89
  "scenarios": []
88
90
  },
@@ -39,6 +39,9 @@
39
39
  ]
40
40
  },
41
41
  "models": {
42
+ "atMention": {
43
+ "mode": "all"
44
+ },
42
45
  "models": [],
43
46
  "roles": {},
44
47
  "tierGroups": []
@@ -55,7 +58,6 @@
55
58
  "rosters": {
56
59
  "rosters": []
57
60
  },
58
- "runtime": {},
59
61
  "scenarios": {
60
62
  "scenarios": []
61
63
  },
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [
30
33
  {
31
34
  "api": "openai-completions",
@@ -59,7 +62,6 @@
59
62
  "rosters": {
60
63
  "rosters": []
61
64
  },
62
- "runtime": {},
63
65
  "scenarios": {
64
66
  "scenarios": []
65
67
  },
@@ -83,6 +85,9 @@
83
85
  "outcome": "effective",
84
86
  "effective": {
85
87
  "models": {
88
+ "atMention": {
89
+ "mode": "all"
90
+ },
86
91
  "models": [
87
92
  {
88
93
  "api": "openai-completions",
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [
30
33
  {
31
34
  "api": "openai-completions",
@@ -55,7 +58,6 @@
55
58
  "rosters": {
56
59
  "rosters": []
57
60
  },
58
- "runtime": {},
59
61
  "scenarios": {
60
62
  "scenarios": []
61
63
  },
@@ -72,6 +74,10 @@
72
74
  "warnings": [
73
75
  {
74
76
  "domain": "models",
77
+ "identity": {
78
+ "idWithheld": true,
79
+ "nameWithheld": true
80
+ },
75
81
  "kind": "entry-dropped",
76
82
  "path": [
77
83
  "models",
@@ -81,6 +87,10 @@
81
87
  },
82
88
  {
83
89
  "domain": "models",
90
+ "identity": {
91
+ "idWithheld": true,
92
+ "nameWithheld": true
93
+ },
84
94
  "kind": "entry-dropped",
85
95
  "path": [
86
96
  "models",
@@ -39,6 +39,9 @@
39
39
  ]
40
40
  },
41
41
  "models": {
42
+ "atMention": {
43
+ "mode": "all"
44
+ },
42
45
  "models": [
43
46
  {
44
47
  "api": "openai-completions",
@@ -68,7 +71,6 @@
68
71
  "rosters": {
69
72
  "rosters": []
70
73
  },
71
- "runtime": {},
72
74
  "scenarios": {
73
75
  "scenarios": []
74
76
  },
@@ -85,6 +87,10 @@
85
87
  "warnings": [
86
88
  {
87
89
  "domain": "models",
90
+ "identity": {
91
+ "idWithheld": true,
92
+ "nameWithheld": true
93
+ },
88
94
  "kind": "entry-dropped",
89
95
  "path": [
90
96
  "models",
@@ -94,6 +100,10 @@
94
100
  },
95
101
  {
96
102
  "domain": "models",
103
+ "identity": {
104
+ "idWithheld": true,
105
+ "nameWithheld": true
106
+ },
97
107
  "kind": "entry-dropped",
98
108
  "path": [
99
109
  "models",
@@ -34,6 +34,9 @@
34
34
  "servers": []
35
35
  },
36
36
  "models": {
37
+ "atMention": {
38
+ "mode": "all"
39
+ },
37
40
  "models": [],
38
41
  "roles": {},
39
42
  "tierGroups": []
@@ -50,7 +53,6 @@
50
53
  "rosters": {
51
54
  "rosters": []
52
55
  },
53
- "runtime": {},
54
56
  "scenarios": {
55
57
  "scenarios": []
56
58
  },
@@ -97,7 +99,19 @@
97
99
  ]
98
100
  }
99
101
  },
100
- "warnings": [],
102
+ "warnings": [
103
+ {
104
+ "domain": "hosts",
105
+ "keys": [
106
+ [
107
+ "hosts",
108
+ 0,
109
+ "url"
110
+ ]
111
+ ],
112
+ "kind": "unknown-keys-dropped"
113
+ }
114
+ ],
101
115
  "metadata": {
102
116
  "version": 7,
103
117
  "updatedAt": "2026-09-16T00:00:00.000Z"
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [],
30
33
  "roles": {},
31
34
  "tierGroups": []
@@ -42,7 +45,6 @@
42
45
  "rosters": {
43
46
  "rosters": []
44
47
  },
45
- "runtime": {},
46
48
  "scenarios": {
47
49
  "scenarios": []
48
50
  },
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [
30
33
  {
31
34
  "api": "openai-completions",
@@ -79,7 +82,6 @@
79
82
  "rosters": {
80
83
  "rosters": []
81
84
  },
82
- "runtime": {},
83
85
  "scenarios": {
84
86
  "scenarios": []
85
87
  },
@@ -103,6 +105,9 @@
103
105
  "outcome": "effective",
104
106
  "effective": {
105
107
  "models": {
108
+ "atMention": {
109
+ "mode": "all"
110
+ },
106
111
  "models": [
107
112
  {
108
113
  "api": "openai-completions",
@@ -34,6 +34,9 @@
34
34
  "servers": []
35
35
  },
36
36
  "models": {
37
+ "atMention": {
38
+ "mode": "all"
39
+ },
37
40
  "models": [
38
41
  {
39
42
  "api": "openai-completions",
@@ -63,7 +66,6 @@
63
66
  "rosters": {
64
67
  "rosters": []
65
68
  },
66
- "runtime": {},
67
69
  "scenarios": {
68
70
  "scenarios": []
69
71
  },
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [
30
33
  {
31
34
  "api": "openai-completions",
@@ -55,7 +58,6 @@
55
58
  "rosters": {
56
59
  "rosters": []
57
60
  },
58
- "runtime": {},
59
61
  "scenarios": {
60
62
  "scenarios": []
61
63
  },
@@ -101,6 +103,9 @@
101
103
  "outcome": "effective",
102
104
  "effective": {
103
105
  "models": {
106
+ "atMention": {
107
+ "mode": "all"
108
+ },
104
109
  "models": [
105
110
  {
106
111
  "api": "openai-completions",
@@ -119,7 +124,29 @@
119
124
  "tierGroups": []
120
125
  }
121
126
  },
122
- "warnings": [],
127
+ "warnings": [
128
+ {
129
+ "domain": "models",
130
+ "keys": [
131
+ [
132
+ "models",
133
+ 0,
134
+ "__proto__"
135
+ ],
136
+ [
137
+ "models",
138
+ 0,
139
+ "constructor"
140
+ ],
141
+ [
142
+ "models",
143
+ 0,
144
+ "toString"
145
+ ]
146
+ ],
147
+ "kind": "unknown-keys-dropped"
148
+ }
149
+ ],
123
150
  "metadata": {
124
151
  "version": 7,
125
152
  "updatedAt": "2026-09-16T00:00:00.000Z"
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [
30
33
  {
31
34
  "api": "openai-completions",
@@ -55,7 +58,6 @@
55
58
  "rosters": {
56
59
  "rosters": []
57
60
  },
58
- "runtime": {},
59
61
  "scenarios": {
60
62
  "scenarios": []
61
63
  },
@@ -26,6 +26,9 @@
26
26
  "servers": []
27
27
  },
28
28
  "models": {
29
+ "atMention": {
30
+ "mode": "all"
31
+ },
29
32
  "models": [],
30
33
  "roles": {},
31
34
  "tierGroups": []
@@ -42,7 +45,6 @@
42
45
  "rosters": {
43
46
  "rosters": []
44
47
  },
45
- "runtime": {},
46
48
  "scenarios": {
47
49
  "scenarios": []
48
50
  },
@@ -89,6 +91,9 @@
89
91
  "servers": []
90
92
  },
91
93
  "models": {
94
+ "atMention": {
95
+ "mode": "all"
96
+ },
92
97
  "models": [],
93
98
  "roles": {},
94
99
  "tierGroups": []
@@ -105,7 +110,6 @@
105
110
  "rosters": {
106
111
  "rosters": []
107
112
  },
108
- "runtime": {},
109
113
  "scenarios": {
110
114
  "scenarios": []
111
115
  },
@@ -124,13 +128,13 @@
124
128
  "version": 7,
125
129
  "updatedAt": "2026-09-16T00:00:00.000Z"
126
130
  },
127
- "why": "受理:十七个域各一份空对象,读腿零告警;严写逐份受理,受理形 = 十七个域的 schema 默认(只含提交的键 —— 这里恰好十七个都在)。"
131
+ "why": "受理:十六个域各一份空对象,读腿零告警;严写逐份受理,受理形 = 十六个域的 schema 默认(只含提交的键 —— 这里恰好十六个都在)。"
128
132
  },
129
133
  "wire": {
130
134
  "derive": true
131
135
  },
132
136
  "localRoot": {
133
137
  "derive": true,
134
- "localVersion": 209075514147757
138
+ "localVersion": 499959296543014
135
139
  }
136
140
  }
@@ -14,7 +14,6 @@
14
14
  "collab": {},
15
15
  "workers": {},
16
16
  "hosts": {},
17
- "runtime": {},
18
17
  "governance": {},
19
18
  "entitlement": {},
20
19
  "execution": {},