Skip to content

feat(cli): pin plan chip above the composer + dedup the inline checklist#216

Merged
cukas merged 1 commit into
mainfrom
feat/plan-progress-rail
Jun 16, 2026
Merged

feat(cli): pin plan chip above the composer + dedup the inline checklist#216
cukas merged 1 commit into
mainfrom
feat/plan-progress-rail

Conversation

@cukas

@cukas cukas commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Move the one-line plan-progress chip (◈ STATE · PLAN id · Step n/m · bar · % · current step) out of the top ChromeBar into a new PlanChip pinned directly above the chat input, so plan state is glanceable at the point of focus instead of buried at the top of the dynamic region.

  • Extract PlanChip (app-views); render it in BottomChromeSection above the composer; drop the chip + its four plan props from ChromeBar.
  • Suppress the redundant inline plan-step checklist while a plan shows (TodoList planActive), keyed on the chip's OWN visibility predicate (planChipVisible = buildPlanChromeSummary(...).visible) so the two surfaces never drift — incl. the post-done retain window. Live (non-plan) todos always render (todos-marker forces source:'live').
  • Reserve the chip's single row in the bottom-chrome budget (estimateBottomChromeExtraRows hasPlanChip); wrap="truncate-end" pins the chip to one row so a long line can't wrap past that reservation.
  • Drop the auto-open rail takeover idea; Ctrl+G stays the on-demand rail.

Bundled pre-existing fix (root cause of the above budget being effective): a KERN codegen precedence bug compiled (cond ? a : b) + x as (cond) ? a : (b + x). In estimateVisibleBlockBudget this made chat mode IGNORE all overlayReservedRows (pickers/images/spinner/question cards/chip), over-budgeting the transcript; it also hit buildTerminalReplaySnapshot's lowerChromeRows. Worked around by splitting the bare ternary into its own let (KERN-GAP notes left at both sites for the compiler team).

Validated: kern:compile + typecheck clean; full suite 3213 passing (only the pre-existing, unrelated agy-probe-e2e fails). +2 regression tests lock the chip-row budget. Reviewed twice by the 6-engine agon panel; all findings addressed or verified non-issues.

⚔️ Forged by Agon

Move the one-line plan-progress chip (◈ STATE · PLAN id · Step n/m · bar ·
% · current step) out of the top ChromeBar into a new PlanChip pinned
directly above the chat input, so plan state is glanceable at the point of
focus instead of buried at the top of the dynamic region.

- Extract PlanChip (app-views); render it in BottomChromeSection above the
  composer; drop the chip + its four plan props from ChromeBar.
- Suppress the redundant inline plan-step checklist while a plan shows
  (TodoList planActive), keyed on the chip's OWN visibility predicate
  (planChipVisible = buildPlanChromeSummary(...).visible) so the two
  surfaces never drift — incl. the post-done retain window. Live (non-plan)
  todos always render (todos-marker forces source:'live').
- Reserve the chip's single row in the bottom-chrome budget
  (estimateBottomChromeExtraRows hasPlanChip); wrap="truncate-end" pins the
  chip to one row so a long line can't wrap past that reservation.
- Drop the auto-open rail takeover idea; Ctrl+G stays the on-demand rail.

Bundled pre-existing fix (root cause of the above budget being effective):
a KERN codegen precedence bug compiled `(cond ? a : b) + x` as
`(cond) ? a : (b + x)`. In estimateVisibleBlockBudget this made chat mode
IGNORE all overlayReservedRows (pickers/images/spinner/question cards/chip),
over-budgeting the transcript; it also hit buildTerminalReplaySnapshot's
lowerChromeRows. Worked around by splitting the bare ternary into its own
`let` (KERN-GAP notes left at both sites for the compiler team).

Validated: kern:compile + typecheck clean; full suite 3213 passing (only the
pre-existing, unrelated agy-probe-e2e fails). +2 regression tests lock the
chip-row budget. Reviewed twice by the 6-engine agon panel; all findings
addressed or verified non-issues.

⚔️ Forged by [Agon](https://github.com/KERNlang/agon)

Co-Authored-By: agon (KERN) <292465531+KERN-Agon@users.noreply.github.com>
@cukas cukas merged commit 44e7ba6 into main Jun 16, 2026
2 checks passed
@cukas cukas deleted the feat/plan-progress-rail branch June 16, 2026 15:08
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.

2 participants