Skip to content

feat: the corpus is read before the clone writes, and grounding is not authorship - #83

Open
khaneight wants to merge 3 commits into
feat/layer-coloursfrom
feat/persona-first
Open

feat: the corpus is read before the clone writes, and grounding is not authorship#83
khaneight wants to merge 3 commits into
feat/layer-coloursfrom
feat/persona-first

Conversation

@khaneight

Copy link
Copy Markdown
Owner

Stacked on #81. Builds the plan from #82.

① fresh corpus
Next: learn
  1 document(s) registered `origin: authored` that no persona trait has been read from

② corpus read, not yet answered
… 1 trait(s) are waiting on your verdict. The archive has read the corpus;
  nothing below this writes anything until you say whether it read you right.
  sentinel review

③ after affirming
Next: compile

learn moves above compile

It was below on a cost argument — compiling a document is the close reading
that makes mining it cheap. True, and it answers the wrong question. The order
follows what the tool is for.

next stops for a verdict

With traits proposed and none affirmed it returns none and points at sentinel review. My earlier objection was that this deadlocks a new archive; it doesn't,
it is the sequence.

Only when there is something to answer — an archive that never built a persona
is not waiting on anybody and is not blocked. Tested both ways.

It renders rather than , because three different things reach that branch
and only one is finished.

Every article records the voice it was written through

unvoiced-article — a warning, and only once the archive has an affirmed
trait. An article written before the persona existed is unfinished, not
malformed, and warning in an archive with no persona is noise about work nobody
could have done.

/sentinel-improve says the repair is to cite what an article genuinely
exhibits and to report the ones that exhibit none — a flat summary of someone
else's paper often won't. Attaching plausible traits to clear a warning is
inventing the authority the article was written on.

compilesgrounds, and it is no longer a way in

The old model treated sources: as authorship — document → article, as
though the document wrote it. It didn't; the clone did, through the persona. A
citation reaches back past whatever produced the text, so it is marked
primary: false, the hover walk ignores it, and the page draws it dashed.

Authorship radiates. Three rings, one path out, no fourth ring needed.

Two mistakes of mine

The proposal in #82 argued from an edge count on a demo I had built with the
current ladder
— measuring the ladder, not the world. You caught it.

And I reverted this rule once with a stray git checkout inside a compound
command. The rule-coverage guard caught it by reporting the rule as never
firing, which is the second time that guard has earned its place.

Coverage

tests/onboarding.rs asserts the whole sequence, since this changes what a user
sees in order — including that the waiting state does not print a tick.

543 tests (+3), clippy and fmt clean. CLAUDE.md compressed under budget again.

🤖 Generated with Claude Code

khaneight and others added 3 commits August 28, 2026 01:00
…t authorship

Four changes, one decision: the order follows what the tool is for.

**`learn` moves above `compile`.** It was below on a cost argument —
compiling a document *is* the close reading that makes mining it cheap —
which is true and answers the wrong question. Somebody hands over a
corpus, it is read for who they are, and only then does the clone write
anything. Summarising a corpus into articles before anyone has read it
for voice is a step inherited from the knowledge base this used to be.

**`next` stops for a verdict.** With traits proposed and none affirmed it
returns `none`, names the count, and points at `sentinel review`.
Everything below `learn` is the clone writing, and writing through a
reading of somebody that nobody has confirmed is what the verdict exists
to prevent. The earlier objection to this order was that it deadlocks a
new archive; it does not, it *is* the sequence. Only when there is
something to answer — an archive that never built a persona is not
waiting on anybody and is not blocked.

It renders as `…`, not `✓`. Three different things reach that branch and
only one of them is finished.

**Every article records the voice it was written through.**
`unvoiced-article`, a warning rather than an error, and only once the
archive has an affirmed trait: an article written before the persona
existed is unfinished, not malformed, and warning about it in an archive
with no persona would be noise about work nobody could have done. The
repair is to cite the traits an article genuinely exhibits and to report
the ones that exhibit none — a flat summary of somebody else's paper
often will not, and attaching plausible traits to clear a warning is
inventing the authority it was written on.

**`compiles` becomes `grounds`, and is no longer a way in.** The old
model treated `sources:` as authorship — an edge from document to
article, as though the document wrote it. It did not; the clone did,
through the persona. A citation is a different relation and legitimately
reaches back past whatever produced the text, so `EDGE_KINDS` marks it
`primary: false`, the hover walk ignores it, and the page draws it
dashed. Authorship radiates; three rings, one path out.

Two mistakes of my own along the way. The earlier proposal argued from a
count of edges on a demo I had built with the current ladder, which
measured the ladder rather than the world — the user caught it. And I
reverted this rule once with a stray `git checkout` inside a compound
command, which the rule-coverage guard then caught by reporting the rule
as never firing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Hovering `concrete-first` reported six articles downstream of it. It had
written four. The other two were articles that something it wrote happens
to link to, and the walk followed those links as though a wikilink were
an authorship step.

The cause was one boolean doing two jobs. `primary` was meant to mean
"part of the chain the picture is about", and it was being asked both
which edges to draw solid and which to follow transitively. Those are
different questions: a reference between two articles is real and should
look real, and is not evidence that one produced the other.

`EDGE_KINDS` now declares a `role` — `authorship` for `distils` and
`writes`, `reference` for `links`, `citation` for `grounds`. The walk
follows authorship only; solid or dashed is decided separately.

Found by reading the numbers rather than the picture. The lit edges
looked plausible on screen, and it was only checking the walk against
what the bundle declares that showed two articles in the chain that had
no business there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The `role` explanation pushed it 115 bytes over, and I pushed the commit
before reading the test result. Compressed rather than raised, per the
note on the constant.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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