Skip to content

The free board shows a subject's name, not its primary key - #258

Merged
czpython merged 2 commits into
mainfrom
subject-label
Aug 16, 2026
Merged

The free board shows a subject's name, not its primary key#258
czpython merged 2 commits into
mainfrom
subject-label

Conversation

@czpython

Copy link
Copy Markdown
Owner

An extension that ships no frontend gets the generic board and subject page for
free, and both titled a subject with summary.id — an integer for a row-backed
subject. inbox-manager's board read 1, 2, 3. The subject already knew
better: both bases carry a label, and every app that has a name for its subject
overrides get_label.

SubjectSummary carries it now. from_attributes means model_validate(self)
picks it up with no app change — that is every implementation across druks and
druks-apps except review's, which builds its summary by hand, so one line.

Required, not defaulted. A hand-built summary that forgets it raises on its board
route, which is the loud version; defaulting to "" would title every row with
nothing and say so nowhere.

The detail page's first fact was id; it is now the subject type in words —
pull request: owner/repo#7 rather than id: owner/repo#7. summaryEntries
skips label the way it already skipped id, so the title never repeats itself
among the facts.

inbox-manager, which ships no frontend at all, gets a readable board on the next
deploy with no app change.

Closes ENG-849.

🤖 Generated with Claude Code

An extension that ships no frontend gets the generic board and subject page for
free, and both titled a subject with summary.id — an integer for a row-backed
subject. inbox-manager's board read "1", "2", "3". The subject already knew
better: both bases carry a label, and every app that has a name for its subject
overrides get_label.

SubjectSummary carries it now. from_attributes means model_validate(self) picks
it up with no app change, which is every implementation across both repos except
review's, which builds its summary by hand — one line.

Required, not defaulted. A hand-built summary that forgets it raises on its
board route, which is the loud version; defaulting to "" would title every row
with nothing and say so nowhere. Two test fixtures and two wire-shape assertions
needed updating, which is the contract change showing up exactly where it
should.

The detail page's first fact was "id"; it is now the subject type in words —
"pull request: owner/repo#7" rather than "id: owner/repo#7". summaryEntries
skips label the way it already skipped id, so the title never repeats itself
among the facts.
label was required but ``str``, so an empty one passed. That is the exact failure
required was chosen to prevent: inbox-manager titles a thread with its
subject_line, and an email with no subject stores "" — a board of blank rows,
saying nothing anywhere about why.

SubjectLabel strips and rejects blank, following NonBlank in mcp/schemas.py.
@czpython
czpython merged commit 06be091 into main Aug 16, 2026
2 checks passed
@czpython
czpython deleted the subject-label branch August 16, 2026 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant