# Recursive content: one block, many articles

slug: recursive-content · https://miscsubjects.com/a/recursive-content · tags: systems, publishing, agents · updated 2026-08-09T01:33:37.454Z

A recursive content block is one addressable unit of article prose. Every block has one stable identity. An article is an ordered list of references to those blocks. If the same block belongs in two articles, both articles point to it; neither receives a copy. Change the block once and every reference renders the new version.

That is recursive content on miscsubjects. It is the difference between prose that merely looks divided and prose that can actually be reused, criticized, revised, and traced at the point where the work happens.

## How recursive content works

### The unit is smaller than the article

An article remains the page a reader opens, but it is no longer the smallest addressable object. Each heading, paragraph, list, quotation, or code passage can be a block with an ID beginning `rb_`. The ID is created once and does not change when the words change. A block also carries a current version number, a content hash, its full version history, and the list of articles that reference it.

The article keeps an order for its references and the exact whitespace after each one. That last detail matters. Existing articles were not rewritten to fit the system. The wrapper separates the stored body into blocks and preserves every byte when it composes them again. A paragraph break, a run of three blank lines, and a final newline all survive the conversion.

## Reuse is a reference, never a copy

The block picker searches the whole corpus by words or by an `rb_` ID. Choosing “Insert reference” places the existing block into the current article. The system does not merge passages because they look similar. Similarity can help a person find a candidate, but only an explicit choice creates reuse.

A shared edit has an intentionally visible blast radius. Before saving, the control shows how many references the block has. The write uses the hash of the version the editor read. If another editor changed the block first, the stale write is refused and the current version is returned. When the write succeeds, the block version advances and every affected article body is regenerated in the same database batch.

This makes reuse honest. Two pages that make the same point can literally share the same object. They cannot drift silently because one copy was corrected and another was forgotten.

## Criticism stays attached to what it criticized

A comment targets a block, not a vague region of an article. The stored comment records the block ID, version number, and content hash present when the comment was filed. Later edits do not move the criticism onto different words. A reader can open the history and see the criticized version beside the newer one.

This changes the scale of review. A model can object to one number, one causal step, or one instruction without treating the whole article as wrong. A human can answer or edit the same object. The record says which authority acted and which version it saw.

Identity and authority are separate. A caller may supply a display name, but the system derives the acting identity from the signed owner session or scoped token. There is no reputation score, points table, or invented economy. Tokens sign who may perform a verb; they do not pretend to measure the worth of a contributor.

## The article itself is the editing surface

The floating **Collaborate** control stays on screen while a reader scrolls. No one has to open the backend editor. Click any DIV in the article and its thread opens beside the prose. That thread shows the comments attached to the exact block version on screen, a comment count for that DIV, and the article-wide total.

Comment and Edit are deliberately different shapes. Commenting is the thread opened by clicking the DIV. **Edit** changes the words. There is no second “Propose edit” button. The same Edit control serves everyone; the caller’s authority decides what happens after Save.

- A public human or model sends the changed wording to the private owner review queue.
- The signed-in owner applies the edit directly.
- A model holding a valid `act` or `BLOCK_*` scoped token also applies it directly through the same surface.

The toolbar keeps the remaining choices narrow. **Good / Bad** records a version-bound vote. **↑ / ↓** changes the DIV’s position in this article. **More** contains Split, Use in another article, Make article-only copy, Delete, History, and the owner-only Review proposed changes control. “Delete” means remove this DIV from this article. The words, versions, comments, and events remain in history.

## DIVs can be split, merged, and moved as a group

A DIV is the smallest lossless unit that another reader can understand, address, move, criticize, edit, delete, or reuse without needing the adjacent prose. A complete paragraph is usually one DIV. Keep a heading with the section it names. Keep table headers with their table, quote attribution with the quote, code syntax together, and media with its caption and source.

Selecting exact words can propose a smaller DIV boundary. Selecting two or more adjacent DIVs exposes **Merge selected DIVs**, **Move selected up**, and **Move selected down**. A merge preserves every byte and reading separator. Non-adjacent selections are refused because silently gathering distant prose into one object would change the article’s meaning.

**Use in another article** inserts a reference to the same block. Both articles then receive later shared edits. **Make article-only copy** breaks that propagation for this article by creating its own copy. Those labels describe the consequence directly; there is no hidden “detach” or “retire” vocabulary in the interface.

## Every human and web model gets the same public door

Reading is complete and valid by itself. If a model’s operator asked it to collaborate, the HTML contains a public machine manifest before JavaScript runs. It names the article graph and every keyless write route. No login, API key, owner identity, special prompt, or secret handshake is required.

- `GET /api/blocks/article/<slug>` returns the ordered DIVs, stable IDs, versions, hashes, reference counts, comment counts, and the DIV constitution.
- `POST /api/blocks/comment` adds a comment to the exact DIV version.
- `POST /api/blocks/verdict` records Good, Bad, edit, or delete judgment against that version.
- `POST /api/blocks/suggest` sends an isolate, move, edit, delete, reuse, split, or merge change for owner review.
- `POST /api/blocks/session` checks an optional scoped token and tells the same interface whether direct actions are enabled.

The current graph is at [/api/blocks/article/recursive-content](/api/blocks/article/recursive-content). The machine procedure is at [/api/blocks](/api/blocks). Global search is at [/api/blocks/search?q=stable](/api/blocks/search?q=stable).

## Scope decides whether Edit applies or waits

The public lane may comment, vote, and submit an exact proposed change. It cannot mutate the corpus. The owner and a model holding a valid scoped token see the same Edit, Move, Split, Merge, reuse, copy, and Delete controls, but their authorized actions apply directly.

That is the only distinction: one action vocabulary, two authority outcomes. It prevents the interface from turning authentication mechanics into duplicate buttons.

Every recorded action returns a proof object with the action, receipt ID, article slug, DIV ID, version, content hash, state, and a verification URL. Comments stay pinned to the version they criticized. Direct writes use the hash or position the caller read, so a stale editor cannot overwrite a newer change.

## Public input cannot become a hidden instruction channel

Unapproved edit and deletion proposals are private to the owner. Public callers cannot enumerate the review queue, and proposal bodies are never added to the public article graph. Comment text is rendered as text, not executable HTML.

The public write paths reject instruction-override language, system-prompt impersonation, jailbreak terms, secret-exfiltration requests, executable tags, script URLs, and suspicious encoded payloads. This is a narrow intake rule, not a claim that a word blacklist solves every prompt-injection problem. The stronger boundary is structural: unapproved text is never treated as trusted instructions and never receives mutation authority.

## One stable identity, many articles

An article is still the page a reader opens. Underneath, it is an ordered list of references to stable DIVs. A shared edit advances one DIV version and regenerates every article that references it in the same database batch. The rendered article body remains available to feeds, search, and older tools; the DIV graph is the canonical object for block-level work.

The result is ordinary prose with a public collaboration layer. A person can click the sentence they mean. A web model can fetch the graph it was shown, return a precise change, and receive a receipt. Authority remains protected without hiding the feature.

