reactions: null, because nobody said any of them - #96
Merged
Merged
Conversation
DO NOT MERGE WITHOUT THE CONSUMERS. This changes the public shape of all_events.json, which pdoom1 and pdoom1-website both read. safety_researcher_reaction and media_reaction shipped invented text on all 1,194 served records. The 1,166 bulk records drew theirs from a five-element list by random.choice -- transform_to_timeline_events.py:270 and transform_enriched.py:242 -- so "Notable work on AI safety" stood as what safety researchers thought about 232 separate papers. The 28 hand-authored records are not better, only rarer: their reactions are the seed author's own prose, and "Microsoft's AI chatbot goes full Nazi in under 24 hours" is styled as a headline credited to no newspaper. Two standing rules already covered this and neither was applied. RULED_2026-08-12: "No shipped sentence states a fact nobody has checked." ADR-001: no anonymous verdicts. A reaction attributed to an unnamed "safety researcher" fails both. The schema was the mechanism, not a bystander. Both fields were required strings with minLength 10 under additionalProperties: false, so event_v1 made it impossible to say that nobody had commented -- there was no legal spelling of absence, and the generator supplied prose to satisfy the requirement. Both are now ["string", "null"] and neither is required. A non-null value returns only with a name attached, which is what ADR-001 asked for all along. Emitted as null rather than dropped: null is this repo's standing spelling for absent-and-honest, the key stays in place for consumers that index on it, and the absence stays visible instead of reading as a field that merely failed to fetch. Suppression is unconditional by design. There is no attribution anywhere in the corpus to preserve, so a predicate that tried to keep the good ones would be inventing the distinction it claimed to read. All 28 gating checks pass, including the four rebuild checks. Refs pdoom-data#92, pdoom-data#76. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCAwQ2dTCtpR8rTrEfv5ee
Owner
Author
Both consumers are handled. This is ready to come out of draft once they merge.Rather than wait on the two seats, the guards are written and tested in their own repositories:
Both were measured in the consumers' own trees before a line was written, not predicted from the signatures. Neither repo needed a new concept. pdoom1-website already had Merge order: pdoom1-website#397, then this. pdoom1#1339 is not blocking, because the game has no network fetch (pdoom1#1101) and re-syncing is a build-time act, but it should land before the next resync. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DRAFT ON PURPOSE. Do not merge until pdoom1 and pdoom1-website are ready. This changes the public shape of
all_events.json, the file both of them read. Pip asked for the change prepared and proven, not shipped -- EAGxSingapore, 2026-08-29.What is live right now
safety_researcher_reactionandmedia_reactioncarry invented text on all 1,194 served records.random.choiceover five strings --transform_to_timeline_events.py:270,transform_enriched.py:242"Notable work on AI safety"stands as what safety researchers think about 232 separate papers."Valuable research for alignment"covers another 229.The 28 are not better, only rarer.
"Microsoft's AI chatbot goes full Nazi in under 24 hours"is written as a headline and credited to no newspaper. That is why the suppression covers all 1,194 and not just the bulk.The schema was the mechanism, not a bystander
Both fields were required strings with
minLength: 10underadditionalProperties: false. There was no legal way to say nobody had commented -- not null, not empty, not absent.event_v1demanded a sentence for events where no sentence existed, and the generator supplied prose to satisfy it.Two standing rules already covered this and neither was applied.
RULED_2026-08-12: "No shipped sentence states a fact nobody has checked." ADR-001: no anonymous verdicts. A reaction attributed to an unnamed "safety researcher" fails both.What this does
["string", "null"]and leaverequired.LINEAGE.jsonrecords what was suppressed and why.Verification
All 28 gating checks pass, including the four rebuild checks and the ASCII gate. The schema patch is 5 insertions / 7 deletions -- an earlier version of it reformatted every inline array in the file and was redone by hand.
What is NOT done here, and belongs to the consumers
Neither
pdoom1norpdoom1-websitehas been checked for null-handling on these two fields. That is the gate on this PR, and it is why it is a draft. If either renders the field unconditionally, it needs a change first.Refs pdoom-data#92, pdoom-data#76. ADR-001, and the #34 family.