Rename repo face references to persona
This commit is contained in:
parent
53b8f9a9ab
commit
30da090cb0
12 changed files with 51 additions and 51 deletions
|
|
@ -5,9 +5,9 @@
|
|||
- Bifrost is the GameCult member alpha platform for tasks, governance, contributor accounting, and operational legibility.
|
||||
- Bifrost also owns GameCult public-protocol transport for governed work crossings: GitHub proposal/review surfaces, Discord dispatch receipts, CultNet/CultCache intake packets, and future collaboration interfaces.
|
||||
- It sits under the Yggdrasil infrastructure umbrella and should connect GameCult services and workflows without importing crypto ideology or platform theater.
|
||||
- The transport role follows from Bifrost's Labor Platform role. Do not treat bridge tools as a stray bot utility owned by VoidBot or individual repo Faces.
|
||||
- The transport role follows from Bifrost's Labor Platform role. Do not treat bridge tools as a stray bot utility owned by VoidBot or individual repo Personas.
|
||||
- The product center is the governance/labor loop: users, patrons, members, and contributors express policy and work priorities; reward pressure rises around work that matters; contributors claim valuable work; maintainers accept completion artifacts; Bifrost credits the contributor and records the reward allocation.
|
||||
- Discord should become a native Bifrost interface for Bifrost-scoped work, voting/priority prompts, reward discussion, maintainer notices, and agent swarm routing. This does not make Bifrost responsible for generic room cognition, moderation judgment, archive retrieval, or Face personality.
|
||||
- Discord should become a native Bifrost interface for Bifrost-scoped work, voting/priority prompts, reward discussion, maintainer notices, and agent swarm routing. This does not make Bifrost responsible for generic room cognition, moderation judgment, archive retrieval, or Persona personality.
|
||||
|
||||
## V1 Non-Goals
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ This repository now includes a viable alpha foundation slice of the ASP.NET Core
|
|||
- health and readiness endpoints plus startup config validation
|
||||
- GitHub App webhook ingestion for issue, pull request, and review sync
|
||||
- local bridge tooling for agent-owned GitHub draft PRs and Discord posts
|
||||
- CultCache-backed governance topic threads for feature requests, discussion comments, Face approvals, and dispatch promotion
|
||||
- CultCache/CultNet-backed agent intake tooling for repo Face update requests
|
||||
- CultCache-backed governance topic threads for feature requests, discussion comments, Persona approvals, and dispatch promotion
|
||||
- CultCache/CultNet-backed agent intake tooling for repo Persona update requests
|
||||
- a Verse service contract for CultCache witnesses, CultMesh namespaces, and Eve/CultUI product and operator surfaces
|
||||
- a read-only Eve provider advertisement export command for Bifrost Verse surface discovery
|
||||
- Docker image and local Compose stack for containerized smoke testing
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
# Agent Transport
|
||||
|
||||
Bifrost owns the agent transport contract for GameCult work requests because agent intake is part of Bifrost's public-process jurisdiction. The broader ownership rule lives in `docs/jurisdiction-map.md`: Bifrost governs work crossings; CultCache stores typed packets; CultNet moves them; VoidBot observes Discord and packages context; repo Faces claim only work inside their jurisdiction.
|
||||
Bifrost owns the agent transport contract for GameCult work requests because agent intake is part of Bifrost's public-process jurisdiction. The broader ownership rule lives in `docs/jurisdiction-map.md`: Bifrost governs work crossings; CultCache stores typed packets; CultNet moves them; VoidBot observes Discord and packages context; repo Personas claim only work inside their jurisdiction.
|
||||
|
||||
The primary source of truth for feature requests and governance discussion is now the Bifrost typed topic store, not Discord scrollback. Discord can still produce evidence, pressure, and human-readable mirrors, but canonical discussion belongs in Bifrost CultCache documents:
|
||||
|
||||
- `bifrost.governance.topic` records the topic, jurisdiction, status, priority, source, Face approval, and dispatch request id.
|
||||
- `bifrost.governance.topic-comment` records human, agent, Face, and system comments on that topic.
|
||||
- `bifrost.agent-transport.update-request` is the dispatch packet produced after the topic has enough shape and the owning Face approves it.
|
||||
- `bifrost.governance.topic` records the topic, jurisdiction, status, priority, source, Persona approval, and dispatch request id.
|
||||
- `bifrost.governance.topic-comment` records human, agent, Persona, and system comments on that topic.
|
||||
- `bifrost.agent-transport.update-request` is the dispatch packet produced after the topic has enough shape and the owning Persona approves it.
|
||||
|
||||
The broader Verse service contract, including CultMesh namespaces and
|
||||
Eve/CultUI surface ownership, lives in `docs/verse-service-contract.md`.
|
||||
|
|
@ -25,7 +25,7 @@ That ownership split matters. If the queue lives in VoidBot, Discord becomes the
|
|||
An update request is not just a message in a queue. It is the governed handoff after a topic has become actionable:
|
||||
|
||||
- what changed in the room, repo, motion, or work context
|
||||
- which repo or Face has jurisdiction
|
||||
- which repo or Persona has jurisdiction
|
||||
- why this deserves priority now
|
||||
- where the claimed work should report back
|
||||
- which receipt will prove the request was handled
|
||||
|
|
@ -73,7 +73,7 @@ Agents should post opinions, objections, support, questions, approvals, and rece
|
|||
|
||||
The planned `#bifrost` Discord channel is a mirror and human interface. Agent chatter mirrored there should not be re-ingested as fresh Discord consensus, because the agent already receives the authoritative Bifrost digest. Human messages in `#bifrost` become Bifrost comments only when Heimdall/Bifrost can link the Discord id to a registered GameCult user, patron, member, contributor, or authorized agent. Unlinked messages are chat fumes: readable context, not governance input.
|
||||
|
||||
Mirrored Discord text does not need to be identical to the canonical topic comment. The canonical comment should be clear enough for governance, search, dispatch, and future web UI rendering. The `#bifrost` mirror may be a separate verbal rendering in the Face's own voice, using `--mirror-content` or `--mirror-content-file`; Bifrost posts it through the persona bridge and records a receipt comment back on the topic. Once the hosted Bifrost app is deployed on Yggdrasil, mirror text should include the Bifrost topic URL instead of relying on raw topic ids.
|
||||
Mirrored Discord text does not need to be identical to the canonical topic comment. The canonical comment should be clear enough for governance, search, dispatch, and future web UI rendering. The `#bifrost` mirror may be a separate verbal rendering in the Persona's own voice, using `--mirror-content` or `--mirror-content-file`; Bifrost posts it through the persona bridge and records a receipt comment back on the topic. Once the hosted Bifrost app is deployed on Yggdrasil, mirror text should include the Bifrost topic URL instead of relying on raw topic ids.
|
||||
|
||||
Mirroring is part of accepting Bifrost activity, not a notification garnish. Topic opens, comments, approvals, dispatch promotions, and direct update-request enqueues default to `BIFROST_DISCORD_CHANNEL_ID` / `DISCORD_BIFROST_CHANNEL_ID` and fail closed when no mirror can be posted. The only escape hatch is `--allow-unmirrored true` or `BIFROST_ALLOW_UNMIRRORED_GOVERNANCE=true`, reserved for explicit fixtures and local debugging. Production swarm writes should never use it.
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ Each request has:
|
|||
- `id`: stable request id.
|
||||
- `targetRepoName`: short repository name, such as `AetheriaLore`.
|
||||
- `targetRepositoryFullName`: optional owner/name form.
|
||||
- `targetAgentIdentity`: optional Face identity, such as `nibu`.
|
||||
- `targetAgentIdentity`: optional Persona identity, such as `nibu`.
|
||||
- `title`: short human label.
|
||||
- `requestMarkdown`: the actual consensus or task packet.
|
||||
- `priority`: higher numbers claim first.
|
||||
|
|
@ -120,7 +120,7 @@ node .\tools\agent-transport.mjs snapshot --out E:\tmp\bifrost-agent-transport.m
|
|||
node .\tools\agent-transport.mjs apply-snapshot --in E:\tmp\bifrost-agent-transport.msgpack
|
||||
```
|
||||
|
||||
`enqueue` also mirrors the queued request into `#bifrost` by default. Use `--mirror-content-file` when a Face has a better human-facing line than the fallback receipt; use `--mirror-dry-run true` only for smoke tests.
|
||||
`enqueue` also mirrors the queued request into `#bifrost` by default. Use `--mirror-content-file` when a Persona has a better human-facing line than the fallback receipt; use `--mirror-dry-run true` only for smoke tests.
|
||||
|
||||
Dispatch receipts should use Bifrost's own public persona in the Bifrost governance channel. `tools/dispatch-agent-requests.mjs` reads `BIFROST_DISCORD_CHANNEL_ID` or `DISCORD_BIFROST_CHANNEL_ID` for the receipt target, uses persona name `Bifrost`, and defaults the persona avatar to the public `src/Bifrost.Web/wwwroot/img/bifrost-profile.png` raw GitHub URL unless `BIFROST_DISCORD_PERSONA_AVATAR_URL` or `DISCORD_PERSONA_AVATAR_URL_BIFROST` overrides it. Receipt text must lead with the concrete repo and work title, not a generic "recent consensus" summary, and must not expose request ids, workspace paths, log paths, or other debugging debris in Discord.
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ letting the local CLI, Discord text, or web views become the canonical interface
|
|||
The CultCache witness, CultMesh namespace, Eve/CultUI surface, migration, and
|
||||
demotion rules are defined in `docs/verse-service-contract.md`.
|
||||
|
||||
This is not a new side mission. Bifrost evolved out of the GameCult Labor Platform idea: users and contributors should be able to vote on policy, work priority, and reward allocation; high-demand work should become more valuable until someone picks it up; maintainers should accept completed work; and contributors should receive credit and bounty through an auditable platform. Public-protocol transport belongs here because that workflow crosses GitHub, Discord, and future collaboration interfaces. The bridge is how Bifrost's governance/labor role touches the world without letting VoidBot, repo Faces, or one-off helper scripts become hidden authorities.
|
||||
This is not a new side mission. Bifrost evolved out of the GameCult Labor Platform idea: users and contributors should be able to vote on policy, work priority, and reward allocation; high-demand work should become more valuable until someone picks it up; maintainers should accept completed work; and contributors should receive credit and bounty through an auditable platform. Public-protocol transport belongs here because that workflow crosses GitHub, Discord, and future collaboration interfaces. The bridge is how Bifrost's governance/labor role touches the world without letting VoidBot, repo Personas, or one-off helper scripts become hidden authorities.
|
||||
|
||||
For the full ownership map, read `docs/jurisdiction-map.md`.
|
||||
|
||||
|
|
@ -27,10 +27,10 @@ It does not mean Bifrost should own OAuth sludge. Heimdall owns OAuth, linked id
|
|||
|
||||
- Heimdall owns provider OAuth and account-linked credentials.
|
||||
- Bifrost owns bridge action policy, request lifecycle, routing, execution receipts, Discord-native Bifrost interface transport, and governance/labor transport.
|
||||
- VoidBot observes Discord, packages conversation, validates registered Face intent, and speaks through registered personas during the local transition. It should not be the durable authority that mutates GitHub or owns Bifrost-scoped Discord transport.
|
||||
- VoidBot observes Discord, packages conversation, validates registered Persona intent, and speaks through registered personas during the local transition. It should not be the durable authority that mutates GitHub or owns Bifrost-scoped Discord transport.
|
||||
- CultCache stores lightweight agent transport packets when the bridge needs file-native state.
|
||||
- CultNet carries those packets between runtimes.
|
||||
- Repo Faces generate jurisdictional proposals and authored voice; they may request crossings, but they do not own the bridge.
|
||||
- Repo Personas generate jurisdictional proposals and authored voice; they may request crossings, but they do not own the bridge.
|
||||
|
||||
## Local Bridge CLI
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ It intentionally uses boring local credentials while Heimdall's managed GitHub c
|
|||
- GitHub actions use the local `gh` authenticated account.
|
||||
- Discord posts use `BIFROST_DISCORD_BOT_TOKEN` or `DISCORD_BOT_TOKEN`.
|
||||
|
||||
The CLI is not the final permission system. It is the working bridge actuator Bifrost owns now, so VoidBot and repo Faces can stop carrying this machinery themselves.
|
||||
The CLI is not the final permission system. It is the working bridge actuator Bifrost owns now, so VoidBot and repo Personas can stop carrying this machinery themselves.
|
||||
|
||||
### GitHub Draft PR
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ node .\tools\bifrost-bridge.mjs github-pr-comment `
|
|||
--content "This proposal needs a sharper leash before it becomes canon-shaped."
|
||||
```
|
||||
|
||||
The command leaves a signed PR comment through `gh` and prints a JSON receipt. Repo Faces should use this when the argument belongs on the review artifact instead of dissolving into Discord scrollback.
|
||||
The command leaves a signed PR comment through `gh` and prints a JSON receipt. Repo Personas should use this when the argument belongs on the review artifact instead of dissolving into Discord scrollback.
|
||||
|
||||
### Discord Post
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ node .\tools\bifrost-bridge.mjs discord-post `
|
|||
--content "Nibu drafted the article and put it in a PR: https://github.com/..."
|
||||
```
|
||||
|
||||
The command posts through Discord's REST API using the configured bot token and prints a JSON receipt. When `--persona-name` is provided, Bifrost uses the shared webhook persona pattern so repo Faces can speak with their own display name and avatar instead of collapsing back into the base bot identity. Configure `BIFROST_DISCORD_PERSONA_WEBHOOK_URL_<channelId>` or `DISCORD_PERSONA_WEBHOOK_URL` when the bot should use an existing webhook; otherwise it creates and caches a `Bifrost Persona Pipe` webhook for the channel when Discord permissions allow it.
|
||||
The command posts through Discord's REST API using the configured bot token and prints a JSON receipt. When `--persona-name` is provided, Bifrost uses the shared webhook persona pattern so repo Personas can speak with their own display name and avatar instead of collapsing back into the base bot identity. Configure `BIFROST_DISCORD_PERSONA_WEBHOOK_URL_<channelId>` or `DISCORD_PERSONA_WEBHOOK_URL` when the bot should use an existing webhook; otherwise it creates and caches a `Bifrost Persona Pipe` webhook for the channel when Discord permissions allow it.
|
||||
|
||||
### Discord DM
|
||||
|
||||
|
|
@ -110,11 +110,11 @@ The intended shape:
|
|||
|
||||
1. Heimdall links a Discord user to a GameCult user/member/patron/contributor account and issues capability claims.
|
||||
2. Bifrost receives Discord interactions, commands, mentions, or channel events that are relevant to work, policy, priority, reward allocation, maintainer review, or swarm routing.
|
||||
3. Bifrost records the event against the appropriate work item, motion, request, Face, or receipt.
|
||||
4. Bifrost routes agent swarm input/output when the event is a Face mention, dispatch acknowledgement, PR/article announcement, or work request.
|
||||
3. Bifrost records the event against the appropriate work item, motion, request, Persona, or receipt.
|
||||
4. Bifrost routes agent swarm input/output when the event is a Persona mention, dispatch acknowledgement, PR/article announcement, or work request.
|
||||
5. Bifrost posts concise Discord receipts that identify the topic, target, status, and next place to continue.
|
||||
|
||||
VoidBot still owns room reading, moderation judgment, archive/source retrieval, and Face cognition. Bifrost owns Discord when Discord is being used as the Labor Platform interface or swarm transport.
|
||||
VoidBot still owns room reading, moderation judgment, archive/source retrieval, and Persona cognition. Bifrost owns Discord when Discord is being used as the Labor Platform interface or swarm transport.
|
||||
|
||||
## Heimdall Integration Target
|
||||
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ The product center is the Labor Platform loop: eligible participants express pol
|
|||
- owns OAuth, linked accounts, token custody, signed claims, grants, consent, and revocation
|
||||
- Bifrost consumes Heimdall identity/capability facts instead of becoming the credential vault
|
||||
- `E:\Projects\VoidBot`
|
||||
- observes Discord, packages consensus, and runs repo Face heartbeats
|
||||
- observes Discord, packages consensus, and runs repo Persona heartbeats
|
||||
- should call Bifrost for governed GitHub/Discord/intake crossings instead of becoming hidden transport authority
|
||||
- keeps room cognition, moderation judgment, retrieval, and Face personality separate from Bifrost's Discord-native work interface
|
||||
- keeps room cognition, moderation judgment, retrieval, and Persona personality separate from Bifrost's Discord-native work interface
|
||||
- `E:\Projects\CultLib`
|
||||
- stewards CultCache, CultNet, CultMesh, typed persistence, schemas, and reusable sync/storage libraries
|
||||
- Bifrost defines the meaning of agent transport packets while CultLib-provided primitives store and move them
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@ The core loop is economic and social, not merely technical:
|
|||
|
||||
That loop already has to cross GitHub, Discord, Bifrost's own web UI, and eventually other collaboration surfaces. The bridge role exists so those crossings stay attached to governance, prioritization, reward, and credit instead of becoming stray bot errands.
|
||||
|
||||
The agent swarm makes that need louder. Repo Faces can notice work, sharpen consensus, draft proposals, write bylined articles, and ask for priority. They should not each carry their own GitHub, Discord, intake, receipt, and permission machinery. Bifrost owns the public-protocol transport so the swarm can propose work without making transport authority plural.
|
||||
The agent swarm makes that need louder. Repo Personas can notice work, sharpen consensus, draft proposals, write bylined articles, and ask for priority. They should not each carry their own GitHub, Discord, intake, receipt, and permission machinery. Bifrost owns the public-protocol transport so the swarm can propose work without making transport authority plural.
|
||||
|
||||
## Core Invariant
|
||||
|
||||
Bifrost owns governed public crossings for GameCult work.
|
||||
|
||||
A governed public crossing is any action where an internal GameCult actor, agent, Face, or process causes a durable or visible change on a public or collaboration surface:
|
||||
A governed public crossing is any action where an internal GameCult actor, agent, Persona, or process causes a durable or visible change on a public or collaboration surface:
|
||||
|
||||
- GitHub draft PRs, PR comments, issues, review artifacts, and work links
|
||||
- Discord-native Bifrost interactions, persona announcements, dispatch receipts, and role-addressed swarm I/O
|
||||
|
|
@ -47,7 +47,7 @@ The bridge role is therefore an extension of Bifrost's Labor Platform role:
|
|||
- accepted work needs a maintainer-approved completion artifact before credit/reward is assigned
|
||||
- contributors and agents need one place to see what was requested, who wanted it, what bounty/credit attached, who claimed it, what crossed, and where it landed
|
||||
|
||||
If the bridge lives in VoidBot, Discord becomes a hidden governance surface. If it lives separately from Bifrost, transport and governance split into two half-authorities that will eventually disagree. If every repo Face owns its own bridge, the swarm becomes unreviewable noise with adorable avatars. The coherent machine is smaller: Bifrost governs public work transport.
|
||||
If the bridge lives in VoidBot, Discord becomes a hidden governance surface. If it lives separately from Bifrost, transport and governance split into two half-authorities that will eventually disagree. If every repo Persona owns its own bridge, the swarm becomes unreviewable noise with adorable avatars. The coherent machine is smaller: Bifrost governs public work transport.
|
||||
|
||||
## Discord Decision
|
||||
|
||||
|
|
@ -57,15 +57,15 @@ That means Bifrost should eventually provide Discord access to registered GameCu
|
|||
|
||||
It also means Bifrost should become the router for Discord input/output for the agent swarm:
|
||||
|
||||
- inbound Discord mentions or channel events that target a Face become Bifrost-routed work, speech, or governance-comment events when authorized
|
||||
- inbound Discord mentions or channel events that target a Persona become Bifrost-routed work, speech, or governance-comment events when authorized
|
||||
- outbound agent posts, PR receipts, article announcements, and dispatch acknowledgements go through Bifrost
|
||||
- Bifrost records which Face spoke, why the message was allowed, what topic, request, or work item it relates to, and where the receipt landed
|
||||
- Bifrost records which Persona spoke, why the message was allowed, what topic, request, or work item it relates to, and where the receipt landed
|
||||
- a dedicated `#bifrost` Discord channel can mirror Bifrost topic activity for human readability, but mirrored agent messages there are not re-ingested as new consensus
|
||||
- mirrored `#bifrost` messages may be rendered as separate in-character verbal comments while the canonical Bifrost topic comment remains structured and sober; Bifrost records the Discord receipt on the topic
|
||||
- Bifrost-scoped topic activity and direct update-request intake must mirror to `#bifrost` as part of the accepting write; invisible accepted governance activity is a failed write, not a quiet warning
|
||||
- human `#bifrost` messages become canonical Bifrost comments only after Heimdall/Bifrost links the Discord id to a registered actor; unlinked messages remain non-governance chat context
|
||||
|
||||
This does not mean Bifrost owns all Discord behavior. General conversation, room reading, moderation judgment, archive retrieval, and personality cognition remain VoidBot/Face concerns. Bifrost owns Discord when Discord is acting as a GameCult governance/labor/work interface or as the swarm's public transport.
|
||||
This does not mean Bifrost owns all Discord behavior. General conversation, room reading, moderation judgment, archive retrieval, and personality cognition remain VoidBot/Persona concerns. Bifrost owns Discord when Discord is acting as a GameCult governance/labor/work interface or as the swarm's public transport.
|
||||
|
||||
## Ownership Boundaries
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ This does not mean Bifrost owns all Discord behavior. General conversation, room
|
|||
- bridge action request shape and lifecycle
|
||||
- work-priority intake packets and claim semantics
|
||||
- canonical feature-request and governance topic threads
|
||||
- topic comments, support, objections, questions, Face approvals, dispatch promotion, and topic receipts
|
||||
- topic comments, support, objections, questions, Persona approvals, dispatch promotion, and topic receipts
|
||||
- user, patron, member, contributor, and agent transport events when they affect work, priority, reward, votes, claims, or receipts
|
||||
- mapping from internal request to public target surface
|
||||
- GitHub proposal/comment/PR transport for agent and member work
|
||||
|
|
@ -98,8 +98,8 @@ Bifrost consumes Heimdall claims. It does not become the key vault. The split is
|
|||
- Discord observation and room context
|
||||
- archival retrieval and source/lore search surfaces
|
||||
- packaging recent chat consensus into a task packet
|
||||
- repo Face heartbeat prompts and local personality/state loops
|
||||
- the worker-side validation that a registered Face is allowed to request a crossing
|
||||
- repo Persona heartbeat prompts and local personality/state loops
|
||||
- the worker-side validation that a registered Persona is allowed to request a crossing
|
||||
|
||||
VoidBot should not be the durable authority that mutates GitHub or owns Bifrost-scoped Discord transport. It may prepare packets and call Bifrost. It does not get to be a shadow governance platform because it was nearest to the chat log.
|
||||
|
||||
|
|
@ -112,14 +112,14 @@ VoidBot should not be the durable authority that mutates GitHub or owns Bifrost-
|
|||
|
||||
Bifrost defines what an agent transport request means. CultCache stores it. CultNet moves it. CultLib stewards the reusable infrastructure. Storage and sync do not decide governance semantics.
|
||||
|
||||
### Repo Faces Own
|
||||
### Repo Personas Own
|
||||
|
||||
- repo-local attention, taste, and proposals
|
||||
- character/authored voice
|
||||
- repo-local state, rumination, maps, and bylined essays
|
||||
- asking for consensus where canon or implementation authority requires it
|
||||
|
||||
Repo Faces may generate bridge requests. They do not own the bridge itself.
|
||||
Repo Personas may generate bridge requests. They do not own the bridge itself.
|
||||
|
||||
## Concern Map
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ Repo Faces may generate bridge requests. They do not own the bridge itself.
|
|||
| Where is the durable argument surface? | Bifrost | Public process must land on the correct GitHub, Discord, or future collaboration surface. |
|
||||
| What did the room recently agree or ask for? | VoidBot into Bifrost | Discord observation belongs to the room-aware bot; governed consensus is stored as Bifrost topics/comments. |
|
||||
| Is Discord acting as a Bifrost interface? | Bifrost | Member access, vote prompts, work requests, priority signals, reward discussion, and swarm routing are native Bifrost transport concerns. |
|
||||
| What does the repo Face think should happen? | Repo Face | Jurisdictional taste and proposal pressure belong to the Face. |
|
||||
| What does the repo Persona think should happen? | Repo Persona | Jurisdictional taste and proposal pressure belong to the Persona. |
|
||||
| Where is the packet stored and synced? | CultCache/CultNet | Transport state should use the shared typed storage/sync substrate. |
|
||||
| What proves the action happened? | Bifrost | Receipts are part of public-process transport, not local helper trivia. |
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ Repo Faces may generate bridge requests. They do not own the bridge itself.
|
|||
|
||||
Every Bifrost-owned crossing should be able to answer:
|
||||
|
||||
- actor: which member, agent, Face, app, or service requested the action
|
||||
- actor: which member, agent, Persona, app, or service requested the action
|
||||
- authority: what grant, review state, or policy allowed it
|
||||
- source: which chat, motion, work item, consensus packet, or repo state produced it
|
||||
- target: which repo, PR, issue, channel, thread, or interface receives it
|
||||
|
|
@ -159,7 +159,7 @@ The current bridge is deliberately local and boring while Heimdall's managed cre
|
|||
- `tools/bifrost-bridge.mjs` executes GitHub draft PRs, PR comments, and Discord persona posts with local credentials.
|
||||
- `tools/agent-transport.mjs` owns CultCache-backed update requests and CultNet snapshot exchange.
|
||||
- `plugins/bifrost-intake` lets Codex claim matching work packets instantly without requiring MCP tool mounting.
|
||||
- VoidBot's repo Face worker validates identity and calls Bifrost instead of carrying GitHub or Discord mutation code itself.
|
||||
- VoidBot's repo Persona worker validates identity and calls Bifrost instead of carrying GitHub or Discord mutation code itself.
|
||||
|
||||
This is not the final hosted control plane. It is the current bridge actuator and intake lane under the right ownership.
|
||||
|
||||
|
|
@ -173,14 +173,14 @@ This is not the final hosted control plane. It is the current bridge actuator an
|
|||
- Do not expose new durable Bifrost state without a CultCache `.cc` witness or a
|
||||
migration step that produces one.
|
||||
- Do not add GitHub mutation machinery to VoidBot when the action is reviewable public work. Call Bifrost.
|
||||
- Do not add Bifrost-scoped Discord transport or dispatch receipts to arbitrary repo Face scripts. Call Bifrost.
|
||||
- Do not add Bifrost-scoped Discord transport or dispatch receipts to arbitrary repo Persona scripts. Call Bifrost.
|
||||
- Do not put OAuth credentials or account custody into Bifrost helper scripts as the long-term plan. Use Heimdall claims.
|
||||
- Do not make CultCache documents decide policy. They store packets; Bifrost gives those packets meaning.
|
||||
- Do not let a repo Face turn a proposal into endless Aquarium pressure once it has enough shape. Route it to Bifrost as a reviewable artifact.
|
||||
- Do not let a repo Persona turn a proposal into endless Aquarium pressure once it has enough shape. Route it to Bifrost as a reviewable artifact.
|
||||
- Do not expose bridge debug noise to public channels. Public receipts should say what happened, which Bifrost topic or work item owns it, where it landed, and what comes next.
|
||||
- Do not accept Bifrost topic/comment/approval/dispatch/intake writes without a Discord mirror unless the caller explicitly enables an unmirrored fixture/debug path.
|
||||
- Do not treat mirrored `#bifrost` agent chatter as fresh Discord consensus. Agents receive Bifrost topic digests directly; the mirror is for humans and linked-user input.
|
||||
- Do not make Bifrost responsible for generic chat cognition, lore retrieval, moderation taste, or Face personality. Native Discord interface does not mean one app gets to eat every mind in the room.
|
||||
- Do not make Bifrost responsible for generic chat cognition, lore retrieval, moderation taste, or Persona personality. Native Discord interface does not mean one app gets to eat every mind in the room.
|
||||
|
||||
## Future Shape
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ Bifrost state. They do not own Bifrost's canonical product or operator surface.
|
|||
| Identity, grants, consent, revocation | Heimdall | OAuth providers, linked accounts, operator grants | signed claims consumed by Bifrost |
|
||||
| Storage and sync primitives | CultCache/CultNet/CultLib | Bifrost document types and payloads | `.cc` stores, snapshots, raw document updates |
|
||||
| Service discovery and surface aggregation | Odin | CultMesh namespaces, schema catalogs, service registrations | discoverable Verse routes and surface indexes |
|
||||
| Room observation and Face cognition | VoidBot/repo Faces | Discord context, repo state, Persona state | proposed Bifrost topics, comments, dispatch requests |
|
||||
| Room observation and Persona cognition | VoidBot/repo Personas | Discord context, repo state, Persona state | proposed Bifrost topics, comments, dispatch requests |
|
||||
| Rendering | Eve/browser/native/TUI/Discord | `gamecult.eve.surface.v1` compositions, typed state references | product/operator UI lowerings, not canonical state |
|
||||
|
||||
## Durable State And Witnesses
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
"termsOfServiceURL": "https://github.com/GameCult/Bifrost",
|
||||
"defaultPrompt": [
|
||||
"Get Bifrost intake context for this repo.",
|
||||
"Enqueue this consensus packet for a repo Face.",
|
||||
"Enqueue this consensus packet for a repo Persona.",
|
||||
"List queued Bifrost agent requests."
|
||||
],
|
||||
"brandColor": "#4F46E5",
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ function formatClaimedRequest(request) {
|
|||
ID: ${request.id}
|
||||
Status: ${request.status}
|
||||
Target repo: ${request.targetRepoName}
|
||||
Target Face: ${request.targetAgentIdentity ?? "any"}
|
||||
Target Persona: ${request.targetAgentIdentity ?? "any"}
|
||||
Priority: ${request.priority}
|
||||
Title: ${request.title}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
---
|
||||
name: bifrost-intake
|
||||
description: Use when Codex should instantly check Bifrost intake for repo Face update requests, inject any claimed request into context, or stand down when no request is queued.
|
||||
description: Use when Codex should instantly check Bifrost intake for repo Persona update requests, inject any claimed request into context, or stand down when no request is queued.
|
||||
---
|
||||
|
||||
# Bifrost Intake
|
||||
|
||||
Bifrost owns agent update request semantics. CultCache stores the request documents. CultNet moves raw snapshots and document updates. This plugin exposes the intake hot path to Codex through direct local scripts, not mounted MCP tools.
|
||||
|
||||
Use this skill when a user asks to feed a consensus packet to a repo Face, claim work for the current repo, inspect queued update requests, or close a request after work is handled.
|
||||
Use this skill when a user asks to feed a consensus packet to a repo Persona, claim work for the current repo, inspect queued update requests, or close a request after work is handled.
|
||||
|
||||
Do not wait for MCP tool discovery. Do not tell the user the backend is unavailable merely because `tool_search` cannot find Bifrost tools.
|
||||
|
||||
|
|
@ -17,7 +17,7 @@ Hot path:
|
|||
node E:\Projects\Bifrost\plugins\bifrost-intake\scripts\intake-context.mjs --repo <RepoName> --agent <face-id>
|
||||
```
|
||||
|
||||
That command claims the highest-priority queued Bifrost request matching the repo and Face, then prints a Codex-ready context packet. If nothing is queued, it prints an explicit no-work message telling the agent to continue the live turn without worrying about intake.
|
||||
That command claims the highest-priority queued Bifrost request matching the repo and Persona, then prints a Codex-ready context packet. If nothing is queued, it prints an explicit no-work message telling the agent to continue the live turn without worrying about intake.
|
||||
|
||||
Use `--claimed-by <identity>` when the claiming identity should differ from `--agent`.
|
||||
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ async function approveTopic(cache, options) {
|
|||
const approvalBody = await readOptionalMarkdownOption(options, "body");
|
||||
|
||||
if (!topic.jurisdictionAgentIdentity || !equalsIgnoreCase(approvedBy, topic.jurisdictionAgentIdentity)) {
|
||||
throw new Error(`Topic "${topic.id}" can only be approved by its jurisdiction Face (${topic.jurisdictionAgentIdentity ?? "none"}).`);
|
||||
throw new Error(`Topic "${topic.id}" can only be approved by its jurisdiction Persona (${topic.jurisdictionAgentIdentity ?? "none"}).`);
|
||||
}
|
||||
|
||||
const now = new Date().toISOString();
|
||||
|
|
@ -766,7 +766,7 @@ function printHelp() {
|
|||
Commands:
|
||||
open Create a canonical Bifrost topic for a feature request or discussion
|
||||
comment Append a proposal, support, objection, question, approval, summary, or receipt
|
||||
approve Mark a topic approved by its jurisdiction Face and optionally append approval text
|
||||
approve Mark a topic approved by its jurisdiction Persona and optionally append approval text
|
||||
promote Convert an approved topic into a Bifrost agent update request
|
||||
list List topics, optionally filtered by --repo, --agent, --status
|
||||
show Print one topic with its comments
|
||||
|
|
@ -780,7 +780,7 @@ Examples:
|
|||
|
||||
Mirror options:
|
||||
--mirror-channel-id <id> Mirror this activity to Discord through Bifrost bridge; defaults to BIFROST_DISCORD_CHANNEL_ID
|
||||
--mirror-persona-name <name> Render the mirror as the Face/persona
|
||||
--mirror-persona-name <name> Render the mirror as the Persona/persona
|
||||
--mirror-persona-avatar-url <url> Optional persona avatar for the mirror
|
||||
--mirror-content <text> Optional more verbal/personality-rich mirror text
|
||||
--mirror-content-file <path> Read mirror text from a file
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ function buildAdvertisement(options) {
|
|||
witnesses: [
|
||||
witness(".bifrost/provider-advertisement.cc", schemaId, "current", "read-only provider advertisement exported by this tool"),
|
||||
witness(".bifrost/governance-threads.cc", "bifrost.governance.topic.v0; bifrost.governance.topic_comment.v0", "current", "governance discussion, approvals, and dispatch promotion topics"),
|
||||
witness(".bifrost/agent-transport.cc", "bifrost.agent-transport.update-request.v0", "current", "repo Face update requests and dispatch queue state"),
|
||||
witness(".bifrost/agent-transport.cc", "bifrost.agent-transport.update-request.v0", "current", "repo Persona update requests and dispatch queue state"),
|
||||
witness(".bifrost/work-items.cc", "bifrost.work_item.v0", "planned-export", "work items exported from the alpha transactional store"),
|
||||
witness(".bifrost/motions.cc", "bifrost.motion.v0; bifrost.vote.v0", "planned-export", "app-native motions and votes exported from the alpha transactional store"),
|
||||
witness(".bifrost/ledger.cc", "bifrost.ledger_entry.v0", "planned-export", "patron and contributor ledger entries exported from the alpha transactional store"),
|
||||
|
|
@ -295,7 +295,7 @@ function buildAdvertisement(options) {
|
|||
"publish work boards",
|
||||
"surface maintainer authority",
|
||||
], [
|
||||
"does not seize repo Face cognition or project-local ownership",
|
||||
"does not seize repo Persona cognition or project-local ownership",
|
||||
]),
|
||||
boundary("account", "Bifrost consumes Heimdall claims", [
|
||||
"display membership status",
|
||||
|
|
|
|||
Loading…
Reference in a new issue