test(ingestion): RED cycle 1 — enablers + postv2/acceptance consumers master
Task 5a red gate. 33 failing tests, zero pre-existing breakage; the mechanical gates (test-audit, contract-manifest) are clean. A. Migration 036 enablers (T1, internal/db/postgres) deleted_accounts_schema_test.go: table shape (did PK, deleted_at NOT NULL, deleted_rev nullable); userRepo.Delete leaves the marker; the marker insert is IN the deletion transaction (probed via a rolled-back delete); repo.Create clears it on re-registration. admission_repo_schema_test.go: MigrateDownOne chain 36 -> 35 -> 34. B. post.getStatus (PRD rev 2.7) registration_test.go declares it a public GET (authNone) — the routes table is where "no auth middleware" is enumerable. getstatus_integration_test.go drives the real StatusService over the real admissions table: all five statuses, the fork case (same post, opposite decisions in two communities), 404 for an undecided subject, 400 for an incomplete subject. C. postv2 consumer (T1, internal/atproto/jetstream) author = event.Did; community from the record; pending admission with evaluated_cid; deleted-account gate drops without a dead letter; community immutability discards the WHOLE update event; unknown community stays redrivable; unknown author indexes anyway (§5.3); edit reopens an accepted admission; edit-while-removed is a skip, not an error; delete tombstones. D. acceptance/removal consumer + §5.4 direct fetch (T1) CID match accepts and stamps the (rev, put) tuple; replay leaves the row byte-identical; non-community repo is redrivable; removal carries its code; pre-emptive removal creates the row. Direct fetch: unindexed subject converges; CID mismatch and wrong-community record are PERMANENT refusals; oversized body errors; the SSRF guard refuses a loopback PDS by default (asserted behaviourally, not by field). Rule-7 stubs, zero logic: posts.StatusService, post.GetStatusHandler, jetstream.{DeletedAccountLookup,PostRecordFetcher,DirectPostFetcher} plus the three consumer options, postgres.DeletedAccountRepository. Migration 036 deliberately does NOT exist; WantedCollections untouched (GREEN's, and adding them is what turns the contract-manifest gate red for the T2 cycle). Also carries the conductor's PRD rev 2.7 status note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>