@sema-agent/settings-schema 7.0.0 → 8.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 (106) hide show
  1. package/CHANGELOG.md +173 -1
  2. package/README.md +47 -5
  3. package/conformance/VERSION +1 -1
  4. package/conformance/cases/c01-entry-salvage-then-typo/expected.json +5 -0
  5. package/conformance/cases/c02-hosts-clamp-stacked/expected.json +5 -0
  6. package/conformance/cases/c03-literal-dotted-top-key/expected.json +41 -0
  7. package/conformance/cases/c04-all-bad-collection-not-salvaged/expected.json +5 -0
  8. package/conformance/cases/c05-gate-domain-bad-entry-throws/expected.json +5 -0
  9. package/conformance/cases/c06-legacy-governance-lift/expected.json +12 -0
  10. package/conformance/cases/c07-hooks-is-not-a-config-domain/expected.json +5 -0
  11. package/conformance/cases/c08-limits-unknown-carried-64/expected.json +77 -0
  12. package/conformance/cases/c09-limits-unknown-carried-65/expected.json +78 -0
  13. package/conformance/cases/c10-record-key-secret-redacted-twice/expected.json +5 -0
  14. package/conformance/cases/c11-unicode-unknown-keys/expected.json +14 -0
  15. package/conformance/cases/c12-prototype-name-top-keys/expected.json +5 -0
  16. package/conformance/cases/c13-models-field-null/expected.json +5 -0
  17. package/conformance/cases/c14-models-field-empty-array/expected.json +16 -0
  18. package/conformance/cases/c15-models-field-number/expected.json +5 -0
  19. package/conformance/cases/c16-deep-nesting-205/expected.json +14 -0
  20. package/conformance/cases/c17-empty-domain-file/expected.json +10 -0
  21. package/conformance/cases/c18-wire-envelope-not-an-object/expected.json +10 -0
  22. package/conformance/cases/c19-wire-envelope-no-version/expected.json +10 -0
  23. package/conformance/cases/c20-governance-absent-lifts/expected.json +12 -0
  24. package/conformance/cases/c21-governance-empty-object-wins/expected.json +13 -0
  25. package/conformance/cases/c22-governance-null-throws/expected.json +5 -0
  26. package/conformance/cases/c23-mixed-validity-models/expected.json +5 -0
  27. package/conformance/cases/c24-valid-entries-with-unknown-keys/expected.json +29 -0
  28. package/conformance/cases/c25-published-roundtrip-zero-warnings/expected.json +33 -0
  29. package/conformance/cases/c26-hosts-array-1024/expected.json +7183 -0
  30. package/conformance/cases/c27-hosts-array-1025/expected.json +5 -0
  31. package/conformance/cases/c28-large-document-over-1mb/expected.json +14 -0
  32. package/conformance/cases/c29-salvage-then-domain-refine-fails/expected.json +5 -0
  33. package/conformance/cases/c30-version-triple-a-first/expected.json +29 -0
  34. package/conformance/cases/c31-version-triple-b-changed/expected.json +29 -0
  35. package/conformance/cases/c32-version-triple-a-restored/expected.json +29 -0
  36. package/conformance/cases/c33-limits-nested-carried-key/expected.json +17 -0
  37. package/conformance/cases/c34-skills-content-vs-manifest/expected.json +23 -0
  38. package/conformance/cases/c35-portable-domain-file-is-null/expected.json +5 -0
  39. package/conformance/cases/c36-skills-entry-without-content/expected.json +23 -0
  40. package/conformance/cases/c37-skills-field-null/expected.json +5 -0
  41. package/conformance/cases/c38-remote-exec-is-a-non-domain-file/expected.json +5 -0
  42. package/conformance/cases/c39-hidden-file-in-config-d/expected.json +5 -0
  43. package/conformance/cases/c40-s712-identity-only-what-reads-out/expected.json +5 -0
  44. package/conformance/cases/c41-s792-encoded-pem-identity/expected.json +5 -0
  45. package/conformance/cases/c42-s792-unknown-key-secret-redacted/expected.json +33 -0
  46. package/conformance/cases/c43-s792-form-and-deep-encoded-pem/expected.json +5 -0
  47. package/conformance/cases/c44-s792-utf8-escape-glued-token/expected.json +5 -0
  48. package/conformance/cases/c45-s792-identity-bounds-and-decode-depth/expected.json +5 -0
  49. package/conformance/cases/c46-s811-host-name-url-userinfo-characterization/expected.json +5 -0
  50. package/conformance/cases/c47-s811-roles-key-url-userinfo-characterization/expected.json +5 -0
  51. package/conformance/cases/c48-s935-model-headers-transported/expected.json +59 -0
  52. package/conformance/cases/c49-s935-model-headers-secret-entry-dropped/expected.json +5 -0
  53. package/conformance/cases/c50-s784-lane-host-legal/expected.json +44 -0
  54. package/conformance/cases/c51-s784-lane-e2b-legal/expected.json +46 -0
  55. package/conformance/cases/c52-s784-lane-k8s-legal/expected.json +48 -0
  56. package/conformance/cases/c53-s784-lane-ssh-legal/expected.json +48 -0
  57. package/conformance/cases/c54-s784-lane-adb-legal/expected.json +44 -0
  58. package/conformance/cases/c55-s784-lane-local-docker-legal/expected.json +45 -0
  59. package/conformance/cases/c56-s784-lane-device-legal/expected.json +51 -0
  60. package/conformance/cases/c57-s784-g1-enabled-no-lane/expected.json +5 -0
  61. package/conformance/cases/c58-s784-g2-multitenant-host/expected.json +5 -0
  62. package/conformance/cases/c59-s784-g3-k8s-missing-image/expected.json +5 -0
  63. package/conformance/cases/c60-s784-g3-e2b-missing-key/expected.json +5 -0
  64. package/conformance/cases/c61-s784-g3-other-lane-key/expected.json +5 -0
  65. package/conformance/cases/c62-s784-g7a-session-tidb/expected.json +5 -0
  66. package/conformance/cases/c63-s784-host-two-replicas/expected.json +5 -0
  67. package/conformance/cases/c64-s784-multitenant-local-store/expected.json +5 -0
  68. package/conformance/cases/c65-s784-pg-without-db/expected.json +5 -0
  69. package/conformance/cases/c66-s784-memory-backend-mismatch/expected.json +5 -0
  70. package/conformance/cases/c67-s784-retired-field-loud/expected.json +5 -0
  71. package/conformance/cases/c67-s784-retired-field-loud/meta.json +1 -1
  72. package/conformance/cases/c68-s784-device-local-store/expected.json +5 -0
  73. package/conformance/cases/cc01-mcp-toolfaces-non-object/expected.json +54 -0
  74. package/conformance/cases/cc02-mcp-source-key-is-transported/expected.json +27 -0
  75. package/conformance/cases/cc03-model-compat-unknown-subkey/expected.json +33 -0
  76. package/conformance/cases/cli01-model-name-nfc-vs-nfd/expected.json +5 -0
  77. package/conformance/cases/cli02-control-and-zero-width-chars/expected.json +5 -0
  78. package/conformance/cases/cli03-credential-pasted-into-unknown-key/expected.json +22 -0
  79. package/conformance/cases/cli04-env-value-with-newline/expected.json +46 -0
  80. package/conformance/cases/cli05-long-and-prefix-colliding-names/expected.json +53 -0
  81. package/conformance/cases/t01-absent-domain-key-not-null/expected.json +5 -0
  82. package/conformance/cases/t02-entry-salvage-vs-whole-domain-refusal/expected.json +5 -0
  83. package/conformance/cases/t03-prototype-name-key-not-swallowed/expected.json +29 -0
  84. package/conformance/cases/t04-secret-literal-never-in-warning-value/expected.json +5 -0
  85. package/conformance/cases/z01-every-domain-empty-object/expected.json +64 -0
  86. package/conformance/cases/z02-every-domain-unknown-key/expected.json +66 -0
  87. package/dist/cli.js +97 -25
  88. package/dist/config-fns.js +7 -1
  89. package/dist/conformance/contract-adapter.d.ts +4 -2
  90. package/dist/conformance/contract-adapter.js +21 -7
  91. package/dist/conformance/corpus.js +12 -7
  92. package/dist/conformance/derive.d.ts +26 -0
  93. package/dist/conformance/derive.js +25 -2
  94. package/dist/conformance/index.d.ts +4 -3
  95. package/dist/conformance/index.js +4 -3
  96. package/dist/conformance/run.d.ts +3 -3
  97. package/dist/conformance/run.js +87 -17
  98. package/dist/conformance/types.d.ts +57 -17
  99. package/dist/conformance/types.js +4 -2
  100. package/dist/execution-lane-index.d.ts +20 -1
  101. package/dist/execution-lane-index.js +24 -1
  102. package/dist/hooks.d.ts +4 -4
  103. package/dist/migrate-workers.d.ts +1 -1
  104. package/dist/migrate-workers.js +3 -7
  105. package/dist/types.js +13 -4
  106. package/package.json +2 -1
@@ -7238,6 +7238,11 @@
7238
7238
  "updatedAt": "2026-09-16T00:00:00.000Z"
7239
7239
  }
7240
7240
  },
7241
+ "strictWrite": {
7242
+ "outcome": "rejected",
7243
+ "stage": "validate",
7244
+ "why": "拒:hosts 1025 条,读腿截断到 1024(hosts-grandfathered,存量夹紧只活在读路径);严写按现行 schema 的数组上界拒。"
7245
+ },
7241
7246
  "wire": {
7242
7247
  "derive": true
7243
7248
  },
@@ -72,6 +72,20 @@
72
72
  "updatedAt": "2026-09-16T00:00:00.000Z"
73
73
  }
74
74
  },
75
+ "strictWrite": {
76
+ "outcome": "effective",
77
+ "effective": {
78
+ "scenarios": {
79
+ "scenarios": []
80
+ }
81
+ },
82
+ "warnings": [],
83
+ "metadata": {
84
+ "version": 7,
85
+ "updatedAt": "2026-09-16T00:00:00.000Z"
86
+ },
87
+ "why": "受理:>1MB 的超大未知值被 schema 剥掉(读腿只报键路径);严写同样剥、不铸告警,受理形等于读腿 scenarios 那一格。"
88
+ },
75
89
  "wire": {
76
90
  "derive": true
77
91
  },
