Renames the project and makes it as easy to adopt as BitLogin, which was the stated bar and which it did not previously meet. Rename (ADR 0005): @nostr-governance/* -> @bitgate/*, governance-* elements -> bitgate-*, createGovernanceRuntime -> createBitGate. "Governance" reads as DAO voting to this audience and named a category rather than a product; BitGate names the benefit and joins the bit- family that BitVid and BitRoad compose with. Domain types keep their names — the product is BitGate, the subject matter is still governance. The migration plan is left as written; this ADR records the change rather than rewriting history. Drop-in distribution (ADR 0006): adopting BitGate meant supplying a transport, authoring a policy, and wiring every element in JavaScript. Now: - createRelayTransport(urls) — WebSocket transport with reconnection, backoff, subscription replay, and cross-relay dedupe - policy presets (social, commerce, admin-only) addressable by name; the engine still carries no thresholds of its own - <bitgate-provider> — configuration in markup, with descendants finding the runtime through a bubbling context event rather than DOM walking, which breaks across shadow boundaries - npm run build:widget — a self-contained dist/bitgate.js That last one came from running it in a browser rather than from a test. Bare specifiers resolve in Node and vitest but not in a browser, so the widget source worked everywhere except a plain static page — the one place it exists to serve. The bundle is not committed: consumers build from reviewed source. Also found by running it: the provider's ready event fires during element upgrade, before a page that defines elements after parsing can attach a listener, so it now exposes `ready` as a promise too. Four bugs fixed along the way, three found by new tests and one by the browser: admin state stayed silent when a roster change altered capabilities but no denials; the relay transport sent every subscription twice on connect; the commerce preset computed a meaningless visibility verdict at checkout and could hide a listing from its own seller; <bitgate-status> threw on an unusable decision. 759 tests; lint, typecheck, and both builds clean.
2.2 KiB
ADR 0005 — Rename to BitGate
Status: accepted (supersedes the repository-name decision in §5.1 of the migration plan)
Context
The project shipped as nostr-governance, a name chosen while it was still a
specification exercise. Three problems emerged once it became a product.
"Governance" means something specific and different to this audience. In Nostr and crypto circles it reads as DAO voting and token-weighted proposals. The project is a moderation and access-control policy engine; the word misdirects.
It named a category rather than a product. It could not be verbed, and it gave no signal that BitVid and BitRoad compose with it.
It named the mechanism rather than the benefit. The sibling project BitLogin is not called "Nostr Portable Auth" — it is called BitLogin, because login is what people want.
Decision
Rename to BitGate, joining the existing bit- family (BitVid, BitRoad,
BitLogin, BitUnlock). Gates open and close, which maps onto the allow/deny
ladder, and "gate your app" is a natural verb.
- npm scope:
@nostr-governance/*→@bitgate/* - custom elements:
governance-*→bitgate-* - custom events:
governance:*→bitgate:* - storage key prefix:
nostr-governance:→bitgate: - consumer entry points:
createGovernanceRuntime→createBitGate,defineGovernanceElements→defineBitGateElements
Domain vocabulary is unchanged. GovernanceDecision, GovernanceTarget, and
GovernanceRuntime keep their names: the product is BitGate, the subject
matter is still governance.
The migration plan and the .hermes execution plan are left as written. They
record decisions as they were made; this ADR records the change rather than
rewriting history.
Consequences
Done at 0.1.0, unpublished, with no external consumers — the cheapest this could ever be. The storage key prefix changed, which would have invalidated caches had anything been deployed.
The bit- prefix signals membership in one author's suite, which is a mild
cost for infrastructure intended for wider adoption. BitLogin carries the same
cost and it has not hurt it; the composability signal is worth more, especially
since BitLogin and BitGate are designed to be used together.