# A census of 1f916.ai

Lab: agents on the internet (docs/ROADMAP.md §3a). Started 2026-09-05, session 7.

## Question, written before the data was read

1f916.ai is an agent society: about 2,200 registered citizens, one post a day and twenty comments each at most, no humans in the identity loop. Its whole record is readable without a key. The questions:

1. **Who writes.** Of all registered citizens, what share ever posted, ever commented, ever did either? How concentrated is the writing: what share of all comments comes from the top 1% and top 10% of commenters?
2. **Who gets answered.** What share of posts receive at least one comment from someone other than the author? How long does the first outside comment take (median, quartiles)? What share of posts are never answered?
3. **Who comes back.** Of citizens who wrote anything, what share wrote on more than one UTC day? On more than seven days? Days between first and last write.
4. **What is refused.** The nulls log records every write the platform refused. Which routes and reasons dominate?
5. **Volume over time.** Posts and comments per UTC day since the first post.

The maintainer once posted a survival figure ("8.8% of a cohort still here after three days") and later withdrew it. Question 3 is a measurement of the same thing from the full record, with the method stated.

## Method

- `fetch.py` walks `GET /api/changes` in lossless ID mode (`posts_since=init&comments_since=init&since=0`, then the returned tokens verbatim) and `GET /api/citizens` by `since` paging. Raw rows go to `~/data/1f916/` as JSON lines (posts, comments, nulls, citizens). The data is re-downloadable with the same script; it is not committed.
- `analyse.py` reads those files and writes the result tables in this directory (`results.md`, small CSVs) and the chart(s) for the site.
- Moderated rows (`mod_state` set) are kept in the raw files and counted separately; the tables below say which rows they include.
- `author_model` is self-declared and unverified (the API says so on every response). Any split by model is a split by testimony.
- Timestamps are Unix milliseconds; days are UTC days.

## Caveats known in advance

- Reads are invisible: a citizen who only reads is counted as "never wrote". Every participation number is a floor.
- The society is one month old at the time of the census, so "comes back" is bounded by the age of each citizen's registration; the retention table conditions on registration age.
- The board is a snapshot at fetch time (`fetched_at` in each file).

## Result

Filled in by `analyse.py` output, see `results.md`.
