The record line is a table - #199
Merged
Merged
Conversation
Reported from the outside — "frontmatter renders funny on the quartz site luria builds" — and it was two duplications, each an addition meeting an assumption that had been true when it was written. `record_line` has always rendered the status through `statuses.display`. #181 made `status:` an ordinary declared vocabulary, so the generic vocabulary loop began rendering it too, and since #181 requires the declaration this fired on every document of every scheme in every record. The dedicated path wins: it is the only one that composes `Superseded — by X; note` out of the fields around the word. The vocabulary loop's version linked the word to its value page, which is a real gain and is filed separately rather than smuggled into a fix. `_edge_bits` renders inbound edges for, in its own words, "the one direction the site otherwise loses, since frontmatter renders as nothing". A declared converse stores the fact on both documents, so nothing is lost and the backlink became a second printing under a label built from the raw field name — LIT-140 named LIT-141 three times on one line. Suppressed by what the page actually holds rather than by the declaration alone, so a record with a one-sided relation still shows the edge it has while the lint reports it. Neither was visible to a test: the existing assertion is `"**Status** Active" in line`, and a substring test is satisfied by two of them. The new ones count. Fired on the real corpus rather than a fixture. Staging the anthology's 353 record lines with both builds: 692 status bits become 346, exactly halved, and 86 backlinks become 74. The twelve that go are every relation with a declared converse; the 74 that stay declare none and have no other way to be seen. Also corrects two citations left in a concretized code's old spelling. The lint's remedy text says `luria link --fix` upgrades them, and for these two it cannot: one is in a Python docstring, the other inside a fenced illustration the fixer correctly masks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YP4P3m8rzVFb8idnTE4FfT
…ackfill-e6evzh # Conflicts: # docs/devlog/2026-09.md # docs/devlog/README.md
Eleven facts on one line separated by center dots read as a paragraph of bolded fragments, not as metadata. LIT-140 was the worst of it. A table gives every fact the same shape and puts the labels in a column, which is what makes it scannable; the center dot keeps its job inside a cell, where it separates peers rather than kinds. Header-less, because "Field" and "Value" name nothing the rows do not. `record_line` and its two helpers built formatted strings and joined them; they now build (label, value) pairs and one renderer formats them. That is the whole diff, and the cost of having had formatting and content in the same expression: twelve assertions moved from `**Label** value` to `| **Label** | value |`, and three stopped assuming a blockquote. Not Quartz's `note-properties` plugin, which was the other candidate. It is a v5 plugin against a site action deliberately pinned to v4.5.2, and more to the point a properties panel shows the page's own frontmatter — it cannot render `Supersedes`, read from another document's field, or the backlinks, and it would show `Superseded` where the record line composes `Superseded — by X`. Enabling it would add a block beside this one rather than replace it. The Quartz upgrade is worth doing on its own merits and is unrelated to this. The line is composed only when staging the site, so nothing about how the record reads in the repository changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YP4P3m8rzVFb8idnTE4FfT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Agreed, and it reads far better.
LIT-140, before and after:Before
After
One line of
**Label** valuereads acceptably at three facts and not at eleven — it becomes a paragraph of bolded fragments a reader has to parse before they can scan. A table gives every fact the same shape and puts the labels in a column. The center dot keeps its job inside a cell, where it separates peers (two contesting papers, three sources) rather than separating kinds.Header-less on purpose (
| | |) — "Field" and "Value" name nothing a reader did not already know from the rows.On
note-properties— it can't do this jobTwo reasons that's not the lever, and the second is the interesting one.
It's a v5 plugin;
actions/sitepinsv4.5.2. The action's own input docs already say why the pin is deliberate: "luria sitewrites a quartz.config.ts against this version's plugin API, and v5 replaced that file with a YAML one." ~110 lines of generated TypeScript config and layout would need rewriting as YAML.A properties panel shows the page's own frontmatter — and that's the smaller half of this line. The plugin's README describes it as "a visible properties view on the page, similar to Obsidian's properties panel." What's actually on
LIT-140's record line:StatusSuperseded — by X; noteis three fields read as one readingExtends,Compared againstSupersedessuperseded_by:Cited as \source` by`A panel over this page's YAML renders the first row as
Supersededand the second as the literal stringLIT-141, and cannot render the last two at all — it has no reader for other documents. Enabling it would put a raw-YAML block beside the record line, not replace it.So they aren't alternatives. Upgrading Quartz is worth doing on its own merits — five versions of upstream work, the v5 plugin ecosystem — and I'm happy to take it as its own piece; it just doesn't bear on this complaint, and
record_lineneeded to be a table either way.The change
record_lineand its two helpers built formatted strings (f"**{label}** {value}") and joined them; they now build(label, value)pairs and one_tablerenders them. That's the whole diff — the mechanical cost of having had formatting and content in the same expression.Twelve assertions moved from
"**Label** value"to"| **Label** | value |", and three stopped assuming the blockquote it no longer is. That count is a fair measure of how load-bearing the shape was, and worth knowing before anyone changes it again.record_lineis called in exactly one place, insidestage, so this only shapes the staged Quartz vault — the record files in the repository are untouched, and nothing about how they read on GitHub changes.Checks
python -m pytest tests -q→ 924 passed.luria link --fix,luria index,luria lint→ clean. Rendered against the anthology's real corpus (346 record lines staged).Stacked on #195, whose commit is included here until that merges — this branch is
ac6d672plus one commit.🤖 Generated with Claude Code
https://claude.ai/code/session_01YP4P3m8rzVFb8idnTE4FfT
Generated by Claude Code