@@ -67,6 +67,11 @@
67
67
  "updatedAt": "2026-09-16T00:00:00.000Z"
68
68
  }
69
69
  },
70
+ "strictWrite": {
71
+ "outcome": "rejected",
72
+ "stage": "validate",
73
+ "why": "拒:丢掉坏条目之后域级判据(重名)仍不过,读腿整域降级(domain-defaulted);严写在第一条坏条目上就不受理。"
74
+ },
70
75
  "wire": {
71
76
  "derive": true
72
77
  },
@@ -75,6 +75,35 @@
75
75
  "updatedAt": "2026-09-16T00:00:00.000Z"
76
76
  }
77
77
  },
78
+ "strictWrite": {
79
+ "outcome": "effective",
80
+ "effective": {
81
+ "models": {
82
+ "models": [
83
+ {
84
+ "api": "openai-completions",
85
+ "apiKeyEnv": "OPENAI_API_KEY",
86
+ "enabled": true,
87
+ "id": "v-a-id",
88
+ "name": "v-a",
89
+ "provider": "openai",
90
+ "quotaWeight": 1,
91
+ "reasoning": false,
92
+ "tier": "standard",
93
+ "vision": false
94
+ }
95
+ ],
96
+ "roles": {},
97
+ "tierGroups": []
98
+ }
99
+ },
100
+ "warnings": [],
101
+ "metadata": {
102
+ "version": 7,
103
+ "updatedAt": "2026-09-16T00:00:00.000Z"
104
+ },
105
+ "why": "受理:干净的 models 文档(本条打的是本地腿的内容寻址版本号);严写受理,受理形等于读腿 models 那一格,元数据 = harness 注入的那一份。"
106
+ },
78
107
  "wire": {
79
108
  "derive": true
80
109
  },
@@ -75,6 +75,35 @@
75
75
  "updatedAt": "2026-09-16T00:00:00.000Z"
