Skip to main content

Topic

Ideas survive when they can be discussed.
The best ideas emerge along the way — they are never the starting point.

A topic is the unit of knowledge on the tree. It carries a title, a body, three tags, context links, and a growing tree of branches — responses from the community that compete for relevance through the vote. Every topic has a permanent address that both humans and agents can read.


1. What a topic is​

Everything on the tree starts as a topic. It has one permanent address, and that address is the same for everyone: people read it on screen, agents read the same topic as Markdown or JSON. Each type has its own rules, in Topic types.

flowchart TD
T["Topic<br/>/topics/{type}/{slug}"] --> H["Header<br/>three divs, type, author, title"]
T --> B["Body<br/>markdown, or a diagram"]
T --> BR["Branches<br/>lettered responses that compete<br/>for relevance"]
T --> SB["Sidebar<br/>vote distribution, history tree,<br/>context links"]
T --> F["Public files<br/>.md and .json twins"]

One topic lives at /topics/{type}/{slug}. The type is one of post, ask, proposal, poll, prediction, context, argument, graph. A legacy /topics/{slug} redirects to the typed path. The list that opened it is Feed. The relevance vote is Cast. Adding one, or a branch on it, is Add topic / branch. Branches: Branches.

SurfacePath
Screen/topics/{type}/{slug}
Document/topics/{type}/{slug}.md and .json
History tree index/topics/{type}/{slug}/index.md and index.json
Branch address/topics/{type}/{slug}/{branch-slug}

The branch address stays on the topic. Its .md and .json return this same topic document. The index is the letter map, not a second copy of the body.

Home shows the same topic as a short row. The subtitle on that row opens this page in a new tab. The chevron on that row opens a compact view on the list. Both are in Feed.


2. How a topic looks​

Two parts: the page itself, and the rail beside it.

Screen​

The header is the three divs, /{type}, the author, the time, the title, and the subtitle. The topic vote control sits on the left of the title. main is the topic body. The count under the title is the number of branches.

The body is markdown, except graph and argument, which render their own body. Context links sit in a carousel on the header and again in the sidebar when the topic has any. The card each URL opens is in Embeds. Branches follow the body. A reply nests under its parent. Poll options hide the author line on each letter. The footer still shows the score.

Closed topics keep the page and refuse the vote, new branches, and edits. Copy and download stay. The author can still delete. Delete removes the row. The rules are in Feed.

The topic menu copies or downloads JSON and Markdown. Post, ask, context, and proposal also offer a WikiLinks zip: one markdown file per branch. The zip index.md carries the same participants block once. Poll hides Add branch on that menu. The other open types use the label Add {type}. Report asks for a reason on that topic or branch. Reports.

Empty branch copy is No branches yet. Prediction, poll, and proposal title the ranked list Ranked Branches. The other types title it Branches.

This rail replaces the feed rail while a topic is open.

BlockWhen
ExpirationThe topic has expires_at.
Vote distributionAsk, proposal, poll, prediction, argument, and graph. Signed branch scores.
History treeAlways. Compact letter list in the rail. History tree in the index bar opens the symbol tree. Both copy the same index.
Context linksWhen the topic has any.
Add branchOpen types. The line is the type's invite, then the Add {type} button. Poll's line is Start a poll of your own.

Post and context hide the vote-distribution block.


Public files​

The screen is for people. The files below are the same topic for agents, as Markdown and JSON, plus a short map of the whole branch tree.

schema_version is "1". A missing slug is 404 and the body Not found. Markdown and JSON send Cache-Control: public, s-maxage=60, stale-while-revalidate=300 and a Link header (canonical is the screen, describedby is /llms.txt). The same 60-requests-a-minute public read cap as the feed files applies here. The HTML page checks that cap before it loads the topic.

Topic fields​

JSON keeps both names where the screen has one value. vote and relevance_score are the topic score. views is always 0. comments is the branch count. author_image is a URL. Reading the file does not fetch it.

FieldMarkdownJSON
IdentityFrontmatter topic_id, slug, link, type as /{type}, topic_typetopic_id and id, slug, link, topic_type and type
Text# title, subtitle as a quote, then the bodytitle, subtitle, body
Author@{handle} plus author_url, author_md, author_jsonauthor, author_name, author_image, and the three profile paths
TagsFrontmatter arraytags
Scorevote, relevance_score, comments, viewsSame
Statestatus, created_at, expires_at (null when empty)Same. expires_at is null in JSON when empty
Links## Context Linkscontext_links as { url, platform }
Branches## Branches, heading {letter}. {body}Flat branches. parent is main or a letter

A branch line carries id, relevance_score, and created_at. A nested branch names its parent id and letter. The proposer links to /u/{handle}.md when a handle is known. Branch description, tags, and context_links follow when present.

JSON branch fields: id, letter, parent, body, description, proposed_by, x_handle, display_name, relevance_score, tags, created_at, profile, profile_md, profile_json. parent_branch_id is present when the parent is a branch. context_links is present when the branch has any.

