NodemancyDocsMapLibraryCards
Concept

Drafts, and where a node came from

One bit on every node: has a person read this yet. Everything else here follows from what that bit is for.

The problem

A model writing nodes into your lens will get the mechanics right. It will use groups you declared, slugs that resolve, relations that exist. None of that is evidence about whether the content is true — the lens skill it was given carries your taxonomy and your node names, and not one fact about your subject.

So a generated node can be perfectly formed and wrong, and it will pass every check the app makes. Ordinarily that would be survivable: you would notice eventually.

Except these nodes become flashcards. Spaced repetition is a machine for making things stick, and it does not care whether they are correct. A wrong node that reaches a review queue is not a mistake sitting in a file — it is a mistake being drilled into you on a schedule.

The gate

Nothing a model wrote can become a flashcard until you have opened it.

That is the whole rule. A node written by a model arrives draft: grey, rounded corners, and barred from card generation. Reading it settles it. There is no approve button, no bulk action, and no setting that turns this off.

“Read” means the node's body was actually on your screen for about a second — not that you clicked its row in a list, and not that you passed through it on a route. Some of my nodes are grey has the mechanics.

The bar lives in the database rather than in the interface. That is deliberate: a rule enforced in a query is a rule the next query can forget, and this one is the safety property the whole feature exists for.

Why the app asks who wrote it

When you paste something into Import, the app genuinely does not know where it came from. It could be a model's reply. It could be notes you wrote in a text editor. So it asks:

Did a model write this, or did you?

Note what it is notasking. There is no “mark these as drafts” checkbox, and that is a decision rather than an omission. A checkbox named after the flag only helps people who already understand the flag; everybody else takes the default or whichever option looks like less work — and the people most at risk take it fastest.

So the question is about a fact you already know, answerable without understanding the review model at all. Report where the text came from; the app works out what that means.

The default is a model wrote it, and a wrong answer here is silent. One way the nodes land in your review queue as drafts; the other way they land eligible for a flashcard deck. Nothing on the canvas will tell you which happened except the colour.

When the app already knows, it does not ask

The metered lane — Generate and Weave — is this app calling a model on your behalf. There is no question to ask, and no answer you could give would make the text self-authored, so those results always arrive as drafts.

How it arrivedLands asWhy
Generate / WeaveDraftThe app made the call. Knowledge, not a claim.
Import, “a model wrote it”DraftYou reported it. Same treatment, same reason.
Import, “I wrote it”SettledYou are the author. There is nobody else to check.
Typed directlySettledLikewise — you were there.
Vault syncSettledThe files are yours.

Sets, and what the app remembers

Anything that arrives as drafts is grouped into a set — the batch it came in with — so you can work through it, and reject from it, as one thing rather than hunting grey nodes on the canvas.

What the set keeps depends on the lane, and the difference is deliberate:

  • A hosted run keeps the request you typed, verbatim.It has to: the point of keeping it is that you can edit the instructions and ask again, and “try again with different instructions” requires showing you the instructions.
  • An import keeps a one-line note — that it was pasted from another model, and how many nodes came in. The app never asked anything, so there is no prompt to keep, and storing the pasted document would be a second copy of text that is already becoming nodes.

Either way it is deleted when you delete the set or your account. What leaves this app covers retention properly.

Which model wrote it

A hosted run records the model it called. An import cannot — the model ran in somebody else's chat window, and the app has no way to know which one. It records that as unknown rather than guessing, because a guessed name in a provenance column is worse than an admitted gap.

One consequence, in the colour system

Grey is not available as a group colour or a family colour, and the picker will refuse anything washed out enough to read as grey. That is not fussiness about palettes — grey means “unread”, and it can only mean that if it never means anything else.

A single grey family would make hundreds of settled nodes look provisional, which breaks the one signal this whole page is about.

Related