This site now derives its own work queue — and exports itself as an Obsidian vault
On August 2, 2026, this system gained three connected capabilities in one session: article bodies now carry Obsidian-style that render as ordinary links on the site and resolve natively in Obsidian; the entire corpus exports as a working
On August 2, 2026, this system gained three connected capabilities in one session: article bodies now carry Obsidian-style [[wikilinks]] that render as ordinary links on the site and resolve natively in Obsidian; the entire corpus exports as a working Obsidian vault whose index, log, health report, and work queue are generated from the live database; and the system now computes, on demand, a ranked answer to the question every content operation struggles with — what should be written next? This page documents the mechanism with the receipts from the session that shipped it.
The idea this merges
Andrej Karpathy published a pattern in 2026 he called the LLM wiki: instead of retrieving documents and re-synthesizing them on every question, keep a compiled knowledge base — markdown pages an LLM maintains — where every new source revises the existing pages rather than merely joining an archive. Three operations run it: ingest (new material updates many pages, not one), query (answers get filed back in), and lint (a standing health check for contradictions, orphan pages, stale claims, and missing cross-references). Two files anchor it: an index.md catalog and an append-only log.md. The closing point of his note reaches back to Vannevar Bush's 1945 Memex essay: a personal store of knowledge with associative trails between documents was designed eighty years ago, and the unsolved part was always who does the maintenance.
This system already had most of the hard parts: 2,264 articles in one database, claims with tiers and hash-chained sources, a public events ledger, an outreach pipeline with tracked sends and reply routing. What it did not have was the compiled-wiki discipline — no inbound-link index, no orphan detection, no mechanical answer to "what next," and an export that produced files without the graph. The merge kept this site as the canonical store and adopted exactly the parts of the wiki pattern that compound: the link graph, the lint pass, the queue, and the vault as a lossless projection.
Links now round-trip between the site and Obsidian
A wikilink to a page that does not exist renders as a marked, unlinked span — and becomes a row in the system's gap report. A typed link to a missing page is treated as an authored request for that page. This is not hypothetical: the first run of the gap scan found 163 distinct missing pages already being requested by published bodies — models writing the OIP corpus had been typing wikilinks to pages like oip-total-structure (requested by 171 different articles) that no one ever created. The queue found real, latent demand that had been invisible for weeks.
On export, the transform inverts. Canonical links (/a/slug) and typed wikilinks both become vault-resolvable wikilinks ([[Peptides/bpc-157/README|label]]), so Obsidian's graph view, backlinks pane, and unresolved-links report all work on the exported corpus with no plugins. A four-assertion round-trip test proves no link target is lost in either direction, and it runs in CI on every push.
One derivation: the graph, the lint, the queue
Three public endpoints now serve one derivation over the whole corpus:
/api/articles/graph-links builds the full edge set from three sources: declared embeds, markdown links to /a/ pages, and typed wikilinks. First live run: 3,386 edges across 2,264 articles, with inbound links (backlinks) computed for every page — a structure that did not exist anywhere in the system before this session.
/api/articles/graph-lint is Karpathy's third operation, mechanized: orphans (no inbound links — 1,715 on first run, an honest number discussed below), missing pages (163), articles carrying claims with no source (494), articles with claims under active challenge (32), and stale hubs (heavily-linked pages that stopped moving — 0 at the current threshold). Every finding names the page and the defect. The pass is pure derivation: run it twice against an unchanged corpus and it returns identical output.
/api/articles/next-acts turns the lint into a ranked queue, and this is the piece that changes the loop. At generation time 2026-08-03T02:48:38Z the top of the live queue read: write oip-total-structure (score 271) — wikilinked from 171 articles, no page exists; write oip-machine-plane (110); write oip-ground (103). Below the writing acts sit resolve (challenged claims), source (unsourced claims), revise (stale hubs), connect (orphans) — and then the outward half: respond (unread replies outrank everything else in their band, because responses update priors), and outreach (high-fit audience classes that have gone quiet). Content work and outreach work come off the same queue, computed from the same graph. Performing the top act and re-running the derivation is the loop.
The vault: the whole system as a folder of markdown
GET /api/articles/obsidian-vault (or node scripts/obsidian_pull.mjs --all) now produces a version-3 vault. The session's verification run pulled 370 files for a two-article slice and verified 369 of 369 content hashes against the SHA256SUMS manifest the server generates (the manifest does not hash itself).
What lands on disk, and why each file exists:
index.md — Karpathy's catalog: every page, one line, with role, claim count, source count, backlink count, and last-updated date, grouped by ontology folder. The first file a model opens.
log.md — the append-only chronology, projected from the live events ledger. The ledger stays canonical; the file is a read model.
SCHEMA.md — the maintainer contract: the three operations, the authority rule, the conventions. CLAUDE.md and AGENTS.md are three-line pointers to it, so Claude Code, Codex, and any agentic CLI that auto-loads root files inherits the same contract from the same source.
lint.md and next.md — the health report and the ranked queue, as files, regenerated on every pull from the same derivation the API serves.
Misc.base — an Obsidian Bases file (the native database view that shipped in Obsidian 1.9): a table of every article grouped by role with claim/source sums, an Orphans view filtered to backlinks == 0, and a claim-atom view by tier. No Dataview plugin required.
_MOC/graph.canvas — a JSON Canvas 1.0 map of the ontology folders and their top pages, edges drawn from declared embeds.
.obsidian/ — graph color groups per ontology folder, so the vault opens looking organized rather than gray.
Per-article folders — README with the full body (links converted), a Linked from backlinks section, YAML properties typed to Obsidian's conventions (ISO dates, list tags, aliases), plus the existing claims, hash-chained sources, voxel topology, provenance, question graph, and yield files.
The authority rule is stated in the vault itself and enforced by the sync design: the site is canonical; the vault is a lossless projection. Local edits do not overwrite canon — the sync script posts annotations as challenges against specific claims on the live ledger, and the next pull shows the graph revised. Karpathy's separation of immutable sources from generated synthesis was already this system's architecture (hash-chained sources, append-only revisions); the vault just makes it visible in a folder.
The doctrine is now a law object
The loop itself — how a model picks the next act, what form each artifact takes, which grammars are legal in a body, what a hero image may and may not be, how outreach is gated, what a finished rep looks like — is now written as a canonical law object at The Loop Law, alongside the writing, design, outreach, and skill laws in the site footer. It serves a human page, a JSON object, and a model skill (/api/articles/loop-law?format=skill) from one source file.
Its repair clause is the reason it exists: the documentation is the fix surface. When a model produces a wrong output, the owner points at the behavior; the clause that allowed it is amended with the exhibit attached; the instance is fixed second. Every model that loads the object afterward inherits the fix. The object's amendment history already carries the failures that taught it: the render that silently replaced an authored body with a claims digest (2026-08-02), the art-styled hero images (2026-08-01), the 121 outreach drafts that converged on one template (2026-07-25), the unsigned post (2026-07-24).
What is not satisfied
1,715 orphans is a real debt, not a bug in the counter. Most are peptide and OIP articles that were published connected by folder convention but never linked by any parent page. The queue now surfaces them, but clearing them is weeks of connect acts.
The missing-pages queue is currently dominated by one corpus. The OIP convergence series accounts for most of the 163 missing targets; the ranking is honest about demand but not yet about diversity of demand.
Stale detection is young. Zero stale hubs at the 120-day threshold mostly reflects a corpus younger than 120 days, not perfect maintenance.
The outreach acts are derived, not executed. External sends remain owner-gated by standing law; the queue can rank a quiet audience class, and a model may draft for it, but nothing sends itself.
Obsidian's official CLI requires the desktop app running. Headless automation still goes through this site's own API; the vault's SCHEMA.md documents both paths.
The vault is one-way for structure. Sync posts claims and challenges; it does not yet accept new pages authored in the vault. A page authored locally still enters canon through the article intake.
Run it yourself
bash
1
2
3
4
5
6
7
8
9
10
11
# the queuecurl -s https://miscsubjects.com/api/articles/next-acts?limit=10# the health reportcurl -s https://miscsubjects.com/api/articles/graph-lint# backlinks for any articlecurl -s 'https://miscsubjects.com/api/articles/graph-links?slug=bpc-157'# the vault (JSON manifest of files + hashes)curl -s 'https://miscsubjects.com/api/articles/obsidian-vault?slugs=protocol,bpc-157'
Line 11, Column 1Shell Script
Then open the pulled folder in Obsidian and start at index.md. The graph you see is the same graph the queue is computed from — the site, the vault, the lint, and the queue are one derivation, read four ways.
{
"schema":"http://google-preview.miscsubjects.com/schemas/jarticle.json",
"status":"published",
"slug":"the-corpus-now-writes-its-own-work-queue",
"title":"This site now derives its own work queue — and exports itself as an Obsidian vault",
"kind":"canon",
"summary":"On August 2, 2026, this system gained three connected capabilities in one session: article bodies now carry Obsidian-style that render as ordinary links on the site and resolve natively in Obsidian; the entire corpus exports as a working",
"created":"2026-08-03T03:00:02.584Z",
"body": [
"On August 2, 2026, this system gained three connected capabilities in one session: article bodies now carry Obsidian-style `[[wikilinks]]` that render as ordinary links on the site and resolve natively in Obsidian; the entire corpus exports as a working Obsidian vault whose index, log, health report, and work queue are generated from the live database; and the system now computes, on demand, a ranked answer to the question every content operation struggles with — *what should be written next?* This page documents the mechanism with the receipts from the session that shipped it.\n\n## The idea this merges\n\nAndrej Karpathy published a pattern in 2026 he called the LLM wiki: instead of retrieving documents and re-synthesizing them on every question, keep a *compiled* knowledge base — markdown pages an LLM maintains — where every new source revises the existing pages rather than merely joining an archive. Three operations run it: **ingest** (new material updates many pages, not one), **query** (answers get filed back in), and **lint** (a standing health check for contradictions, orphan pages, stale claims, and missing cross-references). Two files anchor it: an `index.md` catalog and an append-only `log.md`. The closing point of his note reaches back to Vannevar Bush's 1945 Memex essay: a personal store of knowledge with associative trails between documents was designed eighty years ago, and the unsolved part was always who does the maintenance.\n\nThis system already had most of the hard parts: 2,264 articles in one database, claims with tiers and hash-chained sources, a public events ledger, an outreach pipeline with tracked sends and reply routing. What it did not have was the compiled-wiki discipline — no inbound-link index, no orphan detection, no mechanical answer to \"what next,\" and an export that produced files without the graph. The merge kept this site as the canonical store and adopted exactly the parts of the wiki pattern that compound: the link graph, the lint pass, the queue, and the vault as a lossless projection.\n\n## Links now round-trip between the site and Obsidian\n\nAn author — human or model — can now type `[[adjudication-calibration-study]]` or `[[adjudication-calibration-study|the calibration study]]` in any article body. On the reader's page it renders as a normal link to that article, with the article's real title as the text when no label is given. This paragraph does it live: the calibration numbers this system publishes are at [[adjudication-calibration-study]], and the full capability inventory is at [[the-build-end-to-end]].\n\nTwo details carry the weight:\n\nA wikilink to a page that does not exist renders as a marked, unlinked span — and becomes a row in the system's gap report. A typed link to a missing page is treated as an authored request for that page. This is not hypothetical: the first run of the gap scan found **163 distinct missing pages already being requested by published bodies** — models writing the OIP corpus had been typing wikilinks to pages like `oip-total-structure` (requested by 171 different articles) that no one ever created. The queue found real, latent demand that had been invisible for weeks.\n\nOn export, the transform inverts. Canonical links (`/a/slug`) and typed wikilinks both become vault-resolvable wikilinks (`[[Peptides/bpc-157/README|label]]`), so Obsidian's graph view, backlinks pane, and unresolved-links report all work on the exported corpus with no plugins. A four-assertion round-trip test proves no link target is lost in either direction, and it runs in CI on every push.\n\n## One derivation: the graph, the lint, the queue\n\nThree public endpoints now serve one derivation over the whole corpus:\n\n**`/api/articles/graph-links`** builds the full edge set from three sources: declared embeds, markdown links to `/a/` pages, and typed wikilinks. First live run: **3,386 edges across 2,264 articles**, with inbound links (backlinks) computed for every page — a structure that did not exist anywhere in the system before this session.\n\n**`/api/articles/graph-lint`** is Karpathy's third operation, mechanized: orphans (no inbound links — 1,715 on first run, an honest number discussed below), missing pages (163), articles carrying claims with no source (494), articles with claims under active challenge (32), and stale hubs (heavily-linked pages that stopped moving — 0 at the current threshold). Every finding names the page and the defect. The pass is pure derivation: run it twice against an unchanged corpus and it returns identical output.\n\n**`/api/articles/next-acts`** turns the lint into a ranked queue, and this is the piece that changes the loop. At generation time 2026-08-03T02:48:38Z the top of the live queue read: `write oip-total-structure (score 271)` — wikilinked from 171 articles, no page exists; `write oip-machine-plane (110)`; `write oip-ground (103)`. Below the writing acts sit `resolve` (challenged claims), `source` (unsourced claims), `revise` (stale hubs), `connect` (orphans) — and then the outward half: `respond` (unread replies outrank everything else in their band, because responses update priors), and `outreach` (high-fit audience classes that have gone quiet). Content work and outreach work come off the same queue, computed from the same graph. Performing the top act and re-running the derivation *is* the loop.\n\n## The vault: the whole system as a folder of markdown\n\n`GET /api/articles/obsidian-vault` (or `node scripts/obsidian_pull.mjs --all`) now produces a version-3 vault. The session's verification run pulled **370 files** for a two-article slice and verified **369 of 369 content hashes** against the `SHA256SUMS` manifest the server generates (the manifest does not hash itself).\n\nWhat lands on disk, and why each file exists:\n\n- **`index.md`** — Karpathy's catalog: every page, one line, with role, claim count, source count, backlink count, and last-updated date, grouped by ontology folder. The first file a model opens.\n- **`log.md`** — the append-only chronology, projected from the live events ledger. The ledger stays canonical; the file is a read model.\n- **`SCHEMA.md`** — the maintainer contract: the three operations, the authority rule, the conventions. **`CLAUDE.md`** and **`AGENTS.md`** are three-line pointers to it, so Claude Code, Codex, and any agentic CLI that auto-loads root files inherits the same contract from the same source.\n- **`lint.md`** and **`next.md`** — the health report and the ranked queue, as files, regenerated on every pull from the same derivation the API serves.\n- **`Misc.base`** — an Obsidian Bases file (the native database view that shipped in Obsidian 1.9): a table of every article grouped by role with claim/source sums, an Orphans view filtered to `backlinks == 0`, and a claim-atom view by tier. No Dataview plugin required.\n- **`_MOC/graph.canvas`** — a JSON Canvas 1.0 map of the ontology folders and their top pages, edges drawn from declared embeds.\n- **`.obsidian/`** — graph color groups per ontology folder, so the vault opens looking organized rather than gray.\n- **Per-article folders** — README with the full body (links converted), a `Linked from` backlinks section, YAML properties typed to Obsidian's conventions (ISO dates, list tags, aliases), plus the existing claims, hash-chained sources, voxel topology, provenance, question graph, and yield files.\n\nThe authority rule is stated in the vault itself and enforced by the sync design: **the site is canonical; the vault is a lossless projection.** Local edits do not overwrite canon — the sync script posts annotations as *challenges* against specific claims on the live ledger, and the next pull shows the graph revised. Karpathy's separation of immutable sources from generated synthesis was already this system's architecture (hash-chained sources, append-only revisions); the vault just makes it visible in a folder.\n\n## The doctrine is now a law object\n\nThe loop itself — how a model picks the next act, what form each artifact takes, which grammars are legal in a body, what a hero image may and may not be, how outreach is gated, what a finished rep looks like — is now written as a canonical law object at [The Loop Law](/a/loop-law), alongside the writing, design, outreach, and skill laws in the site footer. It serves a human page, a JSON object, and a model skill (`/api/articles/loop-law?format=skill`) from one source file.\n\nIts repair clause is the reason it exists: **the documentation is the fix surface.** When a model produces a wrong output, the owner points at the behavior; the clause that allowed it is amended with the exhibit attached; the instance is fixed second. Every model that loads the object afterward inherits the fix. The object's amendment history already carries the failures that taught it: the render that silently replaced an authored body with a claims digest (2026-08-02), the art-styled hero images (2026-08-01), the 121 outreach drafts that converged on one template (2026-07-25), the unsigned post (2026-07-24).\n\n## What is not satisfied\n\n- **1,715 orphans is a real debt, not a bug in the counter.** Most are peptide and OIP articles that were published connected by folder convention but never linked by any parent page. The queue now surfaces them, but clearing them is weeks of `connect` acts.\n- **The missing-pages queue is currently dominated by one corpus.** The OIP convergence series accounts for most of the 163 missing targets; the ranking is honest about demand but not yet about diversity of demand.\n- **Stale detection is young.** Zero stale hubs at the 120-day threshold mostly reflects a corpus younger than 120 days, not perfect maintenance.\n- **The outreach acts are derived, not executed.** External sends remain owner-gated by standing law; the queue can rank a quiet audience class, and a model may draft for it, but nothing sends itself.\n- **Obsidian's official CLI requires the desktop app running.** Headless automation still goes through this site's own API; the vault's `SCHEMA.md` documents both paths.\n- **The vault is one-way for structure.** Sync posts claims and challenges; it does not yet accept new pages authored in the vault. A page authored locally still enters canon through the article intake.\n\n## Run it yourself\n\n```bash\n# the queue\ncurl -s https://miscsubjects.com/api/articles/next-acts?limit=10\n\n# the health report\ncurl -s https://miscsubjects.com/api/articles/graph-lint\n\n# backlinks for any article\ncurl -s 'https://miscsubjects.com/api/articles/graph-links?slug=bpc-157'\n\n# the vault (JSON manifest of files + hashes)\ncurl -s 'https://miscsubjects.com/api/articles/obsidian-vault?slugs=protocol,bpc-157'\n```\n\nThen open the pulled folder in Obsidian and start at `index.md`. The graph you see is the same graph the queue is computed from — the site, the vault, the lint, and the queue are one derivation, read four ways."
],
"facts": {
"converted_from":"markdown",
"original_updated":"2026-08-03T03:09:11.626Z",
"register":"essay",
"category":"canon"
},
"hero":"https://miscsubjects.com/img/gen/arcads-gpt-image-3184d580-f3a6-4849-92b6-0b4f65f17e0c.png",
"model":"Fable 5 (Claude Code)",
"tags": [
"canonical",
"loop",
"knowledge-graph",
"obsidian"
],
"sources": [
{
"id":"s1",
"type":"system",
"title":"Live derivation receipts, 2026-08-03: graph-lint counts {articles:2264, edges:3386, orphans:1715, missing_pages:163, unsourced:494, contested:32}; next-acts head [write oip-total-structure 271, write oip-machine-plane 110, write oip-ground 103] at 2026-08-03T02:48:38Z; vault pull 370 files, SHA256SUMS verify 369 ok 0 fail",
"url":"https://miscsubjects.com/api/articles/graph-lint",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"genesis",
"hash":"baf945ed1ef64bd530ddfa461f33db1eb05e35df93871c547d445fd6533e86a2"
},
{
"id":"s2",
"type":"reference",
"title":"Karpathy — LLM Wiki (gist, 2026)",
"url":"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"baf945ed1ef64bd530ddfa461f33db1eb05e35df93871c547d445fd6533e86a2",
"hash":"629a98eb5f70c053dd1752d55aae5b289b025d72c6e921e5eaa8b7136be15fb3"
},
{
"id":"s3",
"type":"reference",
"title":"Obsidian Bases syntax (official documentation)",
"url":"https://obsidian.md/help/bases/syntax",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"629a98eb5f70c053dd1752d55aae5b289b025d72c6e921e5eaa8b7136be15fb3",
"hash":"9d5ec850e68007862352626d441a6216fb74048a4a3ba6dba3a2347f59a35a7d"
},
{
"id":"s4",
"type":"reference",
"title":"JSON Canvas spec 1.0",
"url":"https://jsoncanvas.org/spec/1.0/",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"9d5ec850e68007862352626d441a6216fb74048a4a3ba6dba3a2347f59a35a7d",
"hash":"3cdb7cbcbcb5566018c9d0d23fe466a8f658767097e971e77f863e93891a9b6d"
},
{
"id":"s5",
"type":"reference",
"title":"Obsidian CLI (official documentation)",
"url":"https://obsidian.md/cli",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"3cdb7cbcbcb5566018c9d0d23fe466a8f658767097e971e77f863e93891a9b6d",
"hash":"c624ae30dbe4da8f8fd1915cc37a6c647f33313445fd3577e38e8f9ed6a42d82"
},
{
"id":"s6",
"type":"reference",
"title":"Vannevar Bush — As We May Think, The Atlantic, July 1945",
"url":"https://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"c624ae30dbe4da8f8fd1915cc37a6c647f33313445fd3577e38e8f9ed6a42d82",
"hash":"172dc6a6409eee7887af5e9bca3dc51318f6e1ed2cbb8ecee37fce6b501a12de"
},
{
"id":"s7",
"type":"reference",
"title":"kepano/obsidian-skills — Obsidian's agent-skill reference for markdown, Bases, JSON Canvas, and the CLI",
"url":"https://github.com/kepano/obsidian-skills",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"172dc6a6409eee7887af5e9bca3dc51318f6e1ed2cbb8ecee37fce6b501a12de",
"hash":"3ce8096a5dbd3a3b51f6935bf574aa0f775f94185881a5f9ff46d3d41dc2cf25"
},
{
"id":"s8",
"type":"reference",
"title":"Obsidian URI scheme (official documentation)",
"url":"https://obsidian.md/help/uri",
"link_status":"live",
"accessed_at":"2026-08-03T03:09:11.504Z",
"prev":"3ce8096a5dbd3a3b51f6935bf574aa0f775f94185881a5f9ff46d3d41dc2cf25",
"hash":"2fe114d64b48101b0d6bca4f636bbf7c6b5f44fb3d31cc09d8e29f3f2057aa45"
}
],
"claims": [
{
"id":"c1",
"text":"Article bodies support [[slug]] and [[slug|label]] wikilinks that render as /a/ links on the site; unresolved targets render as marked gaps.",
"tier":"system",
"slot":"what_it_is",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
},
{
"id":"c2",
"text":"The corpus link graph computed 3,386 edges across 2,264 articles on its first live run (2026-08-03T02:47Z).",
"tier":"system",
"slot":"what_is_known",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
},
{
"id":"c3",
"text":"The first gap scan found 163 missing pages already wikilinked from published bodies; the top target, oip-total-structure, was requested by 171 articles.",
"tier":"system",
"slot":"what_is_known",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
},
{
"id":"c4",
"text":"The lint pass found 1,715 orphan articles (no inbound links), 494 articles carrying unsourced claims, and 32 articles with claims under active challenge.",
"tier":"system",
"slot":"limitations",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
},
{
"id":"c5",
"text":"The vault export (version 3) produced 370 files for a two-article slice and 369 of 369 content hashes verified against SHA256SUMS on pull.",
"tier":"system",
"slot":"what_is_known",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
},
{
"id":"c6",
"text":"Karpathy's LLM-wiki pattern maintains a compiled markdown knowledge base through three operations — ingest, query, lint — anchored by index.md and an append-only log.md.",
"tier":"mechanistic",
"slot":"mechanism",
"source_ids": [
"s2"
],
"evidence_class":"independent_test",
"status":"active"
},
{
"id":"c7",
"text":"Obsidian Bases (.base YAML database views) shipped in Obsidian 1.9 (2025) and requires no community plugin.",
"tier":"mechanistic",
"slot":"mechanism",
"source_ids": [
"s3"
],
"evidence_class":"independent_test",
"status":"active"
},
{
"id":"c8",
"text":"JSON Canvas 1.0 defines .canvas files as a single JSON object of nodes (text, file, link, group) and edges with integer coordinates.",
"tier":"mechanistic",
"slot":"mechanism",
"source_ids": [
"s4"
],
"evidence_class":"independent_test",
"status":"active"
},
{
"id":"c9",
"text":"Obsidian shipped an official CLI in v1.12 (February 2026); it remote-controls the running desktop app and does not run headless.",
"tier":"mechanistic",
"slot":"limitations",
"source_ids": [
"s5"
],
"evidence_class":"independent_test",
"status":"active"
},
{
"id":"c10",
"text":"Vannevar Bush's 1945 Memex proposed a personal knowledge store with associative trails between documents; the maintenance burden was the unsolved part.",
"tier":"mechanistic",
"slot":"mechanism",
"source_ids": [
"s6"
],
"evidence_class":"independent_test",
"status":"active"
},
{
"id":"c11",
"text":"The Loop Law at /a/loop-law serves the loop doctrine as a human page, a JSON object, and a model skill from one source file, with owner corrections applied as dated amendments to the object itself.",
"tier":"system",
"slot":"what_it_is",
"source_ids": [
"s1"
],
"evidence_class":"runtime_receipt",
"status":"active"
}
],
"type":"article",
"updated":"2026-10-08T11:32:06.264Z",
"version":1,
"hash":"9779d29c4460f6766d79e5793fdcb2c4b923211839ea2e0a991041e5afe3e8bd",
"styling": {
"scope":"shared",
"how":"no value on the page is set by hand: each comes from this theme, and each theme value becomes the CSS variable named beside it. PATCH http://google-preview.miscsubjects.com/api/jarticles/theme changes them.",
"widget_style": {
"what":"every widget may carry style: {…}; these are the only keys it reads",
"rotate":"degrees, a number",
"offset_x":"pixels, a number",
"offset_y":"pixels, a number",
"pulse":"true to pulse"
},
"theme": {
"color": {
"page_bg":"#f5f5f7",
"sheet_bg":"#ffffff",
"ink":"#1d1d1f",
"soft":"#424245",
"muted":"#6e6e73",
"dim":"#86868b",
"line":"#d2d2d7",
"accent":"#0071e3",
"accent_soft":"rgba(0,113,227,0.08)",
"link":"#0066cc",
"selection":"rgba(0,113,227,0.18)",
"widget_bg":"#f5f5f7",
"widget_border":"#d2d2d7",
"card_bg":"#ffffff",
"code_bg":"#f5f5f7",
"json_bg":"#161b19",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#928d7e",
"json_punct":"#6b6759",
"json_bar":"#0e1512",
"kind_badge_bg":"#0e6e60",
"kind_badge_ink":"#ffffff"
},
"color_dark": {
"page_bg":"#000000",
"sheet_bg":"#1d1d1f",
"ink":"#f5f5f7",
"soft":"#d2d2d7",
"muted":"#a1a1a6",
"dim":"#86868b",
"line":"#424245",
"accent":"#2997ff",
"accent_soft":"rgba(41,151,255,0.12)",
"link":"#2997ff",
"selection":"rgba(41,151,255,0.25)",
"widget_bg":"#2c2c2e",
"widget_border":"#424245",
"card_bg":"#1d1d1f",
"code_bg":"#2c2c2e",
"json_bg":"#0a0d0c",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#757062",
"json_punct":"#5d665f",
"json_bar":"#060807",
"kind_badge_bg":"#4fc1ab",
"kind_badge_ink":"#0b0f0d"
},
"font": {
"display":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"body":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"mono":"ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace",
"google_fonts":""
},
"size": {
"body":"17px",
"small":"17px",
"eye":"17px",
"lead":"17px",
"h1":"52px",
"h2":"34px",
"h3":"22px",
"byline":"17px",
"h1_measure":"none",
"code":"17px",
"json":"17px",
"widget_title":"17px"
},
"leading": {
"body":"1.7",
"head":"1.18",
"lead":"1.5",
"json":"1.6"
},
"weight": {
"display":"700",
"head":"700",
"body":"400",
"strong":"700",
"eye":"700"
},
"tracking": {
"eye":"0.14em",
"display":"-0.03em",
"body":"-0.006em",
"badge":"0.08em"
},
"layout": {
"sheet_width":"1000px",
"text_width":"880px",
"gutter":"16px",
"sheet_padding":"56px 64px 64px",
"sheet_padding_mobile":"24px 18px 40px",
"sheet_margin":"28px auto 72px",
"block_gap":"1.15em",
"widget_gap":"28px",
"grid_gap":"14px"
},
"border": {
"sheet":"0px solid",
"sheet_radius":"30px",
"widget":"1px solid",
"widget_radius":"24px",
"card_radius":"24px",
"badge_radius":"999px",
"rule":"1px solid",
"code_radius":"18px",
"accent_bar":"3px"
},
"shadow": {
"sheet":"0 1px 1px rgba(0,0,0,.02),0 6px 26px rgba(0,0,0,.05)",
"widget":"none",
"card_hover":"0 10px 28px -16px rgba(28,27,23,0.35)"
},
"motion": {
"hover":"160ms ease"
}
}
},
"page":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue",
"json":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue.json",
"markdown":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue.md",
"theme":"http://google-preview.miscsubjects.com/article-theme.json",
"calls": [
{
"what":"this article as a page (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue",
"headers": {}
},
{
"what":"this article as its object (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue.json",
"headers": {}
},
{
"what":"this article as Markdown (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-corpus-now-writes-its-own-work-queue.md",
"headers": {}
},
{
"what":"the object with its hash, drafts too",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"one piece and that piece’s hash",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue/at?path=facts",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"grep: every key or value that matches, with the path to change it",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue/grep?q=owner",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"change pieces (set, merge, delete, append, insert, move); if-match is the hash",
"method":"PATCH",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash from the read>"
},
"body": {
"ops": [
{
"op":"set",
"path":"facts.example",
"value":1
}
]
}
},
{
"what":"replace the whole object",
"method":"PUT",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash>"
},
"body": {
"slug":"the-corpus-now-writes-its-own-work-queue",
"title":"…"
}
},
{
"what":"fetch every source, hash what came back and check the quote is in it",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-corpus-now-writes-its-own-work-queue/verify",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {}
},
{
"what":"an Obsidian-style command",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/cli",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {
"command":"backlinks",
"file":"the-corpus-now-writes-its-own-work-queue"
}
}
]
}