ADR-0006: Bridged types in the artifactr namespace¶
Status: Accepted Date: 2026-09-29 Deciders: Alex Nodeland
Records decision D6 of stackr RFC-0002, the combined system.
Context¶
reflexr's event registry is process-global. With flat names, its own facts (run_started, feedback_given) would have collided with artifactr's event names once bridged. The design's draft proposed a prefix now and a rename later; D6 chose to settle reflexr's namespacing first, so that rules, including rules drafted in chat, never name a type that is later renamed. reflexr ADR-0039 settled it: every event type is namespace:name, and reflexr's own facts are reflexr:*.
Decision¶
- Bridged types are declared under a base with
event_namespace="artifactr", so each isartifactr:<type>:artifactr:message_postedartifactr:artifact_created,artifactr:artifact_changedandartifactr:artifact_archivedartifactr:proposal_createdandartifactr:proposal_resolvedartifactr:turn_ended, for artifactr'srun_ended, so that "run" means one thing inside reflexrartifactr:feedback_given
- An application's projections of its
app_events and artifact kinds publish its own types, in its own namespace. - Each bridged envelope's actor is
SourceActor("artifactr"), since relayr published it. The artifactr actor goes in anauthorfield, so rules can filter on who acted. - Phase 1 waited for reflexr #45, and starts now that reflexr #83 has implemented it.
Options considered¶
| Option | For | Against |
|---|---|---|
Prefix now (artifactr.message_posted), move to #45's namespaces later |
Works at once, since the registry accepted dotted names | A rename when #45 lands. Rules from chat name these types, so the move needs a mapping |
| Decide #45 first (chosen) | Right the first time: no rename, and no mapping for rules that name the old types | Phase 1 waits for a wire-format decision in reflexr |
Consequences¶
- Easier: a bridged type can never collide with reflexr's facts or an application's types, and its name is stable from the first release.
- Harder: in reflexr's registry, the
artifactrnamespace is relayr's, not artifactr's, and reflexr refuses any other base that declares it in the same process.