Invented example · built on Kindling · Why Kindling · The library · The spec · The Circular

Scattered Light

For implementers

Under the hood

How Scattered Light uses Kindling v0.1, setting by setting, and where the v0.1 schema can’t yet say what a rare-condition network needs.

I

Our settings, mapped to the spec

SettingValueSpecWhy we chose it
The Heron · visibilityinvite-only§3.2Nobody can browse or search for it. Its address travels only from a steward to a newcomer.
The Heron · consent_modelvouching-required§3.2, §5.4A steward meets each person first. The vouch comes before the handshake and never replaces the person’s own yes.
Where The Heron is findableShared by a steward only§8.1, §8.2§8.1 asks for at least one surface. Social sharing is one, and it is the only one we use for The Heron.
Well-known fileLists the Stewards Pool only§8.3, §10.2Crawlers can find a steward to write to. They cannot find The Heron.
RegistriesThe Heron is in none§8.4, §8.5Inclusion in a registry is a curator decision, and ours is no.
Stewards Pool · visibilitypublic§3.2So anyone can find a steward to write to.
Stewards Pool · consent_modelcurator-only-adds§3.2, §5.4Only a curator proposes a steward. Each steward still accepted a handshake.
CuratorsInés Calloway (primary), Clare Whitford · oauth§3.2, §4.3Both Pools name the same two stewards, at a level everyone can see.
Member verificationcurator-vouched§4.4, §4.5Shown in words as “Vouched for by the curator”. It counts in The Heron only.
Members · accept_fromvouched§7.1, §7.2Only people a steward vouched for in The Heron can write to a member.
Members · no_cold_messagestrue§7.2Nobody writes first until both have said they would like to hear from each other.
Stewards · messagingaccept_from: verified, no_cold_messages: false§7.1, §7.2A newcomer with a verified email can write to a steward first.
kindling_noindexfalse for everyone§2.7noindex means “no Pool at all”. It would keep a person out of The Heron. See below.
PhotosNone stored · no photo_hints§2.5A photo is only ever a link. Our pages draw a star instead.
Handshake window14 days, the default§5.2Carried in each request’s expires_at.
Auto-acceptCannot apply§5.5A rule may only allow public or unlisted Pools, so no rule can accept an invitation into The Heron.
WithdrawalOne step, within sixty seconds§5.3“Leave this Pool” sits at the top of the member view, never buried.
Block listsKindling public, and the Circular consortium§7.3Senders on either list are held back before any other rule is checked.

II · §3.2 · §8.1 · §8.2 · §8.3

Invite-only, and the well-known file

Our domain hosts two Pools. The well-known file lists one of them, the Stewards Pool, because it exists to be found. The Heron is invite-only and appears in no discovery surface: not the well-known file, not the Kindling registry, not any third-party registry.

§8.1 asks that every Pool be findable through at least one surface. For The Heron that surface is social sharing (§8.2): after a video call, a steward sends one newcomer the Pool’s address. Kindling has no opinion about how a Pool URL is shared, only that it resolves to a valid manifest, and it does.

Invite-only changes who can find the Pool. It does not change consent: every member of The Heron still accepted a handshake, and the glossary says so in as many words.

What a crawler sees

/.well-known/kindling-pool, operated by Scattered Light, a rare-condition peer network (nonprofit):

PoolVisibilityStatusManifest
Scattered Light Stewardspublicactivehttps://scatteredlight.example/pools/stewards.json

One Pool. The Heron is not there.

What a newcomer receives

From a steward, after a call, in a message to their own address: the Heron’s manifest address, https://scatteredlight.example/pools/the-heron.json, and then the handshake invitation (see it).

The address is not secret in the way a password is. Anyone who has it can read the manifest, so our stewards share it only with the person they vouched for.

