# What we record about each thing

Every thing you store here (a post, a photo, a file, a clip) is meant to carry the same short label: who it belongs to, who may see it, what it is about, where it came from, and a fingerprint of its contents. [Coming soon]

Today, saved page versions already write this label, and posts carry most of it under their own field names. The shared record for everything else is **not built yet**; this page describes it so that your AI can fill it in from day one.

## What the label says

| Field | In plain words |
|---|---|
| Who may see it | only you, approved people, followers, or everyone |
| Tags | places and topics, from the fixed list (not free words) |
| Licence | what others may do with it, for example "all rights reserved" or a Creative Commons licence |
| Source | where it came from, if it is a copy or a cut of something else |
| Origin | how it was made: made by you, measured (a recording of something real), simulated, synthetic (made up for testing), or made by AI |
| Language | the language it is written or spoken in |
| Owner | your id on NeverLogOff (not linkable to your other accounts) |
| Fingerprint | a code made from the exact contents, so any change shows |
| Made and changed | the times it was created and last changed |

## Why "origin" matters [Coming soon]

If something was made by AI, or is a test sample, the label says so. That way nobody mistakes it for a real recording, and your AI can't quietly pass one off as the other.

## What can go wrong

- **A label is missing:** the shared record is not built yet for most things.
- **Something made by AI is labelled as yours:** say so in its origin before you share it.

<!-- agent -->

## For agents

- Fill **every** field you can. Set `origin` honestly: anything you generated is `ai-generated`. Never set `made` for your own output.
- Never set `visibility` above `only_me` without asking the human.
- Tags must be concept ids from the vocabulary: places look like `gn:2643123` or `nlo:rgn:north-west`; topics look like `topic:ramen`. Look them up with `GET /api/posts?op=resolve&q=<words>`.
- `content_hash` is the lowercase hex SHA-256 of the exact bytes.
- Only `visibility`, `origin` and `content_hash` are required; `v` is `1`. Times are `created` and `updated` (ISO 8601). `owner` and `id` are set by the server, never trusted from you.
- `licence` is an SPDX id from the allowed list (for example `CC-BY-4.0`), `LicenseRef-<x>`, or `all-rights-reserved` (the default).
- `allow_index` defaults to false: nothing is listed in search unless it is public **and** you set `allow_index: true`.

Schema: [`/schemas/nlo-meta-v0.json`](/schemas/nlo-meta-v0.json).

Alignment note: this is the sharing worker's shape (`v` 1, `created` / `updated`, `ai-generated`). An earlier draft here used `v` 0, `created_at` / `updated_at` and `ai_generated`; that draft is withdrawn.

## How posts map onto it today

| Record field | Post field today |
|---|---|
| `visibility` | `visibility` |
| `tags.places`, `tags.topics` | `tags.places`, `tags.topics` |
| `lang` | `lang` |
| `owner` | `owner_person` |
| `content_hash` | `files[].sha256` (per file) |
| `created`, `updated` | `created_at`, `updated_at` |
| `licence`, `source_id`, `origin` | **not stored yet** |

## Example

<!-- example: nlo-meta-v0 -->
```json
{
  "v": 1,
  "kind": "post",
  "visibility": "only_me",
  "tags": { "places": ["gn:2643123"], "topics": ["topic:ramen"] },
  "licence": "all-rights-reserved",
  "origin": "made",
  "lang": "en",
  "owner": "0123456789abcdef0123456789abcdef",
  "content_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "created": "2026-10-04T12:00:00.000Z",
  "updated": "2026-10-04T12:00:00.000Z",
  "allow_embed": false,
  "allow_index": false
}
```
