You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Windows: Full-mode manifest still gates open/open-link/last to macos+linux after #31 revert #43
On Windows the manifest (bfe0de8, and current main) gates the Full-review entrypoints — the [[build]], the doc pane, and the open / open-link / last actions plus the markdown link_handler — to ["macos","linux"]. So Windows users get only capture / copy-* / manage; the whole plannotator-tui review flow is unreachable, even though scripts/fetch-plannotator-tui.ps1 exists and the tui ships an x86_64-pc-windows-msvc.exe asset.
I ran the ps1 locally: it fetches + sha256-verifies + stages bin/plannotator-tui.exe (0.7.0) cleanly, and plannotator-tui.exe --version runs. Flipping the three actions to include windows makes them work as-is, since Herdr's relative-program resolver applies to actions (they use ./bin/plannotator-tui.exe).
The docpane command can't use ./bin/… — the resolver doesn't apply to panes; they spawn with the review folder as --cwd. The Unix manifest sidesteps this with a wrapper resolving via $HERDR_PLUGIN_ROOT:
That wrapper needs sh+bash, which native Windows (no Git Bash) lacks. That's the piece still missing for a clean Windows re-enable.
Question
Would a pwsh-based pane wrapper resolving the binary via $HERDR_PLUGIN_ROOT (mirroring the pattern herdr-file-viewer / herdr-sidebar already use for their -windows action variants) be the accepted path to re-land Windows Full-mode? Happy to open a PR along those lines if so.
Thanks, and yes, we want this. Two corrections and the shape we'll merge.
Flipping the three actions alone doesn't work: open and last launch the doc pane, which would still be gated off, so every review fails to open.
A second doc pane can't exist. Herdr rejects duplicate pane ids even with disjoint platforms, and a PowerShell wrapper in the middle is out: it puts a process between Herdr and the TUI, and on 0.8.2 the plugin root arrives as an extended-length \\?\ path that PowerShell mishandles.
Accepted design: a separate Windows install variant, windows-full/herdr-plugin.toml, requiring Herdr 0.9.0, where panes resolve relative programs against the plugin root. Its doc pane is direct argv: ["./bin/plannotator-tui.exe", "herdr", "pane"], no wrapper. Actions use the same direct argv. The root manifest stays as is; Windows on 0.8.2 keeps Lite.
The acceptance checklist (manifest parity, the fetch contract, and what the Windows CI runner must prove) is going into the repo shortly and I'll link it here. If you want to take the PR against it, say so. You have Windows hardware and we don't, so your live results would also count as the native qualification.
Native Windows results, since they're the blocker on hardware you don't have. Measured against herdr 0.9.0 stable (protocol 22), Windows 11 Pro 10.0.22621, PROCESSOR_ARCHITECTURE=AMD64, plugin at 7c8f5a1. Method: throwaway plugin link plugins, one pane per case, opened with herdr plugin pane open --entrypoint <id> --cwd <dir>; outcome read from pane.exit in herdr-server.log.
TL;DR: the accepted design works. ./bin/plannotator-tui.exe as a direct-argv doc pane resolves correctly from a review-folder cwd on 0.9.0.
Reading the exit codes
Outcome
Meaning
plugin_pane_open_failed
CreateProcessW failed synchronously, no pid — and the error names the exact path herdr passed, which is what makes resolution observable
exit 0 / 1
image started and ran (1 = herdr-annotate editor refusing without a pending annotation)
exit 4294901760 (0xFFFF0000)
image started and then exited abnormally — the log shows pane.spawned outcome="ok" pid=… first. Not a spawn failure.
1. Panes resolve relative programs against the plugin root
["./bin/herdr-annotate.exe", "editor"], plugin root C:\Users\<user>\hp, opened with --cwd C:/projects/terminal-setup → exit 1. Found and ran, from a cwd containing no bin/.
A deliberately missing relative program makes the resolution explicit:
CreateProcessW `"\\?\C:\Users\<user>\hp\bin\nope.exe editor"`
in cwd `Some("C:/projects/terminal-setup")` failed: os error 2
Resolved against the plugin root; cwd passed separately. Not source-dependent — this was a linked plugin, not a GitHub install.
2. Resolved paths arrive extended-length, and that is what kills a PowerShell wrapper
Only relative spellings get rewritten. An absolute missing program reports CreateProcessW "C:\Users\<user>\hp\bin\nope2.exe" — no prefix.
Isolating it on one binary (a copy of powershell.exe staged at <root>/bin/probe.exe), every run with --cwd outside the root:
Program as written in the manifest
Exit
C:\Users\<user>\hp\bin\probe.exe
0
\\?\C:\Users\<user>\hp\bin\probe.exe
4294901760
./bin/probe.exe
4294901760
.\bin\probe.exe
4294901760
bin/probe.exe
4294901760
bin\probe.exe
4294901760
./bin/probe.exe, cwd = plugin root
4294901760
Rows 1 and 2 differ only by a prefix typed in by hand. So the failure is the extended-length image path — not relative resolution as such, and not the pane cwd, since row 7 fails where a cwd-relative lookup would have succeeded. Not path length: identical at a 36-character binary path and a 140-character one. Native binaries are unaffected.
So the checklist's "no launcher process between Herdr and the TUI" is stronger than a design preference on Windows — a PowerShell-wrapped pane cannot stay up. Good news for windows-full, since plannotator-tui is native.
3. A correction to the \\?\ note in this thread
On 0.9.0 the extended-length form reaches the program argument, but HERDR_PLUGIN_ROOT read inside a pane arrives in normal form (C:\Users\<user>\probe). So code rebuilding a path from the env var and code reading the image path see different things. Worth pinning, given the checklist's "do not blindly remove \\?\" row.
What this does not show
Both come from the CLI's plugin.pane.open. A pane opened by the plugin itself over the socket is not exercised.
plannotator-tui was never run — this is "the pane can start", not rendering, q, or teardown.
ARM64 untested; this machine is AMD64.
Taking the PR
I'd like to, against docs/windows-full-acceptance.md. Two questions before I start:
Onboarding sections 7/8/9 are referenced by §1, §3 and §6 but I can't find that document in the repo. Is it published somewhere, or could it be added?
§2's subdirectory staging.fetch-plannotator-tui.ps1 does Set-Location (Join-Path $PSScriptRoot "..") and writes ./bin, so called from windows-full/ it stages to root bin/ — which §2 explicitly refuses. Do you want a destination parameter on the shared fetcher, or a windows-full/scripts/ wrapper that supplies it? Happy either way; it changes which regression tests I add.
I can cover §1, §2 and the AMD64 half of §4 on this hardware. §3's GitHub Windows runner I can attempt, but flagging early that §4's native ARM64 row is not closeable here.
Activity
backnotprop commentedon Sep 8, 2026
Thanks, and yes, we want this. Two corrections and the shape we'll merge.
openandlastlaunch thedocpane, which would still be gated off, so every review fails to open.docpane can't exist. Herdr rejects duplicate pane ids even with disjoint platforms, and a PowerShell wrapper in the middle is out: it puts a process between Herdr and the TUI, and on 0.8.2 the plugin root arrives as an extended-length\\?\path that PowerShell mishandles.Accepted design: a separate Windows install variant,
windows-full/herdr-plugin.toml, requiring Herdr 0.9.0, where panes resolve relative programs against the plugin root. Itsdocpane is direct argv:["./bin/plannotator-tui.exe", "herdr", "pane"], no wrapper. Actions use the same direct argv. The root manifest stays as is; Windows on 0.8.2 keeps Lite.The acceptance checklist (manifest parity, the fetch contract, and what the Windows CI runner must prove) is going into the repo shortly and I'll link it here. If you want to take the PR against it, say so. You have Windows hardware and we don't, so your live results would also count as the native qualification.
docs: add the windows full acceptance checklist (#44)
backnotprop commentedon Sep 9, 2026
The acceptance checklist is in the repo now: https://github.com/plannotator/herdr-annotate/blob/main/docs/windows-full-acceptance.md. That's the target for the
windows-full/variant if you take it.timo-tigges commentedon Sep 17, 2026
Native Windows results, since they're the blocker on hardware you don't have. Measured against herdr 0.9.0 stable (protocol 22), Windows 11 Pro 10.0.22621,
PROCESSOR_ARCHITECTURE=AMD64, plugin at7c8f5a1. Method: throwawayplugin linkplugins, one pane per case, opened withherdr plugin pane open --entrypoint <id> --cwd <dir>; outcome read frompane.exitinherdr-server.log.TL;DR: the accepted design works.
./bin/plannotator-tui.exeas a direct-argvdocpane resolves correctly from a review-folder cwd on 0.9.0.Reading the exit codes
plugin_pane_open_failedCreateProcessWfailed synchronously, no pid — and the error names the exact path herdr passed, which is what makes resolution observable0/11=herdr-annotate editorrefusing without a pending annotation)4294901760(0xFFFF0000)pane.spawned outcome="ok" pid=…first. Not a spawn failure.1. Panes resolve relative programs against the plugin root
["./bin/herdr-annotate.exe", "editor"], plugin rootC:\Users\<user>\hp, opened with--cwd C:/projects/terminal-setup→ exit1. Found and ran, from a cwd containing nobin/.A deliberately missing relative program makes the resolution explicit:
Resolved against the plugin root; cwd passed separately. Not source-dependent — this was a linked plugin, not a GitHub install.
2. Resolved paths arrive extended-length, and that is what kills a PowerShell wrapper
Only relative spellings get rewritten. An absolute missing program reports
CreateProcessW "C:\Users\<user>\hp\bin\nope2.exe"— no prefix.Isolating it on one binary (a copy of
powershell.exestaged at<root>/bin/probe.exe), every run with--cwdoutside the root:C:\Users\<user>\hp\bin\probe.exe0\\?\C:\Users\<user>\hp\bin\probe.exe4294901760./bin/probe.exe4294901760.\bin\probe.exe4294901760bin/probe.exe4294901760bin\probe.exe4294901760./bin/probe.exe, cwd = plugin root4294901760Rows 1 and 2 differ only by a prefix typed in by hand. So the failure is the extended-length image path — not relative resolution as such, and not the pane cwd, since row 7 fails where a cwd-relative lookup would have succeeded. Not path length: identical at a 36-character binary path and a 140-character one. Native binaries are unaffected.
So the checklist's "no launcher process between Herdr and the TUI" is stronger than a design preference on Windows — a PowerShell-wrapped pane cannot stay up. Good news for
windows-full, sinceplannotator-tuiis native.3. A correction to the
\\?\note in this threadOn 0.9.0 the extended-length form reaches the program argument, but
HERDR_PLUGIN_ROOTread inside a pane arrives in normal form (C:\Users\<user>\probe). So code rebuilding a path from the env var and code reading the image path see different things. Worth pinning, given the checklist's "do not blindly remove\\?\" row.What this does not show
plugin.pane.open. A pane opened by the plugin itself over the socket is not exercised.plannotator-tuiwas never run — this is "the pane can start", not rendering,q, or teardown.Taking the PR
I'd like to, against
docs/windows-full-acceptance.md. Two questions before I start:fetch-plannotator-tui.ps1doesSet-Location (Join-Path $PSScriptRoot "..")and writes./bin, so called fromwindows-full/it stages to rootbin/— which §2 explicitly refuses. Do you want a destination parameter on the shared fetcher, or awindows-full/scripts/wrapper that supplies it? Happy either way; it changes which regression tests I add.I can cover §1, §2 and the AMD64 half of §4 on this hardware. §3's GitHub Windows runner I can attempt, but flagging early that §4's native ARM64 row is not closeable here.
docs: document the windows-full install
test: restore HERDR_ANNOTATE_BIN after the pane run
test: initialize the unc cleanup variables before the try
test: drop the meaningless exit status check around the pane case
test: assert the windows-full build scripts exist
fix: treat an empty PLANNOTATOR_TUI_BIN as absent
fix: exit zero explicitly after a successful fetch
feat: add the windows-full manifest variant (#49)
backnotprop commentedon Oct 15, 2026
Fixed by #49 and #58: Windows now has its own full-mode manifest with open, open-link and last. Thanks for the report.