Context
The lines vocabulary names the record’s lines of argument. CLAIM declared
its line: field many: true; QUESTION, CASE, TERM and ARG declared it
single-valued. Twice the docs-check lint failed on an entry that named two
lines, and twice the fix was to drop one: QUESTION-365 lost
distributed-agency and ARG-050 lost formal-apparatus. Each bore on
both lines, so the cut made the line pages incomplete. On 2026-11-01 the
owner said the cut was a mistake: “any use of the line field on the
nucleation record should permit multi assignment”.
Decision
Every scheme in luria.yaml that declares a line: field declares it
many: true. Today that is QUESTION, CLAIM, CASE, TERM and ARG. A scheme
that gains a line: field later takes it many-valued too.
QUESTION, CLAIM, CASE and ARG require the field. TERM does not: a term is vocabulary, which a line may borrow without the term being on it.
The two entries cut to pass lint get their second line back.
Where the missing lines came from
Every ARG had a line already. Nine CASEs did not. Their lines were inferred
from the graph in luria export’s SQLite database. The query took the
lines of every lined entry joined to the CASE by a typed edge, in either
direction:
WITH unlined AS (
SELECT d.code FROM documents d
WHERE d.scheme = 'CASE'
AND NOT EXISTS (SELECT 1 FROM fields f
WHERE f.code = d.code AND f.field = 'line')),
nbr AS (
SELECT u.code, e.target AS other FROM unlined u JOIN edges e ON e.source = u.code
UNION ALL
SELECT u.code, e.source FROM unlined u JOIN edges e ON e.target = u.code)
SELECT n.code, f.value AS line, count(*) AS weight
FROM nbr n JOIN fields f ON f.code = n.other AND f.field = 'line'
GROUP BY n.code, f.value ORDER BY n.code, weight DESC;- One hop was enough for six: CASE-006, CASE-025, CASE-034, CASE-151, CASE-181 and CASE-182. CASE-151 touches CLAIM-432, which is on two lines, and takes both.
- Two Superseded CASEs, CASE-007 and CASE-028, are joined only to their successors. They take the successor’s line.
- CASE-014 (Deferred) has no typed edge. Its body cites QUESTION-019, which is on organizational-affect, and QUESTION-015, which superseded it and is on will-organization, along with three will-organization cases. It takes both lines, will-organization first, because the case was redirected from phenomenology to perspective on 2026-10-22.
The query gives candidates, not verdicts. Each assignment was read against the CASE’s title before it was written.
Alternatives considered
- Keep one line outside CLAIM and name the others in prose. This is what the two cuts did. The line pages are built from the field, so the entry vanished from a line it bears on.
- Primary line plus a separate
also_lines:field. It would need a new field and would give the first value a weight nobody has asked for. Tags already put the primary first, and a list can do the same. - Leave CASE and ARG optional. A CASE with no line appears on no line page. Nine of 190 were in that state, and nothing flagged them.
- Require it for TERM too. That would force a line onto vocabulary that serves several lines or none.
Consequences
An entry can now sit on every line it bears on, and a new CASE or ARG must say which. Lint no longer catches a second line added by mistake. That costs little, because a line is a judgement about the entry, and a wrong one is corrected like any other field.