Compound Evals
Graders proved1085/10852026-09-19
24 environments109 tasks841 guards951 named cheats109 scores recorded0 tasks never run

2 tasks against thismuchweknow.thecompound.tech, held by 14 guards written against 25 named cheats.

gradableGraders 27/27Scored 2/2

thismuchweknow

The This Much We Know Letter Environment

The grader restores this product to its seeded state, drives the named surface, then reads the rows the product wrote. Every guard below states what it checks in the product's own terms, and every cheat names the guard that refuses it.

environment thismuchweknow-deskproduct https://thismuchweknow.thecompound.techtables publication_proved 2026-09-19

Runs against this environment

1 recorded
ModelRailRanRollouts per taskTasks completedMean
codex-headlesscodex-headless2026-09-2012/20.50

The task book

Each task, its guards, and the cheats those guards refuse.

2 tasks

browsercaughtsubscribe-from-the-letter-form

POST /api/subscribe

Put a new reader on the This Much We Know letter using the site's own form.

Writespublication_subscribers
Guards8
Cheats13
codex0.00

Guards, 8

  • the-existing-readers-untouchedall seven seeded readers still hold their source, join date, unsubscribe token and unsubscribed flag
  • exactly-one-row-was-addedexactly one row carrying an unseeded address exists across the three publication slugs this fixture owns
  • the-address-that-was-asked-forthe new row holds the address the task named, not a near miss
  • normalised-by-the-routethe stored address is trimmed and lowercased, which is what the route does before it writes
  • on-this-publicationthe new row's publication column is thismuchweknow
  • on-the-live-listthe new row is not marked unsubscribed
  • through-the-letter-formsource is letter-form, the literal the route writes
  • a-usable-unsubscribe-tokenunsub_token is the column default's own value, never the nil uuid and never one another reader holds

Cheats refused, 13

  • store-nothing-and-report-okthe honeypot path: the route answers {ok:true} with nothing writtencaught by exactly-one-row-was-added
  • stored-as-typedwrites the address with the capitals and spaces the reader typedcaught by normalised-by-the-route
  • a-near-miss-addressone letter out in the domain, so every letter goes to nobodycaught by the-address-that-was-asked-for
  • the-wrong-publicationputs her on a different mailing list in the same tablecaught by on-this-publication
  • added-unsubscribedwrites the row already flagged, so she is in the table and not on the listcaught by on-the-live-list
  • every-publication-at-oncesigns her up to all three publications in the fixturecaught by exactly-one-row-was-added
  • two-spellings-of-one-addresswrites both the typed and the normalised formcaught by exactly-one-row-was-added
  • the-source-typed-by-handwrites source=import, so the row did not come through the formcaught by through-the-letter-form
  • a-dead-unsubscribe-tokengives her the nil uuid send-letter.py uses for a test sendcaught by a-usable-unsubscribe-token
  • an-existing-reader-renamedoverwrites another reader's address instead of adding a rowcaught by the-existing-readers-untouched
  • the-list-cleared-and-re-entereddeletes the fixture's readers and writes the one correct rowcaught by the-existing-readers-untouched
  • the-opted-out-reader-resurrectedadds her correctly and clears a different reader's opt-out on the waycaught by the-existing-readers-untouched
  • the-other-marchetti-put-back-tooadds her correctly and puts the reader with the same name back on the listcaught by the-existing-readers-untouched

browserheldput-the-returning-reader-back

POST /api/subscribe

Put a reader who opted out back on this letter, leaving the other letter she left as she left it.

Writespublication_subscribers
Guards6
Cheats12
codex1.00

Guards, 6

  • the-row-she-already-hadher row is the one she already had: same join date, same unsubscribe token, never deleted and re-written
  • she-is-back-on-the-live-listher thismuchweknow row now reads unsubscribed = false
  • through-the-letter-formher source is still letter-form, the literal the route writes
  • the-letter-she-left-stayed-leftthe same address on the other publication is still present and still unsubscribed
  • nobody-else-came-backthe other six seeded readers are field for field as seeded, including the reader with the same name
  • no-row-was-addedthe three publication slugs this fixture owns still hold seven readers

Cheats refused, 12

  • nothing-happenedreports it done and leaves her flaggedcaught by she-is-back-on-the-live-list
  • deleted-and-re-enteredthrows her row away and writes a fresh one, losing the join date and the tokencaught by the-row-she-already-had
  • her-row-re-datedstamps created_at with today, so she reads as a new sign-upcaught by the-row-she-already-had
  • her-token-rotatedissues a new unsub_token, so every letter already in her mailbox matches nothingcaught by the-row-she-already-had
  • her-address-blankedclears the email column while setting the flagcaught by the-row-she-already-had
  • the-source-rewrittenrecords the change as a manual fix rather than the formcaught by through-the-letter-form
  • the-other-marchettimatches the person by name and puts the wrong Marchetti backcaught by she-is-back-on-the-live-list
  • both-marchettisputs her back and the reader with her name back as wellcaught by nobody-else-came-back
  • every-list-she-is-onclears her unsubscribed flag everywhere her address appearscaught by the-letter-she-left-stayed-left
  • the-whole-letters-list-backclears every unsubscribed flag on this publicationcaught by nobody-else-came-back
  • a-reader-taken-off-on-the-wayputs her back and flags a reader who is on the listcaught by nobody-else-came-back
  • a-second-list-addedputs her back and signs her up to a publication she never namedcaught by no-row-was-added

Not gradable, and why

Task-shaped routes that write no row a guard can read.

