{"_self":{"principle":"Self-explaining payload — no external context required. This _self block describes what you are reading and where to look next.","widget":"article_topology","feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","contains":"claims, sources, anecdotes, question_graph slice","slug":"the-directory-is-not-the-object-system","urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/topology"},"how_to_use":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","write":null,"imessage":null,"router_tag":null,"proof_chain":[{"step":1,"claim":"Articles are voxel graphs of tiered claims, not prose blobs.","verify":"https://miscsubjects.com/api/articles/constitution"},{"step":2,"claim":"Claims link to hash-chained sources via source_ids.","verify":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/sources"},{"step":3,"claim":"Ask reads topology; ingest/claim append to ledger.","verify":"https://miscsubjects.com/api/protocol"},{"step":4,"claim":"Models queue growth: populate → collaborate → repair → reflex.","verify":"https://miscsubjects.com/api/protocol/grow"},{"step":5,"claim":"Graph proves its own shape (reflex) and $/claim (yield).","verify":"https://miscsubjects.com/graph.html?layer=reflex"},{"step":6,"claim":"Full feature index + _explain on every API response.","verify":"https://miscsubjects.com/api/articles/system-map"}],"related_features":[{"id":"ask","name":"Ask protocol","what":"Answer only from topology; creates question_node with gaps and ingest_hint.","urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/prompts","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"graph_topology","name":"Cross-article graph","what":"Merged claims/sources across condition+stack slugs for one question.","urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/graph-topology?question=..."}},{"id":"question_graph","name":"Question graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output).","urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/question-graph","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"voxels","name":"Voxel graph","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance.","urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/voxels","write":"https://miscsubjects.com/api/protocol/claim"}}],"system_map":"https://miscsubjects.com/api/articles/system-map","system_map_markdown":"https://miscsubjects.com/api/articles/system-map?format=markdown","not_medical_advice":true},"_explain":{"feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","why":"Every feature is auditable collective intelligence","how":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","model":null,"verifies":null,"urls":{"read":"https://miscsubjects.com/api/articles/the-directory-is-not-the-object-system/topology"},"imessage":null,"router":null,"related":[{"id":"ask","what":"Answer only from topology; creates question_node with gaps and ingest_hint."},{"id":"graph_topology","what":"Merged claims/sources across condition+stack slugs for one question."},{"id":"question_graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output)."},{"id":"voxels","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance."}],"not_medical_advice":true},"slug":"the-directory-is-not-the-object-system","title":"892 rows, 8 of them MCP: the catalogue is not what the cost articles measure","register":"standard","tags":[],"updated_at":"2026-07-27T04:19:52.097Z","body_excerpt":"The `directory` table has 892 rows. Eight carry `category = 'mcp'`. That is the whole gap between what the catalogue-cost articles on this site measure and what the catalogue actually is.\n\n## What the 892 rows are, by the columns that describe them\n\nEvery row in `directory` shares one schema: `key, type, target, auth, content, category, runner, includes, input_schema, sensitive, enabled`. `type` is one of four values — `fn`, `http`, `agent`, `flow`. `runner` names what actually executes the row: `edge` (184 rows — Cloudflare Workers code), `http` (58 — a third-party API call), `mac` (43 — a command on the operator's own machine, dispatched through a local bridge), `apps_script` (9 — Google Apps Script), `sibling` (5 — another deployed instance of this build). 591 rows carry no `runner` at all — they resolve inside the request handler itself, as a direct function call or a model invocation, with no external process to hand off to.\n\n`category` spans at least 30 distinct values with real counts behind them: `blooio` (63, a messaging platform), `marketing` (49), `cli` (34, shell tools like `git`, `wrangler`, `ffmpeg`), `content-ops` (31), `cf_bindings` (23), `agent` (22), `stripe` (20), `governance` (19), `cloudflare` (14), `local` (12), `phone` (11), `payments` (11), `google` (9), `mcp` (8), `computer` (8). 152 rows have no category set.\n\nSo the plain count contradicts the frame the site's own catalogue-cost articles use. `tooling-as-data` and `mcp-as-a-projection` measure what it costs a model to receive this catalogue as MCP tool definitions versus as database rows read at call time — a real, first-party measurement. But the row set they are measuring is not an MCP tool catalogue that happens to live in a database. It is a catalogue of API calls, shell commands, Mac-local actions, Google Apps Script jobs, and agent invocations, of which a specific named eight are about MCP itself. MCP is one of at least six runners and one of at least thirty categories represented in the same table, not the subject the table exists to serve.\n\n## The table is not the whole object system — there are at least two\n\n`directory` is resolved by one function: `dispatch(env, key, ...)`, which takes a `key` and returns or executes the matching row. Content — articles, their claim graphs, their revision history — lives in a separate pair of tables, `articles` and `article_slots`, resolved by a separate route keyed on `slug`, not `key`. The two resolvers do not merge. A directory row can point at an article by URL or reference; an article is never itself a directory row. This build has at least two distinct object families, each with its own table, its own primary key, and its own resolver function — unified by a shared pattern (a stable identifier, a contract describing it, an append-only ledger of what happened when it was invoked or read, a receipt), not by one shared table.\n\nThat distinction matters for a specific reason: a claim that \"everything is one row in one table\" is falsified by opening `functions/api/articles/[[path]].js` next to `functions/api/dispatch.js` and finding two different key spaces. The accurate claim is narrower and still real — this build gives unlike kinds of object (an API call, a shell command, a piece of published content, an agent, a stored instruction block) a common shape of contract and a common audit trail, using more than one underlying table to do it.\n\n## What changes live, and by what mechanism\n\n`prompts/blocks/BLOCK_VOICE.md` is a `directory` row, `category` unset in the count above but tagged `target = 'prompt_block'`. It is not read once at deploy time. `functions/api/dispatch.js` calls `loadPromptBlockMap(env)` — a fresh `SELECT key, content FROM directory WHERE target = 'prompt_block'` — on every single call to `dispatch()`, for every agent that lists it in its `includes` column (ROUTER, OPS, ARCADS, VOICE, CLOUDFLARE, GITHUB). Edit that row, and the next call to any of those six agents is assembled from the new ","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[],"sources":[],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"the-directory-is-not-the-object-system","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":0,"retracted_claims":0,"cut_claims":0,"challenges":0,"scrub_events":0,"note":"Retracted/cut claims stay on ledger but are excluded from ask unless ?include_inactive=1"},"counts":{"claims":0,"claims_total":0,"sources":0,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}