76
76
  }
77
77
  },
78
+ "strictWrite": {
79
+ "outcome": "effective",
80
+ "effective": {
81
+ "models": {
82
+ "models": [
83
+ {
84
+ "api": "openai-completions",
85
+ "apiKeyEnv": "OPENAI_API_KEY",
86
+ "enabled": true,
87
+ "id": "v-b-id",
88
+ "name": "v-b",
89
+ "provider": "openai",
90
+ "quotaWeight": 1,
91
+ "reasoning": false,
92
+ "tier": "standard",
93
+ "vision": false
94
+ }
95
+ ],
96
+ "roles": {},
97
+ "tierGroups": []
98
+ }
99
+ },
100
+ "warnings": [],
101
+ "metadata": {
102
+ "version": 7,
103
+ "updatedAt": "2026-09-16T00:00:00.000Z"
104
+ },
105
+ "why": "受理:干净的 models 文档(三连之「变」);严写受理,受理形等于读腿 models 那一格。"
106
+ },
78
107
  "wire": {
79
108
  "derive": true
80
109
  },
@@ -75,6 +75,35 @@
75
75
  "updatedAt": "2026-09-16T00:00:00.000Z"
76
76
  }
77
77
  },
78
+ "strictWrite": {
79
+ "outcome": "effective",
80
+ "effective": {
81
+ "models": {
82
+ "models": [
83
+ {
84
+ "api": "openai-completions",
85
+ "apiKeyEnv": "OPENAI_API_KEY",
86
+ "enabled": true,
87
+ "id": "v-a-id",
88
+ "name": "v-a",
89
+ "provider": "openai",
90
+ "quotaWeight": 1,
91
+ "reasoning": false,
92
+ "tier": "standard",
93
+ "vision": false
94
+ }
95
+ ],
96
+ "roles": {},
97
+ "tierGroups": []
98
+ }
99
+ },
100
+ "warnings": [],
101
+ "metadata": {
102
+ "version": 7,
103
+ "updatedAt": "2026-09-16T00:00:00.000Z"
104
+ },
105
+ "why": "受理:与 c30 逐字节相同的文档(三连之「还原」);严写受理,受理形与 c30 相同。"
106
+ },
78
107
  "wire": {
79
108
  "derive": true
80
109
  },
@@ -81,6 +81,23 @@
81
81
  "updatedAt": "2026-09-16T00:00:00.000Z"
82
82
  }
83
83
  },
84
+ "strictWrite": {
85
+ "outcome": "effective",
86
+ "effective": {
87
+ "limits": {
88
+ "infraCostRates": {
89
+ "zzzNestedTypo": 7
90
+ },
91
+ "maxConcurrentRuns": 3
92
+ }
93
+ },
94
+ "warnings": [],
95
+ "metadata": {
96
+ "version": 7,
97
+ "updatedAt": "2026-09-16T00:00:00.000Z"
98
+ },
99
+ "why": "受理:limits 嵌套的未知键原样承运(读腿报 unknown-keys-carried 全段坐标);严写同样承运,告警面为空。"
100
+ },
84
101
  "wire": {
85
102
  "derive": true
86
103
  },
@@ -83,6 +83,29 @@
83
83
  "updatedAt": "2026-09-16T00:00:00.000Z"
84
84
  }
85
85
  },
86
+ "strictWrite": {
87
+ "outcome": "effective",
88
+ "effective": {
89
+ "skills": {
90
+ "skills": [
91
+ {
92
+ "content": "# hello",
93
+ "description": "d",
94
+ "enabled": true,
95
+ "name": "sk1",
96
+ "rosters": [],
97
+ "scenarios": []
98
+ }
99
+ ]
100
+ }
101
+ },
102
+ "warnings": [],
103
+ "metadata": {
104
+ "version": 7,
105
+ "updatedAt": "2026-09-16T00:00:00.000Z"
106
+ },
107
+ "why": "受理:严写收的是域形(带 content,不是 wire 的 manifest 形);条目里拼错的 `zzzTypo` 被 schema 剥掉(读腿报 unknown-keys-dropped),严写同样剥、不铸告警,受理形等于读腿 skills 那一格。"
108
+ },
86
109
  "wire": {
87
110
  "outcome": "effective",
88
111
  "effective": {
@@ -67,6 +67,11 @@
67
67
  "updatedAt": "2026-09-16T00:00:00.000Z"
68
68
  }
69
69
  },
