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.