refactor(registry): split license into own lexicon, replace website/repoUrl with links[], add developerTool
Profile lexicon now stores outbound links as a `links[]` array of
`{kind, url, label?}` entries so the surface stays minimal and any new
link kind (donate, mastodon, matrix, discord, contact, …) is additive
without a new field. The previous `website`, `repoUrl`, and `openSource`
fields are removed.
License moves to its own record (`com.atmosphereaccount.registry.license`,
key=self) so the profile lexicon stays small and we can grow license
metadata independently. The form still presents both as a single Save
action; the API writes/deletes both records and the index joins them by
DID so badges keep working.
`developerTool` is now a recognised category. Categories use lexicon
`knownValues`, so adding more later remains a non-breaking change.
Other changes:
- New lib/link-kinds.ts: kind→icon/label resolver. `repo` defers to
detectRepoHost() so GitHub/Tangled branding still surfaces.
- pds.ts gains a generic deleteRecord() for the license sibling record.
- registry.ts: profile rows now carry a `links: LinkEntry[]` and
optional joined `license`. New upsertLicense / deleteLicense /
getLicenseByDid helpers; deleteProfile cascades to license.
- worker/indexer.ts subscribes to the license collection too.
- Form: dynamic links editor (add/remove/inline kind picker) and a
collapsed license section with type/SPDX/url/notes.
- Wipe script drops the new license table.
The Turso index has been wiped to drop legacy columns; lib/db.ts will
recreate the schema on first request.
Made-with: Cursor