0.12.0's herdr leftovers are not both inert - #379
Merged
Merged
Conversation
The hook is inert as dl now runs, not unconditionally: HERDR_ENV, HERDR_PANE_ID and HERDR_SOCKET_PATH are herdr's own variables, so the `herdr --remote` mode the same entry recommends sets all three and the leftover hook resumes reporting. The socket mount is not inert at all. It is a capability the container still holds, and 0.8.0's README disclosure of what it grants went out with the feature while the mount stayed. Also: the setup pass has three stages, not one. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewer's GuideRefines the 0.12.0 documentation around herdr-related leftovers and provisioning stages, clarifying that upgrading does not remove certain artifacts, that one leftover hook can become active again under herdr remote usage, that an old socket mount remains a live capability until workspace recreation, and correcting the README’s description of the current setup stages. Flow diagram for removing legacy herdr leftoversflowchart TD
A[Workspace created with 0.8.0-0.11.0] --> B[Upgrade to 0.12.0]
B --> C[Legacy hook remains]
B --> D[Socket mount remains]
C --> E{herdr --remote session?}
E -->|No| F[Hook is inert as dl now runs]
E -->|Yes| G[Hook reads HERDR_ENV, HERDR_PANE_ID, and HERDR_SOCKET_PATH]
G --> H[Reported agent state can pin the badge]
D --> I[Container retains control of the herdr session]
C --> J[dl <ws> recreate]
D --> J
J --> K[Legacy hook and socket mount are removed]
Flow diagram for current provisioning stagesflowchart TD
A[Setup pass] --> B[Hostname stage]
B --> C{Zellij switch enabled?}
C -->|Yes| D[Zellij configuration stage]
C -->|No| E{Terminal title configured?}
D --> E
E -->|Yes| F[Terminal title stage]
E -->|No| G[Probe]
F --> G
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
This was referenced Aug 24, 2026
Merged
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.
Retrospective
wf-reviewof #376 (which merged unreviewed — Sourcery was out of quota) found the retraction itself sound: I independently reproduced a realgit revert -m 1and confirmed nothing from #369's--rmgrammar or #374's hostname change was undone. What is wrong is one paragraph of the CHANGELOG, and it is wrong in the direction that matters.The hook is inert as
dlnow runs, not unconditionally0.12.0 says:
True of
dl. ButHERDR_ENV,HERDR_PANE_IDandHERDR_SOCKET_PATHare herdr's own variables, notdl's — and the replacement the same entry recommends one paragraph earlier isherdr --remote <workspace-id>.devpod, which sets all three itself. So the leftover~/.devlaunch/herdr-agent-state.pywakes up and resumes reporting agent state from adlthat no longer has anything to say about it. #367 established that a reported state overrides herdr's native detection and does not decay, so a stale report can pin a badge the remote server would otherwise have got right.The entry recommends the exact thing that un-inerts the leftover it calls inert.
The socket mount was never inert
It is a capability the container still holds. 0.8.0's README said what it grants:
That sentence was deleted with the feature. The mount was not — it lands at creation and leaves at creation, so every container created while 0.8.0–0.11.0 was installed still has it, with the disclosure gone and
DEVLAUNCH_NO_HERDRno longer read, so it cannot be turned off after the fact either.dl <ws> recreateis the only thing that removes it.Calling that "inert" in the same breath as the hook is the part worth correcting: a reader who upgrades to 0.12.0 reasonably concludes there is nothing to do.
What this changes
CHANGELOG only, plus one unrelated README count. The rewritten entry:
dl <ws> recreateis the actionherdr --remoteas what wakes itAlso
README.md:836said naming the container "is the one stage today".setup_stages(provision.rs:989-1030) builds three: hostname unconditionally, zellij underToolsSwitch::Install + ZellijSwitch::Install, and the terminal title underSome(title). #376 fixed the in-code sibling counts (039d8bc) and missed the README's. Pre-existing — it predates #367.Not fixed here
The review's third finding: the diagnostic defect that motivated the whole retraction — a stage's stderr explaining why it failed is discarded, only the exit status becomes a
ProvisionEvent— still applies to every remaining stage (provision.rs:1945). That is already #377, filed 13 minutes after #376 merged, and it is the highest-value item still outstanding here.Verified
pixi run -q python -m pytest test/ --ignore=test/e2e: 20 failed / 283 passed, byte-identical to pristinemainin this scratch clone (the failures all need a builtdlbinary, which CI has and a fresh clone does not). No test changes: this is documentation, and the claims it corrects were checked againstprovision.rs,git show abc64d9:README.mdfor the deleted disclosure, and #367's reported-state-overrides-native semantics.🤖 Generated with Claude Code
Summary by Sourcery
Clarify the behavior and cleanup requirements of legacy herdr leftovers, and align the README with the current provisioning stage count.
Bug Fixes:
Documentation: