~bigbes/sr-ht-dolt · parade

main · last commit 5 hours ago · ti41arbu

← Back to the parade

sr-ht-dolt-16t Show the original object on the issue detail page Past Stand

status: closed P2 feature
bd reopen sr-ht-dolt-16t
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-08-10T11:13:36Z
Started2026-08-13T08:14:30Z
Updated2026-08-13T08:27:44Z
Closed2026-08-13T08:27:44Z
Description
The issue detail pane (`/view/beads?issue=<id>`) renders a curated subset of an
issue: the fields the card model carries, the dependency trees, and the
Comments / History tabs. Everything the view does not model — columns bd added
that BeadIssue has no field for, custom metadata, the exact stored strings
behind the humanized events — is invisible without leaving for the generic
table browser and hunting for the row by hand.

Show the original object on the detail page: the raw stored row(s) behind the
issue, as read from the tables, so the rendering can be checked against what is
actually in the database.
Design
- Carry the raw data on BeadsData in detail/epic mode: the `issues` row as an
  ordered column → value list (column order as read, NULLs kept distinct from
  empty strings — `cell` currently flattens the browse NULL placeholder to "",
  so read the row directly rather than through it), plus the matching rows from
  the satellite tables the pane already reads (labels, dependencies, comments,
  events) when they add anything.
- Render it as a third tab in the existing activity switch next to
  Comments / History — the switch is a pure-CSS radio group, so a third radio +
  label + panel needs no JS — or as a `<details>` block under the field table if
  the tab strip gets crowded. Keep it collapsed by default: it is a debugging
  surface, not the main reading.
- Present it as a key/value table plus the row as JSON, both escaped; values can
  be long free text (descriptions, design notes) and must wrap rather than blow
  the layout out horizontally.
- Reuse the read that already happens in Build — the detail pane loads these
  tables anyway, so this must not cost another Rows call.
- Tests in web/beads_test.go: raw block present in detail mode and absent in
  board mode, a column with no BeadIssue field still shows up, NULL renders
  distinctly from "".
Acceptance criteria
On /view/beads?issue=<id> the raw stored row behind the issue is visible without leaving for the table browser: every column of the issues row (including ones the view models no field for) with NULL distinguishable from an empty string, collapsed by default, long values wrapping instead of widening the page.

Depends on

No outgoing dependencies.

Depended on by

Nothing depends on this issue.

No comments.

Close reason

Landed in 60fdb6d: beads.RawTable/RawRow/RawCell carried in detail and epic mode, rendered as a collapsed <details> section. The three states (absent / stored "NULL" / empty) are three distinct renderings, and rowCells.isNull became the single site deciding whether a cell holds a value, so the raw view cannot drift from the fields. Linkification deliberately NOT applied — a rewritten value is not the stored value — and a test proves that is a choice, not a broken linkifier.
  • Eugene Blikh created the issue · 2026-08-10T14:13:36Z
  • Eugene Blikh changed status to in_progress · 2026-08-13T11:14:30Z
  • Eugene Blikh closed the issue · 2026-08-13T11:27:43Z
    Landed in 60fdb6d: beads.RawTable/RawRow/RawCell carried in detail and epic mode, rendered as a collapsed <details> section. The three states (absent / stored "NULL" / empty) are three distinct renderings, and rowCells.isNull became the single site deciding whether a cell holds a value, so the raw view cannot drift from the fields. Linkification deliberately NOT applied — a rewritten value is not the stored value — and a test proves that is a choice, not a broken linkifier.
