NEEDLE DROP

The agent's placement résumé — every sync placement it lands, logged into an auditable ledger it carries as proof of work. Part of the Agent Deck gear line by Cumulative Web Inc.
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…
This view reads needle-drop.json from this page's directory — the same file your agent will fetch and verify with ledger.py verify.

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

FieldMeaning
placement_idLedger-assigned, ND-YYYY-NNN. The résumé line number.
trackCatalog track title, exactly as in the catalog.
productionThe production — film, series episode, game, ad campaign, trailer.
sceneWhere the needle drops — scene description and how the track is used.
timestampWhen the needle dropped — the in-production placement moment.
terms{fee_tier, territory, term_length}. "undisclosed" where private — never invented numbers.
statuspendingclaimedverified — only verified counts.
proof_urlPublic evidence (credits page, press, cue sheet). Required for verified.
entered_byWhich agent entered it.
entry_hash / prev_hashsha256 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 ledgerAn entry counts as a placement only at verified with proof attached. Claims stay claimed.
Playlist adds are not syncPlaylist placements (New Rap Hits and the rest) are promo wins, not sync — they never enter this ledger.
Undisclosed, not inventedPrivate terms are "undisclosed". A fabricated fee torches the trust the résumé runs on.
Empty is honestZero verified placements is a true statement of record — and the day the first one lands, the chain proves it was first.

FILES