yaoireporter
Build log

the receipts.

everything built, broken, and fixed in service of organizing an unconscionable amount of yaoi.

6Weeks logged
43Milestones
700kWords ingested
6Features shipped
37Bugs fixed
Phase A โ€” The Yaoi Trap 50%
Every message wanders into the trap and none of them wander out โ€” ingestion, the reporting API, and the alerts that go off when one nearly escapes.
5 of 10 features shipped see the lab
May 19 โ€“ May 25, 2026 Week 6

the receipts came due

RuntimeNarrative Systems
5 bug fixes
A full audit of the bot uncovered about forty places where the code and the docs had stopped speaking to each other, and the first round of repairs landed: a stronger audit trail, the stitching war finally getting its own logbook, and the location lookup learning to point at the right rooms. Universes, not pairings, came into focus as what actually carries the story.
๐Ÿ”งA structural audit of the bot was run end-to-end โ€” about forty places where the code and the docs had stopped speaking to each other were catalogued, severity-ranked, and queued for repair.
๐Ÿ”งA centralized channel model landed in the database โ€” registration, alerts, and admin channels now live as proper rows with strict singleton enforcement, so a future Discord rename can never silently break two commands at once again.
๐Ÿ”งA long-standing config oddity on the alerts channel was quietly resolved โ€” three fields carrying residual misconfiguration from an earlier setup were swept into a clean infrastructure marker, and the location-type scheme was canonicalized in the docs.
๐Ÿ”งThe bot got more honest about its own failures โ€” when something goes wrong deep in the pipeline, it now leaves a proper queryable record of what broke and where, instead of a quiet warning in a log file no one reads.
๐Ÿ”งA safety net was added underneath the audit trail itself โ€” if the database is unreachable when a failure happens, the record now goes to a small file on disk and replays the next time the bot comes up clean.
๐ŸŽญThe stitching war finally got a logbook โ€” every time the bot decides whether a Tupperbox burst is one new reply or part of an existing one, it now records *why*. The answer is finally just there.
๐Ÿ”งThe room-lookup command was quietly returning the wrong location for each pairing because of a flipped filter. Anyone using it was getting non-canonical answers and probably blamed the data. The data was fine; the question was wrong. Fixed.
๐Ÿ”งA subtle hole in the error-classification layer got closed โ€” scene attachment failures were being swallowed before they could be classified, so they never showed up in the audit trail. They will now.
๐ŸŽญA bigger shape came into focus while testing the location lookup โ€” universes, not pairings, are what actually carry the story. A future session will redesign around that. Surfacing only because we tested everything, not just the first thing, is its own small win.
May 12 โ€“ May 18, 2026 Week 5

The Universe Layer, The Alert System & The Devlog

RuntimeAlertsAPIToolingWebsite
26 universes ยท 13 API endpoints ยท alert system live ยท devlog deployed ยท 15 messages recovered ยท 6 split scenes repaired ยท housekeeping pass ยท site moved to its own home
With ingestion stable, focus moved up the stack โ€” a universe layer for organizing stories, a self-resolving alert system so the bot can speak, a deep bug hunt that sharpened the system's correctness, and a recovery pass that brought back every message the old catch-up bug had swallowed. The week closed with a housekeeping sweep and a build log to make all this invisible work finally visible.
๐Ÿ”งA universe layer was designed and built โ€” 26 universes seeded with genres, descriptions, and story tags, so the same characters can appear across multiple storylines without duplicating data.
๐Ÿ””The alert lifecycle system took shape โ€” the bot can now speak. Ownership routing decides whether a failure goes to the admin or the writer, embeds explain what was seen versus expected, and alerts resolve themselves once the problem is fixed.
๐Ÿ“กThe API grew to 13 endpoints โ€” universe library, character rosters, scoped character stats, and a diagnostic endpoint giving direct visibility into why any message failed.
๐Ÿ”งNPC support reached the finish line โ€” webhook-based NPC characters now travel the full pipeline correctly, and a new guided !register_npc command lets either writer add one with no database access.
๐Ÿ”งA pair of hidden bugs was hunted down โ€” one could have quietly accepted the wrong character, the other had been swallowing messages and splitting replies in two. Every lost message was recovered and every split scene stitched back whole.
๐Ÿ”ญThe biggest cleanup yet โ€” 20 source documents consolidated to 12, and a housekeeping pass across every storyline that tidied scene names, corrected a stray attribution, and confirmed every multi-part turn is stitched as written.
โœจThe build log was born โ€” a self-generating timeline that turns weekly notes into a styled page, now living at its proper home, yaoireporter.com, with live counters, a phase bar, and a one-command build-and-publish step.
May 5 โ€“ May 11, 2026 Week 4

The Rebuild โ€” Recovery, 700k Words, and V1.1 Complete

