main · last commit
5 hours ago ·
ti41arbu
sr-ht-dolt-16t Show the original object on the issue detail page
Past Stand
bd reopen sr-ht-dolt-16t
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-08-10T11:13:36Z |
| Started | 2026-08-13T08:14:30Z |
| Updated | 2026-08-13T08:27:44Z |
| Closed | 2026-08-13T08:27:44Z |
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.
- 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 "".
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.
No outgoing dependencies.
Nothing depends on this issue.
| 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 |
| 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 |
No comments.
Close reason