70
+ "strictWrite": {
71
+ "outcome": "rejected",
72
+ "stage": "validate",
73
+ "why": "拒:mcp 文档是 null,读腿整域降级成默认(domain-defaulted);写入席不把 null 当空域存下。"
74
+ },
70
75
  "wire": {
71
76
  "derive": true
72
77
  },
@@ -71,6 +71,29 @@
71
71
  "updatedAt": "2026-09-16T00:00:00.000Z"
72
72
  }
73
73
  },
74
+ "strictWrite": {
75
+ "outcome": "effective",
76
+ "effective": {
77
+ "skills": {
78
+ "skills": [
79
+ {
80
+ "content": "",
81
+ "description": "d",
82
+ "enabled": true,
83
+ "name": "sk-no-content",
84
+ "rosters": [],
85
+ "scenarios": []
86
+ }
87
+ ]
88
+ }
89
+ },
90
+ "warnings": [],
91
+ "metadata": {
92
+ "version": 7,
93
+ "updatedAt": "2026-09-16T00:00:00.000Z"
94
+ },
95
+ "why": "受理:skills 条目不写 content,域形把它补成空串(合法条目),读腿零告警;严写受理,受理形等于读腿 skills 那一格(wire 腿的 manifest 判坏与严写无关)。"
96
+ },
74
97
  "wire": {
75
98
  "outcome": "effective",
76
99
  "effective": {
@@ -67,6 +67,11 @@
67
67
  "updatedAt": "2026-09-16T00:00:00.000Z"
68
68
  }
69
69
  },
70
+ "strictWrite": {
71
+ "outcome": "rejected",
72
+ "stage": "validate",
73
+ "why": "拒:skills 文档是 null,读腿整域降级成默认(domain-defaulted);写入席不把 null 当空域存下。"
74
+ },
70
75
  "wire": {
71
76
  "outcome": "effective",
72
77
  "effective": {
@@ -62,6 +62,11 @@
62
62
  "updatedAt": "2026-09-16T00:00:00.000Z"
63
63
  }
64
64
  },
65
+ "strictWrite": {
66
+ "outcome": "rejected",
67
+ "stage": "validate",
68
+ "why": "拒:`remote-exec` 不是域名 —— 它是执行后端文件,有自己的写入口与校验(writeRemoteExec / validateRemoteExec),不走域写受理;本地腿把它归为专用文件不报,严写拒。"
69
+ },
65
70
  "wire": {
66
71
  "derive": true
67
72
  },
@@ -62,6 +62,11 @@
62
62
  "updatedAt": "2026-09-16T00:00:00.000Z"
63
63
  }
64
64
  },
65
+ "strictWrite": {
66
+ "outcome": "rejected",
67
+ "stage": "validate",
68
+ "why": "拒:`.hidden` 不是域名 —— 本地腿把隐藏文件当扫描忽略,那是目录扫描的规矩;写入席收到一个不是域的键就是拒。"
69
+ },
65
70
  "wire": {
66
71
  "derive": true
67
72
  },
@@ -156,6 +156,11 @@
156
156
  "updatedAt": "2026-09-25T00:00:00.000Z"
157
157
  }
158
158
  },
159
+ "strictWrite": {
160
+ "outcome": "rejected",
161
+ "stage": "validate",
162
+ "why": "拒:models 第 2 条名字形不合法、apiKeyEnv 不是变量名,读腿逐条抢救(entry-dropped + 只带可披露的身份);严写不删条目 ⇒ 整次不受理。"
163
+ },
159
164
  "wire": {
160
165
  "derive": true
161
166
  },
@@ -156,6 +156,11 @@
156
156
  "updatedAt": "2026-09-27T00:00:00.000Z"
157
157
  }
158
158
  },
