feat: edges radiate outward, carry their kind, and light the whole chain - #80
Open
khaneight wants to merge 2 commits into
Open
feat: edges radiate outward, carry their kind, and light the whole chain#80khaneight wants to merge 2 commits into
khaneight wants to merge 2 commits into
Conversation
…til a persona **The graph is three layers now, and the middle one is the persona.** Source material the author wrote, the traits distilled from it, and the work produced from those. `LAYERS` is published in the bundle with names and descriptions, so a front end cannot invent its own account of what the archive is made of. An affirmed trait is a node with an edge down to every document it was read out of and up to every article written from it. That chain is the whole claim the picture makes: a sentence in a generated essay can be followed back through the trait that produced it to the passage in the corpus that supports it. `proposed` traits are absent, for the same reason they are absent from `persona` — drawing an unconfirmed reading of somebody in the middle of the picture asserts it to every reader before that person has seen it. Every article sits in the work layer whatever its origin. Depth answers "what kind of thing is this"; `origin` and `extrapolated` answer "how was it written", and splitting the rings by origin would put a compiled article and a machine-written one at different depths while the legend claims depth means layer. **Hovering a node lights up what it is related to** — its edges drawn in its own colour, its neighbours held bright, everything else dimmed. **Topics filter the graph**, built from the archive's own vocabulary: the domains things are filed under and the tags on them, with counts, any number selectable. Traits have no topic of their own — a trait is a claim about a person, not about a subject — so they stay while anything they touch does. Trait labels on the graph are their ids rather than their claims, which are whole sentences; the claim is still the title in the reader, where there is room to read it. **`value` joins the trait kinds**, and they are ordered surface inwards: style, pattern, principle, value, belief. A principle says *do this*; a value says *this matters*, and the same value produces different rules in different settings. Keeping them apart is what lets the clone extend a view rather than only repeat its conclusions. `/sentinel-clone` gains the distillation method: one pass per kind, with the question that finds each and the test for whether you have one, the principle/value confusion called out, calibration for `confidence`, and an instruction not to fill the table — a trait invented to complete the set is one the user then spends time rejecting. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
**Every edge now points away from the author.** A source document did not cite an article — the article was compiled from it. A trait did not reference a source — it was distilled out of one. The arrows were recorded the other way round, which drew a picture in which the work produced the corpus. Each carries a kind, declared in `EDGE_KINDS` with the layers it joins: `distils` (source→trait), `writes` (trait→work), `compiles` (source→work, for an article compiled without passing through the persona), and `links` (work→work). A test asserts every emitted edge joins the layers its kind declares and that no kind runs inward, enumerated from the published set rather than from a list in the test. **Hovering follows the chain, transitively, and which way depends on what is under the cursor.** A source document shows what came of it: the traits read out of it, and — continuing outward — the work written from those. A piece of the clone's work shows where it came from, back through the persona to the corpus. A trait sits in the middle and both directions are its own story. Stopping at one hop would show a trait without the essay it produced, which is the half worth seeing. Direct `[[wikilink]]` references stay one hop. Transitive there would light most of the wiki and say nothing. **Connections are coloured by where they leave**, so the eye can follow one hue outward: gold out of the source material, teal out of the persona, blue between articles. They keep that colour at rest, faintly — a grey web that only becomes meaningful on hover hides the structure the rest of the page is about. Two mistakes of my own worth recording. A multi-edit script asserted its way out before writing, so the chain walk never landed and the page threw `chain is not defined` on first hover — caught by hovering it rather than by the tests, which do not run the page. And a scan script that clicked every node to find one left the canvas blank, which I nearly diagnosed as a rendering bug before reloading and finding it clean. 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 #79.
Every edge points away from the author
A source document did not cite an article — the article was compiled from it.
A trait did not reference a source — it was distilled out of one. The arrows
were recorded the other way round, which drew a picture in which the work
produced the corpus.
Each edge carries a kind, declared in
EDGE_KINDSwith the layers it joins:distilscompileswriteslinksA test asserts every emitted edge joins the layers its kind declares, and that
no kind runs inward — enumerated from the published set rather than from a list
in the test.
Hover follows the chain
Which direction depends on what is under the cursor:
continuing outward, the work written from those
corpus
Transitive, not one hop — stopping at one would show a trait without the essay
it produced. Direct
[[wikilink]]references stay one hop, because transitivethere lights most of the wiki and says nothing.
Connections keep their colour at rest, faintly. A grey web that only becomes
meaningful on hover hides the structure the rest of the page is about.
Two mistakes of mine, recorded
A multi-edit script asserted its way out before writing, so the chain walk
never landed and the page threw
chain is not definedon first hover. Caught byhovering it — the test suite doesn't execute the page, only its contract.
And a scan script that clicked every node to locate one left the canvas blank. I
nearly diagnosed that as a rendering bug before reloading and finding it clean.
540 tests (+1), clippy and fmt clean. CLAUDE.md compressed back under budget
again rather than raised — this time by merging two citation invariants that
turned out to be one rule stated twice.
🤖 Generated with Claude Code