NodemancyFree while early accessWritingDocsRoadmapChangelog
Open the map

Changelog

What shipped, dated.

Including the fixes — especially the ones for problems you never saw. A tool asking to hold years of your work should be legible about how it is maintained, and the unglamorous entries carry more of that information than the features do.

August 2026

Fixed

An edge that spans several levels goes around the rows between

On a hierarchy chart, a link from the top to three levels down used to be drawn as one curve straight through whatever sat in the rows it crossed — and a line passing through a box it has nothing to do with is indistinguishable from a line connecting to it. Those edges are now routed around, through gaps the layout opens for them. They are the normal shape of a layered holding: somebody owning a company directly as well as through two intermediaries.

Fixed

A paste's links resolve whichever order you wrote them in

An entry that linked to another entry further down the same paste got no link. The importer wrote each node as it reached it and resolved that node's links against what already existed, so every reference pointing forward found nothing — and an unresolvable link is a legal wanted-page rather than an error, so nothing said a word. It now resolves them all again once every node in the paste exists. Two entries that name each other both work, which no amount of reordering could have achieved.

Fixed

An empty hierarchy chart says which thing is missing

It always said the lens declared no shape. That is one of two reasons a chart can be empty, and the other — shapes declared, but nothing linked with them yet — is far more common while a lens is being built. Reported by somebody whose lens declared four relations and was told to go and declare one. It now names the actual cause, and when relations are shaped it says which, and shows the link syntax that would put something on the chart.

New

Effective ownership, read beside the chart

A lens that declares an ownership hierarchy gets a second figure next to its chart. A percentage on an edge stops being the whole answer once somebody owns through something they already own: control counts a majority-held company's stakes in full, economics multiplies along the chain, and the two are different numbers — 60% and 30.6% for the same pair. Both are shown, because they answer different questions and picking one would overstate either control or economics. Where every stake is held directly the figure says so in a sentence rather than printing three columns of the same percentage.

New

The docs cover the whole relation format

Weighted edges, the five shapes a relation can declare, and `invert` are all written down now, along with what declaring a shape actually draws. One rule was documented nowhere a reader would look and can lose data: two different figures between the same pair is a contradiction rather than two edges, and only the first survives.

Fixed

The flashcards page matches what the app makes

It said four kinds of card come out of every node. Since the cloze repair on 27 August that is often three — a fill-in-the-blank card needs a real sentence, and a node whose links sit in a See also list produces none. The page now says which nodes make four and which make three, and that the starter palace makes three.

New

What a lapsed subscription does is written down

A page saying plainly that a hosted account whose subscription ends is frozen rather than emptied: everything stays readable, reviewable and exportable, writing resumes if you come back, and free here means self-hosting rather than lapsed. The behaviour shipped on 26 August with a banner and an account panel and nowhere to read about it.

New

A page for the node format, with a recording of an import

The markdown both file kinds are written in, on one page: the folder shape, a real taxonomy file, a real entry, the link syntax at its three depths, a sketch of a form that would write it for you, and a recording of a batch actually landing. The full field reference is a single file you can download and hand to a model.

Fixed

The unplaced list keeps its own count

Under the hierarchy chart is a list of everything no hierarchical edge touches, ending with how many more there are than fit. With long names it was trimming that count off the end — the one number you cannot work out from the names on screen. The names are trimmed now; the count is not.

New

The graph can tell you it disagrees with itself

A relation can now declare what kind of graph it is supposed to form — a tree, a chain, a one-way graph, a set of weighted shares, or no constraint at all — and the app says so when your own data breaks it: stakes totalling more than a whole, a loop in something that should be a hierarchy, two parents where there can only be one. A shape only ever warns. Nothing you write is refused, and leaving the column off is always safe.

New

A relation can carry a number

