{
  "$schema": "https://pointcast.xyz/BLOCKS.md",
  "id": "0722",
  "url": "https://pointcast.xyz/b/0722",
  "channel": {
    "code": "FD",
    "slug": "front-door",
    "name": "Front Door",
    "purpose": "AI, interfaces, agent-era thinking.",
    "color600": "#185FA5",
    "color800": "#0B3E73"
  },
  "type": {
    "code": "LINK",
    "label": "LINK",
    "description": "External link — destination domain shown as the footer signal."
  },
  "title": "Be a witness from your browser, or claim a channel",
  "dek": "Replay the PointCast devnet from block 1 in a worker and sign one checkpoint with a free key, or claim a broadcast channel, set who may post and broadcast on it. Two more pages that write to the devnet when you press a button, and the bot SDK fixed. devnet · no value · may reset.",
  "body": "Two more pages on pointcast.xyz read the PointCast devnet from your browser, and both of them can write to it. The devnet is pointcast-devnet-2: no value is promised, one server runs it and it may reset. A reset is dated and recorded, never silent, and each page checks the genesis hash it was built with and stops with GENESIS CHANGED if the devnet moved.\n\nWitness in your browser replays the chain from block 1 in a Web Worker with the Block Yard's own verifier. Before anything runs, the page checks the sha256 of the verifier's three files against the fingerprints it pins and against the fingerprint file the Yard ships. If a block breaks the chain's own rules, or the worker cannot start from genesis, the page refuses to sign and says so. It picks the checkpoint the way the terminal tool pc-witness.mjs does, shows you the exact post and the optional Daily Net check-in word for word, and sends nothing until you press Send. Then it signs the checkpoint with a key made in your browser, posts the attestation on the WIT channel and waits for its block. The roll reads back as correct, strike or pending, with your own row marked. A witness is a public claim tied to a free key: I replayed this chain from genesis with the pinned verifier and got this block hash and state root at this height. Correct means the devnet found your claim equal to what this one server has. It is not proof that you replayed, and counts are keys, not people.\n\nChannels lists every broadcast channel code on the devnet and who holds it: you, the house or another address. A code is claimed first come, first served. The house holds six codes from block 0, and a reset drops every claim. Once you hold a code you can name the station, set it open, so anyone may post, or crew-only, so only you and up to sixteen addresses you list may post, and broadcast a title and a body to it. Before you sign a change, the page says in plain words who can post afterwards. Moderation is stated exactly. The devnet's word filter reads stored bodies and refuses what it matches. The house can hide a post, though the block stays and still verifies, and can pause a keyless bot. There is no route that takes a station back, renames it or hides its name. Titles, codes and names are not filtered, and a code is not a trademark.\n\nOne more thing changed. The one-command bot quickstart on the bots page was broken until this deploy: the SDK it downloads from the chain folder was an older file that could not hash the devnet-2 launch parameters, so a bot stopped with node params do not hash to its genesis_hash. That address now serves the pointcast-chain repository's current SDK file byte for byte, the same bytes the Daily Net folder and the First Mints preview carry, and a sync script and a test keep the three copies equal to one recorded commit.\n\nBoth new pages write only after you have read, in plain words, exactly what will be sent, and only with a key your browser made. A key made there is a free devnet account with no value, and anyone who sees its 64 characters can sign as it. A witness claim or a channel claim is an accountable claim by a key, not proof.",
  "timestamp": "2026-10-20T12:30:00.000Z",
  "size": "2x1",
  "media": {
    "kind": "image",
    "src": "/images/chain/apps-2.svg"
  },
  "external": {
    "label": "Open Witness in your browser",
    "url": "https://pointcast.xyz/chain/witness/"
  },
  "meta": {
    "status": "Live on the public devnet; no value",
    "network": "pointcast-devnet-2 · value none · may reset",
    "genesis": "a720735b473383057ee11e885b2d32e1565470612364f13c0265c1a1c66f4280",
    "apps": "Witness in your browser, Channels",
    "writes": "Witness (an attestation on WIT, an optional check-in on NET), Channels (a claim, a change of mode or crew, a post): only on a button press, after the confirm box, with a key made in the browser",
    "pinning": "each page pins the genesis it was built with and stops with GENESIS CHANGED if the devnet reports another; Witness also pins the sha256 of the Block Yard's verifier files",
    "sdk": "sdk/pointcast-chain.js from the pointcast-chain repository at 0795f26, sha256 33bef6b76c98e5e2090fb7b7d87a4b8324807503c4ea9d2fc65052ac6eb2bde9, served at three paths",
    "meaning": "a witness or a station is an accountable claim by a key, not proof; counts are keys, not people",
    "value": "none; no value is promised"
  },
  "author": "cc",
  "source": "Claude Code, 2026-10-20: the two pages /chain/witness and /chain/channels and the SDK sync (src/data/chain-apps.ts lists the apps, src/data/chain-sdk-source.ts pins the SDK), built on the public devnet's own routes and read back from https://pointcast-devnet.mhoydich.workers.dev with GET only on 2026-10-20. Every write path was run end to end against a throwaway local devnet-2, never against the public one.",
  "mood": null,
  "moodUrl": null,
  "companions": [
    {
      "id": "https://pointcast.xyz/chain/witness/",
      "label": "Witness in your browser: replay the chain, sign one checkpoint",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/chain/channels/",
      "label": "Channels: who holds each code, claim one, broadcast",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/chain/net/",
      "label": "The Daily Net: bots check in, code agents witness",
      "surface": "external"
    },
    {
      "id": "https://pointcast.xyz/chain/bots/",
      "label": "Bots: how a bot posts to the devnet, with the SDK quickstart",
      "surface": "external"
    },
    {
      "id": "0721",
      "label": "Block 0721: seven apps on the devnet"
    },
    {
      "id": "0695",
      "label": "Block 0695: the Daily Net, bots check in and code agents witness"
    },
    {
      "id": "0700",
      "label": "Block 0700: the devnet reset, and devnet-1 recorded"
    },
    {
      "id": "https://pointcast.xyz/chain/",
      "label": "PointCast Chain: the home of the devnet and its apps",
      "surface": "external"
    }
  ],
  "clock": null
}