Skip to content

fix(config): allow thinkingLevelMap in persisted model schema#91037

Merged
steipete merged 1 commit into
openclaw:mainfrom
wsyjh8:fix/91011-foundry-thinkinglevelmap-schema
Jun 7, 2026
Merged

fix(config): allow thinkingLevelMap in persisted model schema#91037
steipete merged 1 commit into
openclaw:mainfrom
wsyjh8:fix/91011-foundry-thinkinglevelmap-schema

Conversation

@wsyjh8

@wsyjh8 wsyjh8 commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Microsoft Foundry onboarding with Entra ID failed to persist: writing the
config hit a strict-schema validation error and updateConfig atomically rolled
the whole write back, so onboarding never completed.

models.providers.microsoft-foundry.models.0: Unrecognized key: "thinkingLevelMap"

Root cause — schema drift

thinkingLevelMap is part of the established model contract everywhere except
the persisted zod schema:

Surface Carries thinkingLevelMap? Where
TS type yes ModelDefinitionConfig.thinkingLevelMapsrc/config/types.models.ts
Runtime TypeBox schema yes ThinkingLevelMapSchemasrc/agents/sessions/model-registry.ts
Foundry writer yes (emits it) buildFoundryThinkingLevelMapextensions/microsoft-foundry/shared.ts
Persisted zod schema no ModelDefinitionSchema (.strict()) — src/config/zod-schema.core.ts

The foundry writer's persisted model entry carries thinkingLevelMap (7 keys),
but the strict persisted ModelDefinitionSchema had no such key, so the write
was rejected and rolled back. This is schema drift, not an illegal field — the
runtime normalizeResolvedModel re-adds the field anyway.

Fix

Add an optional thinkingLevelMap to the zod ModelDefinitionSchema, mirroring
the runtime TypeBox schema 1:1: the 7 ModelThinkingLevel keys
(off / minimal / low / medium / high / xhigh / max), values
string | null, with the object kept .strict().

  • The writer (buildFoundryThinkingLevelMap, onModelSelected) and
    normalizeResolvedModel are unchanged — only the persisted schema needed
    to accept the existing field.

