Skip to content

fix(bin): capture the full viewport for Herdr composer reads so a slash-command popup cannot hide the composer - #5876

Merged
kunchenguid merged 4 commits into
kunchenguid:mainfrom
andrewesweet:fm/herdr-composer-viewport
Sep 27, 2026
Merged

kunchenguid merged 4 commits into
kunchenguid:mainfrom
andrewesweet:fm/herdr-composer-viewport

Conversation

@andrewesweet

@andrewesweet andrewesweet commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Intent

Herdr composer reads capture the full visible viewport instead of a bounded tail, so a tall Claude Code slash-command popup no longer hides the composer row.

On Claude Code 2.1.283 the slash-command popup renders about 19 menu rows between the composer and the pane bottom, which pushes the composer outside the Herdr adapter's 20-row tail capture.
The pre-Enter payload proof then reads an empty composer, judges a typed /exit unsent, clears it with Ctrl+U, and reports a failed send without pressing Enter, so a controlled exit of a Claude worker on Herdr never exits it.
The Herdr adapter's own composer state and content reads (fm_backend_herdr_composer_state and fm_backend_herdr_composer_content) now capture the visible viewport, while the shared steering-inbox composer read stays bounded, and the proof-lines value becomes a bound on clear cost rather than on capture size.
Growing the window only adds rows above the composer, so the bottom-most shape selection and every previously passing verdict are unchanged, and the suffix refusal from #5336 is kept.
fm_backend_herdr_composer_content drops its optional line-count argument; all callers are inside bin/backends/herdr.sh.
Portable regressions cover the popup-below-composer layout, the live submit-confirmation test gains a third /exit scenario, and the runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes #5533.

What Changed

  • fm_backend_herdr_composer_state and fm_backend_herdr_composer_content now read the pane's full visible viewport (pane read --source visible, styled via the new fm_backend_herdr_visible_capture_ansi, replacing the bounded fm_backend_herdr_capture_ansi), so Claude Code 2.1.283's ~19-row slash-command popup can no longer push the composer row outside a 20-row tail. Previously the pre-Enter payload proof read an empty composer, judged a typed /exit unsent, cleared it with Ctrl+U, and returned send-failed without pressing Enter. fm_backend_herdr_composer_content drops its optional line-count argument; fm_backend_herdr_proof_lines now only bounds the Ctrl+U clear presses, not a capture size.
  • FM_COMPOSER_CAPTURE_LINES keeps bounding the tail-capture adapters and the shared steering-inbox composer read; its comment, docs/configuration.md, docs/herdr-backend.md, and the runtime-backends verification record state the new ownership split and the dated Herdr 0.9.0 / Claude Code 2.1.283 measurement.
  • Portable regressions in tests/fm-backend-herdr.test.sh build a popup-below-composer screen and assert both the pending state verdict and a single submitted Enter with no --lines read; the opt-in live guard gains a third scenario that types /exit behind its popup and requires the Claude process to exit.

Closes #5533.

🤖 Generated with Claude Code

Risk Assessment

✅ Low: Well-bounded root-cause fix: two herdr composer reads swap a bounded tail for the already-verified viewport primitive, the removed helper and dropped argument have no surviving callers, and the shared classifier's refusal gates all key off rows below the selected shape so added rows above cannot change a prior verdict.

Testing

