---
slug: the-graph
title: "The Graph"
kind: article
status: published
hash: 7e8ea59fd4f451889dd6fd65f773b5fa497f7838ab58b0f85c4e905dd00f3572
created: 2026-11-05T02:20:37.032Z
updated: 2026-11-05T02:20:37.032Z
summary: ""
tags: []
above: []
below: []
adjacent: []
nested: []
---
# The Graph

# The Graph

One store. Every object in it is stored once, under one slug, and every page is a rendering of its object. A page embeds other objects by reference; editing the referenced object changes every page that embeds it. Nothing is copied between pages.

Writes go through one REST contract (linked below): add, read, edit, delete, query. Every edit is checked against the object's current hash. Every object carries a SHA-256 hash, and the export manifest lists all of them.

## The demo — two objects, four surfaces

Below are two stored objects embedded by reference: a person and a house. On the person's own page, the house appears under "Prior address." On the house's own page, the person appears under "Prior resident." One person object, one house object, one stored relationship — rendered from both sides. The house's Zillow, Redfin, and realtor listings are three further objects, stored separately from the house.

```widget
{
  "type": "entity",
  "ref": "cyrus-massoumi"
}
```

```widget
{
  "type": "entity",
  "ref": "337-melrose-avenue"
}
```

## Scale — measured 2026-11-04

Canonical layer: **582 published objects in 61 kinds.** Largest kinds: standard 88, procedure 85, article 58, essay 35, technical 32, life-event 24, publication 24, collection 21, systems 21, social_profile 18.

Atlas layer, counted by kind through the query API: **permits 356,695 · parcels 96,253 · people 6,658 · organizations 938 · counties 59 · cities 27.**

Total queryable objects: **461,212 or more** — the Atlas has no kind census, so its kinds were counted by querying 30 kind names; any kind not queried is not in this sum. Draft and unpublished records are excluded from every count above.

## Live queries — these pages are query results, not documents

- [Current residents of Vichy Avenue](https://miscsubjects.com/graph/query/people-on-vichy-avenue) — executes against the graph; returns 0, because the stored Vichy residence is prior and the query asks for current.
- [All Gmail addresses on the graph](https://miscsubjects.com/graph/query/gmail-addresses) — returns 1.
- [All LinkedIn profiles on the graph](https://miscsubjects.com/graph/query/linkedin-profiles)
- [People at DSCO](https://miscsubjects.com/a/dsco-people)
- [Export manifest — every published object's id, kind, and hash](https://miscsubjects.com/graph/manifest.json)

## The contract

`POST /api/jarticles` adds an object (201; duplicate slug 409). `GET /api/jarticles/<slug>` returns the record and its hash. `PATCH /api/jarticles/<slug>` edits it, carrying the current hash in `If-Match` (stale hash: 412). `DELETE` removes it under the same rule. `POST /api/jarticles/query` queries by kind, by field, and by typed relationship — for example, people connected by `resides_at` to houses on a named street, current relationships only.

Full contract: [graph-rest-contract/1](https://miscsubjects.com/graph/contract.json). The same operations run from any Google Sheet: [the Sheets guide](https://miscsubjects.com/a/graph-from-google-sheets).

## Receipt — the write cycle, executed 2026-11-04

A test person was added through the contract (HTTP 201, version 1, hash issued), read back, appended to by PATCH (HTTP 200, version 2, new hash; the appended fact verified in the record), deleted under its hash (HTTP 200), and read again (HTTP 404). Add, read, append, delete — each step confirmed by the next.
