{
 "calendar": "labeler v4 reads campaign calendar rows retrieved from 2026-10-30T06:00:00Z (label-lane v3's effective_from; labeler config protocol.calendar.rows_from, unchanged), not from this effective_from. That floor guards against rows retrieved before a public calendar rule existed; the rule was published with label-lane v3 and v4 does not change it, and exam calendars published between the two cutovers can cover v4 dates",
 "change_rule": "any byte change to the labeler, the prompt, the route or the client is a new label-lane version with a dated public file; labels already written keep their version",
 "claim": "none; a confirmed label is a labeling rule's output, not ground truth and not evidence that any arm predicted anything",
 "collection_from": "2026-11-06T06:00:00Z",
 "collection_rule": "from the first 07:30 UTC fetch run at or after collection_from (equal to effective_from) the shared daily fetch runs on labeler v4 bytes; the 07:30 and 07:40 cron lines switch after 08:15 UTC on the day before or before 05:30 UTC on the day. Candidates of label-lanes v1, v2 and v3 still in flight read v4-collected receipts from then. That input is identical unless a source is held or refused, and any hold that affects an earlier lane's input is reported in the next batch receipt and in a dated public addendum. A hold on our own API is fixed in our robots or headers, never exempted",
 "cutover_rule": "label-lane v4 applies to a candidate only when its evidence window starts after effective_from. The window starts at the candidate date 00:00 UTC minus 30 days 12 hours (the labeler's deliberate-evidence lookback, protocol.deliberate_window_days[0] = 30, before its 12-hour technical lead), so the first v4 candidate date is the effective_from date plus 31 days. Every other candidate keeps its lane: label-lane v3 when its window starts after the v3 effective_from (2026-10-30T06:00:00Z), label-lane v2 when it starts after the v2 effective_from (2026-10-26T06:00:00Z), label-lane v1 before; their labeler bytes, prompts and client paths are unchanged. Labels already written keep their version; nothing is relabeled.",
 "effective_from": "2026-11-06T06:00:00Z",
 "effective_from_rule": "effective_from 2026-11-06T06:00:00Z holds only if, at least 24 h before it, this file and its cutover row are public, the release is live, the independent review is recorded, and labeler v4, the client and the decide wrapper are installed on the host with backups; otherwise a dated replacement record moves it later; never earlier, never back-dated; always strictly after label-lane v3's effective_from",
 "evaluation_start_at": "2026-10-24T06:00:00Z",
 "evaluation_start_rule": "set by label-lane-v1.json; label-lane v4 does not change it",
 "first_v4_candidate_date": "2026-12-07",
 "hashes": {
  "api_contract_v3.md": "bebf2935614b6a3b125a8078a3410b045ba7bebcacbed9547f1c979d7daca943",
  "labeler-decide-split.sh": "6bcef29b1eed2cd1f8d9706e7035751ed4cb4d8fc1972c9714bf16bc894df175",
  "labeler_config.json": "540c1961a712a1b69609bfdfd27903e5f33304e9cb16e54878f1e2e0ade0f5cd",
  "onset_labeler.py": "79e116499cb322223f6b9a67850569bf9244a01228ea0a8287cbf13ed28b2073",
  "onset_review_client.py": "54b74a214bf6972f6b74036144a6aacd699ab5ea8da7e9d47039101cd2ec968b",
  "owner_record_addendum_v4.md": "0969e0f72628ff42ca2eaa8c788404f9d8cbe642bcf962d940ef97d8038f0435",
  "reviewer_prompt_v3.txt": "a0175648c0e08348727018b19ef5c4956f23c713f9661beac9c5c17851972799",
  "worker_route_onsetReview.ts": "139f9a7d8d924f11348eff28d4fbb8e39b251c1f027f0369e5076f2c129c77f2"
 },
 "independence_profile": "strict (IODA, Cloudflare Radar, NetBlocks; Radar from its outage annotations, read automatically with a scoped read token under the internal-adjudication rights row RADAR-RIGHTS-ROW-B35-20261021T192915Z, or as manual link-and-timestamp rows; NetBlocks as manual rows; Radar counts as one source however it enters)",
 "label_status": "blind_agent_review_2of2",
 "label_window": "register-label-window-v2.json: its rule does not depend on the lane (labels and disputes written after window v1 closes, for onsets from 2027-04-29), so it applies to label-lane v4 labels as to every lane; its not_changed list names the lanes that existed when it was written",
 "label_window_days": 194,
 "previous_lane": "label-lane-v3.json, unchanged: it keeps every candidate whose evidence window starts after its own effective_from and at or before this effective_from (candidate dates 2026-11-30 to 2026-12-06)",
 "register": "R-a, no register change: a v4-lane review reaches the register marked label_lane v3. That key names the register's v3 review rule set (register-adjudication-v3: onsets from 2026-11-30, and a scheduled label of up to 15 minutes when it and every cited onset lie within 30 minutes), which v4 shares; it does not name the labeler lane. The lane is recorded in the review client's ledger (label_lane v4) and in each decision's code_sha256 and config_sha256, so the register's own records say v3 for v4-lane labels",
 "report_rows_from": "2026-12-11",
 "required_attestations": 2,
 "review_route": "POST https://api.voidly.ai/v1/admin/onset-review with request schema voidly-onset-review-request-v3, prompt_version onset-review-prompt-v3 and the pinned prompt sha256: contract v3, unchanged (internal; existing probe-ingest credential; no fallback model; effort high; JSON-schema answers with the v2 judgement fields, schema tag voidly-onset-judgement-v3); the client tag onset-review-client-v4 is kept in the client's own ledger only",
 "reviewer_inputs": "the evidence pack bytes only: no tools, no web, no forecast, alert, score or commitment",
 "reviewers": [
  {
   "model": "claude-sonnet-5-5",
   "reviewer_id": "claude-sonnet-5-5-blind-v3"
  },
  {
   "model": "claude-haiku-5-5",
   "reviewer_id": "claude-haiku-5-5-blind-v3"
  }
 ],
 "rulebook": "labeler_config.json rulebook_text: label-lane v3's text, byte for byte; the signed owner records cover v1 (d6ebfde5) and v2 (1f83453f), OWNER-RECORD-ADDENDUM-V3.md records v3, and OWNER-RECORD-ADDENDUM-V4.md records the overseer's sign-off for v4 under the owner's 2026-10-23 grant",
 "ruling": "overseer ruling of 2026-10-27 (batch 59 queue), under the owner's 2026-10-23 grant of full authority",
 "schema": "early-warning-label-lane-v4",
 "status": "public; effective_from holds only if effective_from_rule holds, and it is never back-dated",
 "v1_v3_lane_bytes": "the client and the decide wrapper change when this release goes live and when the host is installed, before effective_from; their v1, v2 and v3 paths behave as the files label-lane-v1.json, -v2.json and -v3.json pin (tested against the shipped bytes), so earlier candidates keep their lanes; the route, the prompts and the contracts do not change",
 "v4_changes": [
  "strict robots: only 404 and 410 mean no robots file; any other status, a read error, an HTML or non-robots body, a Content-Signal ai-train=no or ai-input=no line, or a Content-Usage line that sets an AI category to n holds the origin for the run; a URL is fetched only when both the standard parser and an RFC 9309 evaluator allow it; a held fetch's receipt names the reason",
  "redirects are followed only to https on the same host and port, allow-listed, not terms-blocked and allowed by robots; anything else is refused before it is requested",
  "fetch policy: only the IODA, Voidly delta and Cloudflare Radar APIs are requested; the evidence gatherer's terms-blocked hosts are never requested, and their manual and calendar rows and Pulse manual rows are skipped at decide; a response with noai or noimageai, TDM-Reservation: 1 or an AI Content-Usage of n is not stored; IODA and delta bodies are stored only when the labeler's own parsers read them",
  "no Pulse-derived input: Pulse is never fetched, and stored Pulse list and detail pages give no signal and no ongoing item",
  "removes the tracker-listed-ongoing exclusion (labeler design rule, onset_labeler/DESIGN.md:38); the owner-signed rulebook text never contained it and is unchanged. Candidates it used to exclude take the normal gates and blind review: fewer negatives from stale tracker items, not a claim that any label is more correct",
  "the prompt, contract, route, reviewer ids, rulebook text, packs and register are label-lane v3's"
 ]
}
