docs(configuration,reference): refresh for 0.66.2 - #776
Merged
Conversation
added 6 commits
August 8, 2026 07:16
herdctl 5.32.0 (Paddock 0.63.0) carries an MCP server's `type` and `headers` verbatim on both the host-inherit and declared paths, and added the `plugins` passthrough that makes host plugin inheritance real. Three pages still told readers neither capability existed. - config-file.md: rewrite the two "cannot be carried" cautions; replace the "inert today" plugins paragraph and the "none of them reach Paddock" block with the instructions x mcpServers truth table from claude-plugins.ts:48-52; add the mcpServers: schema table; note headers in the argv-exposure caution and the env:VAR leaf list; fourteen -> fifteen paddock_manage tools. - environment.md: same for the PADDOCK_CLAUDE_MCP_SERVERS and PADDOCK_CLAUDE_INSTRUCTIONS rows, and the env:VAR leaf list.
instance-settings.md described a single always-on restart banner and a write with no concurrency story. #757/#722/#723 replaced both. - three banner states (configFileError / just-saved / restartRequired), and restartRequired is computed now, not hardcoded false - value vs pendingValue vs pendingRestart, per field - configVersion -> expectedVersion -> 409 config_conflict, opt-in - the 400 on an env-shadowed write - a save stamps schemaVersion: 1 when absent, which is what config-file.md promises
- add chat:queued_state, chat:queued_returned and chat:injected to the server->client table (all three exist and are handled by the client) - chat:send and chat:set_queue carry attachments; set_queue's identity is qid, not the legacy ts (#245/#736) -- note added on why - chat:tool_start/tool_call carry subagentType/description/hasSubagent (#429) - chat:queued_flushed carries attachments (#728) - the no-seq list was missing the three hub.broadcast frames - replace the misleading "no chat:queued" note with a section on the four queue frames and why _returned is not a flag on _flushed
- self-mcp.md frontmatter + mcp.md scope prose: fourteen -> fifteen paddock_manage tools (ALL_OPERATIONS = 3 read + 8 write + 4 trigger) - api.md: the auth section named /api/health as the sole exemption; there are three groups (health, the compiled bundle, /mcp + its metadata). Also document the /api/root/* mount -- every workspace route is registered once and mounted twice, which is why the root workspace's key is "" - hooks.md: add the two trigger routes it was missing (GET .../runtime and POST .../:name/run); schedules.md already listed all six - openapi.md: note /open-api/yaml - environment.md: add the CLAUDE_SECURESTORAGE_CONFIG_DIR row
- websocket.md: a note that the page documents what the server SENDS, citing #772 (chat:injected absent from the ServerMessage union) and #773 (the web client's mirrored types are stale on the #728 queue attachments), so neither is later used to 'correct' the page back - instance-settings.md: the Self MCP projects field's help text says only 'create whole new projects' but the flag also gates promote_project, which clones a caller-supplied URL (#775) -- document the grant, not the string - retire the 'notebook project to repo-backed' phrasing in the two capability rows, matching self-mcp.md's managed/unmanaged vocabulary
Deploying paddock with
|
| Latest commit: |
83ad8b2
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://cf230d29.paddock-7u2.pages.dev |
| Branch Preview URL: | https://docs-configuration-reference.paddock-7u2.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Docs last had a systematic pass at v0.62;
mainis 0.66.2. This is theconfiguration/+reference/slice of a coordinated five-way refresh.Docs only — no changeset, no version bump.
Every claim below was re-verified against source before editing.
The two that told readers a shipped capability does not exist
headers/type: sseare carried. herdctl 5.32.0 widenedMcpServerSchemaand Paddock shipped it in 0.63.0 (#705). Four blocks across two pages still
described the 0.62 behaviour — that
headersis stripped (breaking the OAuthtoken hash, which is keyed on
{type, url, headers}) and that everyurlserveris downgraded to HTTP. Both are now carried verbatim on both the host-inherit
path and the declared
mcpServers:path, and nothing produces adegradedcaveat any more. The "What cannot be declared" list is rewritten around the
refusals that actually remain: an unrecognised key, both
commandandurlorneither,
headerson a non-urlserver, atypethat disagrees with thedeclaration, and a reserved name.
(
claude-mcp.ts:74-99,:207-233;mcp-servers.ts:79-83,:146,:306-321,:388-415.)Host plugin inheritance exists. Shipped in 0.63.0 and documented as not
existing — "inert today", "none of them reach Paddock", "the engine also has no
way to pass a plugin path per session". Every clause is false. Replaced with the
three-row truth table from the source, plus why the symlink alone never worked
(a session plugin is enabled by default, no settings-source grant needed) and the
mcp__plugin_<plugin>_<server>__*allow-list widening.(
claude-plugins.ts:31-56,:375-430;herdctl-agent-config.ts:189.)Then
The Config screen's DTO (0.66.2, #757/#722/#723) —
instance-settings.mddescribed one always-on banner and a write with no concurrency story. Added: the
three banner states,
valuevspendingValuevspendingRestart,configVersion→expectedVersion→ 409config_conflict, the 400 on anenv-shadowed write, and that a save stamps
schemaVersion: 1when absent —which is the mechanism
config-file.mdalready promises.reference/websocket.mdwas three frames and several fields behind. Addedchat:queued_state,chat:queued_returnedandchat:injected;attachmentsonchat:send/chat:set_queue/chat:queued_flushed;qidsuperseding thelegacy
ts;subagentType/description/hasSubagenton both tool frames; thethree
hub.broadcastframes missing from the no-seqlist. The closing noteasserting "no
chat:queued" was actively misleading with fourchat:queued_*frames now in play — replaced with a section on what each one means.
Smaller: fourteen → fifteen
paddock_managetools (3 read + 8 write + 4trigger) in two places;
api.md's auth section named/api/healthas the soleexemption when there are three groups; the
/api/root/*mount is now documented(every workspace route registered once, mounted twice — which is why the root
workspace's key is
""); the two trigger routeshooks.mdwas missing, on whichit disagreed with
schedules.md;/open-api/yaml; aCLAUDE_SECURESTORAGE_CONFIG_DIRrow.Where the docs are right and the code is wrong
Three filed issues are cited in the pages rather than worked around, so nobody
later "corrects" a page back against a stale type or string:
chat:injectedis emitted but is not a member of the serverServerMessageunion — the emit seam is untyped #772 and Web client's mirrored WebSocket frame types have drifted from the server union in both directions — 5 payloads, 5 inline casts hiding it (folds in #772) #773 —reference/websocket.mdcarries a note that the pagedocuments what the server sends, and that neither the
ServerMessageunionnor the web client's mirrored types is a safe source to check it against.
PADDOCK_SELF_MCP_PROJECTShelp text understates its grant: it also gatespromote_project, which clones a caller-supplied git URL #775 —configuration/instance-settings.mddocuments the realPADDOCK_SELF_MCP_PROJECTSgrant (it also gatespromote_project, whichclones a caller-supplied URL) and flags that the field's own help text
understates it. The retired "repo-backed" phrasing is dropped from the two
capability rows in favour of the managed/unmanaged vocabulary
self-mcp.mdalready uses.
import→adoptrename (#744) is incomplete:paddock --helpand the OpenAPI descriptions still say "import" #770 needs nothing here — neitherreference/api.mdnorconfiguration/openapi.mdsays anything about the adopt routes' publishedsummaries, so the stale "import" wording in the spec has no doc surface in
this slice.
Left alone, deliberately
The audit's "verified correct" set — port
7233, theclaude:block and allfive defaults (
credentialsis the onehost),schemaVersion,environmentPromptomitted-vs-empty semantics, the auth exemption list inauthentication.md, bind-safety, the model catalog, chat recovery. Not swept.cd website && npm run buildexits 0. The twocaddyfilehighlighting warningsit prints are pre-existing and come from
guides/securing.md, outside this slice.