RuntimeNarrative SystemsAPITooling
~700k words ingested ยท 25 scenes ยท 8+ bugs fixed ยท API live
The hardest week. A destructive AI editing pass had gutted the codebase; it was rebuilt from the ground up, three deep ingestion bugs were found and fixed, the entire corpus was backfilled, and V1.1 reached full completeness.
๐Ÿ”งThe core ingestion stack was rebuilt from scratch โ€” a destructive AI editing pass had replaced working code with stubs and broken signatures. Repositories, processor, resolvers, canonical logic, stitching, and the bot entry point were all restored.
๐Ÿ”งThree deep ingestion bugs were diagnosed and fixed โ€” the interruption check queried the wrong table, thread_id was never stored, and duplicate detection checked the wrong log. Together they had caused messages to "blob" into giant malformed replies.
๐Ÿ”งThe full historical corpus was backfilled โ€” roughly 700,000 words across 25 scenes and 4 pairings, ingested chronologically, fully deduplicated, with correct narrative-turn structure and zero disruption to the writers.
๐ŸŽญA breakthrough on Tupperbox history โ€” instead of needing deleted trigger messages, writer identity was recovered from the character name carried in the webhook itself. A fully passive, deterministic path with no writer friction.
๐Ÿ”งV1.1 reached full feature completeness โ€” multi-character Nitro attribution, ambiguity-safe Tupperbox resolution, scene lifecycle management, message edit and delete handling, bot-restart catch-up, and mixed Nitro + NPC webhook handling all live.
๐Ÿ“กThe read-only reporting API went live โ€” eight endpoints exposing pairing, writer, character, and scene data, served publicly at api.caity.me. This unblocks the cowriter dashboard.
๐Ÿ”ญRecovery discipline held throughout โ€” systematic backups, a dedicated fix branch, and careful verification at every step turned a contaminated codebase back into a stable, documented system.
April 28 โ€“ May 4, 2026 Week 3

V1.1 โ€” Mixed-Mode Ingestion, Scenes & First Analytics

RuntimeNarrative SystemsTooling
1,268 messages backfilled ยท scene model corrected ยท analytics v1
The system grew past pure ingestion. Mixed Nitro and NPC-webhook handling shipped, the scene model was corrected to match how stories are actually written, and the first narrative analytics layer came to life.
๐ŸŽญMixed-mode ingestion shipped โ€” webhook-based NPCs can now post inside Nitro locations, resolved deterministically through an alias-to-character-to-owner chain, without compromising the Nitro path.
๐Ÿ”งProduction backfill ran across two pairings โ€” 1,268 historical messages ingested with perfect structural integrity, idempotent re-runs, and confirmed pairing isolation.
๐ŸŽญThe scene model was corrected โ€” instead of fragile time-gap heuristics, a Discord thread is now the atomic scene. Deterministic, Discord-native boundaries with no artificial fragmentation.
๐ŸŽญThe first analytics layer came online โ€” pairing signature analysis, narrative signal modelling, and cadence metrics measuring true cross-writer reply timing.
๐Ÿ”ญThe full documentation set was reconciled โ€” schema, ingestion rules, runtime behaviour, and pairing config aligned under a single source-of-truth hierarchy, eliminating drift between intended and actual behaviour.
๐Ÿ”งA real-world edge case was formally captured โ€” Nitro locations can contain webhook NPC messages, which became the defining feature work for the V1.1 cycle.
April 23 โ€“ April 27, 2026 Week 2

V1 Core โ€” From Half-Built to Production-Ready

RuntimeNarrative Systems
V1 core 100% ยท 2 posting modes live ยท deterministic attribution
The ingestion system raced from roughly half-complete to a fully deterministic V1. Both posting modes went live, runtime bugs were hunted down, and the system crossed from "being proven" to "being used."
๐Ÿ”งLive runtime ingestion went fully operational โ€” the system moved past manual inserts and test harnesses into processing real Discord activity in real time, persisting structured narrative data as it arrived.
๐ŸŽญBoth ingestion paths went live โ€” Nitro profile messages fully operational, and Tupperbox webhook reposts working via deterministic trigger-to-webhook fallback correlation.
๐Ÿ”งReply stitching matured โ€” a bounded stitch window was introduced so replies reflect genuine conversational continuity rather than naive attribute matching.
๐Ÿ”งPairing context began flowing end to end โ€” pairing_id now propagates from location config straight through to discord_messages and ingestion_events.
๐Ÿ”งA run of real-world runtime bugs was hunted down and fixed โ€” schema mismatches, missing-field constraint failures, and channel-to-location mapping errors.
๐Ÿ”งMulti-pairing support landed โ€” forum-thread inheritance meant new threads inherit their parent channel's config automatically, with zero per-thread setup.
๐Ÿ”งV1 core reached completion โ€” deterministic processing, configuration-driven behaviour, full audit logging, and a system that prefers rejecting a message over attributing it incorrectly.
April 19 โ€“ April 22, 2026 Week 1

Foundation โ€” The Schema, The Seed World, The First Heartbeat

RuntimeNarrative Systems
19 tables built ยท 8 smoke tests passed ยท first live ingestion
The entire relational schema was built table by table, seeded with a test world, and proven alive. By the end of the stretch, a real Discord message had travelled the full pipeline end to end.
๐Ÿ”งThe full relational schema was built across eight phases โ€” 19 tables in all, from the configuration layer through raw ingestion, stitched replies, scenes, and milestone events. Every foreign key wired, every constraint in place.
๐ŸŽญThe core narrative model was locked in โ€” the distinction between a raw Discord message, a stitched reply (one narrative turn), and a scene (a Discord thread). This separation is the foundation everything else stands on.
๐ŸŽญA complete seed world was created โ€” a test server, two writers, two characters, one pairing, and both a Nitro and a Tupperbox location, so the system had something real to run against.
๐Ÿ”งFour smoke tests proved the database alive โ€” a single message moving end to end, a multi-reply scene, true message stitching, and the full Tupperbox path all passed.
๐Ÿ”งThe Python ingestion engine was built โ€” canonical filtering, writer and character resolvers, the stitching continuity engine, and the processor that orchestrates them.
๐Ÿ”งFirst live ingestion succeeded โ€” a real Discord message was received by the bot, resolved, accepted as canonical, and stitched into a reply. The system was no longer a lab prototype.
๐Ÿ”งThe Oracle VM environment came online โ€” database connectivity, the repository layer, and the live bot connection all validated on the actual hardware.