~bigbes/sr-ht-dolt · parade

main · last commit 5 hours ago · ti41arbu

← Back to the parade

sr-ht-dolt-0df A stored "NULL" string is indistinguishable from a real NULL Past Stand

status: closed P3 bug
bd reopen sr-ht-dolt-0df
Created byEugene Blikh
Ownerbigbes@gmail.com
Created2026-08-13T05:46:26Z
Started2026-08-13T07:06:40Z
Updated2026-08-13T07:11:43Z
Closed2026-08-13T07:11:43Z
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.

Depends on

No outgoing dependencies.

Depended on by

Nothing depends on this issue.

No comments.

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.
  • Eugene Blikh created the issue · 2026-08-13T08:46:26Z
  • Eugene Blikh changed status to in_progress · 2026-08-13T10:06:40Z
  • Eugene Blikh closed the issue · 2026-08-13T10:11:43Z
    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.
Stored rows — what this pane was built from, as read
issues 1 row
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
events 3 rows
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