[11.6.0] - 2026-09-18
Added
- Tangle can adapt its write scope to the task and explicitly authorize
external read context, making parallel planning safer and more useful
(#1043, #1044).
Changed
- Context summarization now uses the configured feature seats and preserves the
target workflow's context budget during preflight (#1042, #1045). - Structured Tangle decomposition is normalized before the compatibility
fallback path, improving planning reliability across provider output formats
(#1046).
Fixed
-
Doctor now finds the installed plugin and configured workspace when invoked
directly or through the earlyorchestrate.sh doctordispatch, so healthy
installations no longer report path-related failures (#1048, #1049). -
The Tangle quality gate uses the correction-overlay rate so review results
reflect the actual corrected output (#1038). -
Council verdict extraction (
_council_parse_final_verdict) no longer misreads
a seat'sVERDICT: APPROVEasREVISE, which was systematically corrupting the
quorum tally (met: false,distinct_approving_providers: 0) even when the raw
seat bodies clearly approved (#2346). The runner wraps each seat's output in a
provenance envelope (## UNVERIFIED CONSULTATIVE OUTPUTheader +
<external-cli-output>…</external-cli-output>+## END …footer), so the
verdict is no longer the file's final line — and the parser treated the closing
wrapper lines as trailing review content, demoting the final verdict to nothing.
The parser now skips those runner-added envelope wrapper lines so the verdict
inside is recognized as final, while deliberately keeping the strict contract
intact: the verdict must still be the last top-level line, the sole declaration,
and end-anchored, so a quoted/fenced example verdict or an unfinished
(trailing-content) verdict still cannot vote. A degenerate/missing chair already
never forcedmet: false; a regression test locks in that a mixed-vendor pair of
envelopedVERDICT: APPROVEseats yieldsdistinct_approving_providers: 2/
met: truealongside a degenerate chair. -
Remove the matcher-group
ifkeys from the freeze-check and telemetry-webhook entries inhooks/hooks.json. Claude Code only readsifon individual hook handlers, so it ignored both keys and printedhooks.json: unknown keys "if" in hooks.PreToolUse[6], "if" in hooks.PostToolUse[3] ignoredat startup. Both scripts already check freeze state and the webhook URL themselves, so hook behavior is unchanged.