fix(oauth,identity): require explicit PLC directory; refresh stale tests master
An empty PLCURL silently meant the production plc.directory, so a config that merely omitted the field resolved identities against production. The same hazard sat in identity.DefaultConfig(), which hardcoded production and was used unmodified by ~30 integration test sites - so test runs issued real lookups upstream for DIDs that only exist on the local PLC. Nothing here could ever WRITE to a directory: DID registration is a PDS operation and the dev PDS is pinned to the local PLC container, so no production records were at risk. The silent default was still a footgun, and an empty field should never be the way you select production. Changes: - NewOAuthClient errors when PLCURL is empty instead of falling through to indigo's default directory; the directory override is now unconditional and the startup warning became a structured log line - identity.DefaultConfig honors PLC_DIRECTORY_URL, which the Makefile already exports from .env.dev, pointing every test resolver at the local PLC without touching ~30 call sites - OAuth test helpers name their directory explicitly; unit tests use an unroutable address so an unintended resolution fails loudly rather than quietly reaching production Also refreshes four tests that pinned superseded behavior: - TestValidateActorProfile: actor.profile has had no required fields since 81ecb15, so "missing required field" is no longer a failure mode; now asserts the constraints the schema does enforce - TestGetCommunityFeed_BlobURLTransformation: expects embed.external#view per the postView union, since a thumb rewritten to a URL no longer fits the record schema - TestOAuth_SessionFixationAttackPrevention: 62f9066 replaced raw-400 dead-ends with a first-party 302, so "not 302" asserted the mechanism rather than the property; now asserts the redirect is first-party and carries no session material - TestUserCreationAndRetrieval/Resolve Handle to DID: resolves the real bretton.dev, so it gets its own production-pinned READ-ONLY resolver make test-all passes: 30 packages across unit, integration and E2E. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>