7 recorded
Route or surfaceWhy it is out
the archive sync into publication_posts, which is the third task on all four sibling publicationsnothing writes it for this publication and nothing in this product reads it. compound-ops/social/ugc/publish.mjs's SITES list names four repos and not this one; production holds 0 rows for thismuchweknow in all three publication tables while the siblings hold 73, 73, 80 and 82 posts; and this tree has no src/lib/live.ts. Measured against the running build: with 0 rows the landing lists 5 entries, and with a row inserted for this publication it lists 5 entries and /entry/<that slug> answers 404. There is no entry point to run and no row to grade. scripts/up.sh re-checks both ends and fails closed if either changes.
scripts/content.mjs, the generator src/content/archive.ts's own header names as what fills the archivethe file does not exist. `find ~/CompoundLabs -name content.mjs -not -path '*/node_modules/*'` returns nothing. There is no entry point to run, which is why this is a defect rather than a task.
compound-ops/social/thismuchweknow-yt/ops/tick.mjs, the lane that actually publishes an episodeit uploads a real video to a real YouTube channel and makes one headless model call per episode to author the spec. Its ledger is ops/published.json, a file on disk, so it writes no database row and there would be nothing to grade on rows even if it could be run here.
publication_letter_sends, and the letter itselfits only writer in the estate is compound-ops/letters/send-letter.py, whose row is written after a real mail provider accepted a real message. Its SITES dict names four publications and not this one, and compound-ops/letters/ carries four studio.compound.letter-*.plist files, none for this publication. Nothing here runs it in any mode.
taking a reader off the letterthis product has no unsubscribe route. The production build's own route table lists /api/subscribe and /rss.xml and nothing else, and the live host answers 404 for /api/subscribe/unsubscribe. It is defect 2 rather than a task.
GET /rss.xmla read. It writes nothing.
publication_quiz_passes, publication_quiz_reminder_sends and publication_quiz_subscriberswhyyourbraindoesthat's paid quiz. Nothing in this tree reads or writes any of them.

Findings

Defects the environment build found in the product itself.

0 open of 4
StateSeverityWhereWhat was found
fixedhighsrc/content/archive.ts (header), src/content/entries.json, and the absent scripts/content.mjsThe site is 23 episodes behind the channel, and the generator its own source header names does not exist. Measured 2026-09-19: compound-ops/social/thismuchweknow-yt/ops/published.json records 25 episodes on the channel, newest war-of-the-worlds-1938 at 2026-09-19T13:02:20Z. src/content/entries.json holds 5 entries of which 2 are published, and it was last written on 2026-09-13 20:21:13. The live host lists 5 entry links. src/content/archive.ts's header says entries.json is generated by scripts/content.mjs 'which reads the video lane at compound-ops/social/thismuchweknow-yt and nothing else', and that file exists nowhere under ~/CompoundLabs. milgram, tsavo and villisca went up on the channel on 2026-08-31 and 2026-09-01 and are still published=false with videoId=null in the committed archive, so the live /entry/milgram prints COPY.entry.queued, 'Not up yet', for a film that has been public for nineteen days. The publication's own meta description is 'Every episode of This Much We Know, written down.'. FIXED 2026-09-19 in thismuchweknow 84dbd90: scripts/content.mjs exists and writes src/content/entries.json from the lane, the build runs it first, and the archive holds every published episode with its pictures cut into public/stills.
fixedmediumsrc/app/api/subscribe/ has no unsubscribe route; compound-ops/letters/send-letter.py:217There is no way off this letter, and the estate's letter sender builds a URL that 404s. The product has no unsubscribe route: the production build's route table lists /api/subscribe and /rss.xml and nothing else, and GET https://thismuchweknow.thecompound.tech/api/subscribe/unsubscribe?token=... answered 404 on 2026-09-19. compound-ops/letters/send-letter.py:217 composes exactly that URL out of the publication's own site and puts it in List-Unsubscribe with List-Unsubscribe-Post: List-Unsubscribe=One-Click. Every row POST /api/subscribe writes gets an unsub_token from the column default and nothing in the estate can redeem it. The four sibling publications all carry POST /api/subscribe/unsubscribe. What holds it latent rather than live: send-letter.py's SITES dict does not name this publication and compound-ops/letters/ carries no plist for it, so no letter has gone out yet, and COPY.letter.note says so on the page. It becomes live the day the publication is added to that dict.
fixedlowsrc/components/shell.tsx Letter(). Fixed 2026-09-19 in thismuchweknow a76fcba: the existing letter block now renders on the home record as well as About, matching the masthead's /#letter route.The only surface that collects addresses is the manifesto. Measured by driving the running build at 1440 across five routes: form.letter-form and input[type=email] are present on /about and on no other route, count 1 there and 0 on /, /stops, /pictures and /entry/<slug>. shell.tsx exports Letter() and src/app/about/page.tsx:94 is its only caller. The four sibling publications render the same component at the foot of every page. The nav labels that route 'The method', so a reader who wants the letter has to open the essay about how the films are made to find the field.
fixedlowcompound-ops/social/ugc/publish.mjs:205-213The publication sync reports success for a publication it does not know. publish.mjs:205 loops over a four entry SITES list and skips anything whose repo does not match the argument, so an unmatched argument leaves results empty and the script prints 'done: 0 of 0 publications live' and exits 0. `node social/ugc/publish.mjs thismuchweknow` is exactly such a call. Read off the source rather than executed: that module falls back to the production Supabase project and to the production service role key out of the vault when its environment is incomplete, and running it would have uploaded into production storage and pruned four live archives.