main · last commit
5 hours ago ·
ti41arbu
sr-ht-dolt-0df A stored "NULL" string is indistinguishable from a real NULL
Past Stand
bd reopen sr-ht-dolt-0df
| Created by | Eugene Blikh |
| Owner | bigbes@gmail.com |
| Created | 2026-08-13T05:46:26Z |
| Started | 2026-08-13T07:06:40Z |
| Updated | 2026-08-13T07:11:43Z |
| Closed | 2026-08-13T07:11:43Z |
browse renders a real NULL cell as the literal string "NULL" (placeholderNull), so a row that genuinely stores the text NULL reads identically. beads.cell() then flattens both to the empty string. Harmless on a rendered page, misleading through the MCP read_rows tool, where an agent gets strings and no schema hint (7a77409 states it in the tool description rather than papering over it).
Options, cheapest first: keep the placeholder for the HTML pages and give RowPage a parallel per-cell null mask that read_rows exposes; or render JSON null through the tool path. Whatever is chosen, the beads projection must keep treating a real NULL as empty — that behaviour is depended on.
No outgoing dependencies.
Nothing depends on this issue.
| id | sr-ht-dolt-0df |
| content_hash | 0c716954c4783ebf0507ecd5bb1c7602f17a83be2759160610f250d38002bcfb |
| title | A stored "NULL" string is indistinguishable from a real NULL |
| description | browse renders a real NULL cell as the literal string "NULL" (placeholderNull), so a row that genuinely stores the text NULL reads identically. beads.cell() then flattens both to the empty string. Harmless on a rendered page, misleading through the MCP read_rows tool, where an agent gets strings and no schema hint (7a77409 states it in the tool description rather than papering over it). |
| design | Options, cheapest first: keep the placeholder for the HTML pages and give RowPage a parallel per-cell null mask that read_rows exposes; or render JSON null through the tool path. Whatever is chosen, the beads projection must keep treating a real NULL as empty — that behaviour is depended on. |
| acceptance_criteria | |
| notes | |
| status | closed |
| priority | 3 |
| issue_type | bug |
| assignee | NULL |
| estimated_minutes | NULL |
| created_at | 2026-08-13T05:46:26Z |
| created_by | Eugene Blikh |
| owner | bigbes@gmail.com |
| updated_at | 2026-08-13T07:11:43Z |
| closed_at | 2026-08-13T07:11:43Z |
| 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 | browse half landed in 5b00a51: RowPage.Nulls parallel to Rows, filled from the td.IsNull the renderer already called (no extra tuple read). Rendered strings unchanged, so every existing consumer keeps reading what it read. Mutation-checked by making the mask believe the rendered string. Adoption by mcpsrv and beads is sr-ht-dolt-3s9. |
| 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-13T07:06:40Z |
| is_blocked | 0 |
| id | 019ff9a8-539a-7854-a3b3-4871bf41e0f9 |
| issue_id | sr-ht-dolt-0df |
| event_type | created |
| actor | Eugene Blikh |
| old_value | |
| new_value | |
| comment | NULL |
| created_at | 2026-08-13T08:46:26Z |
| id | 019ff9f1-c8a1-763d-b7ec-e82743e20275 |
| issue_id | sr-ht-dolt-0df |
| event_type | status_changed |
| actor | Eugene Blikh |
| old_value | {"id":"sr-ht-dolt-0df","title":"A stored \"NULL\" string is indistinguishable from a real NULL","description":"browse renders a real NULL cell as the literal string \"NULL\" (placeholderNull), so a row that genuinely stores the text NULL reads identically. beads.cell() then flattens both to the empty string. Harmless on a rendered page, misleading through the MCP read_rows tool, where an agent gets strings and no schema hint (7a77409 states it in the tool description rather than papering over it).","design":"Options, cheapest first: keep the placeholder for the HTML pages and give RowPage a parallel per-cell null mask that read_rows exposes; or render JSON null through the tool path. Whatever is chosen, the beads projection must keep treating a real NULL as empty — that behaviour is depended on.","status":"open","priority":3,"issue_type":"bug","owner":"bigbes@gmail.com","created_at":"2026-08-13T05:46:26Z","created_by":"Eugene Blikh","updated_at":"2026-08-13T05:46:26Z"} |
| new_value | {"status":"in_progress"} |
| comment | NULL |
| created_at | 2026-08-13T10:06:40Z |
| id | 019ff9f6-698c-70bf-971e-d58f3126668b |
| issue_id | sr-ht-dolt-0df |
| event_type | closed |
| actor | Eugene Blikh |
| old_value | |
| new_value | browse half landed in 5b00a51: RowPage.Nulls parallel to Rows, filled from the td.IsNull the renderer already called (no extra tuple read). Rendered strings unchanged, so every existing consumer keeps reading what it read. Mutation-checked by making the mask believe the rendered string. Adoption by mcpsrv and beads is sr-ht-dolt-3s9. |
| comment | NULL |
| created_at | 2026-08-13T10:11:43Z |
No comments.
Close reason