159
+ "strictWrite": {
160
+ "outcome": "rejected",
161
+ "stage": "validate",
162
+ "why": "拒:models 里两条的 apiKeyEnv 是编码过的私钥形(不是变量名),读腿逐条丢(entry-dropped,身份不可披露);严写 ⇒ 整次不受理。"
163
+ },
159
164
  "wire": {
160
165
  "derive": true
161
166
  },
@@ -110,6 +110,39 @@
110
110
  "updatedAt": "2026-09-27T00:00:00.000Z"
111
111
  }
112
112
  },
113
+ "strictWrite": {
114
+ "outcome": "effective",
115
+ "effective": {
116
+ "limits": {
117
+ "maxToolCallz": 3,
118
+ "sk-live-FAKEC42CARRIEDKEY000000000": 5
119
+ },
120
+ "models": {
121
+ "models": [
122
+ {
123
+ "api": "openai-completions",
124
+ "apiKeyEnv": "OPENAI_API_KEY",
125
+ "enabled": true,
126
+ "id": "keep-id",
127
+ "name": "keep",
128
+ "provider": "openai",
129
+ "quotaWeight": 1,
130
+ "reasoning": false,
131
+ "tier": "standard",
132
+ "vision": false
133
+ }
134
+ ],
135
+ "roles": {},
136
+ "tierGroups": []
137
+ }
138
+ },
139
+ "warnings": [],
140
+ "metadata": {
141
+ "version": 13,
142
+ "updatedAt": "2026-09-27T00:00:00.000Z"
143
+ },
144
+ "why": "受理:models 的密钥形未知键被剥(读腿报 unknown-keys-dropped,坐标脱敏)、limits 的未知键承运(unknown-keys-carried);严写同样剥 / 承运、不铸告警,受理形等于读腿两格。"
145
+ },
113
146
  "wire": {
114
147
  "derive": true
115
148
  },
@@ -127,6 +127,11 @@
127
127
  "updatedAt": "2026-09-27T00:00:00.000Z"
128
128
  }
129
129
  },
130
+ "strictWrite": {
131
+ "outcome": "rejected",
132
+ "stage": "validate",
133
+ "why": "拒:models 里两条的 apiKeyEnv 是表单编码 / 深层编码的私钥形,读腿逐条丢(entry-dropped);严写 ⇒ 整次不受理。"
134
+ },
130
135
  "wire": {
131
136
  "derive": true
132
137
  },
@@ -105,6 +105,11 @@
105
105
  "updatedAt": "2026-09-27T00:00:00.000Z"
106
106
  }
107
107
  },
108
+ "strictWrite": {
109
+ "outcome": "rejected",
110
+ "stage": "validate",
111
+ "why": "拒:models.roles 里有编码粘连令牌形的坏键,读腿逐条丢(entry-dropped)并剥未知键;严写 ⇒ 整次不受理。"
112
+ },
108
113
  "wire": {
109
114
  "derive": true
110
115
  },
@@ -175,6 +175,11 @@
175
175
  "updatedAt": "2026-09-27T00:00:00.000Z"
176
176
  }
177
177
  },
178
+ "strictWrite": {
179
+ "outcome": "rejected",
180
+ "stage": "validate",
181
+ "why": "拒:三个域里都有读腿要抢救的东西 —— models / mcp 逐条丢(entry-dropped)、hosts 超长名夹紧(hosts-grandfathered);严写在任何一份不受理时整次不受理。"
182
+ },
178
183
  "wire": {
179
184
  "derive": true
180
185
  },
@@ -78,6 +78,11 @@
78
78
  "updatedAt": "2026-09-27T00:00:00.000Z"
79
79
  }
80
80
  },
81
+ "strictWrite": {
82
+ "outcome": "rejected",
83
+ "stage": "validate",
84
+ "why": "拒:hosts 第 2 条名字是一条带 userinfo 的 URL(超长且形不合法),读腿夹紧剔除(hosts-grandfathered);严写按现行 schema 拒。"
85
+ },
81
86
  "wire": {
82
87
  "derive": true
83
88
  },
@@ -88,6 +88,11 @@
88
88
  "updatedAt": "2026-09-27T00:00:00.000Z"
89
89
  }
90
90
  },