A link could say what kind of relation it was. It could not say how much. Writing `[[beta-corp::owns=51|Beta Corp]]` now puts the figure on the edge itself, and everything after the first equals sign is kept exactly as you typed it — so a relation carrying a job title rather than a percentage sits in the same slot. One value per relation per pair: two different figures between the same two nodes is a contradiction rather than two edges, and only the first survives.

New

Ownership, drawn

A lens whose relations form a hierarchy draws as a layered chart rather than a cloud: holders across the top, what they hold beneath, and every edge labelled with the figure it carries. An edge that points the wrong way for its relation is dashed and warning-coloured instead of being quietly re-ranked, and anything with nothing above or below it goes to a tray with a count rather than being dropped. Which way a relation hangs is a control in Lens settings now, not a field you edit by hand.

Fixed

Family links in the starter graph point one way

The lens new accounts can fork no longer records each of two people as the parent of the other. The first run of the new checker found twenty such pairs, and they are downgraded to plain links rather than deleted — a child's page should still link to their parent, it just should not claim to be the parent. Accounts made from here take the corrected version; a graph forked before this keeps its copy, because a fork is a copy rather than a link.

New

Move a lens under another one from its own settings

A lens can be moved under another from its own settings panel — which is where you are standing when you decide it belongs somewhere else.

Fixed

Flashcards are clean, and each has a single right answer

Fill-in-the-blank cards no longer carry raw markup, and none of them give away what they are asking; all 658 had carried it and 118 had given it away. Cards that blank a name out of a list are no longer made either, because a list has no single right answer. The 1,907 of those were removed, so the deck is smaller and everything left in it can be answered.

Fixed

Review keeps your schedule at any deck size

A deck of any size loads its full review history now, paged and chunked, and raises a refusal instead of swallowing one. Past roughly two hundred cards it used to come back empty, so a deck you had been learning for weeks was presented as fresh — and grading one wrote a second history over the one that was fine. A sibling read was being truncated at the same time, leaving 246 of one account's cards out of the queue.

Safety

A free trial was being granted a paying account's allowance

Starting a trial emits the same event a purchase does; only the status inside it differs, and the code was reading the name. A trial that billed nothing was therefore handed a full month of hosted model use. It now reads the subscription's state rather than the event's name — which also covers the events this project had never seen, including the one that actually signals a trial converting, which was not in the old list at all. Under the old code a real customer paying would have received nothing.

Safety

A lapsed account is frozen, not emptied

There is now a state an account can be in where nothing can be written and everything can still be read, exported and reviewed — enforced by the database itself rather than by the app asking nicely, across the fourteen tables that hold your work. It exists so the end of a subscription is never the end of your notes. Turning hosted AI off stays available while frozen, because a privacy control is never a billing lever; so does grading the cards you already have, and so does taking a full export. Billing is off during early access, so nothing currently freezes anyone.

Fixed

Your export carries everything it claims to

The record of what you have consented to is in the archive now; it had been missing, though the app was entitled to read it all along. Two other tables that will never be in there are named as deliberate exemptions rather than left off quietly: a derived index that would dominate the archive, and the operator's payment trail, which your browser cannot read at all and would therefore have exported as nothing while appearing complete.

Fixed

When a save is refused, the message says why

A write the database turns down now explains itself, in one sentence shared across the app.

New

The source is public, and licensed

The repository is published, under AGPL v3 — the licence whose section 13 says that if you modify this and offer it to people over a network, you owe the people you offered it to whatever you changed. Plain GPL covers distribution only, which would let somebody run a modified copy as a hosted service and publish nothing, and this is a hosted service. What is in it: the app, the database schema and its scripts, the demo lenses and the authoring skills — enough to run your own. Not the working notes.

New

Free while early access lasts, and the site says so

The site now says plainly that it costs nothing during early access — on the masthead of every page, and under the buttons on the front page, which is where the question actually gets asked.

New

The authoring skill is a file you can download

It is served now — free, no key, and it runs on a model you are already paying for. The walkthrough step that tells you to point your own model at it links to it, and so does the message shown when your hosted allowance runs out, which makes that message an offer rather than an upsell.