Stored rows — what this pane was built from, as read
issues 1 row
id sr-ht-dolt-16t
content_hash 88a2fd7a5715be57384920506c31f7cd305072679ab394336b15dd060c0a7610
title Show the original object on the issue detail page
description The issue detail pane (`/view/beads?issue=<id>`) renders a curated subset of an issue: the fields the card model carries, the dependency trees, and the Comments / History tabs. Everything the view does not model — columns bd added that BeadIssue has no field for, custom metadata, the exact stored strings behind the humanized events — is invisible without leaving for the generic table browser and hunting for the row by hand. Show the original object on the detail page: the raw stored row(s) behind the issue, as read from the tables, so the rendering can be checked against what is actually in the database.
design - Carry the raw data on BeadsData in detail/epic mode: the `issues` row as an ordered column → value list (column order as read, NULLs kept distinct from empty strings — `cell` currently flattens the browse NULL placeholder to "", so read the row directly rather than through it), plus the matching rows from the satellite tables the pane already reads (labels, dependencies, comments, events) when they add anything. - Render it as a third tab in the existing activity switch next to Comments / History — the switch is a pure-CSS radio group, so a third radio + label + panel needs no JS — or as a `<details>` block under the field table if the tab strip gets crowded. Keep it collapsed by default: it is a debugging surface, not the main reading. - Present it as a key/value table plus the row as JSON, both escaped; values can be long free text (descriptions, design notes) and must wrap rather than blow the layout out horizontally. - Reuse the read that already happens in Build — the detail pane loads these tables anyway, so this must not cost another Rows call. - Tests in web/beads_test.go: raw block present in detail mode and absent in board mode, a column with no BeadIssue field still shows up, NULL renders distinctly from "".
acceptance_criteria On /view/beads?issue=<id> the raw stored row behind the issue is visible without leaving for the table browser: every column of the issues row (including ones the view models no field for) with NULL distinguishable from an empty string, collapsed by default, long values wrapping instead of widening the page.
notes
status closed
priority 2
issue_type feature
assignee NULL
estimated_minutes NULL
created_at 2026-08-10T11:13:36Z
created_by Eugene Blikh
owner bigbes@gmail.com
updated_at 2026-08-13T08:27:44Z
closed_at 2026-08-13T08:27:44Z
closed_by_session
external_ref NULL
spec_id
compaction_level 0
compacted_at NULL
compacted_at_commit NULL
original_size NULL
sender
ephemeral 0
wisp_type
pinned 0
is_template 0
mol_type
work_type
source_system
metadata �{}
source_repo
close_reason Landed in 60fdb6d: beads.RawTable/RawRow/RawCell carried in detail and epic mode, rendered as a collapsed <details> section. The three states (absent / stored "NULL" / empty) are three distinct renderings, and rowCells.isNull became the single site deciding whether a cell holds a value, so the raw view cannot drift from the fields. Linkification deliberately NOT applied — a rewritten value is not the stored value — and a test proves that is a choice, not a broken linkifier.
event_kind
actor
target
payload
await_type
await_id
timeout_ns 0
waiters
hook_bead
role_bead
agent_state
last_activity NULL
role_type
rig
due_at NULL
defer_until NULL
no_history 0
started_at 2026-08-13T08:14:30Z
is_blocked 0
events 3 rows
id 019feb60-c771-7850-a79b-1209cd60ad0c
issue_id sr-ht-dolt-16t
event_type created
actor Eugene Blikh
old_value
new_value
comment NULL
created_at 2026-08-10T14:13:36Z
id 019ffa2f-e2ac-7059-9a31-057a5b256c42
issue_id sr-ht-dolt-16t
event_type status_changed
actor Eugene Blikh
old_value {"id":"sr-ht-dolt-16t","title":"Show the original object on the issue detail page","description":"The issue detail pane (`/view/beads?issue=\u003cid\u003e`) renders a curated subset of an\nissue: the fields the card model carries, the dependency trees, and the\nComments / History tabs. Everything the view does not model — columns bd added\nthat BeadIssue has no field for, custom metadata, the exact stored strings\nbehind the humanized events — is invisible without leaving for the generic\ntable browser and hunting for the row by hand.\n\nShow the original object on the detail page: the raw stored row(s) behind the\nissue, as read from the tables, so the rendering can be checked against what is\nactually in the database.\n","design":"- Carry the raw data on BeadsData in detail/epic mode: the `issues` row as an\n ordered column → value list (column order as read, NULLs kept distinct from\n empty strings — `cell` currently flattens the browse NULL placeholder to \"\",\n so read the row directly rather than through it), plus the matching rows from\n the satellite tables the pane already reads (labels, dependencies, comments,\n events) when they add anything.\n- Render it as a third tab in the existing activity switch next to\n Comments / History — the switch is a pure-CSS radio group, so a third radio +\n label + panel needs no JS — or as a `\u003cdetails\u003e` block under the field table if\n the tab strip gets crowded. Keep it collapsed by default: it is a debugging\n surface, not the main reading.\n- Present it as a key/value table plus the row as JSON, both escaped; values can\n be long free text (descriptions, design notes) and must wrap rather than blow\n the layout out horizontally.\n- Reuse the read that already happens in Build — the detail pane loads these\n tables anyway, so this must not cost another Rows call.\n- Tests in web/beads_test.go: raw block present in detail mode and absent in\n board mode, a column with no BeadIssue field still shows up, NULL renders\n distinctly from \"\".\n","acceptance_criteria":"On /view/beads?issue=\u003cid\u003e the raw stored row behind the issue is visible without leaving for the table browser: every column of the issues row (including ones the view models no field for) with NULL distinguishable from an empty string, collapsed by default, long values wrapping instead of widening the page.","status":"open","priority":2,"issue_type":"feature","owner":"bigbes@gmail.com","created_at":"2026-08-10T11:13:36Z","created_by":"Eugene Blikh","updated_at":"2026-08-10T11:13:36Z"}
new_value {"status":"in_progress"}
comment NULL
created_at 2026-08-13T11:14:30Z
id 019ffa3b-fed1-7088-a452-47bb027e419a
issue_id sr-ht-dolt-16t
event_type closed
actor Eugene Blikh
old_value
new_value Landed in 60fdb6d: beads.RawTable/RawRow/RawCell carried in detail and epic mode, rendered as a collapsed <details> section. The three states (absent / stored "NULL" / empty) are three distinct renderings, and rowCells.isNull became the single site deciding whether a cell holds a value, so the raw view cannot drift from the fields. Linkification deliberately NOT applied — a rewritten value is not the stored value — and a test proves that is a choice, not a broken linkifier.
comment NULL
created_at 2026-08-13T11:27:43Z