11 KiB
作成
LocalTicketBackend によって作成されました。
Intake summary
チャットビューの TUI で Markdown pipe table が読み取り可能に描画できない不具合を bug Ticket として整理した。対象 surface は通常の chat / conversation view に限定し、session history / Pod metadata / worker history / prompt context は変更しないことを invariant とした。通常の pipe table 表示、既存 Markdown/plain text の非退行、狭い terminal での安全な表示、関連テストまたは手動確認を受け入れ条件にしている。
State changed
要件・受け入れ条件・invariant・validation が揃っており、Orchestrator が implementation routing できる状態になった。
State changed
Ticket を workspace-panel が queued にしました。
State changed
Accepted queued implementation after reading the Ticket and current workspace state. This is a bounded TUI chat rendering bug fix and is independent of the active Ticket backend/orchestration-plan worktree, so it can proceed in a separate worktree without overlapping source surfaces beyond normal validation.
Decision
Routing decision: implementation_ready
Reason:
- The Ticket is scoped to the normal TUI chat/conversation view and has concrete acceptance criteria for pipe-table readability, non-regression, narrow terminal behavior, and tests/manual confirmation.
- It explicitly excludes Pod/session/history/context changes and non-chat surfaces.
- Current active implementation work is in Ticket backend/orchestration-plan tooling; this TUI rendering fix has low source-conflict risk and can proceed in a separate worktree.
IntentPacket:
Intent:
- Make ordinary Markdown pipe tables in assistant chat messages readable in the TUI conversation view without changing persisted history or model context.
Binding decisions / invariants:
- Only display/rendering behavior should change; do not mutate Pod history, session logs, worker history, prompt context, or stored message text for rendering.
- Target the normal chat/conversation view. Do not treat this as a Ticket panel,
yoi ticket show, docs rendering, or WebFetch extraction feature. - Do not pursue full GitHub Flavored Markdown table compatibility unless it falls out naturally from a small implementation; ordinary pipe tables are the acceptance target.
- Rendering must be robust: malformed or too-wide tables should not panic, drop message content, or break the surrounding message block.
- Preserve existing behavior for non-table Markdown/plain text as much as possible.
- Avoid broad rendering abstraction rewrites or new large parser dependencies unless investigation proves they are necessary; escalate first if so.
Implementation latitude:
- Coder may either add explicit table handling to the existing Markdown renderer or normalize table blocks into a readable plain-text fallback within the rendering layer.
- Column width/alignment/wrapping can be pragmatic and constrained by the existing TUI line/wrap model.
- Add unit/snapshot-like tests around the rendering function or a narrow test fixture for chat message rendering. If interactive manual verification is needed, include exact steps in the implementation report.
Escalate if:
- A large Markdown parser dependency or public rendering API redesign is needed.
- The change requires touching broad TUI surfaces outside chat/conversation rendering.
- Correctness would require changing stored message/history representation.
Validation:
- Focused TUI Markdown/chat rendering tests covering a simple pipe table and non-table regression.
- Narrow-terminal/wrapping safety test if feasible.
- Relevant
cargo test -p tui ...target(s). cargo fmt --check.git diff --check.cargo check --workspace.nix build .#yoibefore final completion because TUI/package behavior changes.
Implementation report
Implementation routing started.
Worktree/branch:
- Worktree:
.worktree/tui-chat-markdown-table-rendering - Branch:
tui-chat-markdown-table-rendering - Base/routing commit:
60609ec ticket: route tui markdown table rendering
Spawned sibling Coder Pod:
coder-tui-chat-markdown-table-rendering- Scope: non-recursive read on parent workspace root plus recursive write limited to the child worktree.
Note: an unrelated Ticket record update (tui-composer-history-persistence ready state) and project known-issues/objective records were committed before routing so the main workspace was clean enough for implementation side effects.
Implementation report
Coder implementation completed and is ready for sibling review.
Coder Pod:
coder-tui-chat-markdown-table-rendering- Commit:
f767ec7a5945aff588fe0b8ce224b30efe4c2a85 tui: render markdown pipe tables in chat - Worktree status before review: clean branch
tui-chat-markdown-table-rendering - Stopped after collecting output to reclaim delegated worktree scope.
Implementation summary:
- Adds
pulldown-cmarktable event handling tocrates/tui/src/markdown.rs. - Enables
Options::ENABLE_TABLESin the TUI chat Markdown renderer. - Converts ordinary Markdown pipe tables into readable monospace rows with box separators and alignment-aware padding.
- Keeps changes in the rendering layer only; no Pod/session/history/context storage changes.
- Adds focused tests for readable table rendering, malformed/ragged/wide safety, and non-table pipe text regression.
Coder-reported validation:
cargo test -p tui markdown -- --nocapture-> 17 passedcargo fmt --check-> OKgit diff --check-> OKcargo check --workspace-> OKnix build .#yoi-> OK
Review: approve
Approve.
Review evidence:
- Reviewed commit
f767ec7a5945aff588fe0b8ce224b30efe4c2a85on branchtui-chat-markdown-table-rendering; the only changed source file iscrates/tui/src/markdown.rs. - The change stays in the TUI Markdown rendering layer: it enables
pulldown_cmark::Options::ENABLE_TABLESin the existing renderer and collects/renders table events into display-onlyLineoutput. I did not find changes to Pod history, session logs, worker history, prompt context, or stored message text. - The renderer is used by the normal assistant chat/conversation rendering path (
ui.rs) and this commit does not touch Ticket panel,yoi ticket show, docs rendering, or WebFetch extraction surfaces. - Table rendering keeps cell text for ragged/extra-column rows, pads missing cells, computes display widths with
unicode-width, and falls back to ordinary event handling for non-table Markdown. Tests cover simple tables, alignment, ragged/too-wide safety, malformed table fallback, and non-table pipe text.
Validation run from the worktree:
cargo test -p tui markdown -- --nocapturepassed.cargo fmt --checkpassed.git diff --check f767ec7a5945aff588fe0b8ce224b30efe4c2a85^ f767ec7a5945aff588fe0b8ce224b30efe4c2a85passed.cargo check --workspacepassed.nix build .#yoipassed.
No blocking issues found.
Implementation report
Merge-ready dossier for human/orchestrator approval.
Status:
- Implementation branch:
tui-chat-markdown-table-rendering - Worktree:
.worktree/tui-chat-markdown-table-rendering - Commit under review:
f767ec7a5945aff588fe0b8ce224b30efe4c2a85 tui: render markdown pipe tables in chat - Reviewer:
reviewer-tui-chat-markdown-table-rendering - Review result: approved; no blocking findings.
Intent / invariant check:
- Makes ordinary Markdown pipe tables readable in the normal TUI chat/conversation Markdown renderer.
- Changes display/rendering behavior only.
- Does not mutate Pod history, session logs, worker history, prompt context, or stored message text.
- Does not expand scope to Ticket panel,
yoi ticket show, docs rendering, or WebFetch extraction. - Does not add a new large Markdown dependency or broad TUI rendering abstraction rewrite.
Implementation summary:
- Enables
pulldown-cmarkOptions::ENABLE_TABLESincrates/tui/src/markdown.rs. - Adds table event collection/rendering into readable monospace rows with separators and alignment-aware padding.
- Keeps ragged/extra-column/wide table content visible and pads missing cells.
- Adds focused tests for simple table rendering, ragged/wide safety, and non-table pipe text regression.
Validation evidence:
- Coder reported pass:
cargo test -p tui markdown -- --nocapturecargo fmt --checkgit diff --checkcargo check --workspacenix build .#yoi
- Reviewer independently ran and passed:
cargo test -p tui markdown -- --nocapturecargo fmt --checkgit diff --check f767ec7a5945aff588fe0b8ce224b30efe4c2a85^ f767ec7a5945aff588fe0b8ce224b30efe4c2a85cargo check --workspacenix build .#yoi
Residual risks / notes:
- This is intentionally a pragmatic table renderer, not a full GFM table compatibility project.
- Final merge/close/cleanup is intentionally not performed here without explicit merge approval.
State changed
Ticket closed; workflow_state を done に設定しました。
完了
Implemented, reviewed, merged, and validated.
Summary:
- Enabled Markdown table parsing in the existing TUI chat/conversation Markdown renderer.
- Rendered ordinary pipe tables as readable monospace rows with separators and alignment-aware padding.
- Kept the change in display/rendering code only; no Pod history, session logs, worker history, prompt context, or stored message text mutation.
- Added focused tests for readable table rendering, ragged/wide table safety, and non-table pipe text regression.
Implementation:
- Coder commit:
f767ec7 tui: render markdown pipe tables in chat - Reviewer approved with no blocking findings.
- Merge commit:
e6bae04 merge: render tui markdown tables
Validation after merge:
cargo fmt --checkgit diff --checkcargo run -q -p yoi -- ticket doctorcargo check --workspacenix build .#yoi