New

The workshops are documented, and every room has a question mark

A page covering what the three rooms do, and help inside each room rather than only outside it — including, in plain words, what would happen to your text if the no-account, nothing-uploaded promise ever changed.

Fixed

The setup walkthrough teaches the typed link syntax

Step three now shows the form that records what kind of relationship a link is. It had been showing the plain form, which says two nodes are connected without saying how — so anyone following it built a graph of relationships that do not name themselves.

New

Panels have a surface

Every panel in the app now sits on a lit fill with a shadow under it, where before it was a hairline drawn on a flat ground. Content rises off the page instead of being printed on it, in both themes.

New

A third room, for documents

Paste a document and this one reads who is quoted and who only ever gets talked about, when things happened, and what sums are named — off fixed lists of English's attribution words, date words and amount words. No model, no key, no network, nothing leaves the page. All three rooms are open now.

New

The philosopher's room reads real philosophy, and hands you what it found

The claims either side of an argument marker are quoted exactly rather than written for you; your own lens can be run against a text to see which of your terms it uses and which it never touches; and what the room finds can be sent across to the canvas as a paste you read before you accept it.

New

Undo the last import

After a paste lands you can remove exactly the nodes it created — from the canvas rather than from the dialog that was covering it, because looking at what landed is the whole basis for the decision. The button carries the number before you press it, and that count is the confirmation. It will not remove the lenses the same paste created: a container is cheap to leave and expensive to lose, and by the time you undo you may have put something else in it. It says so rather than over-promising.

New

Delete a selection

A set of nodes built by shift-clicking can be deleted — and it is the one control on that surface that arms before it fires, carrying the count on the button and discarding the arming if the selection changes underneath. Changing a group can be undone by changing it back, and the import undo can only reach what one paste just wrote; this can reach work you typed months ago, and the extra click is what that difference costs.

Fixed

The workshops are reachable from the canvas and the library

The list of places you can go is one list now, read by the workshop console, the library header and the canvas dock alike.

Fixed

Menus close when you click the canvas

All four menus share one dismiss behaviour now, so a click on the graph closes them just as a click anywhere else on a page does.

Safety

A payer could name whose account a subscription change landed on

The checkout link carried an account id as an ordinary part of its address, which meant the person paying could put somebody else's there. Cancelling afterwards wrote that stranger's plan back down to free while the real subscriber kept being billed. Account changes now take the account from what the payment provider itself reports; a downgrade is never carried out on an id the caller supplied; and a refused one is recorded along with the account it would have hit, so a person can finish the job rather than the event disappearing.

New

The documentation is finished

Twenty-three pages, all written rather than outlined: how lenses, nodes and links work, every route content can take to get in and what each one costs, how to shape a lens, what leaves the app and what never does, and a section for when something looks wrong. The pages that used to say they were planned now say the thing.

Fixed

A paste's `type:` key is stored

The `type:` key the paste format documents now lands. Nothing on the receiving end had handled it — not stored, not warned about, not refused, it simply vanished.

Fixed

A write the database refuses no longer reports success

All fifteen places where the app could report a save that the database had turned down now check the result, and a test refuses to let a sixteenth appear. Nothing was ever lost that had already been written, but a change you made could silently not take.

New

One door in

Signing in is now a single route through your existing account with a provider, and the password field is gone. It had no way to reset it, so anyone who reached it could be stranded with no recourse — removing the door was the honest fix rather than building a recovery flow for a route nobody was meant to take.

New

Send a selection from the wheel to the canvas

A group or a sector chosen on the Mandala can be sent across to the canvas as its own view, and the nodes that travelled keep a rim so you can see at a glance what came with them. Reachable from the keyboard as well as the pointer.

New

The Philosopher's Workshop

A second room. Paste an argument and it reads where the argument moves — the reasons given, where it lands, what you are asked to suppose — and which of the words you lean on changed the company they keep between the start and the end. It runs on a fixed list of English's argument words, so there is no model, no key, no network, and nothing leaves the page.