Tests

  • Core regressionsrc/config/config.schema-regressions.test.ts:
    • Positive: a foundry-shaped model entry with thinkingLevelMap now passes
      validateConfigObject. This is the assertion that reproduces and would have
      caught the bug.
    • Negative: a thinkingLevelMap key outside ModelThinkingLevel (e.g.
      adaptive) is still rejected — proves .strict() was not loosened to
      passthrough.
  • Extensionextensions/microsoft-foundry/index.test.ts: asserts the real
    writer output (Entra ID + reasoning model) emits only allowed thinkingLevelMap
    keys with string | null values.
    • It deliberately does not call the core validator: extensions/AGENTS.md
      forbids importing src/** from a plugin, so the persisted-validation
      assertion lives in the core test, and the extension side asserts the writer
      output is a subset of the allowed key set.

Real behavior proof (required for external PRs)

Note on affected version: the bug ships in the released 2026.6.1 (npm latest) and the beta channel (2026.6.5-beta.2), not just main — the originally reported version (2026.6.1) was correct. An interim grep of dist/extensions/microsoft-foundry/shared.js returned 0 and briefly suggested 2026.6.1 was unaffected, but that was a bundling artifact: the writer's thinkingLevelMap emission lives in a helper chunk that shared.js only imports. Actually running each shipped build's writer + validator confirms all three are affected (table below).

Build Writer emits thinkingLevelMap? Persisted validator on real output Strip key → ok? Affected?
2026.6.1 (npm latest) yes (7 keys) ok=false @ models.0 ok=true YES
2026.6.5-beta.2 (npm beta) yes (7 keys) ok=false @ models.0 ok=true YES
main @ 4d142b185e (PR parent) yes (shared.ts: 4 matches) ok=false (Unrecognized key: "thinkingLevelMap") n/a YES
  • Behavior or issue addressed: Microsoft Foundry Entra ID onboarding cannot persist. The Foundry writer puts a model entry carrying thinkingLevelMap into the config, but the persisted strict zod ModelDefinitionSchema had no such key, so updateConfig validation fails and atomically rolls the whole write back. Reported error: models.providers.microsoft-foundry.models.0: Unrecognized key: "thinkingLevelMap".

  • Real environment tested: Node v22.22.1, win32 x64 (Windows 10.0.19045).

    • Shipped builds installed from npm to temp dirs and exercised directly: [email protected] (npm latest) and [email protected] (npm beta).
    • BEFORE source baseline: unpatched main at commit 4d142b185e (this PR's parent; contained in tag v2026.6.5-beta.2).
    • AFTER: this PR branch fix/91011-foundry-thinkinglevelmap-schema (60fb8c6bdc).
    • Collision uses the real code path: validateConfigObject (src/config/validation.ts) over the real output of buildFoundryAuthResult (extensions/microsoft-foundry/shared.ts). Nothing hand-edited — all ok values come from the validator.
  • Exact steps or command run after this patch:
    Real Foundry writer output (Entra ID, reasoning model) fed to the real persisted validator, for a given checkout root:

  // proof.mjs (run: node --import tsx proof.mjs )
  const { validateConfigObject } = await import(`${repo}/src/config/validation.ts`);
  const { buildFoundryAuthResult } = await import(`${repo}/extensions/microsoft-foundry/shared.ts`);
  const { configPatch } = buildFoundryAuthResult({
    profileId: "microsoft-foundry:entra", apiKey: "__entra_id_dynamic__",
    endpoint: "https://example.services.ai.azure.com",
    modelId: "gpt-5.1-chat", modelNameHint: "gpt-5.1-chat",
    api: "openai-responses", authMethod: "entra-id",
  });
  console.log(validateConfigObject(configPatch).ok);                 // positive
  // + adaptive-key entry (negative) + writer-keys-subset check

Shipped builds were exercised the same way against their built ESM dist (dist/extensions/microsoft-foundry/shared.js + dist/config/config.js), with a control that removes only thinkingLevelMap.

  • Evidence after fix (console output):
    ===== BEFORE (unpatched main 4d142b1) =====
    writer-emitted thinkingLevelMap: {"off":"none","minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}
    [positive] validateConfigObject(real foundry configPatch).ok = false
    issues: [{"path":"models.providers.microsoft-foundry.models.0","message":"Unrecognized key: "thinkingLevelMap""}]
    [negative] adaptive-key entry .ok = false
    [subset] writer keys = {off,minimal,low,medium,high,xhigh,max} | outOfSet = []
    ===== AFTER (this PR branch) =====
    writer-emitted thinkingLevelMap: {"off":"none","minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}
    [positive] validateConfigObject(real foundry configPatch).ok = true
    [negative] adaptive-key entry .ok = false
    [subset] writer keys = {off,minimal,low,medium,high,xhigh,max} | outOfSet = []
    ===== SHIPPED 2026.6.1 (npm latest) =====
    writer-emitted thinkingLevelMap: {"off":"none","minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}
    [with thinkingLevelMap] ok = false | issues = [{"path":"models.providers.microsoft-foundry.models.0","message":"Invalid input"}]
    [without thinkingLevelMap] ok = true (control: thinkingLevelMap is the sole cause)
    ===== SHIPPED 2026.6.5-beta.2 (npm beta) =====
    writer-emitted thinkingLevelMap: {"off":"none","minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}
    [with thinkingLevelMap] ok = false | issues = [{"path":"models.providers.microsoft-foundry.models.0","message":"Invalid input"}]
    [without thinkingLevelMap] ok = true (control: thinkingLevelMap is the sole cause)

  • Observed result after fix: The real Foundry writer's Entra ID model entry (with the 7-key thinkingLevelMap) is rejected by the unpatched persisted schema (ok=false, the exact Unrecognized key: "thinkingLevelMap" rollback cause) and rejected identically by the shipped 2026.6.1 and 2026.6.5-beta.2 builds (control confirms thinkingLevelMap is the sole cause). With this patch the same entry validates (ok=true), an out-of-set level key (adaptive) is still rejected (ok=false, .strict() preserved), and the writer's emitted keys are a subset of the allowed ModelThinkingLevel set.

  • What was not tested: A full end-to-end live Entra ID / Foundry onboarding run (openclaw models auth login) where updateConfig actually persists to disk and demonstrably does not roll back — that needs a real Azure Foundry endpoint plus Entra (managed identity) credentials, which I don't have.

  • Proof limitations or environment constraints: Because there's no Azure Foundry/Entra environment, I reproduced the bug by colliding the two halves whose mismatch causes the rollback — the real shipped Foundry writer output and the real persisted config validator (the exact pair updateConfig runs) — rather than driving live onboarding. Shipped builds report a generic "Invalid input" (minified-bundle zod formatting); the control (removing only thinkingLevelMap flips ok to true) plus the unpatched-source run (verbatim Unrecognized key: "thinkingLevelMap") jointly pin the cause. Supplemental: this PR's vitest passes — node scripts/run-vitest.mjs extensions/microsoft-foundry/index.test.ts src/config/config.schema-regressions.test.ts src/commands/models/auth.test.ts (config-regressions 34, auth 37, foundry index 41).

  • Before evidence: See the BEFORE, SHIPPED 2026.6.1, and SHIPPED 2026.6.5-beta.2 blocks above — all produced from unpatched/shipped builds, all rejecting the real Foundry writer output.

Generated baseline

docs/.generated/config-baseline.sha256 changed because the new (documented)
schema key alters the generated config-doc baseline. It was regenerated via
pnpm config:docs:gen — the sanctioned step that config:docs:check's own error
message instructs — and is not hand-edited; config:docs:check now passes.

Verification

node scripts/run-vitest.mjs extensions/microsoft-foundry/index.test.ts src/config/config.schema-regressions.test.ts src/commands/models/auth.test.ts

All three files green (config-regressions 34, auth 37, foundry index 41).
auth.test.ts mocks updateConfig, so it does not exercise the real rollback,
but it is included since the schema underpins that write path.

Not done: no live Microsoft Foundry / Entra ID verification (no environment).
Coverage is the schema↔writer alignment proven by the unit tests above.

Closes #91011

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 6, 2026
@clawsweeper

clawsweeper Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 6, 2026, 9:01 PM ET / 01:01 UTC.

Summary
Adds optional strict thinkingLevelMap support to the persisted model zod schema, Foundry/config regression tests, and regenerated config baseline hashes.

PR surface: Source +16, Tests +85, Generated 0. Total +101 across 4 files.

Reproducibility: yes. source-reproducible: current main and v2026.6.1 emit thinkingLevelMap from the Foundry writer while the strict persisted zod model schema lacks that key and config writes validate before persisting. I did not run a live Azure Foundry onboarding flow in this read-only review.

Review metrics: 1 noteworthy metric.

  • Persisted model schema keys: 1 optional key added. The PR changes the accepted on-disk model config shape, so maintainers should verify it matches the existing runtime and provider contract before merge.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] No live Azure Foundry/Entra onboarding run was provided; the available proof isolates the exact writer-plus-validator boundary that causes the rollback.

Maintainer options:

  1. Decide the mitigation before merge
    Land this schema alignment after normal maintainer review and green checks; no broader provider or runtime refactor appears needed for this bug.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • No automated repair is indicated; the PR appears ready for normal maintainer review, checks, and merge handling.

Security
Cleared: The diff only changes a config schema field, focused tests, and generated baseline hashes; I found no concrete security or supply-chain concern.

Review details

Best possible solution:

Land this schema alignment after normal maintainer review and green checks; no broader provider or runtime refactor appears needed for this bug.

Do we have a high-confidence way to reproduce the issue?

Yes, source-reproducible: current main and v2026.6.1 emit thinkingLevelMap from the Foundry writer while the strict persisted zod model schema lacks that key and config writes validate before persisting. I did not run a live Azure Foundry onboarding flow in this read-only review.

Is this the best way to solve the issue?

Yes: adding a strict optional thinkingLevelMap to the persisted model schema is the narrowest maintainable fix because the TS type, runtime registry schema, and sibling provider/catalog paths already treat the field as part of the model contract. Stripping it from Foundry would leave persisted schema drift for other model sources that can carry the same contract field.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 6d2566682a3f.

Label changes

Label changes:

  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P1: The linked bug blocks the supported Microsoft Foundry Entra ID onboarding flow from persisting config for affected users.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes after-fix console output from the real Foundry writer and persisted validator boundary, with shipped-build controls showing thinkingLevelMap is the failing field.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix console output from the real Foundry writer and persisted validator boundary, with shipped-build controls showing thinkingLevelMap is the failing field.
Evidence reviewed

PR surface:

Source +16, Tests +85, Generated 0. Total +101 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 1 16 0 +16
Tests 2 85 0 +85
Docs 0 0 0 0
Config 0 0 0 0
Generated 1 3 3 0
Other 0 0 0 0
Total 4 104 3 +101

What I checked:

  • Current persisted schema rejects the field: Current main's strict ModelDefinitionSchema lists model fields through maxTokens, then params, without thinkingLevelMap, so a persisted model object carrying that key is outside the accepted shape. (src/config/zod-schema.core.ts:350, 6d2566682a3f)
  • Foundry writer emits the field today: Current main builds a 7-key Foundry thinking map and persists it into each generated model entry when capabilities include reasoning effort support. (extensions/microsoft-foundry/shared.ts:204, 6d2566682a3f)
  • Write path validates before persisting: Config writes validate the persisted candidate with validateConfigObjectRawWithPlugins and throw on the first validation issue before writing, matching the reported rollback path. (src/config/io.ts:2255, 6d2566682a3f)
  • Runtime/type contract already includes thinkingLevelMap: The shared LLM contract defines ModelThinkingLevel as off|minimal|low|medium|high|xhigh|max and ThinkingLevelMap as string-or-null values, while ModelDefinitionConfig exposes the optional field. (packages/llm-core/src/types.ts:35, 6d2566682a3f)
  • Runtime TypeBox schema already accepts the same map: The session model registry TypeBox schema already has the same optional key set and carries thinkingLevelMap into runtime models. (src/agents/sessions/model-registry.ts:87, 6d2566682a3f)
  • PR adds the narrow persisted-schema alignment: The PR commit adds a strict zod ThinkingLevelMapSchema with the seven established keys and wires it into ModelDefinitionSchema. (src/config/zod-schema.core.ts:350, 60fb8c6bdc7c)

Likely related people:

  • Shakker: Local shallow/grafted history and blame assign the current persisted schema, Foundry thinking-map writer, and model type lines to the same snapshot commit; confidence is limited by the shallow history. (role: current implementation provenance; confidence: medium; commits: c6bbb55fb56d; files: src/config/zod-schema.core.ts, extensions/microsoft-foundry/shared.ts, src/config/types.models.ts)
  • Vincent Koc: The latest release tag points at a release refresh commit that still contains the schema/writer mismatch, making this useful release-context routing rather than code authorship evidence. (role: release provenance; confidence: low; commits: 2e08f0f4221f; files: src/config/zod-schema.core.ts, extensions/microsoft-foundry/shared.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. labels Jun 7, 2026
@LiuwqGit

LiuwqGit commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Independent L2 verification (LiuwqGit)

Verified the same fix shape locally on branch LiuwqGit:fix/issue-91011-thinkingLevelMap-schema — schema alignment only, writer unchanged.

Evidence after fix

validateConfigObject on a Foundry-shaped provider model entry with thinkingLevelMap:

{ "ok": true }

Before (main): models.providers.microsoft-foundry.models.0: Unrecognized key: "thinkingLevelMap"

Tests (all green)

node scripts/run-vitest.mjs src/config/config.schema-regressions.test.ts  → 34 passed
node scripts/run-vitest.mjs extensions/microsoft-foundry/index.test.ts    → 41 passed
node scripts/run-vitest.mjs src/commands/models/auth.test.ts              → 37 passed
pnpm config:docs:check                                                    → OK

Key regression tests:

  • accepts thinkingLevelMap on persisted provider model entries (Foundry onboarding)
  • rejects unknown thinkingLevelMap keys on persisted provider model entries
  • emits only allowed thinkingLevelMap keys for Entra ID reasoning model onboarding

Proof limitations

No live Entra ID / Microsoft Foundry environment — L2 schema-validation proof only. Happy to help if additional CI or proof gaps remain.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 7, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label Jun 7, 2026
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 7, 2026
@harjothkhara

Copy link
Copy Markdown
Contributor

The red checks here (build-artifacts, check-additional-runtime-topology-architecture, check-lint/check-prod-types/check-test-types, and the extension-boundary checks) appear to be pre-existing on main, not caused by this PR.

I hit the identical set on my now-closed #91045 (the same Foundry thinkingLevelMap fix), and verified against a clean checkout of current main over on #90122: check:architecture fails via a check:madge-import-cycles SCC, and build-artifacts fails on a gateway:watch regression — both with and without an unrelated diff applied. Two independent config-schema-only PRs reproducing the same failures means they track main's current state rather than this change.

Flagging so the red CI isn't chased as a fault of this diff — the schema change plus the positive/negative regression tests here look like the right shape. I closed #91045 in favor of this one. 👍

The persisted zod ModelDefinitionSchema (src/config/zod-schema.core.ts) was
strict and had no thinkingLevelMap key, while the rest of the contract already
carried it: the TS type (ModelDefinitionConfig.thinkingLevelMap in
types.models.ts), the runtime TypeBox schema (ThinkingLevelMapSchema in
agents/sessions/model-registry.ts), and the foundry writer
(buildFoundryThinkingLevelMap, 7 keys: off/minimal/low/medium/high/xhigh/max).

On Microsoft Foundry Entra ID onboarding the writer's persisted model entry hit
the strict schema, validation failed with Unrecognized key "thinkingLevelMap",
and updateConfig atomically rolled the whole write back, so onboarding never
completed. This is schema drift, not an illegal field.

Fix: add an optional thinkingLevelMap to the zod ModelDefinitionSchema,
mirroring the TypeBox key set 1:1 (string | null values) and keeping .strict().
The writer and normalizeResolvedModel are unchanged.

docs/.generated/config-baseline.sha256 is a derived artifact of this schema
change, regenerated via `pnpm config:docs:gen` (config:docs:check now passes);
it was not hand-edited.

Closes openclaw#91011
@steipete
steipete force-pushed the fix/91011-foundry-thinkinglevelmap-schema branch from 60fb8c6 to 7813ccb Compare June 7, 2026 03:43
@steipete

steipete commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Land-ready maintainer proof for rebased head 7813ccbaae771d31d5c3ebeaa4ba84faa72e387d.

What changed:

  • Allowed strict persisted model config entries to carry thinkingLevelMap with the established model thinking-level keys only.
  • Added config-schema regression coverage for the reported Foundry onboarding write failure and the invalid extra-key case.
  • Added Microsoft Foundry writer coverage proving Entra reasoning onboarding emits only persisted-schema-compatible keys.
  • Regenerated the config docs baseline hash.

Tested locally before landing:

node scripts/run-vitest.mjs extensions/microsoft-foundry/index.test.ts src/config/config.schema-regressions.test.ts src/commands/models/auth.test.ts
# passed: config.schema-regressions 34/34, models/auth 37/37, microsoft-foundry/index 41/41

pnpm config:docs:check
# OK docs/.generated/config-baseline.sha256

pnpm exec oxfmt --check docs/.generated/config-baseline.sha256 extensions/microsoft-foundry/index.test.ts src/config/config.schema-regressions.test.ts src/config/zod-schema.core.ts
# All matched files use the correct format.

git diff --check origin/main...HEAD
# no output

/Users/steipete/Projects/agent-skills/skills/autoreview/scripts/autoreview --mode branch --base origin/main
# clean: no accepted/actionable findings; overall patch is correct (0.87)

Real behavior proof status:

  • This is a schema/write-path bug, not a provider request-shape bug. I did not run a live Azure Foundry/Entra onboarding session because no live Foundry Entra environment is available here.
  • The tested boundary is the one that causes the rollback: real Foundry onboarding writer output containing thinkingLevelMap through the persisted config validator. Before the schema alignment that key is rejected; after the patch the valid 7-key map is accepted and an out-of-contract key is still rejected.

CI note:

  • Fresh CI is queued for the rebased head. Earlier PR-head checks showed the relevant focused CI lanes green, while the remaining red lanes match known current-main failures already documented on this PR. I am landing with maintainer bypass on the focused local proof plus clean autoreview.

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels Jun 7, 2026
@steipete
steipete merged commit a1f1895 into openclaw:main Jun 7, 2026
156 of 165 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation P1 High-priority user-facing bug, regression, or broken workflow. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Foundry Entra ID onboarding fails to save with "Unrecognized key: thinkingLevelMap"

4 participants