91
+ "strictWrite": {
92
+ "outcome": "rejected",
93
+ "stage": "validate",
94
+ "why": "拒:models.roles 里有一个带 userinfo 的 URL 形坏键,读腿逐条丢(entry-dropped);严写 ⇒ 整次不受理(拒因文案的脱敏面与本格无关:kit 不比对 diagnostics)。"
95
+ },
91
96
  "wire": {
92
97
  "derive": true
93
98
  },
@@ -105,6 +105,65 @@
105
105
  "updatedAt": "2026-10-01T00:00:00.000Z"
106
106
  }
107
107
  },
108
+ "strictWrite": {
109
+ "outcome": "effective",
110
+ "effective": {
111
+ "models": {
112
+ "models": [
113
+ {
114
+ "api": "anthropic-messages",
115
+ "apiKeyEnv": "ANTHROPIC_API_KEY",
116
+ "enabled": true,
117
+ "headers": {
118
+ "anthropic-beta": "context-1m-2025-08-07"
119
+ },
120
+ "id": "claude-x",
121
+ "name": "claude-1m",
122
+ "provider": "anthropic",
123
+ "quotaWeight": 1,
124
+ "reasoning": false,
125
+ "tier": "standard",
126
+ "vision": false
127
+ },
128
+ {
129
+ "api": "openai-completions",
130
+ "apiKeyEnv": "OPENAI_API_KEY",
131
+ "enabled": true,
132
+ "headers": [
133
+ "Anthropic-Beta: not-a-header-bag"
134
+ ],
135
+ "id": "gw-id",
136
+ "name": "gw",
137
+ "provider": "openai",
138
+ "quotaWeight": 1,
139
+ "reasoning": false,
140
+ "tier": "standard",
141
+ "vision": false
142
+ },
143
+ {
144
+ "api": "openai-completions",
145
+ "apiKeyEnv": "OPENAI_API_KEY",
146
+ "enabled": true,
147
+ "id": "plain-id",
148
+ "name": "plain",
149
+ "provider": "openai",
150
+ "quotaWeight": 1,
151
+ "reasoning": false,
152
+ "tier": "standard",
153
+ "vision": false
154
+ }
155
+ ],
156
+ "roles": {},
157
+ "tierGroups": []
158
+ }
159
+ },
160
+ "warnings": [],
161
+ "metadata": {
162
+ "version": 7,
163
+ "updatedAt": "2026-10-01T00:00:00.000Z"
164
+ },
165
+ "why": "受理:models[].headers 是解析透明键,读腿逐字交出、零告警;严写同样逐字收下,受理形等于读腿 models 那一格。"
166
+ },
108
167
  "wire": {
109
168
  "derive": true
110
169
  },
@@ -88,6 +88,11 @@
88
88
  "updatedAt": "2026-10-01T00:00:00.000Z"
89
89
  }
90
90
  },
91
+ "strictWrite": {
92
+ "outcome": "rejected",
93
+ "stage": "validate",
94
+ "why": "拒:models[0].headers 里粘了密钥形值,自由形安全判据拒,读腿逐条丢(entry-dropped);严写 ⇒ 整次不受理。"
95
+ },
91
96
  "wire": {
92
97
  "derive": true
93
98
  },
@@ -92,6 +92,50 @@
92
92
  "updatedAt": "2026-10-03T00:00:00.000Z"
93
93
  }
94
94
  },
95
+ "strictWrite": {
96
+ "outcome": "effective",
97
+ "effective": {
98
+ "workers": {
99
+ "workers": [
100
+ {
101
+ "coords": {},
102
+ "enabled": true,
103
+ "host": "default",
104
+ "image": "sema-server:latest",
105
+ "name": "w-host",
106
+ "runtime": {
107
+ "execution": {
108
+ "coords": {
109
+ "HOST_WORKSPACE_BASE": "/work"
110
+ },
111
+ "lane": "host",
112
+ "secretRefs": {}
113
+ },
114
+ "rateLimitRpm": 0,
115
+ "requirePrincipal": false,
116
+ "store": {
117
+ "backend": "local",
118
+ "memory": {
119
+ "backend": "file",
120
+ "engine": "on"
121
+ },
122
+ "session": "auto"
123
+ }
124
+ },
125
+ "secretRefs": {
126
+ "apiKeyEnv": "MODEL_KEY"
127
+ }
128
+ }
129
+ ]
130
+ }
131
+ },
132
+ "warnings": [],
133
+ "metadata": {
134
+ "version": 7,
135
+ "updatedAt": "2026-10-03T00:00:00.000Z"
136
+ },
137
+ "why": "受理:合法的 host 车道 worker,读腿零告警;严写受理(workers 写闸 = WorkerSpec 本身),受理形等于读腿 workers 那一格。"
138
+ },
95
139
  "wire": {
96
140
  "derive": true
97
141
  },
