fleet01 as-built: the full second-host setup, and the gaps a fleet manager would have to own #156
Open
opened 2026-08-23 14:15:46 +02:00 by ltms
·
0 comments
No Branch/Tag Specified
main
worker/fleetd-612-unita-87807e-1
worker/612-b3-mcpwirings-da2b58-3
worker/612-b2-cb185-176d3a-2
worker/612-b1-completion-457459-1
worker/612-agaps-73a926-2
worker/608-sleeps-3a64ff-3
worker/621-b4520b-1
worker/618-b83894-2
worker/fleetd-615-e05481-5
worker/lead-autocompact-5f1ab2-3
worker/fleetd-613-f85deb-3
worker/fleetd-608-flaky-nudge-test-d0c2d1-3
worker/lead-context-gauge-ad404f-1
worker/gauge-wiring-9158c1-4
worker/redeploy-slowstart-ead0e5-5
worker/charter-bytes-13668c-6
worker/rollover-outcome-291483-2
worker/589-f64303-2
worker/593-1a8025-5
worker/589-fcd2aa-1
worker/568-9fdaa2-3
worker/571-attempted-outcome-5739f7-2
worker/581-completionresolver-cas-sites-0542b7-6
worker/562-loop-health-wiring-test-99611c-5
worker/562-surface-loop-health-7df5cc-4
worker/575-waiter-cleanup-sites-62ad80-1
worker/572-answer-lock-release-46a9ae-5
worker/567-probe-channel-leak-a38fc5-6
worker/551-record-before-send-7cbf56-1
worker/561-listener-fanout-survives-a-throw-61d538-2
worker/555-redeploy-main-flow-seam-65c2f5-2
worker/556-injector-owns-registration-e027a5-1
worker/552-post-restart-mktemp-abort-bc2672-4
worker/553-onstatus-completion-leak-0da881-2
worker/550-shasum-linux-196132-1
worker/538-loop-dies-on-error-4a5eeb-6
worker/426-health-coverage-ef1fd4-4
worker/504-failed-reported-clean-3cfd66-3
worker/537-capturedlog-close-e4c437-2
worker/459-broken-link-targets-cadc17-5
worker/535-appender-leak-fe74c1-1
worker/512-part2-shutdown-detection-434701-9
worker/529-logger-level-sweep-2a5533-8
worker/528-drain-gate-call-site-5de83d-7
charter/forge-mcp-vs-token
worker/521-swap-guard-unpinned-28e931-5
worker/519-probe-test-harness-d25ab8-4
worker/525-logger-level-leak-1b4eb0-6
worker/518-fleetmcp-resolver-wiring-8ef96c-1
worker/512-drain-complete-line-7edd71-3
worker/517-abort-branch-and-jar-id-41b641-2
worker/500-9e52c9-3
worker/509-4912f4-2
worker/511-9a4b23-1
worker/493-479f45-2
worker/505-03f8b2-1
worker/492-followup-detect-unclear
worker/501-a31fa0-7
worker/498-451d1c-5
worker/494-1015ce-2
worker/492-209647-1
worker/489-001902-2
worker/480-relative-handover-path-906323-1
worker/480-b-handover-skill-45bf1f-5
worker/474-followup-source-pin-f54a55-17
worker/474-charter-check-on-reload-f54a55-17
worker/466-quarantine-repeatcount-report
worker/393-opencode-skill-seeding-71854b-13
worker/469-canonical-tool-names-2a472a-16
worker/466-quarantine-escalation-5ae9c1-15
worker/446-hot-exhausted-pattern-0af580-6
worker/464-charter-tool-name-guard-a85635-12
worker/463-listfleet-default-fails-open-f1c76c-11
worker/458-invariant-5-by-purpose-862f9a-10
worker/439-coordinator-row-gate-bc032a-8
worker/449-herdr-protocol-576015-4
worker/450-abstract-spawn-599e1c-5
worker/437-ack-refuses-177d91-1
worker/444-placement-window-feb56a-2
worker/440-helddurable-derived-d462d7-13
worker/425-rework-placement-resolve-c58ba1-9
worker/421-lead-peek-held-msgs-cdbad2-10
worker/435-fixed-policy-cap-fe11de-12
worker/422-gate-state-observability-9e79d6-11
worker/431-memberregistry-live-readers-cdbad2-10
worker/424-architect-slot-hot-038b41-7
worker/422-model-gate-spawn-c29f48-6
worker/425-default-profile-live-f55534-8
worker/415-coverage-wording-2cbf9c-5
worker/416-3ad1da-1
worker/418-588283-3
worker/deterministic-stamp-race-409-3cb7b6-10
worker/armed-reads-live-config-404-ed931f-9
worker/reply-peer-refusal-391-5a34bd-7
worker/models-allowlist-aa9e9b-3
worker/ttl-stamp-race-399-f1122f-8
worker/scrub-receipt-400-316b3e-5
worker/exhaustion-detection-395-105105-6
worker/scrub-abort-394-316b3e-5
fix/scrub-uid-abort
worker/task-scrub-517574-2
worker/t386-clock-bd5b78-4
worker/t384-scrub-813790-5
worker/t381-cc-748314-2
worker/t373-336973-2
worker/t365-3920c5-3
worker/t358-6e989b-1
worker/t355-8b321c-1
worker/fleetd-369-hermetic-git-tests-e8b19a-3
worker/fleetd-368-stale-lead-binding-f5682e-2
worker/fleetd-360-deploy-units-0d3793-1
worker/359-dead-lead-tabs-f1253b-4
worker/362-worktree-skills-c03e51-3
worker/361-coord-visibility-655144-1
362-plugin-visibility-and-drift
worker/errscan-bed2ca-2
worker/amqp-log-identity-bed2ca-2
worker/withdefaults-guard-561704
worker/sleepguard-82076d-1
worker/fd334-9ee1b6-5
worker/fd348-f1ab27-4
worker/fd335-a71c35-1
worker/fd342-174a17-2
worker/fd345-490d0f-3
worker/fleetd-337-5ec7d4-21
worker/fleetd-341-af5a6b-24
worker/fleetd-339-5ca0a2-23
worker/fleetd-338-83a4a1-22
worker/fleetd-333-281f46-18
worker/fleetd-329-11bdbb-16
worker/fleetd-330-2770fb-17
worker/fix-326-50506e-15
worker/fix-324-3e9bbf-14
worker/fix-323-b8287d-13
worker/fix-316b-bd0860-11
worker/fix-318-76ca36-9
worker/fix-317-486aec-8
worker/fix-315-ce47c5-6
worker/fix-307-275890-6
worker/fix-308-b4f664-7
worker/fix-309-ec3939-8
worker/fix-310-7a3974-9
worker/fix-302-52ad0e-9
worker/fix-298-ce1acb-8
worker/fix-297-66bd11-7
worker/fix-296-104622-6
worker/fix-293-bare-closetab-eb22b5-3
worker/fix-280-gone-ask-lapse-bca98e-2
worker/fix-290-reapidle-guard-coverage-9b0dd1-1
worker/fix-285-trust-seed-8f3565-10
worker/fix-284-backend-error-seat-85912c-11
worker/fix-282-chained-ask-e6d0bb-8
worker/fix-283-teardown-leaks-f40dfa-9
worker/fix-281-pin-handler-actions-4921ac-7
worker/audit-rendezvous-lifecycle-d072ae-2
worker/audit-health-placement-1a2476-6
worker/audit-teardown-exits-e207a5-3
worker/audit-launcher-asymmetry-27e370-4
worker/audit-rest-authz-6ca53c-5
worker/investigate-275-abandon-asking-fdef52-8
worker/fix-274-worktree-leak-b0095d-7
worker/fix-273-exhausted-pattern-9665b5-6
worker/fleetd-267-model-check-bd8068-1
worker/fleetd-131-archunit-18b834-7
worker/fleetd-266-sshagent-rename-a014ff-6
worker/fleetd-184-uid-claim-8e1f31-4
worker/fleetd-184-warn-b381ee-10
worker/fleetd-184-docs-be1d12-9
worker/fleetd-257-9bf010-7
worker/fleetd-103-23a113-6
worker/fleetd-247-342356-5
worker/fleetd-116-04dea8-4
worker/fleetd-252-a830e0-3
worker/fleetd-111-7e8673-9
worker/fleetd-155c-f8ef4b-8
worker/fleetd-176-b928ca-3
worker/fleetd-249-7a7878-2
worker/cb248-composition-root-b-9acdf7-15
worker/cb148-envrc-default-fa6c82-12
worker/cb201-unit5-wiring-6c12e6-8
worker/cb241-fallback-echo-1175e9-11
worker/cb149-trust-dialog-2392a5-9
worker/cb134-148-overlay-visible-c9b986-10
worker/cb234-session-id-keyed-04e1fc-1
worker/cb201-unit3-nudge-abdf5c-6
worker/cb201-unit2-policy-c1102c-5
worker/cb201-unit4-outcome-a13bfa-7
worker/cb201-unit1-classifier-91b9b1-4
worker/cb201-227-refine-831980-3
worker/cb175-model-readback-0f085f-1
worker/cb222-charter-tmpdir-17f013-1
worker/cb226-architect-slot-race-cd3aa8-3
worker/cb224-worktree-root-group-024523-2
worker/cb-123-role-demotion-c600f7-2
worker/cb-219-opencode-roots-1f677e-1
worker/cb214-claude-session-id-b9eab4-4
worker/cb213-zdotdir-wrong-process-dd6de4-3
worker/cb211-exhaustion-classification-9546e0-2
worker/cb137-ambiguous-task-4df3d8-4
worker/cb209-agentsessionid-4dfdb6-2
worker/cb185-hostenvnames-2692b5-3
worker/cb206-opencode-sqlite-128718-2
worker/cb185-worktree-group-fc0c99-1
worker/cb-137-ask-ticket-e7760c-2
worker/cb-172-broker-uri-d36ae4-4
worker/cb-175-model-readback-76ead6-3
worker/cb-161-pane-ancestry-293510-1
worker/cb-164-rebase-885863-8
worker/cb-164-empty-scrape-false-success-1a80af-3
fix/cb-197-ticket-ttl-from-completion
worker/cb-189-remote-url-coverage-4692f3-1
worker/cb-185-blockers-027756-4
worker/cb-192-gap-log-11b631-2
worker/cb-633-fix-5f4396-3
worker/cb185-router-d6436d-3
worker/cb185-router-routing-gaps-9e9d33-3
worker/cb185-paneids-992586-2
worker/cb-633-allow-list-union-ed374b-1
worker/cb-157-credential-in-remote-url-496e44-2
worker/cb-641-health-herdr-evidence-8f1f54-6
worker/cb-640-health-msg-evidence-99c9cd-1
worker/cb-642-fleets-status-skill-bbbc40-5
cb-634-ide-mcp
worker/lead-comms-wiring-c014b9-7
worker/lead-mailbox-c19577-6
worker/autocompact-window-82bc2f-5
worker/cb-634-probe-18056f-4
worker/cb635-broker-urienv
worker/cb-632-config-retry-8e0efa-7
lead/cb-622e-claude-md
lead/cb-622-followup
worker/cb-622a-165dff-1
lead/cb-622d-opencode-mount
worker/cb-622b-717c67-2
worker/cb-622c-ab7759-3
worker/cb-617b2-20ca4b-3
worker/cb-617a-5c2f4a-1
worker/cb596-4e49ef-3
worker/cb586-10500c-1
worker/cb-606-b9343a-25
worker/cb604-1445f8-24
worker/cb582-477374-21
worker/cb584-8c2281-22
worker/cb600-e6b9a9-20
worker/cb602-ce257f-19
worker/cb601-b42837-18
worker/cb598-6c7ba7-17
worker/cb599-740fe4-16
worker/cb597-282224-15
worker/cb590fix-185e9a-10
worker/cb528-recovery-race
worker/cb594-96bead-8
worker/cb590-916766-2
worker/cb527-997d99-3
worker/cb592-env-leak-3cbf9c-1
worker/cb588-async-ticket-nudge-3218f7-5
worker/cb578b-9dcb13-6
worker/cb581-d24826-5
worker/m2-u5-ef8c42-15
worker/cb578a-516499-2
worker/cb576-01a04b-17
worker/cb579-lead-tab-acba06-20
worker/cb580-terminal-health-ed6058-21
worker/cb577-f36fdc-18
worker/cb573b-3db06f-16
worker/cb568c-f36fdc-18
worker/cb568-drop-cause-c3ac1c
worker/cb575-cancelled-notification-c3ac1c
worker/m4-sol-a2cbec-3
worker/cb574-async-ask-c3ac1c
worker/cb573-health-model-8ca857-14
worker/cb572-unknown-target-7f2e35-13
worker/u4-700706-9
worker/u3-b9fcb6-6
worker/u2-ef5b68-4
worker/u1-469dce-1-clean
worker/u1-469dce-1
worker/cb-564-health-events-70cf7e-2
worker/cb-565-recycle-drops-role-98e58f-3
worker/cb-563-missing-reply-df2866-1
worker/cb-562-readiness-gate-silent-6c23c9-3
worker/cb-560-architect-presence-da8155-1
worker/cb-561-architect-silent-off-a71cab-2
worker/cb-548-bind-architect-slot-fe1b8c-1
worker/parity-overlay-settings-5fb711-1
secrets-central-store
cb-559-hot-key-correction
cb-557-fleet-role-pools
worker/cb-553-maxload-explicit-spawn-305ee3-6
worker/cb-551-idle-lead-heartbeat-f1633c-1
worker/cb-544-drain-preserves-worktree-925fad-3
worker/cb-552-docs-sync-1cb9cf-4
worker/cb-548-rendezvous-guard-rebased
worker/cb-548-rendezvous-guard-116b53-10
worker/cb-548-authz-v2-586df6-8
worker/cb-548-authz-264363-5
salvage/cb-528b-codex-home
salvage/cb-528a-codex-launcher
CB-518-primary-flow
feature/peer-launcher-spi
cb-103-injector
v1.1.0
v1.0.0
Labels
Clear labels
blocked
needs-live-proof
ready-to-delegate
silent-default
Cannot start until something else lands. The body says what.
Merged and green, but never shown working on the running daemon. Not the same as done.
Scope, files and acceptance criteria are written. A worker can be briefed from the body alone.
A feature that compiles, passes tests, and ships turned off. Nine recurrences and counting.
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: fleet/fleetd#156
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Reference ticket.
fleet01is our second fleet host and the first one that is not the operator's Mac. Everything below was measured on the host on 2026-08-23, not recalled. It is written down because we are starting to talk about a fleet manager, and the useful input for that talk is not the design we want — it is the set of things a human had to do by hand to make a second host work, and the things that still have no owner.Where I did not check something myself, I say so.
1. The host
fleet01, Ubuntu 24.04.1 LTS, kernel 6.8.0-4510.10.20.13/24onens18;172.17.0.1ondocker0ltms(uid 1000), insudoanddocker/usr/bin/zshThe network is one-way. The Mac reaches
fleet01.fleet01cannot reach the Mac. This one fact decided more of the design than anything else, and any fleet manager has to assume it is normal rather than a mistake.There is no GUI and no display. Everything happens over ssh.
2. Starting herdr headless — the part that was hardest
A plain
herdrneeds an interactive terminal to stay alive, so it dies when the ssh session ends. The working start isfleetd-run/start-herdr.sh. It does three things that are not obvious:herdr --session fleet01), not the default one.setsid script -qfec … /dev/null, so herdr gets a real pty and survives the ssh logout.stty rows 50 cols 200before exec'ing herdr.Step 3 is the one that cost real time. herdr sizes each new pane from the attached client's view. Under a pty with no window size the client reports 0x0. Every
pane.splitandworkspace.createthen fails withghostty error -2, because libghostty refuses a 0x0 surface. The daemon reports this three steps later as a plain spawn failure, so the message you see never mentions the size.Two herdr sessions now run on this host at the same time: the default one (socket
~/.config/herdr/herdr.sock) andfleet01(socket~/.config/herdr/sessions/fleet01/herdr.sock).fleetdis pinned to the second one withherdrSocket:. A bareherdr …command on the CLI talks to the first one.I got this wrong myself during this work. I ran
herdr pane list, saw no lead, and told the operator that the fleet01 lead was missing. It was there the whole time, in the other session. I asked for a restart that was not needed. Any tool that shows fleet state must say which session it read, or it will produce confident wrong answers.The default session still holds two panes sitting in
~/LTMS/kb, one runningclaude. Nothing owns or reaps them.3. Running fleetd
Config file is
bridged/fleetd.yaml. Note the name: the Mac usesbridged.yaml. Both hosts also carry afleetd.example.yaml, which makes guessing the wrong name easy.Restart is
fleetd-run/restart.sh. It is small and deliberately does four things:setsid zsh -lc "exec java -jar target/bridged.jar fleetd.yaml")/healthzNothing supervises either process. I checked for user-level systemd units, system-level units, and cron entries. There are none. The Mac has launchd plus
scripts/bridged-launchd-wrapper.sh;deploy/bridged.serviceexists in the repo but is not installed here, and it has the login-shell secret defect noted in the wiki. So onfleet01a reboot, an OOM kill, or a crash leaves the host with no fleet and nothing that notices.Deployment is fully manual and per host:
git pull,mvn clean package,restart.sh. There is no build artefact shared between hosts. Today the Mac andfleet01are both on3f4ac2b, but only because I did each one by hand.4. Config: profiles and roles
Four profiles, all reaching models through
llm.ltms.dev:gxgx/deepseek-v4-flashxfopencode/x-preview-f-freelocaldeepseek-v4-flashvia/anthropicopusclaude-opus-5,subscription: trueRoles: leaders =
opus; developers =xfandgx; reviewers =gx. Placement isweighted. Lifecycle:idleTtlSeconds: 1800,contextCap: 8,drainTimeoutSeconds: 120.The lead slot is pinned by tab label
lead: opus, withcwd: /home/ltms/LTMS/kb. That matches the operator's rule that a lead is started in the project the fleet works on.The reviewer separation is weak and the config says so. With only two usable backends,
gxreviews diffs thatgxmay have written. That is a real limit of a small host, not an oversight.Two config comments are now wrong, and both are the kind of drift a fleet manager would have to prevent:
fleet.leadersblock says theopusprofile is "NOT defined above on purpose". It is defined above.claude/loginon this host. That login now exists —~/.claude.jsonhas anoauthAccount. Whether anopuslead can actually spawn is a separate question, because #140 says everysubscription: trueclaude-code profile fails to spawn. I did not re-test #140 on this host.5. Credentials — better here than on the Mac
fleet01holds only four values, in~/.fleet/secrets.sh(mode 600):AI_GATEWAY_TOKEN,WORKER_GITEA_TOKEN,GITEA_HOST,LAVINMQ_URI. The Mac's store holds dozens, including an AWS AdministratorAccess key.The file is sourced from
~/.zprofile, which only a login shell reads. A herdr member pane on Linux is an interactive but non-login shell — measured as a bare/usr/bin/zshin/proc/<pid>/cmdline. So members never inherit these values at all. The CB-633 scrub is a second line of defence here rather than the only one. This is the better arrangement and it is worth copying back to the Mac.fleetd.yamlcontains no literal secret. Every credential is referenced by env var name (tokenEnv,gitTokenEnv, and nowbroker.uriEnv).But the git remotes leak the forge token
~/LTMS/kb/.git/confighas the token written into the remote URL:Both worker worktrees under
~/LTMS/.fleet-worktrees/inherit the same URL. The file is mode 664.This defeats the credential scrub completely. The scrub removes environment variables; it cannot remove a token written into a file inside the very repo the member is told to work in. A member that never sees
WORKER_GITEA_TOKENin its environment can still read it withgit remote -v.I found this by accident, and in doing so I printed the token into an operator transcript. It needs rotating, and so does
AI_GATEWAY_TOKEN, which I exposed separately in the same session by using${VAR:-default}to test whether it was set — that expands to the value.Both mistakes are the same shape and both are worth designing against: the credential leaves through a channel nobody classified as a credential channel. A fleet manager that reports host state will print git remotes, process lists and config files. Every one of those is a leak path.
Suggested immediate fix, separate from any manager work: use ssh remotes, or a credential helper, and never
git clonewith the token inline.A false alarm that teaches operators to ignore warnings
Startup logs this on
fleet01:xfhas notokenEnvin the config. The name comes fromFleetConfig.Profile's compact constructor, which defaultstokenEnvto"BRIDGED_WORKER_TOKEN"for every profile that leaves it unset — including opencode profiles that need no token at all. So the daemon warns, at every boot, about a variable that nobody configured and nothing needs.The report itself is good and I want to keep it. The default is what makes it lie. A profile that needs no token should produce no line.
6. The shared broker
One LavinMQ 2.9.1 container runs on fleet01:
fleet-lavinmq, imagecloudamqp/lavinmq:2.9.1, volumefleet-lavinmq-data,--restart unless-stopped, listening on0.0.0.0:5672and0.0.0.0:15672./macfleet-mac/fleet01fleet-fleet01guestisadministratoron/only, and was removed from both fleet vhosts. Neither fleet user has a management tag, so both get 401 from the HTTP API. Inspect the broker withguest:guestfrom on fleet01.The broker had to live here, not on the Mac. Two measured facts forced it: fleet01 cannot reach the Mac, and — until #152 landed today — an unreachable broker at boot stopped the daemon from starting at all. The second is fixed; the first is not.
Isolation is enforced, not just agreed. I ran the AMQP contract suite twice with the Mac's credential: 8/8 pass against
/mac, and 8 errors out of 8 against/fleet01. The permission boundary is real.Related, and now more likely to matter: #154 — the inbox pulls whole queues into an unbounded in-memory map, so the broker-side limits never apply.
7. Project state
~/LTMS/kbis the akb/kb checkout the lead works in. It sits on branchllm-backend-configurable, 3 commits behindorigin/main, with a modifiedvendor/graphitisubmodule. Two worker worktrees are left over from earlier runs, both dirty, both on branches that were already merged:.fleet-worktrees/57b308-4→worker/debrand-code-assumptions-b-57ac39-4.fleet-worktrees/fec975-1→worker/debrand-identity-587928-1Nothing reaps these.
lifecycle.idleTtlSecondsreaps members, not their worktrees.8. What a fleet manager would have to own
This is the point of the ticket. Everything above is one host, set up by hand. Ordered by how much it hurt.
1. Nothing keeps anything alive. No supervisor for
fleetd, none forherdr. A reboot ends the fleet silently. The Mac solved this with launchd; the Linux answer exists in the repo asdeploy/bridged.servicebut is not installed and carries a known secret defect. This is the single biggest gap.2. A dead lead is never restored, and nothing says so.
LeadLauncher.ensureLeads()runs once, inline inFleetd.main(). There is no supervision loop. If the lead pane dies an hour later, the slot stays empty until someone restarts the daemon, and no log line reports it. Related: #150 — leads always reportready: false, so the status endpoint cannot be used to detect this either.3. Deployment is manual, per host, and drifts.
git pull+mvn package+restart.sh, typed by a human on each machine. There is no shared artefact and no record of which host runs which commit. Today both hosts match only because I checked.4. Config drift has no guard. Different file names per host (
bridged.yamlvsfleetd.yaml), different profile sets, and comments that are already wrong. Config files are gitignored, so a change to what a key means can ship green and break a live host.5. There is no cross-host anything. Two fleets now share a broker, and that is all they share.
fleet_listshows only local leads. A Mac lead cannot see, message, or coordinate with a fleet01 lead. Logs are local files on each host. If a fleet manager is meant to answer "what is my whole fleet doing", none of that exists yet.6. Diagnosis reads the wrong source by default. Two herdr sessions on one host, and the plain CLI talks to the wrong one. Any status a manager reports must name the socket it read.
7. Credentials leak through channels nobody classified. Git remote URLs today. Process lists and config dumps tomorrow. A manager that displays host state is a new leak surface by construction, and it should be designed with redaction as a rule rather than as care.
8. Nothing cleans up. Stale worktrees, stale panes in the other herdr session, 173 orphan queues left on the old Mac-local broker. Each is small. Together they are the reason a host slowly stops being understandable.
What already works and should not be redesigned
~/.zprofileso non-login member panes never inherit them. Defence before the scrub, not instead of it.broker.uriEnvthere is now no literal secret in either host's config.--checkshape ofscripts/redeploy-bridged.sh: read-only, reports whether each named variable resolves, never prints a value. That is the right model for anything a manager runs against a host.Not verified
opuslead can start now that the login exists./fleet01; the broker connection is proven, an end-to-end delegation on this host is not.