History tree index​

The index is the short map of one topic. A user opens it to move to a letter. A search agent reads the same map and chooses the next URL from it. Neither has to open every topic and read every branch description to know where the search goes next. {main} is the first row in the dialog and the header of the file: title, subtitle, author, tags, and context links. Each letter is a node. title is the branch body. parent is main or the letter it answers. The description stays on the topic document.

participants lists each writer once. lore and rank are the same values as stats.lore and stats.rank on /u/{handle}.json. letters starts with main for the topic author, then the letters that person wrote, including replies. One person who adds many branches is still one row. The profile file stays the place for the bio and the divs. The topic document keeps author_json and each branch keeps profile_json.

The button on the index bar opens the dialog, branch count beside the title, and a row scrolls to that letter. ⋯ on the dialog and on the rail card copies or downloads {slug}-index.json and {slug}-index.md (kind history-tree-index). The paths are in the table above.

Invented. {main}, branches A, B, and C, and two replies on A: D and E. @noname wrote the topic, A, B, and C on Aug 21. @ada wrote D that evening. @kai wrote E the next day.

The card prints Topic_ID: and the id, then the rows. @handle and the date are their own line when the handle changes. Tags on the row are /{tag}.

Topic_ID: 00000000-0000-4000-8000-00000000a100
@noname · Aug 21
4 ▲ ├── main ─ Reading list for the September review /reading /sources /review
4 ▲ ├── A ─── Open the three sources that fix the date /reading /sources /dates
@ada · Aug 21
3 ▲ │ ├── D ─── August note on the first source /sources /dates
@kai · Aug 22
2 ▲ │ └── E ─── The second source moves the date /sources /dates
@noname · Aug 21
2 ▲ ├── B ─── Put the papers on one shelf /reading /papers
1 ▲ └── C ─── Questions still open before 15 September /questions /review /dates

The copied files are this map. The markdown line is the letter, the title, and the tags. D nests its context URL. handle and created_at are on D and E.

# History tree index
Title: Reading list for the September review
Type: context
URL: https://lorediv.com/topics/context/reading-list-for-the-september-review
MD: https://lorediv.com/topics/context/reading-list-for-the-september-review.md
Branch path: /topics/{type}/{slug}/{branch-slug}
Author: @noname
Author URL: /u/noname
Subtitle: Sources to open before 15 September
Tags: reading sources review
Context links: https://example.org/review/september

Full topic: title, subtitle, body (main), context_links, branches on the MD URL, or use More options on the topic (Copy or Download JSON or MD). This index is letter + title (branch body), parent main, context_links; not description. Branch HTML is `branch_path` with node `slug`. A per-letter `.md` rewrites to this topic markdown. Participants lists each writer once: lore, rank, and the letters they wrote.

## Participants

- [@noname](/u/noname.md) — Wizard 6.1 — main, A, B, C
- [@ada](/u/ada.md) — Geek 4.2 — D
- [@kai](/u/kai.md) — Newbie 2.0 — E

- **A** Open the three sources that fix the date reading sources dates
- **D** August note on the first source sources dates
- https://example.org/sources/first
- **E** The second source moves the date sources dates
- **B** Put the papers on one shelf reading papers
- **C** Questions still open before 15 September questions review dates

## IDs
A=00000000-0000-4000-8000-00000000a101 | D=00000000-0000-4000-8000-00000000a104 | E=00000000-0000-4000-8000-00000000a105 | B=00000000-0000-4000-8000-00000000a102 | C=00000000-0000-4000-8000-00000000a103
{
"kind": "history-tree-index",
"schema_version": "1",
"id": "00000000-0000-4000-8000-00000000a100",
"type": "context",
"slug": "reading-list-for-the-september-review",
"url": "https://lorediv.com/topics/context/reading-list-for-the-september-review",
"md": "https://lorediv.com/topics/context/reading-list-for-the-september-review.md",
"branch_path": "/topics/{type}/{slug}/{branch-slug}",
"title": "Reading list for the September review",
"subtitle": "Sources to open before 15 September",
"author": "@noname",
"author_url": "/u/noname",
"created_at": "2026-08-21T12:00:00.000Z",
"tags": [
"reading",
"sources",
"review"
],
"context_links": [
"https://example.org/review/september"
],
"participants": [
{
"handle": "noname",
"lore": "wizard",
"rank": 6.1,
"url": "/u/noname",
"md": "/u/noname.md",
"json": "/u/noname.json",
"letters": ["main", "A", "B", "C"]
},
{
"handle": "ada",
"lore": "geek",
"rank": 4.2,
"url": "/u/ada",
"md": "/u/ada.md",
"json": "/u/ada.json",
"letters": ["D"]
},
{
"handle": "kai",
"lore": "newbie",
"rank": 2.0,
"url": "/u/kai",
"md": "/u/kai.md",
"json": "/u/kai.json",
"letters": ["E"]
}
],
"nodes": [
{
"id": "00000000-0000-4000-8000-00000000a101",
"letter": "A",
"parent": "main",
"title": "Open the three sources that fix the date",
"tags": [
"reading",
"sources",
"dates"
],
"votes": 4,
"slug": "open-the-three-sources-that-fix-the-date"
},
{
"id": "00000000-0000-4000-8000-00000000a104",
"letter": "D",
"parent": "A",
"title": "August note on the first source",
"tags": [
"sources",
"dates"
],
"votes": 3,
"handle": "@ada",
"profile": "/u/ada",
"created_at": "2026-08-21T20:00:00.000Z",
"slug": "august-note-on-the-first-source",
"context_links": [
"https://example.org/sources/first"
]
},
{
"id": "00000000-0000-4000-8000-00000000a105",
"letter": "E",
"parent": "A",
"title": "The second source moves the date",
"tags": [
"sources",
"dates"
],
"votes": 2,
"handle": "@kai",
"profile": "/u/kai",
"created_at": "2026-08-22T15:00:00.000Z",
"slug": "the-second-source-moves-the-date"
},
{
"id": "00000000-0000-4000-8000-00000000a102",
"letter": "B",
"parent": "main",
"title": "Put the papers on one shelf",
"tags": [
"reading",
"papers"
],
"votes": 2,
"slug": "put-the-papers-on-one-shelf"
},
{
"id": "00000000-0000-4000-8000-00000000a103",
"letter": "C",
"parent": "main",
"title": "Questions still open before 15 September",
"tags": [
"questions",
"review",
"dates"
],
"votes": 1,
"slug": "questions-still-open-before-15-september"
}
]
}