The well-known file, exactly
{
  "schema_version": "0.1",
  "pools": [
    {
      "manifest_url": "https://scatteredlight.example/pools/stewards.json",
      "name": "Scattered Light Stewards",
      "intent_tags": [
        "peer-support",
        "stewarding"
      ],
      "visibility": "public",
      "status": "active",
      "geographic_scope": {
        "online": true
      },
      "last_updated": "2026-09-01T10:00:00Z"
    }
  ],
  "operator": {
    "name": "Scattered Light, a rare-condition peer network (nonprofit)",
    "contact": "stewards@scatteredlight.example",
    "url": "https://scatteredlight.example"
  }
}

III · §4.4 · §4.5 · §5.4

A vouch stays in one Pool

A steward’s vouch is local to The Heron and carries nowhere else. Every vouched entry says so in the same fields, shown here for Felix Brandt:

verification_level
curator-vouched · shown as Vouched for by the curator
parsed_profile.verification.verifier
ines@mail.example
consent_proof.method
curator-vouching
consent_proof.handshake_id
hs-scattered-light-the-heron-felix
added_by
ines@mail.example

It works in both directions. Noah Feld is a steward in our public Stewards Pool, but he has no standing in The Heron: on the introduction page, canMessage holds his message to a member back under the vouched-only rule. And a Heron member’s vouch gives them nothing in the Stewards Pool or anywhere else.

The vouch is a step before the handshake, never instead of it (§5.4). Devika was vouched for by Clare and still had to say yes, and could have said no.

IV · §2.7

Why not noindex

It is tempting to reach for kindling_noindex to protect people in a sensitive Pool. It does the opposite of what you want. §2.7 says a profile with the directive MUST NOT be included “in any Pool, registry, or discovery surface”. Set it on a member’s page and The Heron would have to refuse them.

So every member of The Heron has kindling_noindex: false, and their privacy comes from four other places:

What you wantWhat does itSpec
Nobody can find the Poolvisibility: invite-only, left out of the well-known file and every registry§3.2, §8.3
Nobody gets in without meeting a stewardconsent_model: vouching-required, then the handshake§4.4, §5.4
Nobody inside writes to you firstaccept_from: vouched and no_cold_messages: true§7.2
Known abusers are held backTwo block-list subscriptions§7.3
Out of every Pool, everywherekindling_noindex: true, and that includes this one§2.7

noindex is also a polite signal rather than a lock: a scraper can ignore it, and the block lists are the backstop. That is one more reason it is the wrong tool for privacy inside a Pool.

V · §6.3 · §7.1 · §7.2 · §7.3

Messaging rules

Every vouched member has the same two settings. The stewards keep theirs open, so a newcomer or a member can always reach one.

PersonLevelaccept_fromno_cold_messages
Inés CallowaySigned in with OAuthverifiedfalse
Felix BrandtVouched for by the curatorvouchedtrue
Aroha TaneVouched for by the curatorvouchedtrue
Devika RaoVouched for by the curatorvouchedtrue
Mateo QuispeVouched for by the curatorvouchedtrue
Yusuf DemirVouched for by the curatorvouchedtrue
Clare WhitfordSigned in with OAuthverifiedfalse

The order of checks follows the kit’s KindlingDemo.canMessage: block lists first (§7.3), then the recipient’s accept_from (§7.1, §7.2), then no_cold_messages, which needs confirmed mutual interest.

Confirmed mutual interest is where v0.1 goes quiet. The Heron does it like this: a member tells a steward who they would like to hear from; the steward asks the other person with a system message through the Pool; if both have said yes, the steward sends each of them an intro, and the line is drawn. If the answer is no, the first person hears only that it isn’t happening this time, which is also what they hear when nobody answers.

The exact messages: the steward’s question (system), the intro to Aroha and the intro to Mateo (intro), and a member leaving (withdrawal). Each validates against kindling_message.schema.json.

VI · §2.5

Photos

Photos are referenced by URL only, and no Pool may store photo bytes. None of our members’ parsed profiles lists a photo_hints URL, and our pages never show a face: each person is a star. If a member adds a photo to their own page, The Heron would keep its address and nothing else, and we still would not display it unless the member asked.

VII · §3.1 · §3.4

The files

Every document here validates against the repo’s schemas. Links go to the raw JSON.

