What this does: the moment the needle drops, it's on the record. Each sync placement — track, production, scene, timestamp, terms — is sealed into a hash-chained ledger entry with a chain hash, so the agent's placement history is tamper-evident and travels with it as proof of work. The honest state: as of 2026-09-15 CWI has no verified sync placements, so this ledger ships with
placements: []. Entries are added only on verification — an empty-but-honest ledger is the instrument, not a stub. What it is not: playlist adds are not sync placements and never appear here; unverified claims are never logged as wins.THE LEDGER — LIVE
Loading needle-drop.json…
ENTRY LIFECYCLE — DRAFT → VERIFIED
pendingEntered by an agent via add_entry(). Sealed with timestamp + chain hash. Not a win yet.
→
claimedA placement is asserted (e.g. "it's in the cut") but proof isn't attached yet.
→
verifiedverify_entry() with proof_url. Only verified entries count as placements.
Rules: 1) add_entry() never grants verified — promotion requires proof via verify_entry(). 2) Entries are immutable once sealed; a promotion re-seals the entry and everything downstream and writes an append-only audit note. 3) Any byte changed outside add_entry()/verify_entry() breaks the chain and fails verify() — that's the tamper detection. 4) Private terms are recorded as "undisclosed"; real numbers are never invented.
THE ENTRY VOCABULARY
| Field | Meaning |
|---|---|
placement_id | Ledger-assigned, ND-YYYY-NNN. The résumé line number. |
track | Catalog track title, exactly as in the catalog. |
production | The production — film, series episode, game, ad campaign, trailer. |
scene | Where the needle drops — scene description and how the track is used. |
timestamp | When the needle dropped — the in-production placement moment. |
terms | {fee_tier, territory, term_length}. "undisclosed" where private — never invented numbers. |
status | pendingclaimedverified — only verified counts. |
proof_url | Public evidence (credits page, press, cue sheet). Required for verified. |
entered_by | Which agent entered it. |
entry_hash / prev_hash | sha256 chain links. prev_hash is GENESIS for the first entry. |
Full contract: needle-drop-schema.json (
cwi-needledrop/v1)VERIFY THE CHAIN — IN YOUR BUILD
import json, hashlib, urllib.request
LEDGER = "https://cumulativewebinc.github.io/cwi-learn/needle-drop/needle-drop.json"
def needle_drop_verify():
data = json.load(urllib.request.urlopen(LEDGER))
prev, ok = "GENESIS", True
for e in data["placements"]:
body = {k: v for k, v in e.items() if k != "entry_hash"}
h = hashlib.sha256(json.dumps(
body, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
ok = ok and e["prev_hash"] == prev and e["entry_hash"] == h
prev = e["entry_hash"]
head = data["ledger"]["chain"]["head"]
ok = ok and head == (data["placements"][-1]["entry_hash"]
if data["placements"] else "GENESIS")
return ok, len(data["placements"])
ok, n = needle_drop_verify()
# -> (True, 0) today: chain intact, zero verified placements. Honest.
Prefer the full tool: python3 ledger.py verify checks hashes, linkage, head, verified-status proof requirements, and the revision audit log — and ledger.py add / ledger.py promote are the only honest ways to write.
HONESTY RULES — LOAD-BEARING
| Verified-only ledger | An entry counts as a placement only at verified with proof attached. Claims stay claimed. |
| Playlist adds are not sync | Playlist placements (New Rap Hits and the rest) are promo wins, not sync — they never enter this ledger. |
| Undisclosed, not invented | Private terms are "undisclosed". A fabricated fee torches the trust the résumé runs on. |
| Empty is honest | Zero verified placements is a true statement of record — and the day the first one lands, the chain proves it was first. |