Fails closed on malformed configuration and strengthens standalone protocol and routing enforcement. Malformed JSONC documents and security-sensitive sections (sandbox, indexes, remote_exec, disabled_tools, active harness hardening) now reject the whole candidate instead of applying defaults or dropping the offending fields; malformed non-security sections are discarded with a warning, and live reloads keep the last-good configuration. Pi and OpenCode plugins now normalize the config document and ignore inactive harness keys before validation, so Pi no longer rejects OpenCode's auto_update while keeping its own hardening strict.
Engine and protocol
Added standalone input caps for line size and aggregate retention; oversized frames return request_too_large without wedging the connection.
Duplicate pending request IDs now fail instead of silently replacing and cancelling the earlier request.
Malformed remote_exec/siblings/confine routing in worker catalogs now rejects the request instead of disabling just that routing option.
Authorization failures on the ledger edge answer exactly once and never spawn the tool.
Outline targets that are not strings now raise an error instead of being silently filtered.
Confidence Score: 5/5
The reviewed changes appear safe to merge; no blocking issue remains.
Summary
The PR rejects malformed security settings and strengthens standalone input and request checks.
Bad security settings stop a config candidate from being partly applied.
Standalone input and held requests stay within size and queue limits.
Pending calls keep their reply owner until the call finishes or shuts down.
Worker catalogs reject malformed routing settings instead of ignoring them.
Bash asks start only after authorization is recorded.
Pong replies can pass queued tool replies without stopping tool replies from moving.
Outline calls reject invalid targets and format replies from completed results.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Read configuration tier] --> B[Translate retired keys]
B --> C[Remove keys ignored by the active harness]
C --> D{Security settings valid?}
D -->|No| E[Reject candidate]
D -->|Yes| F[Parse settings and apply active override]
F --> G[Apply user and project rules]
E --> H[Keep last-good settings on reload]