The Heron

pools/the-heron.json

name
The Heron
curator
Inés Calloway · ines@mail.example · Signed in with OAuth · primary
Clare Whitford · clare@mail.example · Signed in with OAuth
intent_tags
peer-support
visibility
invite-only
consent_model
vouching-required
curator_contact
stewards@scatteredlight.example
charter
Adults living with Harrow–Vance syndrome (a condition invented for this example), anywhere in the world. Peers only: we share what it is like, what questions helped at appointments, and who else is out there. No medical advice, no products, no research recruiting. A steward meets each person first and vouches for them here. Nobody is ever added without saying yes, and anyone can leave in a minute.
governance_rules
Invite-only. Not listed in our well-known file or any registry; the Pool’s address travels only from a steward to a newcomer. Every member is vouched for by a steward after a video call. The vouch is local to this Pool.
geographic_scope
online
block_list_subscriptions
https://protocol.kindling.foundation/blocklist.json
https://thecircular.example/blocklist.json
status
active
created_at · updated_at
February 1, 2026 · September 24, 2026
EntryLevelConsent proofAccepts first messages fromnoindex
Inés CallowaySigned in with OAuthoauth · February 1, 2026verifiedfalse
Felix BrandtVouched for by the curatorcurator-vouching · February 20, 2026vouched · no coldfalse
Aroha TaneVouched for by the curatorcurator-vouching · March 11, 2026vouched · no coldfalse
Devika RaoVouched for by the curatorcurator-vouching · May 2, 2026vouched · no coldfalse
Mateo QuispeVouched for by the curatorcurator-vouching · June 18, 2026vouched · no coldfalse
Yusuf DemirVouched for by the curatorcurator-vouching · August 9, 2026vouched · no coldfalse
Clare WhitfordSigned in with OAuthoauth · February 1, 2026verifiedfalse
The Heron’s manifest, exactly
{
  "schema_version": "0.1",
  "id": "the-heron",
  "name": "The Heron",
  "curator": [
    {
      "identity": "ines@mail.example",
      "display_name": "Inés Calloway",
      "verification_level": "oauth",
      "primary": true
    },
    {
      "identity": "clare@mail.example",
      "display_name": "Clare Whitford",
      "verification_level": "oauth",
      "primary": false
    }
  ],
  "intent_tags": [
    "peer-support"
  ],
  "visibility": "invite-only",
  "consent_model": "vouching-required",
  "curator_contact": "stewards@scatteredlight.example",
  "charter": "Adults living with Harrow–Vance syndrome (a condition invented for this example), anywhere in the world. Peers only: we share what it is like, what questions helped at appointments, and who else is out there. No medical advice, no products, no research recruiting. A steward meets each person first and vouches for them here. Nobody is ever added without saying yes, and anyone can leave in a minute.",
  "geographic_scope": {
    "online": true
  },
  "governance_rules": "Invite-only. Not listed in our well-known file or any registry; the Pool’s address travels only from a steward to a newcomer. Every member is vouched for by a steward after a video call. The vouch is local to this Pool.",
  "messaging_preferences": {
    "block_list_subscriptions": [
      "https://protocol.kindling.foundation/blocklist.json",
      "https://thecircular.example/blocklist.json"
    ]
  },
  "status": "active",
  "created_at": "2026-02-01T17:30:00Z",
  "updated_at": "2026-09-24T11:00:00Z",
  "entries": [
    {
      "profile_url": "https://ines-calloway.notion.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://ines-calloway.notion.example",
        "display_name": "Inés Calloway",
        "pronouns": "she/her",
        "location": {
          "city": "Tucson",
          "region": "Arizona",
          "country": "United States"
        },
        "intent_tags": [
          "peer-support",
          "stewarding",
          "curating"
        ],
        "about": "Steward at Scattered Light. Spent eleven years looking for one other person with her diagnosis. Now vouches for newcomers after a video call.",
        "contact_methods": [
          {
            "type": "email",
            "value": "ines@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "oauth",
          "verified_at": "2026-02-01T18:00:00Z",
          "verifier": "google"
        },
        "messaging_preferences": {
          "accept_from": "verified",
          "no_cold_messages": false,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-02-01T18:00:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-02-01T18:00:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-ines",
        "accepted_at": "2026-02-01T18:00:00Z",
        "method": "oauth"
      },
      "verification_level": "oauth",
      "added_at": "2026-02-01T18:00:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://docs.example/d/felix-brandt",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://docs.example/d/felix-brandt",
        "display_name": "Felix Brandt",
        "pronouns": "he/him",
        "location": {
          "city": "Hamburg",
          "country": "Germany"
        },
        "intent_tags": [
          "peer-support"
        ],
        "about": "Harbor logistics. Likes comparing notes on what doctors did and did not know.",
        "contact_methods": [
          {
            "type": "email",
            "value": "felix@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "curator-vouched",
          "verified_at": "2026-02-20T09:15:00Z",
          "verifier": "ines@mail.example"
        },
        "messaging_preferences": {
          "accept_from": "vouched",
          "no_cold_messages": true,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-02-20T09:15:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-02-20T09:15:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-felix",
        "accepted_at": "2026-02-20T09:15:00Z",
        "method": "curator-vouching"
      },
      "verification_level": "curator-vouched",
      "added_at": "2026-02-20T09:15:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://aroha-tane.notion.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://aroha-tane.notion.example",
        "display_name": "Aroha Tane",
        "pronouns": "she/her",
        "location": {
          "city": "Wellington",
          "country": "New Zealand"
        },
        "intent_tags": [
          "peer-support"
        ],
        "about": "Primary school teacher. Wants someone in a close time zone who gets the tiredness without an explanation.",
        "contact_methods": [
          {
            "type": "email",
            "value": "aroha@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "curator-vouched",
          "verified_at": "2026-03-11T21:40:00Z",
          "verifier": "ines@mail.example"
        },
        "messaging_preferences": {
          "accept_from": "vouched",
          "no_cold_messages": true,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-03-11T21:40:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-03-11T21:40:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-aroha",
        "accepted_at": "2026-03-11T21:40:00Z",
        "method": "curator-vouching"
      },
      "verification_level": "curator-vouched",
      "added_at": "2026-03-11T21:40:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://devika-rao.carrd.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://devika-rao.carrd.example",
        "display_name": "Devika Rao",
        "pronouns": "she/her",
        "location": {
          "city": "Pune",
          "region": "Maharashtra",
          "country": "India"
        },
        "intent_tags": [
          "peer-support"
        ],
        "about": "Software tester and new parent. Found this through a clinic nurse who had heard of one other case.",
        "contact_methods": [
          {
            "type": "email",
            "value": "devika@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "curator-vouched",
          "verified_at": "2026-05-02T06:30:00Z",
          "verifier": "clare@mail.example"
        },
        "messaging_preferences": {
          "accept_from": "vouched",
          "no_cold_messages": true,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-05-02T06:30:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-05-02T06:30:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-devika",
        "accepted_at": "2026-05-02T06:30:00Z",
        "method": "curator-vouching"
      },
      "verification_level": "curator-vouched",
      "added_at": "2026-05-02T06:30:00Z",
      "added_by": "clare@mail.example"
    },
    {
      "profile_url": "https://docs.example/d/mateo-quispe",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://docs.example/d/mateo-quispe",
        "display_name": "Mateo Quispe",
        "pronouns": "he/him",
        "location": {
          "city": "Cusco",
          "country": "Peru"
        },
        "intent_tags": [
          "peer-support"
        ],
        "about": "Tour guide at altitude, which is its own conversation. Writes in Spanish and English.",
        "contact_methods": [
          {
            "type": "email",
            "value": "mateo@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "curator-vouched",
          "verified_at": "2026-06-18T23:05:00Z",
          "verifier": "ines@mail.example"
        },
        "messaging_preferences": {
          "accept_from": "vouched",
          "no_cold_messages": true,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-06-18T23:05:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-06-18T23:05:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-mateo",
        "accepted_at": "2026-06-18T23:05:00Z",
        "method": "curator-vouching"
      },
      "verification_level": "curator-vouched",
      "added_at": "2026-06-18T23:05:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://yusuf-demir.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://yusuf-demir.example",
        "display_name": "Yusuf Demir",
        "pronouns": "he/him",
        "location": {
          "city": "İzmir",
          "country": "Türkiye"
        },
        "intent_tags": [
          "peer-support"
        ],
        "about": "Retired pharmacist. The oldest person in the group, and the first to answer anyone.",
        "contact_methods": [
          {
            "type": "email",
            "value": "yusuf@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "curator-vouched",
          "verified_at": "2026-08-09T12:20:00Z",
          "verifier": "clare@mail.example"
        },
        "messaging_preferences": {
          "accept_from": "vouched",
          "no_cold_messages": true,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-08-09T12:20:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-08-09T12:20:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-yusuf",
        "accepted_at": "2026-08-09T12:20:00Z",
        "method": "curator-vouching"
      },
      "verification_level": "curator-vouched",
      "added_at": "2026-08-09T12:20:00Z",
      "added_by": "clare@mail.example"
    },
    {
      "profile_url": "https://clare-whitford.notion.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://clare-whitford.notion.example",
        "display_name": "Clare Whitford",
        "pronouns": "she/her",
        "location": {
          "city": "Leeds",
          "country": "United Kingdom"
        },
        "intent_tags": [
          "peer-support",
          "stewarding"
        ],
        "about": "Steward. Keeps the group’s shared notes on which questions to bring to appointments.",
        "contact_methods": [
          {
            "type": "email",
            "value": "clare@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "oauth",
          "verified_at": "2026-02-01T18:30:00Z",
          "verifier": "google"
        },
        "messaging_preferences": {
          "accept_from": "verified",
          "no_cold_messages": false,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-02-01T18:30:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-02-01T18:30:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-the-heron-clare",
        "accepted_at": "2026-02-01T18:30:00Z",
        "method": "oauth"
      },
      "verification_level": "oauth",
      "added_at": "2026-02-01T18:30:00Z",
      "added_by": "ines@mail.example"
    }
  ]
}

Scattered Light Stewards

pools/stewards.json

name
Scattered Light Stewards
curator
Inés Calloway · ines@mail.example · Signed in with OAuth · primary
Clare Whitford · clare@mail.example · Signed in with OAuth
intent_tags
peer-support, stewarding
visibility
public
consent_model
curator-only-adds
curator_contact
stewards@scatteredlight.example
charter
Volunteer stewards who meet newcomers on a video call and vouch for them into a constellation. Stewards are peers, not clinicians, and give no medical advice. Listed publicly so anyone can find a steward to write to.
geographic_scope
online
block_list_subscriptions
https://protocol.kindling.foundation/blocklist.json
https://thecircular.example/blocklist.json
status
active
created_at · updated_at
January 15, 2026 · September 1, 2026
EntryLevelConsent proofAccepts first messages fromnoindex
Inés CallowaySigned in with OAuthoauth · January 15, 2026verifiedfalse
Clare WhitfordSigned in with OAuthoauth · January 16, 2026verifiedfalse
Noah FeldSigned in with OAuthoauth · March 2, 2026verifiedfalse
The Stewards Pool’s manifest, exactly
{
  "schema_version": "0.1",
  "id": "stewards",
  "name": "Scattered Light Stewards",
  "curator": [
    {
      "identity": "ines@mail.example",
      "display_name": "Inés Calloway",
      "verification_level": "oauth",
      "primary": true
    },
    {
      "identity": "clare@mail.example",
      "display_name": "Clare Whitford",
      "verification_level": "oauth",
      "primary": false
    }
  ],
  "intent_tags": [
    "peer-support",
    "stewarding"
  ],
  "visibility": "public",
  "consent_model": "curator-only-adds",
  "curator_contact": "stewards@scatteredlight.example",
  "charter": "Volunteer stewards who meet newcomers on a video call and vouch for them into a constellation. Stewards are peers, not clinicians, and give no medical advice. Listed publicly so anyone can find a steward to write to.",
  "geographic_scope": {
    "online": true
  },
  "messaging_preferences": {
    "block_list_subscriptions": [
      "https://protocol.kindling.foundation/blocklist.json",
      "https://thecircular.example/blocklist.json"
    ]
  },
  "status": "active",
  "created_at": "2026-01-15T17:00:00Z",
  "updated_at": "2026-09-01T10:00:00Z",
  "entries": [
    {
      "profile_url": "https://ines-calloway.notion.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://ines-calloway.notion.example",
        "display_name": "Inés Calloway",
        "pronouns": "she/her",
        "location": {
          "city": "Tucson",
          "region": "Arizona",
          "country": "United States"
        },
        "intent_tags": [
          "peer-support",
          "stewarding",
          "curating"
        ],
        "about": "Steward at Scattered Light. Spent eleven years looking for one other person with her diagnosis. Now vouches for newcomers after a video call.",
        "contact_methods": [
          {
            "type": "email",
            "value": "ines@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "oauth",
          "verified_at": "2026-01-15T18:00:00Z",
          "verifier": "google"
        },
        "messaging_preferences": {
          "accept_from": "verified",
          "no_cold_messages": false,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-01-15T18:00:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-01-15T18:00:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-stewards-ines",
        "accepted_at": "2026-01-15T18:00:00Z",
        "method": "oauth"
      },
      "verification_level": "oauth",
      "added_at": "2026-01-15T18:00:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://clare-whitford.notion.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://clare-whitford.notion.example",
        "display_name": "Clare Whitford",
        "pronouns": "she/her",
        "location": {
          "city": "Leeds",
          "country": "United Kingdom"
        },
        "intent_tags": [
          "peer-support",
          "stewarding"
        ],
        "about": "Steward. Keeps the group’s shared notes on which questions to bring to appointments.",
        "contact_methods": [
          {
            "type": "email",
            "value": "clare@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "oauth",
          "verified_at": "2026-01-16T10:00:00Z",
          "verifier": "google"
        },
        "messaging_preferences": {
          "accept_from": "verified",
          "no_cold_messages": false,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-01-16T10:00:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-01-16T10:00:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-stewards-clare",
        "accepted_at": "2026-01-16T10:00:00Z",
        "method": "oauth"
      },
      "verification_level": "oauth",
      "added_at": "2026-01-16T10:00:00Z",
      "added_by": "ines@mail.example"
    },
    {
      "profile_url": "https://noah-feld.carrd.example",
      "parsed_profile": {
        "schema_version": "0.1",
        "profile_url": "https://noah-feld.carrd.example",
        "display_name": "Noah Feld",
        "pronouns": "he/him",
        "location": {
          "city": "Toronto",
          "region": "Ontario",
          "country": "Canada"
        },
        "intent_tags": [
          "peer-support",
          "stewarding"
        ],
        "about": "Steward. Trains new stewards in how to vouch without prying.",
        "contact_methods": [
          {
            "type": "email",
            "value": "noah@mail.example",
            "label": "Kindling identity"
          }
        ],
        "verification": {
          "level": "oauth",
          "verified_at": "2026-03-02T15:30:00Z",
          "verifier": "google"
        },
        "messaging_preferences": {
          "accept_from": "verified",
          "no_cold_messages": false,
          "minimum_curator_verification": "email"
        },
        "kindling_noindex": false,
        "parsed_at": "2026-03-02T15:30:00Z",
        "parser": "kindling-parser/0.1.1"
      },
      "parsed_at": "2026-03-02T15:30:00Z",
      "consent_proof": {
        "handshake_id": "hs-scattered-light-stewards-noah",
        "accepted_at": "2026-03-02T15:30:00Z",
        "method": "oauth"
      },
      "verification_level": "oauth",
      "added_at": "2026-03-02T15:30:00Z",
      "added_by": "ines@mail.example"
    }
  ]
}

The other documents

VIII · §7.3

The block lists we subscribe to

Both of our Pools subscribe to the same two lists.

Kindling public block list

The block list the Kindling project will publish under SPEC.md §7.3, for identities and implementations with confirmed abuse. The entries here are illustrative until the registry opens. No personal details are ever published.

Version 3 · published September 20, 2026 · https://protocol.kindling.foundation/blocklist.json

TargetTypeReason
scrapekit/0.3implementationscraping · Ignores kindling-noindex and robots signals.
promo-blast@mail.exampleidentityspam

The Circular consortium block list

Shared by every member of the Circular consortium. Each member subscribes; any member may propose an entry, and two others must second it.

Version 8 · published September 27, 2026 · https://thecircular.example/blocklist.json

TargetTypeReason
listed-them-anyway@mail.examplecurator_identityconsent_violation · Submitted other people’s pages, a whole household’s among them, to Pools without asking any of them.
https://free-friends-now.example/pools/everyone.jsonpool_urlconsent_violation · Listed profiles that never accepted a handshake.
bulk-intros@relay.exampleidentityspam
scrapekit/0.3implementationscraping · Also on the Kindling public list.

IX

What the v0.1 schema can’t say yet

Where the spec text and the schemas disagree, our JSON follows the schemas. These are the gaps that touch a rare-condition network.

  1. Invite-only Pools and the well-known file

    §10.2 says the file MUST list “each Pool on the domain”. The schema describes its pools as “all Pools hosted on this domain that are discoverable”. We follow the schema and leave The Heron out, and §8.1 is met by sharing (§8.2). v0.1 should say plainly that invite-only Pools are omitted. The two also name fields differently: §10.2 has pool_url and a per-Pool curator_contact; the schema has manifest_url and one operator.contact.

  2. noindex is all or nothing

    kindling_noindex: true means “do not include me in any Pool” (§2.7). There is no way to say “only the Pools I have accepted, and no crawler”. So privacy inside a Pool has to come from visibility and messaging rules, never from noindex.

  3. Confirmed mutual interest has no message

    §7.2 asks for “confirmed mutual interest” before a first message, but no schema says how interest is expressed or confirmed. The Heron records each “I would like to hear from them” itself, asks the other person with a system message, and sends an intro to each person when both have said yes.

  4. Pool messages and vouched-only members

    With accept_from: "vouched", a strict reading would hold back a steward’s own question to a member, because curators are not vouched members. §7.2 does not say whether a Pool’s own notices pass a member’s rules. We treat system messages sent through the Pool by its curator as notices, not first messages.

  5. Four message types in the text, six in the schema

    §6.3 lists four types. kindling_message.schema.json has six, adding withdrawal and system. This site uses both: withdrawal when a member leaves, and system for a steward’s question. §6.2 also names the Pool reference pool_ref; the schema calls it via_pool.

  6. Rule names in the text and values in the schema

    §7.2 names vouched-only, no-cold-messages and open-to-all. The schema writes them as accept_from: "vouched", no_cold_messages: true and accept_from: "anyone". Our JSON follows the schema.

  7. Verification level names

    §4.5 names email-verified, oauth-verified, curator-vouched and unverified. The schemas use email, oauth, curator-vouched, unverified and cryptographic, and curators may only be email, oauth or cryptographic. Our JSON follows the schemas; our pages say the level in words.

  8. Auto-accept and invite-only Pools

    A rule’s allowed_visibility may only list public or unlisted (§5.5), so a rule can never auto-accept into The Heron. We think that is right for us; the spec text does not say it, only the schema does.

  9. Extraction provenance

    §2.3 says parsed profiles carry an extraction_source field. parsed_profile.schema.json has no such field and forbids extra properties, so our members’ profiles cannot say which fields came from h-card and which were inferred.

  10. The handshake window

    §5.2 says the 14-day window is “configurable per Pool”, but the manifest has no field for it. The Heron uses the default, carried in each request’s expires_at.

  11. The version field

    §12.1 asks every document for a kindling_version field. The schemas require schema_version instead, and our JSON carries that.