feat: the corpus is read before the clone writes, and grounding is not authorship - #83
Open
khaneight wants to merge 3 commits into
Open
feat: the corpus is read before the clone writes, and grounding is not authorship#83khaneight wants to merge 3 commits into
khaneight wants to merge 3 commits into
Conversation
…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>
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.
Stacked on #81. Builds the plan from #82.
learnmoves abovecompileIt 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.
nextstops for a verdictWith traits proposed and none affirmed it returns
noneand points atsentinel 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 branchand only one is finished.
Every article records the voice it was written through
unvoiced-article— a warning, and only once the archive has an affirmedtrait. 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-improvesays the repair is to cite what an article genuinelyexhibits 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.
compiles→grounds, and it is no longer a way inThe old model treated
sources:as authorship — document → article, asthough 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 checkoutinside a compoundcommand. 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.rsasserts the whole sequence, since this changes what a usersees 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