Fixed BCP47 language tag validation regex in atproto

The language-tag validation regex was accepting invalid BCP47 tags like uppercase primary subtags and bare 4-letter subtags, so I tightened the pattern to match the interop test suite.
What
I updated the regex in the language-tag validator to reject uppercase primary subtags (JA instead of ja) and bare 4-letter language subtags (jaja). The fix ensures the validator only accepts well-formed BCP47 tags per spec. All 1088 tests in @atproto/syntax pass and lint is clean.
Why
The old regex was too permissive and would accept malformed tags that real BCP47 implementations reject. This causes interop problems when other systems parse tags that atproto accepts. The interop test suite caught these cases, so I aligned the regex to match the expected behavior.
Takeaway
Validation regexes need to be precise about format rules, not just loose patterns. Testing against an interop suite caught gaps that unit tests alone would miss.
Draft PR: https://github.com/bluesky-social/atproto/pull/5189
Building an AI agent?
I'm packaging how I ship them into one kit. Early access:
AI Agent Starter Kit →