What a person gets

A redacted copy of your manifest for one person: when you were active together, and the rows that name them. It is the only file that leaves.

Sam Lee and the rows are made up. The copy shown is what the tool wrote on a test folder. The tool writes the copy; it sends nothing. You send it.

The picture

Stays on your computer manifest.json every row, every field: paths, visibility, sent, hash, project exchanges.jsonl contacts/records/per_sam-lee/ each exchange with Sam Lee: route, subject, what it carried redact --to "Sam Lee" rows whose visibility names Sam Lee; the time of each exchange manifest.sam-lee.redacted.json audience, madeAt activity: at, and nothing else rows: id and lastActive no paths, no file names, no hash, no other people Sam Lee You send it. Transport: not built yet Sam Lee holds the times against their own record, on their own device.

Which rows go in, as a table

Your manifest, row by row. A row goes into Sam Lee's copy only when its visibility names Sam Lee. Then only its id and lastActive go.

idvisibilitykindpathlastActivein Sam Lee's copy
3b0e0bea…Houston BloomshareablePACKET.md2026-10-08no
71fca610…privatefolderDocuments/contacts2026-10-08no
0e5ee6fb…privatefolderDocuments/notes2026-10-08no
f4a67013…Robin ParkfolderDocuments/projects-20262026-10-08no, it goes in Robin Park's copy
25097f4c…Sam Lee + publicshareableLocal Brain/03_outbox/frames/local-assembly.html2026-10-08id and lastActive
f130a5e4…Sam LeeshareableDownloads/sam-notes.md2026-10-09id and lastActive
Goes in Sam Lee's copyThe name must match the one used on the send: a row sent to "Sam" is not in a copy for "Sam Lee". A row marked missing is left out.

What each field holds

audience
Who the copy is for, the name given with --to.
madeAt
The day the copy was written.
activity
One entry per exchange on file with that person, newest first. Each holds only at, the timestamp. Read from records/<per_id>/exchanges.jsonl in your contacts folder when you give --person. Left out when you do not.
rows
Each manifest row whose visibility names that person, newest first: id and lastActive, nothing else.
id
The row's 64 random hex characters. It gives nothing away about the folder, the file or your system.
lastActive
The day that row last changed.

Never in a copy: path, hash, project, sent, visibility, private rows, and rows that name only other people. What each exchange carried stays in your contacts folder.

What the file looks like inside

JSON, a plain text format. The command, what it printed, then manifest/manifest.sam-lee.redacted.json as the tool wrote it.

node map.mjs redact --to "Sam Lee" --contacts Documents/contacts --person per_sam-lee
copy for Sam Lee: 2 times you were active together, 2 rows you keep them updated on: manifest/manifest.sam-lee.redacted.json
{
  "audience": "Sam Lee",
  "madeAt": "2026-10-09",
  "activity": [
    {
      "at": "2026-10-09T09:15:00-05:00"
    },
    {
      "at": "2026-10-08T14:02:00-05:00"
    }
  ],
  "rows": [
    {
      "id": "f130a5e423761c2d6465139f885e5db3bdf1c2dc3c3c549fa63625df35b42f8e",
      "lastActive": "2026-10-09"
    },
    {
      "id": "25097f4ce5d30f94c088f824e14bd1c9792b2e07256b26d9e7d19bfbaf797b9c",
      "lastActive": "2026-10-08"
    }
  ]
}

A server that carries the copy to the person: not built yet Whether a design principle travels in the copy is an open question.

How it connects

redacted copyfor one person manifest rowsthat name the person contact, by idtimestamps of exchanges sharingadds the name to a row
What the manifest is →
Sharing something →
What a contact is →