New

The Workshop, and the Braid

A room where the text is the subject rather than the input. Paste something and read its shape — who recurs and where, the rhythm of the sentences, the words that keep coming back — with no account and nothing uploaded. The Braid draws the cast as strands that meet where people share a scene and part where they do not.

Fixed

A text with no paragraph breaks is read properly

A long paragraph is cut at sentence ends now, and a wall of text with no full stops at all is cut on length rather than given up on. Anything pasted without blank lines used to come back as one chunk, so every instrument that reads across a text had nothing to compare and drew almost nothing.

New

The Mandala

A lens drawn as a wheel: families and groups as sectors sized by how much is in them, with a ring of the nodes themselves outside. Press a sector to go into it.

New

Terms, a privacy policy, and a consent gate

Specific documents rather than boilerplate, and a gate that asks before anything is stored rather than after.

New

Subscriptions

Billing through a merchant of record, which means tax is handled properly wherever you are rather than becoming your problem.

New

Ask your graph, and follow the answer back

A question answered out of your own nodes, where every claim names the node it came from so you can open it and check. It is metered, because a model reading across your graph is the part that actually costs something to run.

New

The project has a name

Everything that said Thoughtform now says Nodemancy.

New

Paste a lens into being

A paste could only ever add material to a lens that already existed. Now a conversation you had with a model somewhere else can arrive as a whole lens — its groups, its relations, the entries inside it, and one level of nesting underneath a macro lens — in a single paste. A block that does not make sense is named on its own and the rest still import, so one bad section does not cost you the other six.

Fixed

The typefaces the design specifies now load

Both faces are self-hosted and loaded properly — no third-party request from your browser, and no layout shift as they swap in. Around 195 surfaces had named a font that was never fetched, so unless you happened to have it installed the app rendered in a generic fallback.

New

Documentation

A real docs section with a persistent map. Pages that are outlined but unwritten say so and show what they will cover, rather than returning a 404 that claims they were never planned.

New

Custom themes with names

Build a palette, name it, keep several. Every surface reads the same tokens, so a theme applies to the docs and the graph alike rather than stopping at the edge of the app.

New

Fork more than one starter macro lens

A new account can take several starter lenses rather than a single fixed set, and choose which are selectable.

Safety

Queries scoped to their owner

Because slugs are unique per account rather than globally, a forked account could ask for one of its own entries and get two rows back — its own, and the starter account's. Five acute cases fixed, including two review guards that would have failed open. Further list-shaped cases are known and tracked; they return extra rows rather than wrong ones.

Fixed

A rename no longer erases your graph layout

Node positions you have dragged into place live only in your browser — there is no server copy. Renaming the storage key would have found nothing, fallen back to the physics simulation, and re-scattered a layout built over weeks, with no error and no warning. Saved layouts now migrate forward on first load instead.

Safety

Spending limits that actually bound spending

A per-account allowance bounds one account, not the total, because the number of accounts is not bounded. There is now a global monthly ceiling and a kill switch that can be changed without a deploy, checked before the per-account meter and failing closed.

Safety

Imported content arrives as a draft

Both import paths — pasted text and in-app generation — were landing model-written material as settled and immediately eligible to become flashcards, bypassing the review step that exists precisely to prevent that. Both now mark it draft and record where it came from.

Fixed

Card generation checks before it spends

The paid card path called the model before checking whether the node was still an unreviewed draft, so an attempt on a draft burned a unit to produce nothing. It checks first now.

July 2026

New

Drafts, and the line they cannot cross

Anything a model wrote arrives visibly marked and cannot produce a flashcard until you have read it. Reading is derived from actually having looked at it, not from a button you can click past.

Under the hood

Names are unique to you, not to everyone

Previously one account claiming a name took it from everybody. Now two people can each have a lens called the same thing, which is the prerequisite for forking a starter graph at all.