@sensigo/realm 0.35.0 → 0.37.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.
- package/dist/engine/run-health.d.ts.map +1 -1
- package/dist/engine/run-health.js +46 -5
- package/dist/engine/run-health.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/types/run-record.d.ts +146 -8
- package/dist/types/run-record.d.ts.map +1 -1
- package/dist/workflow/structured-output-eligibility.d.ts +54 -5
- package/dist/workflow/structured-output-eligibility.d.ts.map +1 -1
- package/dist/workflow/structured-output-eligibility.js +342 -43
- package/dist/workflow/structured-output-eligibility.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-health.d.ts","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"AAuFA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAK1E;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EACA,oBAAoB,GACpB,aAAa,GACb,qBAAqB,GACrB,kBAAkB,GAClB,4BAA4B,GAE5B,0BAA0B,GAC1B,iBAAiB,GACjB,mCAAmC,GAGnC,6BAA6B,GAM7B,6BAA6B,
|
|
1
|
+
{"version":3,"file":"run-health.d.ts","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"AAuFA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAK1E;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EACA,oBAAoB,GACpB,aAAa,GACb,qBAAqB,GACrB,kBAAkB,GAClB,4BAA4B,GAE5B,0BAA0B,GAC1B,iBAAiB,GACjB,mCAAmC,GAGnC,6BAA6B,GAM7B,6BAA6B,GAQ7B,8BAA8B,CAAC;IACnC;6DACyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;yCAEqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf;;;;4DAIwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;kDAC8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;mEAG+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAoHD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAC/E,gBAAgB,EAAE,CAwKpB"}
|
|
@@ -54,6 +54,30 @@ function findGateCorruption(run) {
|
|
|
54
54
|
* Checked from BOTH branches of {@link classifyRunHealth}, mirroring {@link findGateCorruption}'s
|
|
55
55
|
* own dual-branch pattern — a live run's evidence and a terminal run's evidence are read exactly
|
|
56
56
|
* the same way; only WHERE the caller is standing differs.
|
|
57
|
+
*
|
|
58
|
+
* THREE scope notes an operator needs before reading this finding:
|
|
59
|
+
*
|
|
60
|
+
* 1. EXPECTED FIRE, not an anomaly. Every run of a step that declares `structured_output: strict`
|
|
61
|
+
* AND declares tools now fires this finding with `unsupported_context_tools`, on every run,
|
|
62
|
+
* permanently — that step's OUTPUT is produced on the tools path, which has no
|
|
63
|
+
* grammar-constrained submit call. It is a true statement about the output dimension, and it
|
|
64
|
+
* is a baseline, not a regression signal. Do not tune alerting on the finding's mere presence
|
|
65
|
+
* for such steps; look at the reason list.
|
|
66
|
+
* 2. The finding is OUTPUT-dimension-first. The tool-ARGUMENTS dimension contributes exactly one
|
|
67
|
+
* marked literal, `tool_args:api_rejected_schema` (see the loop below). A tools step can be
|
|
68
|
+
* running strict successfully on most of its tools while this finding reports
|
|
69
|
+
* `unsupported_context_tools` — those are not in contradiction. Per-tool detail is deliberately
|
|
70
|
+
* NOT surfaced here (it belongs to `realm run inspect`/`export`); MCP pollers see this narrow
|
|
71
|
+
* finding only.
|
|
72
|
+
* 3. (issue #313) A SECOND expected-fire baseline: a strict-declared step driven through an
|
|
73
|
+
* OpenAI-COMPATIBLE endpoint (`--base-url`) without the `--strict-base-url` attestation fires
|
|
74
|
+
* this finding on every run with `compat_endpoint`. Realm declined to send strict rather than
|
|
75
|
+
* send it into an endpoint that might accept and ignore it — a deliberate choice, correctly
|
|
76
|
+
* reported. Baseline, not regression; the operator remedy is either `--strict-base-url` (if
|
|
77
|
+
* the endpoint genuinely enforces strict) or a native endpoint. Note this is INCLUDED while
|
|
78
|
+
* `external_agent` is excluded, and the distinction is epistemic, not cosmetic: realm cannot
|
|
79
|
+
* KNOW what an external driver did, whereas compat is realm's own decision — the same footing
|
|
80
|
+
* as `unsupported_context_tools`, which is also included.
|
|
57
81
|
*/
|
|
58
82
|
function findStructuredOutputDowngrades(run) {
|
|
59
83
|
const reasonsByStep = new Map();
|
|
@@ -61,11 +85,28 @@ function findStructuredOutputDowngrades(run) {
|
|
|
61
85
|
const meta = entry.diagnostics?.structured_output;
|
|
62
86
|
if (meta === undefined)
|
|
63
87
|
continue;
|
|
64
|
-
if (meta.downgrade_reason
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
88
|
+
if (meta.downgrade_reason !== undefined && meta.downgrade_reason !== 'external_agent') {
|
|
89
|
+
const reasons = reasonsByStep.get(entry.step_id) ?? new Set();
|
|
90
|
+
reasons.add(meta.downgrade_reason);
|
|
91
|
+
reasonsByStep.set(entry.step_id, reasons);
|
|
92
|
+
}
|
|
93
|
+
// issue #311 — the NARROW tool-arguments widening. Only ONE class from the tool-args
|
|
94
|
+
// dimension is admitted: `api_rejected_schema`, the event where the API actively REJECTED a
|
|
95
|
+
// strict tool schema realm had assessed as eligible. That is the trigger #346 watches for,
|
|
96
|
+
// and it is the only tool-args outcome an operator can act on. Everything else in
|
|
97
|
+
// `tool_args.reasons` (`budget_excluded`, the eligibility verdict codes, the 503 labels) is
|
|
98
|
+
// routine, expected, and would drown the finding — it stays visible via inspect/export.
|
|
99
|
+
//
|
|
100
|
+
// The literal is DIMENSION-MARKED (`tool_args:` prefix) so it can never be confused with the
|
|
101
|
+
// step-OUTPUT reason of the same name, and so the #346 trigger greps cleanly against the
|
|
102
|
+
// permanent `unsupported_context_tools` baseline every opted-in tools step now carries.
|
|
103
|
+
for (const tool of meta.tool_args?.tools ?? []) {
|
|
104
|
+
if (!(tool.reasons ?? []).includes('api_rejected_schema'))
|
|
105
|
+
continue;
|
|
106
|
+
const reasons = reasonsByStep.get(entry.step_id) ?? new Set();
|
|
107
|
+
reasons.add('tool_args:api_rejected_schema');
|
|
108
|
+
reasonsByStep.set(entry.step_id, reasons);
|
|
109
|
+
}
|
|
69
110
|
}
|
|
70
111
|
if (reasonsByStep.size === 0)
|
|
71
112
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-health.js","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"AAyFA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"run-health.js","sourceRoot":"","sources":["../../src/engine/run-health.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export type { Requirement, CapabilityBlockInfo } from './engine/capability.js';
|
|
|
47
47
|
export { evaluatePrecondition, checkPreconditions, evaluateAllPreconditions, } from './engine/precondition.js';
|
|
48
48
|
export type { PreconditionResult } from './engine/precondition.js';
|
|
49
49
|
export type { StepDiagnostics } from './types/run-record.js';
|
|
50
|
-
export declare const VERSION = "0.
|
|
50
|
+
export declare const VERSION = "0.37.0";
|
|
51
51
|
export type { ToolCallRecord, McpServerConfig } from './types/mcp-types.js';
|
|
52
52
|
export type { ServiceAdapter, ServiceResponse } from './extensions/service-adapter.js';
|
|
53
53
|
export type { StepHandler, StepHandlerInputs, StepContext, StepHandlerResult, } from './extensions/step-handler.js';
|
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ export { classifyRunHealth, DEFAULT_IDLE_THRESHOLD_MS } from './engine/run-healt
|
|
|
36
36
|
export { computeGateDueState } from './engine/gate-timing.js';
|
|
37
37
|
export { requirementForStep, unmetCapabilities, findCapabilityBlockedSteps, capabilityWarning, } from './engine/capability.js';
|
|
38
38
|
export { evaluatePrecondition, checkPreconditions, evaluateAllPreconditions, } from './engine/precondition.js';
|
|
39
|
-
export const VERSION = '0.
|
|
39
|
+
export const VERSION = '0.37.0';
|
|
40
40
|
export { ExtensionRegistry } from './extensions/registry.js';
|
|
41
41
|
export { createDefaultRegistry } from './extensions/default-registry.js';
|
|
42
42
|
export { validateDeploymentManifest, collectManifestSecretRefs, DEPLOYMENT_MANIFEST_JSON_SCHEMA, } from './manifest/deployment-manifest.js';
|
|
@@ -80,6 +80,15 @@ export interface TraceNormalizationSummary {
|
|
|
80
80
|
* that the API enforced it). Per-attempt: a retry-configured step's evidence array can carry a
|
|
81
81
|
* different value per attempt. `requested` is always `true` when this object is present at all —
|
|
82
82
|
* it exists ONLY on a step that declared `structured_output: 'strict'`.
|
|
83
|
+
*
|
|
84
|
+
* SCOPE (issue #311 truth pass): every field on this object EXCEPT `tool_args` describes ONE
|
|
85
|
+
* dimension — the step's own OUTPUT request (the submit tool realm sends for the step's answer).
|
|
86
|
+
* That was the only dimension #236 shipped, so the original wording did not need to say so;
|
|
87
|
+
* it does now. `tool_args` describes the independent TOOL-ARGUMENTS dimension, and the two
|
|
88
|
+
* legitimately disagree on the same attempt: a tools-bearing step is permanently
|
|
89
|
+
* `sent: false` / `unsupported_context_tools` at the OUTPUT level while simultaneously carrying
|
|
90
|
+
* genuine per-tool `strict_sent: true` entries under `tool_args`. When reading a single field,
|
|
91
|
+
* check which dimension it belongs to before concluding "strict was off".
|
|
83
92
|
*/
|
|
84
93
|
export interface StructuredOutputMeta {
|
|
85
94
|
/** Always `true` — this object's mere presence already implies it; kept explicit so a reader
|
|
@@ -92,8 +101,16 @@ export interface StructuredOutputMeta {
|
|
|
92
101
|
* `{requested: true, sent: false, downgrade_reason: 'external_agent'}` verbatim. */
|
|
93
102
|
sent?: boolean;
|
|
94
103
|
/** Caveat codes from `assessStructuredOutputEligibility`'s `eligible_with_caveats` verdict —
|
|
95
|
-
* present
|
|
96
|
-
* attempt
|
|
104
|
+
* present whenever the Phase-B eligibility verdict carried them, REGARDLESS of what the live
|
|
105
|
+
* attempt then did (issue #332 correction: the mint is right, this doc was wrong). The verdict
|
|
106
|
+
* is computed once, at eligibility time (run-agent.ts:498-502), and its caveats are spread
|
|
107
|
+
* onto the meta unconditionally (run-agent.ts:690-695) — including onto a `sent: false` meta
|
|
108
|
+
* when the schema passed eligibility but the LIVE call then downgraded (a 400/503). `caveats`
|
|
109
|
+
* therefore records an eligibility-time fact about the SCHEMA; `sent`/`downgrade_reason`
|
|
110
|
+
* record the ATTEMPT's own outcome — the two can legitimately co-occur, and a reader
|
|
111
|
+
* disambiguates via the co-present fields, never via caveats' mere presence. Never present on
|
|
112
|
+
* a `gate_ineligible`/`external_agent` attempt (no eligibility verdict with caveats was ever
|
|
113
|
+
* computed for either). */
|
|
97
114
|
caveats?: string[];
|
|
98
115
|
/**
|
|
99
116
|
* Why `sent` is `false` (absent when `sent` is `true`):
|
|
@@ -105,22 +122,143 @@ export interface StructuredOutputMeta {
|
|
|
105
122
|
* - `service_unavailable` — a live 503 that did NOT match the grammar text (a generic overload
|
|
106
123
|
* — fail-safe default label for any non-matching 503).
|
|
107
124
|
* - `provider_unsupported` — the configured LLM provider does not implement `callStepWithMeta`
|
|
108
|
-
* (a third-party `--provider-module` that only implements the base `callStep`).
|
|
109
|
-
*
|
|
110
|
-
*
|
|
125
|
+
* (a third-party `--provider-module` that only implements the base `callStep`). Both in-repo
|
|
126
|
+
* strict-capable providers override it, so at the STEP level this now names third-party
|
|
127
|
+
* modules specifically.
|
|
128
|
+
* - `unsupported_context_tools` — the step declares `tools`, so its OUTPUT is produced on the
|
|
129
|
+
* tools path, where realm sends no grammar-constrained submit call. That is a PER-PROVIDER
|
|
130
|
+
* DESIGN DECISION, not an API limitation: composing a step-output grammar with strict tool
|
|
131
|
+
* arguments in one request is unprobed on both providers, and doing it blind would make a
|
|
132
|
+
* 400 impossible to attribute to the right dimension. A future version wanting it starts
|
|
133
|
+
* with the probe. Issue #311 truth pass: this no
|
|
134
|
+
* longer means "strict is unsupported on this step" — strict may well have been attached to
|
|
135
|
+
* that step's TOOL-CALL ARGUMENTS on the very same attempt (see `tool_args`). It means only
|
|
136
|
+
* that the step's own output was not grammar-constrained.
|
|
111
137
|
* - `external_agent` — the step declared `structured_output: 'strict'` but was driven by
|
|
112
138
|
* something other than `realm agent` (e.g. an external agent calling `execute_step` over
|
|
113
139
|
* MCP directly) — no `stepMeta.structuredOutput` was ever attached, so realm cannot know
|
|
114
140
|
* whether strict was honored at all.
|
|
115
|
-
|
|
116
|
-
|
|
141
|
+
* - `compat_endpoint` (issue #313) — the provider is pointed at an OpenAI-COMPATIBLE endpoint
|
|
142
|
+
* via `--base-url`, and the author has not attested that it enforces strict. Realm declines
|
|
143
|
+
* to send strict rather than send it into an endpoint that may accept and ignore it. The
|
|
144
|
+
* remedy is `--strict-base-url` (an author attestation) or a native endpoint. Unlike
|
|
145
|
+
* `external_agent`, this is realm's own CHOICE, which is why the run-health finding
|
|
146
|
+
* includes it.
|
|
147
|
+
*/
|
|
148
|
+
downgrade_reason?: 'gate_ineligible' | 'api_rejected_schema' | 'grammar_unavailable' | 'service_unavailable' | 'provider_unsupported' | 'unsupported_context_tools' | 'external_agent' | 'compat_endpoint';
|
|
117
149
|
/** The raw API error message, when a live 400/503 drove a downgrade — attached verbatim,
|
|
118
|
-
* never rewritten, so an operator can compare against
|
|
150
|
+
* never rewritten, so an operator can compare against the provider's own documented error text. */
|
|
119
151
|
api_message?: string;
|
|
152
|
+
/**
|
|
153
|
+
* Issue #313 — the provider's own machine-readable error fields, captured VERBATIM alongside
|
|
154
|
+
* `api_message` when a live 400 drove a downgrade. `null` is meaningful and preserved: OpenAI
|
|
155
|
+
* returns `param: null, code: null` for the model-unsupported class (probe P8), where the
|
|
156
|
+
* message is prose-only. Realm never KEYS any decision on these — they are capture-only, for
|
|
157
|
+
* an operator comparing against the provider's documented error taxonomy.
|
|
158
|
+
*/
|
|
159
|
+
api_param?: string | null;
|
|
160
|
+
api_code?: string | null;
|
|
161
|
+
/**
|
|
162
|
+
* Issue #313 — which provider produced this attempt. Minted at a single run-agent chokepoint,
|
|
163
|
+
* so every meta run-agent writes carries it.
|
|
164
|
+
*
|
|
165
|
+
* The open `module:${string}` member names a third-party `--provider-module` by its module
|
|
166
|
+
* basename: such providers are assessed under the ANTHROPIC rule profile (realm cannot know a
|
|
167
|
+
* module's strict dialect), and this field is what makes that assumption detectable if the
|
|
168
|
+
* module in fact targets a different API.
|
|
169
|
+
*
|
|
170
|
+
* BY CONSTRUCTION absent on the engine's synthesized `external_agent` stamps: realm did not
|
|
171
|
+
* drive those attempts, so it has no provider to name.
|
|
172
|
+
*/
|
|
173
|
+
provider?: 'anthropic' | 'openai' | 'openai-reasoning' | `module:${string}`;
|
|
120
174
|
/** Whether the model's output arrived via the submit tool (`tool_use.input`, pre-parsed) or as
|
|
121
175
|
* extracted text — the standing dodge detector (design record R-B): a schema shaped to make
|
|
122
176
|
* the model prefer a text answer over the strict-constrained tool would show up here. */
|
|
123
177
|
submission_channel?: 'tool' | 'text';
|
|
178
|
+
/**
|
|
179
|
+
* Issue #311 — the TOOL-ARGUMENTS dimension. Present only on a `structured_output: 'strict'`
|
|
180
|
+
* step that ran the tools path with at least one declared tool.
|
|
181
|
+
*
|
|
182
|
+
* Read this alongside the step-level fields above, which describe a DIFFERENT question. The
|
|
183
|
+
* step-level `sent`/`downgrade_reason` answer "did realm grammar-constrain this step's own
|
|
184
|
+
* OUTPUT?" — on the tools path that answer is permanently no (`unsupported_context_tools`),
|
|
185
|
+
* because the step's output still arrives through the unconstrained submit/extraction path.
|
|
186
|
+
* `tool_args` answers "did realm grammar-constrain the ARGUMENTS realm's model passes to each
|
|
187
|
+
* MCP tool?", which on the same attempt can be yes for some tools and no for others. The two
|
|
188
|
+
* co-occur by design; neither supersedes the other.
|
|
189
|
+
*
|
|
190
|
+
* Enforcement caveat: a strict grammar constrains what the model can EMIT. There is no Ajv on
|
|
191
|
+
* the tools path — realm does not post-hoc validate tool arguments — so for any tool that
|
|
192
|
+
* rides unconstrained, enforcement falls entirely to the MCP server at call time. Strict's
|
|
193
|
+
* guarantee also covers tool-NAME selection, not arguments alone.
|
|
194
|
+
*
|
|
195
|
+
* One entry per DECLARED tool, in declared order, whether or not strict was attached to it.
|
|
196
|
+
*/
|
|
197
|
+
tool_args?: {
|
|
198
|
+
tools: Array<{
|
|
199
|
+
/** The bare tool name as declared by the MCP server (the wire name). */
|
|
200
|
+
name: string;
|
|
201
|
+
/** Always `true` — present iff this entry exists (house style, mirroring `requested`). */
|
|
202
|
+
strict_requested: true;
|
|
203
|
+
/** Whether realm placed `strict: true` on THIS tool in the request it handed to the SDK —
|
|
204
|
+
* the FINAL posture of the attempt (a mid-attempt drop rewrites this to `false`). Same
|
|
205
|
+
* observables-only discipline as `sent`: never a claim that the API honored it. */
|
|
206
|
+
strict_sent: boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Why strict was not attached (or was dropped). Plural — codes co-occur. Values are the
|
|
209
|
+
* verdict codes from `assessStructuredOutputEligibility` verbatim
|
|
210
|
+
* (`no_schema` | `missing_additional_properties` | `unsupported_keyword` |
|
|
211
|
+
* `too_many_optionals` | `too_many_unions` | `unsupported_context_tools`), plus these
|
|
212
|
+
* non-verdict literals:
|
|
213
|
+
* - `budget_excluded` — eligible, but the API's per-request limits (≤20 strict tools,
|
|
214
|
+
* ≤24 summed optional properties) were already spent by earlier declared tools.
|
|
215
|
+
* - `api_rejected_schema` — a live 400 on a strict-carrying request dropped strict for
|
|
216
|
+
* this step's tools.
|
|
217
|
+
* - `grammar_unavailable` — a live 503 matching the grammar-compilation-unavailable text.
|
|
218
|
+
* - `service_unavailable` — a live 503 that did not match it (fail-safe generic label).
|
|
219
|
+
* - `provider_unsupported` — the configured provider does not place per-tool strict on the
|
|
220
|
+
* wire at all, so strict was never attached to ANY tool on this attempt and no per-tool
|
|
221
|
+
* eligibility was assessed. Since issue #313 both in-repo tool-capable providers DO place
|
|
222
|
+
* it, so at the per-tool level this now names third-party `--provider-module` providers
|
|
223
|
+
* specifically. Reuses the step-level literal of the same name.
|
|
224
|
+
* - `compat_endpoint` (issue #313) — the provider is pointed at an OpenAI-compatible
|
|
225
|
+
* endpoint without the `--strict-base-url` attestation, so no tool was sent strict. An
|
|
226
|
+
* ENDPOINT fact, never conflated with `provider_unsupported`: this provider CAN place the
|
|
227
|
+
* marker, realm chose not to have it do so here.
|
|
228
|
+
* - `not_all_required` (issue #313) — an OpenAI-profile verdict code: a property outside
|
|
229
|
+
* `required`. Reached on the tools path whenever an OpenAI-driven step assesses a tool
|
|
230
|
+
* schema; it is the dominant per-tool ineligibility code on that profile.
|
|
231
|
+
* - `exceeds_provider_limit` (issue #313) — an OpenAI-profile verdict code: the schema
|
|
232
|
+
* exceeds a documented size limit (nesting depth, property count, total characters, or
|
|
233
|
+
* enum values). The specific limit and measured value are in the verdict's remediation.
|
|
234
|
+
*/
|
|
235
|
+
reasons?: string[];
|
|
236
|
+
/** Caveat codes from this tool's own eligibility verdict (e.g. `unenforced_keyword`,
|
|
237
|
+
* `optional_emission`) — an eligibility-time fact about the tool's schema, independent of
|
|
238
|
+
* what the live attempt then did. */
|
|
239
|
+
caveats?: string[];
|
|
240
|
+
}>;
|
|
241
|
+
/**
|
|
242
|
+
* Present only when a live 400/503 dropped strict PART-WAY THROUGH this attempt. Absent on
|
|
243
|
+
* an attempt that never attached strict at all — including every attempt after a sticky 400
|
|
244
|
+
* (there was no drop to describe; the tools simply started unconstrained).
|
|
245
|
+
*/
|
|
246
|
+
dropped_mid_attempt?: {
|
|
247
|
+
/** `api_rejected_schema` | `grammar_unavailable` | `service_unavailable`. */
|
|
248
|
+
reason: string;
|
|
249
|
+
/** The raw API error message, verbatim. Lives HERE, never on the step-level
|
|
250
|
+
* `api_message` — that field describes the step-output dimension only. */
|
|
251
|
+
api_message?: string;
|
|
252
|
+
/** Issue #313 — the provider's machine-readable error fields, captured verbatim beside
|
|
253
|
+
* `api_message` (same capture-only, never-keyed discipline as the step-level pair).
|
|
254
|
+
* Minted by the OpenAI tools ladder; `null` is preserved and meaningful. */
|
|
255
|
+
api_param?: string | null;
|
|
256
|
+
api_code?: string | null;
|
|
257
|
+
/** How many strict-decorated requests returned 200 before the drop. `0` means the very
|
|
258
|
+
* first strict-carrying turn of this attempt was rejected. */
|
|
259
|
+
strict_turns_before_drop: number;
|
|
260
|
+
};
|
|
261
|
+
};
|
|
124
262
|
}
|
|
125
263
|
/** Diagnostic metadata captured during step execution. Written once; read by inspect. */
|
|
126
264
|
export interface StepDiagnostics {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../../src/types/run-record.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACrE;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CACzD;AAED,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gCAAgC,EAAE,MAAM,CAAC;IACzC,0BAA0B,EAAE,MAAM,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IACjD,4EAA4E;IAC5E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,gHAAgH;IAChH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;;;;OAeG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;;OAQG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;OAOG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED
|
|
1
|
+
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../../src/types/run-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,62 @@
|
|
|
1
1
|
import type { JsonSchema, StepDefinition } from '../types/workflow-definition.js';
|
|
2
2
|
/** A single ineligibility reason. `remediation` is author-grade — it names the exact fix. */
|
|
3
3
|
export interface StructuredOutputReason {
|
|
4
|
-
code: 'no_schema' | 'missing_additional_properties' | 'unsupported_keyword' | 'too_many_optionals' | 'too_many_unions' | 'unsupported_context_tools';
|
|
4
|
+
code: 'no_schema' | 'missing_additional_properties' | 'unsupported_keyword' | 'too_many_optionals' | 'too_many_unions' | 'unsupported_context_tools' | 'not_all_required' | 'exceeds_provider_limit';
|
|
5
5
|
/** Schema-relative path to the offending node (`''` = root; e.g. `properties.address`). */
|
|
6
6
|
path: string;
|
|
7
7
|
remediation: string;
|
|
8
8
|
}
|
|
9
9
|
/** A caveat: the schema is eligible, but this feature is enforced post-hoc by realm (Ajv), not
|
|
10
|
-
* by the grammar itself — silently ignored or rejected by the API either way.
|
|
10
|
+
* by the grammar itself — silently ignored or rejected by the API either way.
|
|
11
|
+
*
|
|
12
|
+
* Issue #311: `tools_runtime_assessed` is the Phase-A nudge row for a strict-declared,
|
|
13
|
+
* tools-bearing step. It is a CAVEAT code, never a WarningCode — a new WarningCode would
|
|
14
|
+
* auto-fail `validate --strict` (validate.ts's own rail), which would turn an informational
|
|
15
|
+
* nudge into a build break. */
|
|
11
16
|
export interface StructuredOutputCaveat {
|
|
12
|
-
code: 'unenforced_keyword' | 'unenforced_format' | 'unenforced_pattern' | 'optional_emission';
|
|
17
|
+
code: 'unenforced_keyword' | 'unenforced_format' | 'unenforced_pattern' | 'optional_emission' | 'tools_runtime_assessed' | 'null_union_emission';
|
|
13
18
|
path: string;
|
|
14
19
|
remediation: string;
|
|
15
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Issue #313: which PROVIDER's strict rules to assess against. Phase A (authoring) is
|
|
23
|
+
* deliberately provider-blind — it cannot know the drive-time provider — so this is a Phase-B
|
|
24
|
+
* concern only, and it defaults to `'anthropic'`, making every pre-#313 call site zero-diff.
|
|
25
|
+
*
|
|
26
|
+
* The two profiles are NOT subset-related: OpenAI's keyword allowlist is WIDER (pattern, format,
|
|
27
|
+
* numeric bounds, minLength and recursion are all first-class), while its structural rules are
|
|
28
|
+
* STRICTER (every property must be required). Only the enumerated rows below fork; every other
|
|
29
|
+
* #236 rule applies unchanged under both.
|
|
30
|
+
*/
|
|
31
|
+
export type StructuredOutputProfile = 'anthropic' | 'openai';
|
|
32
|
+
/**
|
|
33
|
+
* Issue #311: which subject this assessment is about. Default (`step_output`) is the #236
|
|
34
|
+
* behaviour — the step's own output schema, which realm DOES post-hoc validate with Ajv.
|
|
35
|
+
* `tool_args` assesses a third-party MCP tool's `inputSchema` for per-tool strict attachment;
|
|
36
|
+
* there is NO Ajv on the tools path, so enforcement-class caveats must not claim realm enforces
|
|
37
|
+
* anything, and every remediation's fix-owner is the MCP SERVER, never the workflow author.
|
|
38
|
+
*/
|
|
39
|
+
export type StructuredOutputSubject = 'step_output' | 'tool_args';
|
|
40
|
+
/**
|
|
41
|
+
* Issue #311: `optional_count` is the walk's own optional-property tally, exported so the
|
|
42
|
+
* per-tool budget walk (run-agent.ts) can sum optionals across strict-attached tools against the
|
|
43
|
+
* API's 24 limit without re-walking each schema. Present IFF the schema walk actually ran — the
|
|
44
|
+
* short-circuit arms (G0 no-schema/non-object root, Phase-B G6, and the Phase-A
|
|
45
|
+
* `tools_runtime_assessed` row) return before any counting, so the field is absent there rather
|
|
46
|
+
* than falsely reporting 0.
|
|
47
|
+
*/
|
|
16
48
|
export type StructuredOutputVerdict = {
|
|
17
49
|
verdict: 'eligible';
|
|
50
|
+
optional_count?: number;
|
|
18
51
|
} | {
|
|
19
52
|
verdict: 'eligible_with_caveats';
|
|
20
53
|
caveats: StructuredOutputCaveat[];
|
|
54
|
+
optional_count?: number;
|
|
21
55
|
} | {
|
|
22
56
|
verdict: 'ineligible';
|
|
23
57
|
reasons: StructuredOutputReason[];
|
|
24
58
|
caveats?: StructuredOutputCaveat[];
|
|
59
|
+
optional_count?: number;
|
|
25
60
|
};
|
|
26
61
|
/**
|
|
27
62
|
* Phase A entry: the step definition itself — the effective-schema collapse
|
|
@@ -39,6 +74,13 @@ type PhaseAInput = Pick<StepDefinition, 'output_schema' | 'input_schema' | 'tool
|
|
|
39
74
|
interface PhaseBInput {
|
|
40
75
|
schema: unknown;
|
|
41
76
|
tools: boolean;
|
|
77
|
+
/** Issue #311: `tool_args` forks the remediation vocabulary (fix-owner = the MCP server) and
|
|
78
|
+
* the enforcement-class caveat text (no Ajv on the tools path). Default `step_output`. */
|
|
79
|
+
subject?: StructuredOutputSubject;
|
|
80
|
+
/** Issue #313: which provider's strict RULES to assess against. Default `anthropic` — every
|
|
81
|
+
* pre-#313 call site is therefore byte-identical. Phase A never passes this (authoring is
|
|
82
|
+
* provider-blind by design); only the drive-time Phase-B call knows the provider. */
|
|
83
|
+
profile?: StructuredOutputProfile;
|
|
42
84
|
}
|
|
43
85
|
/**
|
|
44
86
|
* G2 keyword allowlist — snapshot-dated 2026-08-05, CONTENTS transcribed verbatim from the
|
|
@@ -49,6 +91,8 @@ interface PhaseBInput {
|
|
|
49
91
|
* this comment is a direct transcription:
|
|
50
92
|
* "All basic types: object, array, string, integer, number, boolean, null" (the `type` keyword)
|
|
51
93
|
* `enum` · `const` · `anyOf` and `allOf` · `$ref`, `$def`, and `definitions` · `default` ·
|
|
94
|
+
* ^ `$def` (singular) is transcribed VERBATIM from Anthropic's own list — see the entry's own
|
|
95
|
+
* comment below; it is not a typo in this file.
|
|
52
96
|
* `required` and `additionalProperties` · string `format` (10 values — gated separately, G4) ·
|
|
53
97
|
* array `minItems`.
|
|
54
98
|
* A keyword present on a schema node but absent from this set is NOT necessarily rejected by the
|
|
@@ -67,7 +111,10 @@ export declare const STRICT_SUPPORTED_KEYWORDS: Set<string>;
|
|
|
67
111
|
* incl. root `$ref:'#'`, external `$ref`, complex enum members) ⇒ ineligible; any other
|
|
68
112
|
* off-allowlist keyword ⇒ caveat · G3 >24 optional properties / >16 union-typed ⇒ ineligible ·
|
|
69
113
|
* G4 unsupported `format` value ⇒ caveat · G5 `pattern` present ⇒ caveat · G6 `tools`-bearing
|
|
70
|
-
* step ⇒
|
|
114
|
+
* step ⇒ checked FIRST, short-circuits everything else, and FORKS BY PHASE (issue #311):
|
|
115
|
+
* Phase A ⇒ caveat `tools_runtime_assessed` (strict applies to tool-call arguments, assessed
|
|
116
|
+
* per tool at runtime), Phase B ⇒ ineligible `unsupported_context_tools` (the step's own
|
|
117
|
+
* output is still never grammar-constrained on the tools fork) · G7' (Amendment 2) ANY
|
|
71
118
|
* optional properties on an otherwise-eligible schema ⇒ caveat `optional_emission` (strict
|
|
72
119
|
* measurably suppresses optional-field emission — see the benchmark cited in the docs section;
|
|
73
120
|
* the remedy is making consumer-load-bearing fields `required`).
|
|
@@ -76,6 +123,8 @@ export declare function assessStructuredOutputEligibility(input: PhaseAInput | P
|
|
|
76
123
|
/** Renders a step's structured_output declaration into a plain-English author message, combining
|
|
77
124
|
* every reason's own remediation (`; `-joined) — the shared formatter both the loader's typed
|
|
78
125
|
* error and create_workflow's PRE-register rejection use, so the two surfaces never drift. */
|
|
79
|
-
export declare function renderIneligibleMessage(reasons:
|
|
126
|
+
export declare function renderIneligibleMessage(reasons: Array<{
|
|
127
|
+
remediation: string;
|
|
128
|
+
}>): string;
|
|
80
129
|
export type { JsonSchema };
|
|
81
130
|
//# sourceMappingURL=structured-output-eligibility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-output-eligibility.d.ts","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAElF,6FAA6F;AAC7F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EACA,WAAW,GACX,+BAA+B,GAC/B,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"structured-output-eligibility.d.ts","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAElF,6FAA6F;AAC7F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EACA,WAAW,GACX,+BAA+B,GAC/B,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,2BAA2B,GAI3B,kBAAkB,GAKlB,wBAAwB,CAAC;IAC7B,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;gCAMgC;AAChC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EACA,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,wBAAwB,GAIxB,qBAAqB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,WAAW,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD;IACE,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAGD;IACE,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN;;;;;;GAMG;AACH,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC;AAEpF;;;;GAIG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf;+FAC2F;IAC3F,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC;;0FAEsF;IACtF,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,yBAAyB,aAyBpC,CAAC;AA4aH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,WAAW,GAAG,WAAW,GAC/B,uBAAuB,CAqMzB;AAED;;+FAE+F;AAK/F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAEvF;AAID,YAAY,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -10,6 +10,8 @@ function isPhaseB(input) {
|
|
|
10
10
|
* this comment is a direct transcription:
|
|
11
11
|
* "All basic types: object, array, string, integer, number, boolean, null" (the `type` keyword)
|
|
12
12
|
* `enum` · `const` · `anyOf` and `allOf` · `$ref`, `$def`, and `definitions` · `default` ·
|
|
13
|
+
* ^ `$def` (singular) is transcribed VERBATIM from Anthropic's own list — see the entry's own
|
|
14
|
+
* comment below; it is not a typo in this file.
|
|
13
15
|
* `required` and `additionalProperties` · string `format` (10 values — gated separately, G4) ·
|
|
14
16
|
* array `minItems`.
|
|
15
17
|
* A keyword present on a schema node but absent from this set is NOT necessarily rejected by the
|
|
@@ -28,6 +30,13 @@ export const STRICT_SUPPORTED_KEYWORDS = new Set([
|
|
|
28
30
|
'anyOf',
|
|
29
31
|
'allOf',
|
|
30
32
|
'$ref',
|
|
33
|
+
// Issue #311 ride-along (ledger R7), re-verified against Anthropic's CURRENT published docs on
|
|
34
|
+
// 2026-08-16: the source list still reads "`$ref`, `$def`, and `definitions`" — `$def`
|
|
35
|
+
// SINGULAR, with no `$defs` anywhere in the document. This entry therefore transcribes upstream
|
|
36
|
+
// faithfully (upstream's own apparent typo — JSON Schema's real keyword is `$defs`), which is
|
|
37
|
+
// why it is kept rather than "corrected". It is inert either way: the real `$defs` key is
|
|
38
|
+
// handled STRUCTURALLY by NON_KEYWORD_KEYS below, so it never reaches this allowlist at all.
|
|
39
|
+
// Dead but harmless — do not delete it as dead code without re-reading the upstream list.
|
|
31
40
|
'$def',
|
|
32
41
|
'definitions',
|
|
33
42
|
'default',
|
|
@@ -54,6 +63,122 @@ const SUPPORTED_FORMATS = new Set([
|
|
|
54
63
|
const OWN_ROW_KEYWORDS = new Set(['format', 'pattern']);
|
|
55
64
|
/** Keys that are never schema keywords themselves — traversal structure, not gate subjects. */
|
|
56
65
|
const NON_KEYWORD_KEYS = new Set(['properties', 'items', '$defs', 'definitions']);
|
|
66
|
+
/**
|
|
67
|
+
* Issue #313 — the OpenAI profile's keyword allowlist. WIDER than Anthropic's: every keyword
|
|
68
|
+
* Anthropic hard-rejects or silently ignores in the numeric/string-constraint family is
|
|
69
|
+
* first-class here, and `$ref` recursion is supported outright.
|
|
70
|
+
*
|
|
71
|
+
* Provenance (api-facts-lane + MA-executed probes, 2026-08-16): the docs were wrong in BOTH
|
|
72
|
+
* directions for both vendors, so acceptance is probe-anchored, never docs-derived. P2 in
|
|
73
|
+
* particular FLIPPED the expectation — `minLength` is accepted AND enforced (a 2-char answer
|
|
74
|
+
* came back padded to exactly 10 characters: the constrained-decoding signature), the exact
|
|
75
|
+
* opposite of Anthropic's live-proven accept-and-ignore of the same keyword.
|
|
76
|
+
*/
|
|
77
|
+
const OPENAI_SUPPORTED_KEYWORDS = new Set([
|
|
78
|
+
// structural
|
|
79
|
+
'type',
|
|
80
|
+
'properties',
|
|
81
|
+
'items',
|
|
82
|
+
'description',
|
|
83
|
+
'title',
|
|
84
|
+
'required',
|
|
85
|
+
'additionalProperties',
|
|
86
|
+
'$ref',
|
|
87
|
+
'$defs',
|
|
88
|
+
'definitions',
|
|
89
|
+
'default',
|
|
90
|
+
// value constraints — all first-class under OpenAI strict
|
|
91
|
+
'enum',
|
|
92
|
+
'const',
|
|
93
|
+
'anyOf',
|
|
94
|
+
'pattern',
|
|
95
|
+
'format',
|
|
96
|
+
'minLength',
|
|
97
|
+
'maxLength',
|
|
98
|
+
'minimum',
|
|
99
|
+
'maximum',
|
|
100
|
+
'exclusiveMinimum',
|
|
101
|
+
'exclusiveMaximum',
|
|
102
|
+
'multipleOf',
|
|
103
|
+
'minItems',
|
|
104
|
+
'maxItems',
|
|
105
|
+
]);
|
|
106
|
+
/**
|
|
107
|
+
* Issue #313 — the OpenAI profile's HARD rejection set, with PER-MEMBER provenance labels
|
|
108
|
+
* (final-gate correction 1). Misclassifying a member here costs only the safe json_object
|
|
109
|
+
* fallback — never a falsity — which is why the docs-derived members are kept conservative:
|
|
110
|
+
*
|
|
111
|
+
* - `allOf` — 400-EXECUTED (probe P3a: "In context=('properties','x'), 'allOf' is
|
|
112
|
+
* not permitted", param=response_format).
|
|
113
|
+
* - `not` — 400-EXECUTED ("Unsupported keywords ('not',)").
|
|
114
|
+
* - `dependentRequired` — 400-EXECUTED (the keyword is named in the message).
|
|
115
|
+
* - `dependentSchemas` — 400-EXECUTED (the keyword is named in the message).
|
|
116
|
+
* - `if` / `then` / `else` — 400-EXECUTED (fires for if/then AND if/then/else).
|
|
117
|
+
*
|
|
118
|
+
* END STATE: every member is executed against the live API, each 400 naming its own keyword. The
|
|
119
|
+
* class posture (reject-on-unsupported, rather than Anthropic's silent strip) therefore no longer
|
|
120
|
+
* rests on a single confirmed member. This matters because the failure direction is asymmetric: a
|
|
121
|
+
* keyword wrongly present here would cost a SILENT capability loss (fallback to json_object with
|
|
122
|
+
* nobody told), whereas one wrongly absent is caught loudly by the live 400 arm. Adding a member
|
|
123
|
+
* on documentation alone would re-open that hazard — probe first.
|
|
124
|
+
*/
|
|
125
|
+
const OPENAI_UNSUPPORTED_KEYWORDS = new Set([
|
|
126
|
+
'allOf',
|
|
127
|
+
'not',
|
|
128
|
+
'dependentRequired',
|
|
129
|
+
'dependentSchemas',
|
|
130
|
+
'if',
|
|
131
|
+
'then',
|
|
132
|
+
'else',
|
|
133
|
+
]);
|
|
134
|
+
/**
|
|
135
|
+
* Issue #313 — OpenAI's schema size limits, with PER-MEMBER PROVENANCE LABELS (the same
|
|
136
|
+
* discipline the keyword sets above carry, for the same reason: two of these four were executed
|
|
137
|
+
* against the live API and two were read off documentation that has already been wrong in both
|
|
138
|
+
* directions for both vendors).
|
|
139
|
+
*
|
|
140
|
+
* Misclassification cost is asymmetric and worth stating: a limit set too LOW silently withholds
|
|
141
|
+
* strict from a schema the API would have accepted (no error, no signal — the exact class this
|
|
142
|
+
* issue exists to remove), while a limit set too HIGH simply lets the request go and be caught by
|
|
143
|
+
* the live 400 arm, which drops strict, retries, and discloses. That is why the two unprobed
|
|
144
|
+
* members are kept at their documented values rather than tightened defensively.
|
|
145
|
+
*/
|
|
146
|
+
const OPENAI_LIMITS = {
|
|
147
|
+
/** Nesting depth. BOUNDARY-EXECUTED: depth 10 ⇒ 200, depth 11 ⇒ 400 ("11 levels of nesting
|
|
148
|
+
* exceeds limit of 10"). Measured in OBJECT nesting levels — see walkNode. */
|
|
149
|
+
maxDepth: 10,
|
|
150
|
+
/** Total properties across the schema. BOUNDARY-EXECUTED both sides: 5000 ⇒ 200, 5001 ⇒ 400
|
|
151
|
+
* ("5001 parameters exceeds limit of 5000"). */
|
|
152
|
+
maxProperties: 5000,
|
|
153
|
+
/** Total characters across property names, enum values and const values.
|
|
154
|
+
* DOCS-DERIVED-CONSERVATIVE for the 120k figure itself — no exact-boundary cell was
|
|
155
|
+
* constructed. The COUNTED SET, however, is executed fact: descriptions are PROVEN excluded
|
|
156
|
+
* (~135k of description text behind tiny names/enums ⇒ 200), which is why they are not
|
|
157
|
+
* counted here. */
|
|
158
|
+
maxChars: 120_000,
|
|
159
|
+
/** Values in a single enum. BOUNDARY-EXECUTED: 1000 ⇒ 200, 1001 ⇒ 400 (the error names the
|
|
160
|
+
* limit and the received count). */
|
|
161
|
+
maxEnumValues: 1000,
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Issue #311: the enforcement-class clause, forked by subject. On the step-output path realm's
|
|
165
|
+
* own Ajv still enforces the keyword after the model answers, so each row keeps its EXISTING
|
|
166
|
+
* wording verbatim (passed in — the two rows word it differently today and both are pinned). On
|
|
167
|
+
* the tools path there is NO Ajv at all — the arguments go straight to the MCP server — so
|
|
168
|
+
* claiming realm enforces them would be a lie; enforcement genuinely falls to the server.
|
|
169
|
+
*/
|
|
170
|
+
function enforcementClause(subject, stepOutputClause) {
|
|
171
|
+
return subject === 'tool_args'
|
|
172
|
+
? 'is not grammar-enforced and NOT post-hoc enforced by realm — enforcement falls to the MCP server at call time'
|
|
173
|
+
: stepOutputClause;
|
|
174
|
+
}
|
|
175
|
+
/** Issue #311: who fixes it. A third-party tool's schema is never the workflow author's to edit,
|
|
176
|
+
* so every tool-args remediation retargets the fix-owner to the publishing MCP server. */
|
|
177
|
+
function fixOwnerHint(subject) {
|
|
178
|
+
return subject === 'tool_args'
|
|
179
|
+
? " (this schema is published by the MCP server — the fix belongs to that server's maintainer, not this workflow)"
|
|
180
|
+
: '';
|
|
181
|
+
}
|
|
57
182
|
function isPlainObject(v) {
|
|
58
183
|
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
59
184
|
}
|
|
@@ -113,20 +238,57 @@ function hasDefsCycle(defs) {
|
|
|
113
238
|
}
|
|
114
239
|
/** Recursively walks one schema node, mutating `ctx` with every G1/G2/G4/G5 finding + the G3
|
|
115
240
|
* optional/union counts. `path` is the schema-relative dotted path to THIS node. */
|
|
116
|
-
function walkNode(node, path, ctx) {
|
|
241
|
+
function walkNode(node, path, ctx, depth = 1) {
|
|
117
242
|
if (!isPlainObject(node))
|
|
118
243
|
return;
|
|
244
|
+
const openai = ctx.profile === 'openai';
|
|
245
|
+
// Depth is measured in OBJECT nesting levels — the unit OpenAI's own limit is stated in. A
|
|
246
|
+
// scalar leaf (`{type: 'string'}`) is a nested schema node but not a nested level, so counting
|
|
247
|
+
// every node would reject at 9 real levels and silently cost strict on schemas the API accepts.
|
|
248
|
+
if ((node['type'] === 'object' || node['properties'] !== undefined) && depth > ctx.maxDepthSeen) {
|
|
249
|
+
ctx.maxDepthSeen = depth;
|
|
250
|
+
}
|
|
251
|
+
// issue #313 (OpenAI hard set): keywords the API rejects outright with a 400. Checked BEFORE
|
|
252
|
+
// the generic allowlist walk so they never degrade to the caveat class.
|
|
253
|
+
if (openai) {
|
|
254
|
+
for (const kw of Object.keys(node)) {
|
|
255
|
+
if (!OPENAI_UNSUPPORTED_KEYWORDS.has(kw))
|
|
256
|
+
continue;
|
|
257
|
+
ctx.hardReasons.push({
|
|
258
|
+
code: 'unsupported_keyword',
|
|
259
|
+
path,
|
|
260
|
+
remediation: `'${kw}' at '${path || '(root)'}' is not supported by OpenAI strict mode and is rejected with a 400 — restructure without it (for '${kw}' inside a composition, express the shape directly or use 'anyOf')${fixOwnerHint(ctx.subject)}`,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// Enum-value cap is per-enum, so it is measured here rather than summed.
|
|
264
|
+
const enumForCap = node['enum'];
|
|
265
|
+
if (Array.isArray(enumForCap) && enumForCap.length > ctx.maxEnumValuesSeen) {
|
|
266
|
+
ctx.maxEnumValuesSeen = enumForCap.length;
|
|
267
|
+
}
|
|
268
|
+
// Character budget: property names + enum values + const values.
|
|
269
|
+
for (const v of Array.isArray(enumForCap) ? enumForCap : []) {
|
|
270
|
+
ctx.charCount += String(v).length;
|
|
271
|
+
}
|
|
272
|
+
if (node['const'] !== undefined)
|
|
273
|
+
ctx.charCount += String(node['const']).length;
|
|
274
|
+
}
|
|
119
275
|
// G2-hard: root self-reference ('#') — the API neither enforces nor cleanly rejects this edge
|
|
120
276
|
// (premise-probe-raw.md §Live-probe: silent-prune when optional, a persistent 503 when
|
|
121
277
|
// required) — it must NEVER fall to the generic caveat class.
|
|
278
|
+
//
|
|
279
|
+
// issue #313: OpenAI supports `$ref` recursion FIRST-CLASS (api-facts lane), so the recursive
|
|
280
|
+
// arm is Anthropic-only. The external-$ref arm applies to BOTH — an unresolvable reference is
|
|
281
|
+
// unresolvable everywhere.
|
|
122
282
|
const ref = node['$ref'];
|
|
123
283
|
if (typeof ref === 'string') {
|
|
124
284
|
if (ref === '#') {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
285
|
+
if (!openai) {
|
|
286
|
+
ctx.hardReasons.push({
|
|
287
|
+
code: 'unsupported_keyword',
|
|
288
|
+
path,
|
|
289
|
+
remediation: `recursive schema at '${path || '(root)'}' ($ref: '#') is not supported — remove the self-reference or restructure without recursion`,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
130
292
|
}
|
|
131
293
|
else if (!ref.startsWith('#')) {
|
|
132
294
|
ctx.hardReasons.push({
|
|
@@ -136,13 +298,17 @@ function walkNode(node, path, ctx) {
|
|
|
136
298
|
});
|
|
137
299
|
}
|
|
138
300
|
}
|
|
139
|
-
// G2-hard: numeric constraints.
|
|
140
|
-
|
|
301
|
+
// G2-hard: numeric constraints. ANTHROPIC ONLY — OpenAI supports the whole numeric-bound
|
|
302
|
+
// family first-class (api-facts lane), so flagging them under 'openai' would reject schemas
|
|
303
|
+
// the API accepts and enforces.
|
|
304
|
+
for (const kw of openai ? [] : ['minimum', 'maximum', 'multipleOf']) {
|
|
141
305
|
if (kw in node) {
|
|
142
306
|
ctx.hardReasons.push({
|
|
143
307
|
code: 'unsupported_keyword',
|
|
144
308
|
path,
|
|
145
|
-
remediation:
|
|
309
|
+
remediation: ctx.subject === 'tool_args'
|
|
310
|
+
? `'${kw}' at '${path || '(root)'}' is not supported by strict mode — this tool rides unconstrained${fixOwnerHint(ctx.subject)}`
|
|
311
|
+
: `'${kw}' at '${path || '(root)'}' is not supported by strict mode — remove it (Ajv still enforces it at submission time) or drop 'structured_output: strict' for this step`,
|
|
146
312
|
});
|
|
147
313
|
}
|
|
148
314
|
}
|
|
@@ -155,21 +321,24 @@ function walkNode(node, path, ctx) {
|
|
|
155
321
|
remediation: `'enum' at '${path || '(root)'}' contains a complex (object/array) member — strict mode only supports string/number/boolean/null enum members`,
|
|
156
322
|
});
|
|
157
323
|
}
|
|
158
|
-
// G4: format.
|
|
159
|
-
|
|
324
|
+
// G4: format. ANTHROPIC ONLY — under OpenAI, `format` is supported and NOT flagged (the
|
|
325
|
+
// profile's deltas are enumerated; inventing a suppression-or-flag beyond them is banned).
|
|
326
|
+
const format = openai ? undefined : node['format'];
|
|
160
327
|
if (typeof format === 'string' && !SUPPORTED_FORMATS.has(format)) {
|
|
161
328
|
ctx.caveats.push({
|
|
162
329
|
code: 'unenforced_format',
|
|
163
330
|
path,
|
|
164
|
-
remediation: `'format: ${format}' at '${path || '(root)'}' is silently ignored or rejected by the API — enforced post-hoc by realm's own validation only`,
|
|
331
|
+
remediation: `'format: ${format}' at '${path || '(root)'}' ${enforcementClause(ctx.subject, "is silently ignored or rejected by the API — enforced post-hoc by realm's own validation only")}${fixOwnerHint(ctx.subject)}`,
|
|
165
332
|
});
|
|
166
333
|
}
|
|
167
|
-
// G5: pattern — always a caveat when present, regardless of regex complexity.
|
|
168
|
-
|
|
334
|
+
// G5: pattern — always a caveat when present, regardless of regex complexity. ANTHROPIC ONLY:
|
|
335
|
+
// OpenAI accepts `pattern` and (P2, INFERRED-strong) genuinely enforces it via constrained
|
|
336
|
+
// decoding, so a "realm enforces this post-hoc, the grammar doesn't" caveat would be false.
|
|
337
|
+
if (!openai && typeof node['pattern'] === 'string') {
|
|
169
338
|
ctx.caveats.push({
|
|
170
339
|
code: 'unenforced_pattern',
|
|
171
340
|
path,
|
|
172
|
-
remediation: `'pattern' at '${path || '(root)'}' is silently ignored or rejected by the API — enforced post-hoc by realm's own validation only`,
|
|
341
|
+
remediation: `'pattern' at '${path || '(root)'}' ${enforcementClause(ctx.subject, "is silently ignored or rejected by the API — enforced post-hoc by realm's own validation only")}${fixOwnerHint(ctx.subject)}`,
|
|
173
342
|
});
|
|
174
343
|
}
|
|
175
344
|
// G2 generic off-allowlist walk — every OTHER key on this node not itself a keyword we already
|
|
@@ -179,7 +348,13 @@ function walkNode(node, path, ctx) {
|
|
|
179
348
|
continue;
|
|
180
349
|
if (key === 'minimum' || key === 'maximum' || key === 'multipleOf' || key === 'enum')
|
|
181
350
|
continue; // already handled (hard or allowlisted)
|
|
182
|
-
|
|
351
|
+
// issue #313: each profile walks its OWN allowlist. Under 'openai' the hard set was already
|
|
352
|
+
// rejected above, so anything still off-allowlist here is the genuine unknown-keyword class.
|
|
353
|
+
if (openai) {
|
|
354
|
+
if (OPENAI_SUPPORTED_KEYWORDS.has(key) || OPENAI_UNSUPPORTED_KEYWORDS.has(key))
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
else if (STRICT_SUPPORTED_KEYWORDS.has(key))
|
|
183
358
|
continue;
|
|
184
359
|
if (ctx.seenUnenforcedKeywords.has(`${path}:${key}`))
|
|
185
360
|
continue;
|
|
@@ -187,7 +362,7 @@ function walkNode(node, path, ctx) {
|
|
|
187
362
|
ctx.caveats.push({
|
|
188
363
|
code: 'unenforced_keyword',
|
|
189
364
|
path,
|
|
190
|
-
remediation: `'${key}' at '${path || '(root)'}' is silently ignored or rejected by the API — either way enforced post-hoc by realm`,
|
|
365
|
+
remediation: `'${key}' at '${path || '(root)'}' ${enforcementClause(ctx.subject, 'is silently ignored or rejected by the API — either way enforced post-hoc by realm')}${fixOwnerHint(ctx.subject)}`,
|
|
191
366
|
});
|
|
192
367
|
}
|
|
193
368
|
// G1: every object (root + nested) must carry explicit additionalProperties: false.
|
|
@@ -196,7 +371,7 @@ function walkNode(node, path, ctx) {
|
|
|
196
371
|
ctx.hardReasons.push({
|
|
197
372
|
code: 'missing_additional_properties',
|
|
198
373
|
path,
|
|
199
|
-
remediation: `add 'additionalProperties: false' at '${path || 'the schema root'}'`,
|
|
374
|
+
remediation: `add 'additionalProperties: false' at '${path || 'the schema root'}'${fixOwnerHint(ctx.subject)}`,
|
|
200
375
|
});
|
|
201
376
|
}
|
|
202
377
|
}
|
|
@@ -209,6 +384,12 @@ function walkNode(node, path, ctx) {
|
|
|
209
384
|
: new Set();
|
|
210
385
|
for (const [propName, propSchema] of Object.entries(properties)) {
|
|
211
386
|
const propPath = joinPath(path, `properties.${propName}`);
|
|
387
|
+
ctx.propertyCount += 1;
|
|
388
|
+
if (openai)
|
|
389
|
+
ctx.charCount += propName.length;
|
|
390
|
+
const isNullUnion = isPlainObject(propSchema) &&
|
|
391
|
+
Array.isArray(propSchema['type']) &&
|
|
392
|
+
propSchema['type'].includes('null');
|
|
212
393
|
if (!required.has(propName)) {
|
|
213
394
|
ctx.optionalCount += 1;
|
|
214
395
|
if (isPlainObject(propSchema) &&
|
|
@@ -216,17 +397,30 @@ function walkNode(node, path, ctx) {
|
|
|
216
397
|
(Array.isArray(propSchema['type']) && propSchema['type'].length > 1))) {
|
|
217
398
|
ctx.unionCount += 1;
|
|
218
399
|
}
|
|
400
|
+
// issue #313 (OpenAI): EVERY property must be listed in `required` — probe-derived, the
|
|
401
|
+
// S1 discriminator isolated it from the additionalProperties rule P1 had conflated it
|
|
402
|
+
// with. The sanctioned way to express "may be absent" is a null union + required.
|
|
403
|
+
if (openai) {
|
|
404
|
+
ctx.hardReasons.push({
|
|
405
|
+
code: 'not_all_required',
|
|
406
|
+
path: propPath,
|
|
407
|
+
remediation: `'${propName}' is not listed in 'required' at '${path || 'the schema root'}' — OpenAI strict requires EVERY property to be required. Add it to 'required'; if it genuinely may be absent, keep it required and widen its type to a null union (e.g. type: ['string', 'null']). Measured (gpt-4o, 24 runs): load-bearing fields stayed filled 24/24 under this rewrite, while a low-salience optional shifted to null 21/24 — so consumers must treat null as equivalent to absent${fixOwnerHint(ctx.subject)}`,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else if (openai && isNullUnion) {
|
|
412
|
+
ctx.nullUnionCount += 1;
|
|
219
413
|
}
|
|
220
|
-
walkNode(propSchema, propPath, ctx);
|
|
414
|
+
walkNode(propSchema, propPath, ctx, depth + 1);
|
|
221
415
|
}
|
|
222
416
|
}
|
|
223
417
|
const items = node['items'];
|
|
224
418
|
if (items !== undefined)
|
|
225
|
-
walkNode(items, joinPath(path, 'items'), ctx);
|
|
419
|
+
walkNode(items, joinPath(path, 'items'), ctx, depth + 1);
|
|
226
420
|
for (const branchKey of ['anyOf', 'allOf']) {
|
|
227
421
|
const branches = node[branchKey];
|
|
228
422
|
if (Array.isArray(branches)) {
|
|
229
|
-
branches.forEach((b, i) => walkNode(b, joinPath(path, `${branchKey}[${i}]`), ctx));
|
|
423
|
+
branches.forEach((b, i) => walkNode(b, joinPath(path, `${branchKey}[${i}]`), ctx, depth + 1));
|
|
230
424
|
}
|
|
231
425
|
}
|
|
232
426
|
for (const defsKey of ['$defs', 'definitions']) {
|
|
@@ -255,7 +449,10 @@ function walkNode(node, path, ctx) {
|
|
|
255
449
|
* incl. root `$ref:'#'`, external `$ref`, complex enum members) ⇒ ineligible; any other
|
|
256
450
|
* off-allowlist keyword ⇒ caveat · G3 >24 optional properties / >16 union-typed ⇒ ineligible ·
|
|
257
451
|
* G4 unsupported `format` value ⇒ caveat · G5 `pattern` present ⇒ caveat · G6 `tools`-bearing
|
|
258
|
-
* step ⇒
|
|
452
|
+
* step ⇒ checked FIRST, short-circuits everything else, and FORKS BY PHASE (issue #311):
|
|
453
|
+
* Phase A ⇒ caveat `tools_runtime_assessed` (strict applies to tool-call arguments, assessed
|
|
454
|
+
* per tool at runtime), Phase B ⇒ ineligible `unsupported_context_tools` (the step's own
|
|
455
|
+
* output is still never grammar-constrained on the tools fork) · G7' (Amendment 2) ANY
|
|
259
456
|
* optional properties on an otherwise-eligible schema ⇒ caveat `optional_emission` (strict
|
|
260
457
|
* measurably suppresses optional-field emission — see the benchmark cited in the docs section;
|
|
261
458
|
* the remedy is making consumer-load-bearing fields `required`).
|
|
@@ -263,18 +460,54 @@ function walkNode(node, path, ctx) {
|
|
|
263
460
|
export function assessStructuredOutputEligibility(input) {
|
|
264
461
|
const phaseB = isPhaseB(input);
|
|
265
462
|
const schema = phaseB ? input.schema : (input.output_schema ?? input.input_schema);
|
|
463
|
+
const subject = phaseB
|
|
464
|
+
? (input.subject ?? 'step_output')
|
|
465
|
+
: 'step_output';
|
|
466
|
+
// Phase A is provider-blind by design (authoring cannot know the drive-time provider), so it
|
|
467
|
+
// always assesses under the default profile — separation in TIME, not a trade-off.
|
|
468
|
+
const profile = phaseB ? (input.profile ?? 'anthropic') : 'anthropic';
|
|
266
469
|
const toolsFlag = phaseB
|
|
267
470
|
? input.tools === true
|
|
268
471
|
: Array.isArray(input.tools) && input.tools.length > 0;
|
|
269
|
-
// G6 — checked FIRST; short-circuits every other row (fixture C8
|
|
472
|
+
// G6 — checked FIRST; short-circuits every other row (fixture C8). Issue #311 forks it BY PHASE:
|
|
473
|
+
//
|
|
474
|
+
// Phase A (authoring: loader/validate/register/create_workflow) now ACCEPTS a strict-declared
|
|
475
|
+
// tools-bearing step with an INFO-channel nudge instead of rejecting it. Strict is real on this
|
|
476
|
+
// fork — it just applies to the TOOL-CALL ARGUMENTS, per third-party tool, assessed at runtime
|
|
477
|
+
// (the tool schemas are not the author's to fix, and are not even known until the MCP servers
|
|
478
|
+
// are contacted). The step's own output stays post-hoc validated (L1), never grammar-
|
|
479
|
+
// constrained. The nudge is a CAVEAT row, never a WarningCode — a new WarningCode would
|
|
480
|
+
// auto-fail `validate --strict` and turn an informational nudge into a build break.
|
|
481
|
+
//
|
|
482
|
+
// The short-circuit is retained deliberately: the step-level output schema is never
|
|
483
|
+
// grammar-constrained on the tools fork, so walking it here would report findings about a
|
|
484
|
+
// schema that is never sent to a grammar — including on the composite cell (strict + tools +
|
|
485
|
+
// an ineligible step-level output_schema), which must NOT reject.
|
|
486
|
+
//
|
|
487
|
+
// Phase B (`tools: true`) keeps the #236 `ineligible` verdict verbatim: it is the RUNTIME
|
|
488
|
+
// step-output question ("may realm grammar-constrain THIS step's output?"), whose answer on a
|
|
489
|
+
// tools-bearing step is still no — that is what the #332 `unsupported_context_tools` mint
|
|
490
|
+
// discloses. It has zero production callers today and stays defensive.
|
|
270
491
|
if (toolsFlag) {
|
|
492
|
+
if (phaseB) {
|
|
493
|
+
return {
|
|
494
|
+
verdict: 'ineligible',
|
|
495
|
+
reasons: [
|
|
496
|
+
{
|
|
497
|
+
code: 'unsupported_context_tools',
|
|
498
|
+
path: '',
|
|
499
|
+
remediation: 'this step declares tools — structured_output: strict is not supported on tools-bearing steps in v1; remove tools or drop structured_output',
|
|
500
|
+
},
|
|
501
|
+
],
|
|
502
|
+
};
|
|
503
|
+
}
|
|
271
504
|
return {
|
|
272
|
-
verdict: '
|
|
273
|
-
|
|
505
|
+
verdict: 'eligible_with_caveats',
|
|
506
|
+
caveats: [
|
|
274
507
|
{
|
|
275
|
-
code: '
|
|
508
|
+
code: 'tools_runtime_assessed',
|
|
276
509
|
path: '',
|
|
277
|
-
remediation: 'this step declares tools —
|
|
510
|
+
remediation: 'this step declares tools — strict applies to tool-call arguments here, not to the step output; tool schemas are third-party and are assessed per tool at runtime (a tool whose schema is not strict-compatible simply rides unconstrained), and this step output stays post-hoc validated by realm',
|
|
278
511
|
},
|
|
279
512
|
],
|
|
280
513
|
};
|
|
@@ -310,27 +543,71 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
310
543
|
optionalCount: 0,
|
|
311
544
|
unionCount: 0,
|
|
312
545
|
seenUnenforcedKeywords: new Set(),
|
|
546
|
+
subject,
|
|
547
|
+
profile,
|
|
548
|
+
maxDepthSeen: 0,
|
|
549
|
+
propertyCount: 0,
|
|
550
|
+
charCount: 0,
|
|
551
|
+
maxEnumValuesSeen: 0,
|
|
552
|
+
nullUnionCount: 0,
|
|
313
553
|
};
|
|
314
554
|
walkNode(schema, '', ctx);
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
555
|
+
// The two size caps below are ANTHROPIC's (G3). OpenAI publishes no strict-count or optional
|
|
556
|
+
// budget at all; its limits are structural size limits, applied instead — see below.
|
|
557
|
+
if (profile === 'anthropic') {
|
|
558
|
+
if (ctx.optionalCount > 24) {
|
|
559
|
+
ctx.hardReasons.push({
|
|
560
|
+
code: 'too_many_optionals',
|
|
561
|
+
path: '',
|
|
562
|
+
remediation: `this schema has ${ctx.optionalCount} optional properties (limit: 24) — reduce the optional-property count or make more fields required`,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
if (ctx.unionCount > 16) {
|
|
566
|
+
ctx.hardReasons.push({
|
|
567
|
+
code: 'too_many_unions',
|
|
568
|
+
path: '',
|
|
569
|
+
remediation: `this schema has ${ctx.unionCount} union-typed properties (limit: 16) — reduce the anyOf/multi-type property count`,
|
|
570
|
+
});
|
|
571
|
+
}
|
|
321
572
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
573
|
+
else {
|
|
574
|
+
// issue #313 — OpenAI's documented size limits (depth boundary and enum-count boundary both
|
|
575
|
+
// executed against the live API; the other two are documented and untested at that scale).
|
|
576
|
+
if (ctx.maxDepthSeen > OPENAI_LIMITS.maxDepth) {
|
|
577
|
+
ctx.hardReasons.push({
|
|
578
|
+
code: 'exceeds_provider_limit',
|
|
579
|
+
path: '',
|
|
580
|
+
remediation: `this schema nests ${ctx.maxDepthSeen} levels deep (OpenAI strict limit: ${OPENAI_LIMITS.maxDepth}) — flatten the deepest branch`,
|
|
581
|
+
});
|
|
582
|
+
}
|
|
583
|
+
if (ctx.propertyCount > OPENAI_LIMITS.maxProperties) {
|
|
584
|
+
ctx.hardReasons.push({
|
|
585
|
+
code: 'exceeds_provider_limit',
|
|
586
|
+
path: '',
|
|
587
|
+
remediation: `this schema declares ${ctx.propertyCount} properties (OpenAI strict limit: ${OPENAI_LIMITS.maxProperties}) — split the schema or drop properties`,
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
if (ctx.charCount > OPENAI_LIMITS.maxChars) {
|
|
591
|
+
ctx.hardReasons.push({
|
|
592
|
+
code: 'exceeds_provider_limit',
|
|
593
|
+
path: '',
|
|
594
|
+
remediation: `this schema's property names, enum values and const values total ${ctx.charCount} characters (OpenAI strict limit: ${OPENAI_LIMITS.maxChars}) — shorten names or reduce enum members`,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
if (ctx.maxEnumValuesSeen > OPENAI_LIMITS.maxEnumValues) {
|
|
598
|
+
ctx.hardReasons.push({
|
|
599
|
+
code: 'exceeds_provider_limit',
|
|
600
|
+
path: '',
|
|
601
|
+
remediation: `an enum in this schema has ${ctx.maxEnumValuesSeen} values (OpenAI strict limit: ${OPENAI_LIMITS.maxEnumValues}) — reduce the enum or model the field as a plain string`,
|
|
602
|
+
});
|
|
603
|
+
}
|
|
328
604
|
}
|
|
329
605
|
if (ctx.hardReasons.length > 0) {
|
|
330
606
|
return {
|
|
331
607
|
verdict: 'ineligible',
|
|
332
608
|
reasons: ctx.hardReasons,
|
|
333
609
|
...(ctx.caveats.length > 0 ? { caveats: ctx.caveats } : {}),
|
|
610
|
+
optional_count: ctx.optionalCount,
|
|
334
611
|
};
|
|
335
612
|
}
|
|
336
613
|
// G7' (Amendment 2): any optional property on an otherwise-eligible schema ⇒ caveat. Measured:
|
|
@@ -338,21 +615,43 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
338
615
|
// (benchmark-raw.md §Run 2) — emission propensity is schema-shape-dependent, so this is a
|
|
339
616
|
// general caveat, not a reasoning-specific rule. The nudge additionally names the
|
|
340
617
|
// reasoning-position instance as the sharpest example (validate.ts).
|
|
341
|
-
|
|
618
|
+
// issue #313: G7' is ANTHROPIC-ONLY. Under OpenAI every property must be required, so a
|
|
619
|
+
// schema that reaches this point has no optionals at all and the omission hazard G7' warns
|
|
620
|
+
// about is structurally impossible. What replaces it is the MEASURED null-propensity of
|
|
621
|
+
// null-union properties — a different hazard needing different words and different numbers.
|
|
622
|
+
if (profile === 'openai' && ctx.nullUnionCount > 0) {
|
|
623
|
+
ctx.caveats.push({
|
|
624
|
+
code: 'null_union_emission',
|
|
625
|
+
path: '',
|
|
626
|
+
remediation: `this schema has ${ctx.nullUnionCount} null-union propert${ctx.nullUnionCount === 1 ? 'y' : 'ies'} (the OpenAI-sanctioned way to say "may be absent"). Measured over 24 real inputs: on gpt-4o a load-bearing field stayed filled 24/24 under strict, while a low-salience field shifted to null 21/24 (on gpt-4o-mini, 3/24 vs its own 2/24 unconstrained omission rate) — so a null here means "the model had nothing to say", not "the field is broken". Consumers MUST treat null as equivalent to absent${fixOwnerHint(ctx.subject)}`,
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
if (profile === 'anthropic' && ctx.optionalCount > 0) {
|
|
342
630
|
ctx.caveats.push({
|
|
343
631
|
code: 'optional_emission',
|
|
344
632
|
path: '',
|
|
345
|
-
|
|
633
|
+
// Issue #311: the G7' propensity text is subject-independent (it is a fact about strict
|
|
634
|
+
// itself, measured on a step-output schema but applying to any grammar-constrained
|
|
635
|
+
// arguments); only the FIX-OWNER retargets on the tools path.
|
|
636
|
+
remediation: `under strict, the model emitted an optional field in 4/24 runs vs 24/24 unconstrained on a measured schema (see docs) — make fields your consumers rely on \`required\`${fixOwnerHint(ctx.subject)}`,
|
|
346
637
|
});
|
|
347
638
|
}
|
|
348
639
|
if (ctx.caveats.length > 0) {
|
|
349
|
-
return {
|
|
640
|
+
return {
|
|
641
|
+
verdict: 'eligible_with_caveats',
|
|
642
|
+
caveats: ctx.caveats,
|
|
643
|
+
optional_count: ctx.optionalCount,
|
|
644
|
+
};
|
|
350
645
|
}
|
|
351
|
-
return { verdict: 'eligible' };
|
|
646
|
+
return { verdict: 'eligible', optional_count: ctx.optionalCount };
|
|
352
647
|
}
|
|
353
648
|
/** Renders a step's structured_output declaration into a plain-English author message, combining
|
|
354
649
|
* every reason's own remediation (`; `-joined) — the shared formatter both the loader's typed
|
|
355
650
|
* error and create_workflow's PRE-register rejection use, so the two surfaces never drift. */
|
|
651
|
+
// Issue #313: the parameter is widened ADDITIVELY to the structural minimum this function has
|
|
652
|
+
// always used, so CAVEATS can feed it too (the drive-time remediation nudge prints for
|
|
653
|
+
// ineligible AND caveated verdicts). Every existing caller passes `StructuredOutputReason[]`,
|
|
654
|
+
// which remains assignable — verified at all three: validate.ts, create-workflow.ts, yaml-loader.ts.
|
|
356
655
|
export function renderIneligibleMessage(reasons) {
|
|
357
656
|
return reasons.map((r) => r.remediation).join('; ');
|
|
358
657
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-output-eligibility.js","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"structured-output-eligibility.js","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"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"}
|