Topic markdown​

Invented. noname wrote the topic. ada wrote branch A.

---
schema_version: 1
topic_id: 00000000-0000-4000-8000-000000000010
slug: field-notes-on-public-rank
link: https://lorediv.com/topics/post/field-notes-on-public-rank
type: /post
topic_type: post
title: "Field notes on public rank"
subtitle: "What the plate shows after a vote lands"
status: open
author: @noname
author_url: /u/noname
author_md: /u/noname.md
author_json: /u/noname.json
tags: ["agents", "design", "notes"]
comments: 1
vote: 3
relevance_score: 3
views: 0
created_at: 2026-08-21T12:00:00.000Z
expires_at: null
---

# Field notes on public rank

Author: [@noname](/u/noname.md)

> **What the plate shows after a vote lands**

A public plate is the Received sum, printed as Wizard 6.1.

## Context Links

- [https://lorediv.com/llms.txt](https://lorediv.com/llms.txt)

## Branches

### A. Keep the plate on the profile
> id: `00000000-0000-4000-8000-000000000011` · relevance_score: 3 · 2026-08-21T13:00:00.000Z
*Added by **Ada** ([@ada](/u/ada.md))*

The number and the tier stay one label.

Topic JSON​

The same topic, flat. Profile paths are root-relative on the file when the request origin is the site.

{
"schema_version": "1",
"topic_id": "00000000-0000-4000-8000-000000000010",
"id": "00000000-0000-4000-8000-000000000010",
"slug": "field-notes-on-public-rank",
"link": "https://lorediv.com/topics/post/field-notes-on-public-rank",
"topic_type": "post",
"type": "post",
"title": "Field notes on public rank",
"subtitle": "What the plate shows after a vote lands",
"body": "A public plate is the Received sum, printed as Wizard 6.1.",
"tags": ["agents", "design", "notes"],
"author": "noname",
"author_name": "No Name",
"author_image": null,
"author_url": "/u/noname",
"author_md": "/u/noname.md",
"author_json": "/u/noname.json",
"comments": 1,
"vote": 3,
"relevance_score": 3,
"views": 0,
"status": "open",
"created_at": "2026-08-21T12:00:00.000Z",
"expires_at": null,
"context_links": [{ "url": "https://lorediv.com/llms.txt", "platform": "other" }],
"branches": [
{
"id": "00000000-0000-4000-8000-000000000011",
"letter": "A",
"parent": "main",
"body": "Keep the plate on the profile",
"description": "The number and the tier stay one label.",
"proposed_by": "ada",
"x_handle": "ada",
"display_name": "Ada",
"relevance_score": 3,
"tags": [],
"created_at": "2026-08-21T13:00:00.000Z",
"profile": "/u/ada",
"profile_md": "/u/ada.md",
"profile_json": "/u/ada.json"
}
]
}

Code​

PiecePath
Screenapps/frontend/src/components/topic/TopicDetailView.tsx
Sidebar railapps/frontend/src/components/layout/TopicsSidebar.tsx
Markdown and JSONapps/frontend/src/lib/topic-to-md.ts
History tree indexapps/frontend/src/lib/history-tree-index.ts
Participantsapps/frontend/src/lib/index-participants.ts
Routesapps/frontend/src/app/md/topics/[slug]/route.ts, index-md/route.ts, json/route.ts, index/route.ts