Stood up throwaway Herdr labs through bin/fm-herdr-lab.sh and drove real Claude Code 2.1.283 on herdr 0.9.0. The repo's live submit-confirmation guard passed all three scenarios, including the new one that types /exit behind Claude's command popup and requires the agent to actually exit. A second live lab captured the real pane: the composer sits at viewport row 15 of 37 with 20 popup rows below it, so the old 20-row tail window (rows 18-37) excludes it; on that same live pane the base-commit bounded read returned an empty composer and unknown state while the target-commit viewport read returned /exit and pending, then the submit path landed Enter and Claude exited. The two new portable regressions pass on the target commit and fail on the base commit. Visual evidence is a rendered PNG of the captured live pane screen with row numbers; the product surface here is a terminal pane, so the pane capture is the end-user view. The suffix-only truncated-read-back refusal (#5336) was never driven against the live CLI — only stubbed-transport regressions cover it — so it is reported untested.

  • Live validation: ✅ go - 5 of 6 scenarios driven live against the product
Scenario Result Live Evidence
A typed /exit hidden behind Claude's slash-command popup is read as pending, not empty ✅ pass live Live Herdr lab, Claude Code 2.1.283: composer at viewport row 15 of 37 with 20 popup rows below; fm_backend_herdr_composer_content returned /exit and composer_state returned pending (live-clau…
Regression reproduction: the base commit's bounded tail read goes blind on the same live pane ✅ pass live Base commit fba81cb's fm_backend_herdr_composer_content returned [] and composer_state returned unknown against the identical live pane holding the typed /exit (live-composer-read-base-vs-fi…
A user exits a Claude worker on Herdr: the typed /exit is proven, submitted, and the agent actually exits ✅ pass live Live submit path reported a non-send-failed verdict, the agent registration disappeared, and the pane fell back to the shell prompt (live-submit-confirm-guard.log third scenario; live-claude-after-exi…
A normal operational steer still lands and renders its reply after the viewport change ✅ pass live First scenario of the live guard: fm_backend_herdr_send_text_submit reported empty and the requested token rendered in the real Claude pane (live-submit-confirm-guard.log)
A U+2063-marked away-supervisor payload whose read-back drops the mark is still submitted ✅ pass live Second scenario of the live guard against real Claude Code 2.1.283 (live-submit-confirm-guard.log)
Adversarial: a suffix-only composer read-back still withholds Enter and clears with a bounded Ctrl+U budget (#5336 refusal kept) ⏸️ untested no The prior payload established only stubbed-transport regressions in tests/fm-backend-herdr.test.sh for this path, never a live run, so no live result exists. Driving it live needs a way to force the…
Evidence: Same pane capture as plain text

Source: Same pane capture as plain text

CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false CLAUDE_CODE_SEND_FEEDBACK=0 claude --dangerously-skip-permissions --settings
 '{"feedbackDrafts":"off"}'

01M3HFB0MVQAVF86ZGS8ZKE7WK on  HEAD ⎈ default/api-dbhackathon-swedencentral-aroapp-io:6443/andrew.sweet@dbaihackathon20
26outlook.onmicrosoft.com
(ins)I  CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false CLAUDE_CODE_SEND_FEEDBACK=0 claude --dangerously-skip-permissions --
settings '{"feedbackDrafts":"off"}'
 ▐▛███▛█   Claude Code v2.1.283
▝▜██████▀  Opus 5.5 (1M context) with high effort · Claude Max
 ▝▝   ▝▝   ~/.no-mistakes/worktrees/b11fc0c68e6e/01M3HFB0MVQAVF86ZGS8ZKE7WK

⚠ Your login expires in 1 day · run /login to renew

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ /exit
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  ⚠ Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker · restart with CLAUDE_CODE_FORCE_SESSION_P…
  /exit                                          Exit the CLI
  /code-craftsmanship:domain-driven-design       (code-craftsmanship) Model software around the business domain using
                                                 bounded contexts, aggregates, and ubiquitous language. Use when the…
  …ode-craftsmanship:software-design-philosophy  (code-craftsmanship) Manage software complexity through deep
                                                 modules, information hiding, and strategic programming. Use when th…
  /domain-driven-design                          Model software around the business domain using bounded contexts,
                                                 aggregates, and ubiquitous language. Use when the user mentions "do…
  /quiet                                         Enter quiet supervision mode when the captain invokes /quiet or asks
                                                 for quiet mode, quiet-while-present, or fewer routine wake turns wh…
  /copy-editing                                  When the user wants to edit, review, or improve existing marketing
                                                 copy, or refresh outdated content. Also use when the user mentions …
  /context                                       Visualize current context usage as a colored grid
  /product-marketing-context                     When the user wants to create or update their product marketing
                                                 context document. Also use when the user mentions 'product context,…
  /software-design-philosophy                    Manage software complexity through deep modules, information hiding,
                                                 and strategic programming. Use when the user mentions "module desig…
  /pptx                                          Use this skill any time a .pptx or .potx file is involved in any way
                                                 — as input, output, or both. This includes: creating slide decks, p…
  /usage-credits                                 Configure usage credits or request them from your admin when you hit
                                                 a limit
Evidence: The old bounded 20-row tail of that capture (composer row absent)

Source: The old bounded 20-row tail of that capture (composer row absent)

  /exit                                          Exit the CLI
  /code-craftsmanship:domain-driven-design       (code-craftsmanship) Model software around the business domain using
                                                 bounded contexts, aggregates, and ubiquitous language. Use when the…
  …ode-craftsmanship:software-design-philosophy  (code-craftsmanship) Manage software complexity through deep
                                                 modules, information hiding, and strategic programming. Use when th…
  /domain-driven-design                          Model software around the business domain using bounded contexts,
                                                 aggregates, and ubiquitous language. Use when the user mentions "do…
  /quiet                                         Enter quiet supervision mode when the captain invokes /quiet or asks
                                                 for quiet mode, quiet-while-present, or fewer routine wake turns wh…
  /copy-editing                                  When the user wants to edit, review, or improve existing marketing
                                                 copy, or refresh outdated content. Also use when the user mentions …
  /context                                       Visualize current context usage as a colored grid
  /product-marketing-context                     When the user wants to create or update their product marketing
                                                 context document. Also use when the user mentions 'product context,…
  /software-design-philosophy                    Manage software complexity through deep modules, information hiding,
                                                 and strategic programming. Use when the user mentions "module desig…
  /pptx                                          Use this skill any time a .pptx or .potx file is involved in any way
                                                 — as input, output, or both. This includes: creating slide decks, p…
  /usage-credits                                 Configure usage credits or request them from your admin when you hit
                                                 a limit
Evidence: Base vs fixed composer read on the same live pane

Source: Base vs fixed composer read on the same live pane

viewport_rows=37 composer row = 15 old bounded tail window = rows 18..37 (composer excluded) FIXED (target commit, --source visible) composer_content=[/exit] composer_state=pending BASE (fba81cb, bounded --lines tail) composer_content=[] composer_state=unknown submit_verdict=unknown (Enter landed; post-Enter read fails because Claude exited) agent_exited=1

Live Herdr lab (session fm-lab-popup-proof2-*), Claude Code 2.1.283, herdr 0.9.0.
Typed /exit into the real composer; Claude rendered its slash-command popup below it.

viewport_rows=37   composer row = 15   old bounded tail window = rows 18..37 (composer excluded)

FIXED  (target commit, --source visible)   composer_content=[/exit]   composer_state=pending
BASE   (fba81cb, bounded --lines tail)     composer_content=[]        composer_state=unknown

After clearing and resubmitting through the fixed submit path:
  state_after_clear=empty
  submit_verdict=unknown   (Enter landed; the post-Enter agent read fails because Claude exited)
  agent_exited=1           (pane fell back to the shell)
Evidence: Live submit-confirmation guard transcript

Source: Live submit-confirmation guard transcript

ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 reports empty and renders the requested reply in isolated session fm-lab-herdr-submit-con-1927591-23935 ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 submits a U+2063 away-supervisor payload whose read-back drops the mark ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 proves and submits a typed /exit behind its command popup

ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 reports empty and renders the requested reply in isolated session fm-lab-herdr-submit-con-1927591-23935
ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 submits a U+2063 away-supervisor payload whose read-back drops the mark
ok - live Herdr submit confirm: Claude Code (2.1.283 (Claude Code)) on herdr 0.9.0 proves and submits a typed /exit behind its command popup
Evidence: Claude pane after the submitted /exit (agent gone, shell prompt back)

Source: Claude pane after the submitted /exit (agent gone, shell prompt back)

settings '{"feedbackDrafts":"off"}'
 ▐▛███▛█   Claude Code v2.1.283
▝▜██████▀  Opus 5.5 (1M context) with high effort · Claude Max
 ▝▝   ▝▝   ~/.no-mistakes/worktrees/b11fc0c68e6e/01M3HFB0MVQAVF86ZGS8ZKE7WK

⚠ Your login expires in 1 day · run /login to renew

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ /exit
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  ⚠ Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker · restart with CLAUDE_CODE_FORCE_SESSION_P…
  /exit                                          Exit the CLI
  /code-craftsmanship:domain-driven-design       (code-craftsmanship) Model software around the business domain using
                                                 bounded contexts, aggregates, and ubiquitous language. Use when the…
  …ode-craftsmanship:software-design-philosophy  (code-craftsmanship) Manage software complexity through deep
                                                 modules, information hiding, and strategic programming. Use when th…
  /domain-driven-design                          Model software around the business domain using bounded contexts,
                                                 aggregates, and ubiquitous language. Use when the user mentions "do…
  /quiet                                         Enter quiet supervision mode when the captain invokes /quiet or asks
                                                 for quiet mode, quiet-while-present, or fewer routine wake turns wh…
  /copy-editing                                  When the user wants to edit, review, or improve existing marketing
                                                 copy, or refresh outdated content. Also use when the user mentions …
  /context                                       Visualize current context usage as a colored grid
  /product-marketing-context                     When the user wants to create or update their product marketing
                                                 context document. Also use when the user mentions 'product context,…
  /software-design-philosophy                    Manage software complexity through deep modules, information hiding,
                                                 and strategic programming. Use when the user mentions "module desig…
  /pptx                                          Use this skill any time a .pptx or .potx file is involved in any way
                                                 — as input, output, or both. This includes: creating slide decks, p…
  /usage-credits                                 Configure usage credits or request them from your admin when you hit
                                                 a limit


01M3HFB0MVQAVF86ZGS8ZKE7WK on  HEAD ⎈ default/api-dbhackathon-swedencentral-aroapp-io:6443/andrew.sweet@dbaihackathon20
26outlook.onmicrosoft.com  10s
(ins)I

01M3HFB0MVQAVF86ZGS8ZKE7WK on  HEAD ⎈ default/api-dbhackathon-swedencentral-aroapp-io:6443/andrew.sweet@dbaihackathon20
26outlook.onmicrosoft.com
(ins)I

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

✅ **Test** - passed

✅ No issues found.

  • Live validation: ✅ go - 5 of 6 scenarios driven live against the product
Scenario Result Live Evidence
A typed /exit hidden behind Claude's slash-command popup is read as pending, not empty ✅ pass live Live Herdr lab, Claude Code 2.1.283: composer at viewport row 15 of 37 with 20 popup rows below; fm_backend_herdr_composer_content returned /exit and composer_state returned pending (live-clau…
Regression reproduction: the base commit's bounded tail read goes blind on the same live pane ✅ pass live Base commit fba81cb's fm_backend_herdr_composer_content returned [] and composer_state returned unknown against the identical live pane holding the typed /exit (live-composer-read-base-vs-fi…
A user exits a Claude worker on Herdr: the typed /exit is proven, submitted, and the agent actually exits ✅ pass live Live submit path reported a non-send-failed verdict, the agent registration disappeared, and the pane fell back to the shell prompt (live-submit-confirm-guard.log third scenario; live-claude-after-exi…
A normal operational steer still lands and renders its reply after the viewport change ✅ pass live First scenario of the live guard: fm_backend_herdr_send_text_submit reported empty and the requested token rendered in the real Claude pane (live-submit-confirm-guard.log)
A U+2063-marked away-supervisor payload whose read-back drops the mark is still submitted ✅ pass live Second scenario of the live guard against real Claude Code 2.1.283 (live-submit-confirm-guard.log)
Adversarial: a suffix-only composer read-back still withholds Enter and clears with a bounded Ctrl+U budget (#5336 refusal kept) ⏸️ untested no The prior payload established only stubbed-transport regressions in tests/fm-backend-herdr.test.sh for this path, never a live run, so no live result exists. Driving it live needs a way to force the…
  • FM_HERDR_SUBMIT_CONFIRM_LIVE=1 bash tests/fm-herdr-submit-confirm-live-e2e.test.sh (real Claude Code 2.1.283 in an isolated fm-lab-* Herdr session; three live scenarios)
  • Manual live lab: typed /exit into the real composer, captured the visible viewport, then compared fm_backend_herdr_composer_content/composer_state from the target commit against the same functions from base commit fba81cb on the same live pane
  • Manual live lab: cleared the composer, ran fm_backend_herdr_send_text_submit <target> /exit 3 0.4 1.2, confirmed the agent exited and the pane fell back to the shell
  • bash tests/fm-backend-herdr.test.sh (portable adapter suite, includes the two new popup-layout regressions)
  • Fail-before check: ran the new portable regressions against a git archive of base commit fba81cb — not ok - a composer above a slash-command popup must read pending, got 'unknown'
⚠️ **Document** - 1 info
  • ℹ️ docs/verification/runtime-backends.md:1167 - The dated record states "Verified live in the lab: with the popup up the state read answers pending (previously empty) and the payload proof returns /exit ... and the Claude process exits", while this run's test phase recorded the live verdict as inconclusive (the /exit scenario was not driven live; declined as test round 1 test-1, and review round 3 popup-fixture-rule-pair-is-load-bearing-and-unverified flagged the same missing evidence for the popup's rule-pair shape). Either the claim rests on an earlier lab run not reproduced here, or it should be softened to the measured popup geometry plus the portable regressions. Left unchanged because both underlying findings are recorded user decisions, and rewriting the record's verification claim would contradict them.
✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533
@andrewesweet
andrewesweet force-pushed the fm/herdr-composer-viewport branch from f24d86d to 358af97 Compare September 27, 2026 13:17
@andrewesweet andrewesweet changed the title fix: capture full Herdr viewport for composer reads fix(bin): capture the full viewport for Herdr composer reads so a slash-command popup cannot hide the composer Sep 27, 2026
@kunchenguid

Copy link
Copy Markdown
Owner

Speaking as Kun's firstmate:

Verdict: Whole thread + tip vs main 6839202a + linked #5533 reviewed. Verified still broken on main: fm_backend_herdr_composer_state / fm_backend_herdr_composer_content still capture via fm_backend_herdr_capture_ansi bounded by FM_COMPOSER_CAPTURE_LINES (20). First look on this tip; first-time fork CI/NM approved after diff review.

Tip vs main: Herdr adapter composer state/content reads switch to full visible viewport (pane read --source visible / new fm_backend_herdr_visible_capture_ansi). FM_COMPOSER_CAPTURE_LINES remains for other adapters and shared steering-inbox composer read; proof_lines now bounds Ctrl+U clear cost only. Drops optional line-count arg on Herdr composer_content. Portable regressions + live /exit-behind-popup scenario. Closes #5533. Suffix refusal from #5336 kept.

contract-class: restore — concrete existing Herdr submit/exit path broken when slash menu taller than the 20-row tail.

VISION.md (each rule)

  • One captain, one interface / peace of mind: aligns — restores controlled exit / truthful submit proof.
  • Authority is explicit and never inferred: aligns — no new autonomy.
  • Scripts own the mechanics, agents own the judgment: aligns — capture bound is scripted adapter mechanics.
  • A restart is a non-event: aligns.
  • Delegation with a spine: aligns.
  • The fleet outlives any vendor: aligns — named Herdr/Claude Code version-pinned adapter debt stays quarantined; shared inbox path stays bounded.
  • Scope: aligns — backend adapter fix for a recorded field incident.

Attestation: MATCH 358af97a91c7. CI: approved/queued 36321910379. NM: approved/queued 36321945027 / 36321910409. mergeable: MERGEABLE/UNSTABLE. Eligible auto-merge when CI green (restore). Prefer this PR over competing fix for #5533. Firstmate flag: no. Security tip: none.

@kunchenguid

Copy link
Copy Markdown
Owner

Speaking as Kun's firstmate:

CI SUCCESS 36321910379 + NM SUCCESS 36321910409; MERGEABLE. Squash-merging as restore (closes #5533).

@kunchenguid
kunchenguid merged commit 050a446 into kunchenguid:main Sep 27, 2026
20 checks passed
@kunchenguid

Copy link
Copy Markdown
Owner

Speaking as Kun's firstmate: this is merged. Thank you @andrewesweet — really appreciate you taking the time on this.

mehulbhagwani pushed a commit to mehulbhagwani/firstmate that referenced this pull request Sep 27, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
mehulbhagwani pushed a commit to mehulbhagwani/firstmate that referenced this pull request Sep 27, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
knowttl pushed a commit to knowttl/firstmate that referenced this pull request Sep 29, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
RooseveltAdvisors pushed a commit to RooseveltAdvisors/firstmate that referenced this pull request Sep 29, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
elliotttong pushed a commit to elliotttong/firstmate that referenced this pull request Sep 29, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
andrewesweet added a commit to andrewesweet/firstmate that referenced this pull request Sep 30, 2026
…sh-command popup cannot hide the composer (kunchenguid#5876)

* Fix Herdr composer reads blinded by the slash-command popup

Capture the full visible viewport for every Herdr composer state and content read instead of a bounded tail.
Claude Code renders its slash-command popup between the composer and the pane bottom, which pushes the composer outside a tail window.
The pre-Enter payload proof then read an empty composer, judged a typed command unsent, and cleared it without pressing Enter.
The proof-lines value now bounds only the clear cost, not the capture size.
Growing the window adds rows above the composer only, so bottom-most shape selection and prior verdicts are unchanged.
The suffix refusal is kept, and the shared inbox pending-line read stays a bounded tail.
Portable regressions cover the popup-below-composer layout, and the live submit-confirmation guard gains a third exit scenario.
The runtime-backends verification record documents the Herdr 0.9.0 and Claude Code 2.1.283 run.

Closes kunchenguid#5533

* no-mistakes(document): Clarify composer capture bound ownership

* no-mistakes(review): Drop unrequired bracketed-paste Enter fallback from live guard

* no-mistakes(review): Latch trust prompt, check idle composer arm first
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Herdr Claude submit drops /exit when the slash menu is taller than the history tail

2 participants