@@ -94,6 +94,52 @@
94
94
  "updatedAt": "2026-10-03T00:00:00.000Z"
95
95
  }
96
96
  },
97
+ "strictWrite": {
98
+ "outcome": "effective",
99
+ "effective": {
100
+ "workers": {
101
+ "workers": [
102
+ {
103
+ "coords": {},
104
+ "enabled": true,
105
+ "host": "default",
106
+ "image": "sema-server:latest",
107
+ "name": "w-e2b",
108
+ "runtime": {
109
+ "execution": {
110
+ "coords": {
111
+ "E2B_TEMPLATE": "base"
112
+ },
113
+ "lane": "e2b",
114
+ "secretRefs": {
115
+ "E2B_API_KEY": "HOST_E2B_KEY"
116
+ }
117
+ },
118
+ "rateLimitRpm": 0,
119
+ "requirePrincipal": false,
120
+ "store": {
121
+ "backend": "local",
122
+ "memory": {
123
+ "backend": "file",
124
+ "engine": "on"
125
+ },
126
+ "session": "auto"
127
+ }
128
+ },
129
+ "secretRefs": {
130
+ "apiKeyEnv": "MODEL_KEY"
131
+ }
132
+ }
133
+ ]
134
+ }
135
+ },
136
+ "warnings": [],
137
+ "metadata": {
138
+ "version": 7,
139
+ "updatedAt": "2026-10-03T00:00:00.000Z"
140
+ },
141
+ "why": "受理:合法的 e2b 车道 worker;严写受理,受理形等于读腿 workers 那一格。"
142
+ },
97
143
  "wire": {
98
144
  "derive": true
99
145
  },
@@ -96,6 +96,54 @@
96
96
  "updatedAt": "2026-10-03T00:00:00.000Z"
97
97
  }
98
98
  },
99
+ "strictWrite": {
100
+ "outcome": "effective",
101
+ "effective": {
102
+ "workers": {
103
+ "workers": [
104
+ {
105
+ "coords": {},
106
+ "enabled": true,
107
+ "host": "default",
108
+ "image": "sema-server:latest",
109
+ "name": "w-k8s",
110
+ "runtime": {
111
+ "execution": {
112
+ "coords": {
113
+ "K8S_NAMESPACE": "sandboxes",
114
+ "K8S_RUNTIME_CLASS": "",
115
+ "K8S_SANDBOX_IMAGE": "registry.internal/sandbox@sha256:abc"
116
+ },
117
+ "lane": "k8s",
118
+ "secretRefs": {
119
+ "K8S_TOKEN": "HOST_K8S_TOKEN"
120
+ }
121
+ },
122
+ "rateLimitRpm": 0,
123
+ "requirePrincipal": false,
124
+ "store": {
125
+ "backend": "local",
126
+ "memory": {
127
+ "backend": "file",
128
+ "engine": "on"
129
+ },
130
+ "session": "auto"
131
+ }
132
+ },
133
+ "secretRefs": {
134
+ "apiKeyEnv": "MODEL_KEY"
135
+ }
136
+ }
137
+ ]
138
+ }
139
+ },
140
+ "warnings": [],
141
+ "metadata": {
142
+ "version": 7,
143
+ "updatedAt": "2026-10-03T00:00:00.000Z"
144
+ },
145
+ "why": "受理:合法的 k8s 车道 worker;严写受理,受理形等于读腿 workers 那一格。"
146
+ },
99
147
  "wire": {
100
148
  "derive": true
101
149
  },