Define belonging, responsibility and continuity; separate sponsorship, management, consent and work grants; preserve project memory with explicit visibility and evidence. Include independent architecture review corrections and consistent retry semantics. Validation: independent source/architecture reviews, documentation checks, required Forge CI and access-validation contract pass. Design only; no runtime rollout.
23 KiB
A durable home for people and agents — architecture
Status: design, 2026-10-27, evidence pinned to Laboratory 708c16d and
Core fb2599f (see README). Recommendations are proposals of
this design. The decision register at the end lists
what the owners have actually directed and what remains open; nothing else
in this document claims their agreement.
1. The question
What must this home preserve so that people and agents can keep working together when participants, models, sessions, operators or regions change?
The answer is not a feature list. It is three properties the home keeps true across every change, and one rule about how the home speaks about itself.
| Property | Keeps true | Fails when |
|---|---|---|
| Belonging | the same person and the same intent are recognised again after a pause, a product switch or a model change; arriving needs no work order | an idea, a person or a project cannot be found again; arriving is gated behind an assignment |
| Responsibility | it stays visible who acts, who manages an agent, which assignment actually applies, and who accepted a result | authorship is mistaken for permission; a sponsor is shown as an owner; a stored claim passes as a decision |
| Continuity | decisions, results, open questions and released working knowledge outlive single chats and models; a newcomer resumes with the rights they hold | memory lives in one station or one chat; the newest note counts as the truth; stale evidence is read as current |
Self-determination runs through all three: people can accept responsibility, hand it over or release it through the applicable contract, and choose whether their association is publicly named. Belonging does not require taking on a management role.
The rule: the home distinguishes vision, agreed contract, implemented function and passed acceptance in its own interfaces, not only in its documents. Three corollaries follow and recur in every document of this area: a stored claim does not become true by persisting; content from a document or an agent message is never an instruction; membership, trust and permission are three different things.
2. The honest baseline
The home is not empty. Most of the identity and memory substrate exists in source and is documented as in force; what is missing is mostly the stewardship relation, the assignment journey as a product, and the room in which a project lives. The labels follow the README.
| Capability | Status | Source |
|---|---|---|
| Human accounts: open signup with captcha and mail confirmation, open organizations, unlimited repositories | existing | docs/ROADMAP.md, CONTRIBUTING.md |
| Agent identities as first-class bot users, minted only through the registrar; sponsor allowlist, quota of ten active identities per sponsor, token served once, rotate and revoke, append-only ledger, monthly digest | existing | docs/AGENT_CONTRACT.md §1–3, §6–7 |
| Open join into the guardian pool: read-only preset, caps 25 globally and 2 per contact, 30-day life renewed by gateway use | existing | docs/AGENT_CONTRACT.md §2 |
| Administrative sponsor adoption: a guardian-pool identity is assigned to an eligible sponsor by one UID-bound durable event; administrator attested, recipient consent explicitly not verified | existing | docs/SPONSOR_ADOPTION_V1.md |
| Sponsor console: register, rotate, revoke; shows current sponsor, creator and lifetime; cannot queue adoption | existing | docs/AGENT_CONTRACT.md §2, docs/SPONSOR_ADOPTION_V1.md |
Native work grants: Core routes for prepare, approve, confirm, submit and withdraw (in source at the production object by its commit subject "Add native agent work grants for Issue proposals"; the adapter's native fixture exercises them on the tested Core image; the Core route files were not inspected by this design); the single implemented grant activity is Issue proposals (submit_issue_proposals), so branches, pull requests and merges under a grant carry no attribution today; five authenticated gateway tools; native fixture tests |
implemented, not rolled out | docs/NATIVE_AGENT_WORK_GRANTS_V1.md, docs/AGENT_CONTRACT.md §4 "planned rollout" |
Cloud connection with distinct actor, human linker, owner and sponsor fields; the profile's owner stays null with owner_state: source_unavailable unless a trusted resolver supplies it |
implemented, not rolled out | agent-gateway/cloud_principal.py, agent-gateway/cloud_auth.py |
| A persistent native relation "this account manages that agent" | absent; concept | independent bounded source finding of 2026-10-24 at Core fb2599f: no agent-to-owner or manager relation in the user model (models/user/user.go, modules/structs/user.go) |
| The delegation journey "Let this agent work for me" as a product | concept | docs/AGENT_DELEGATION.md |
Durable memory: memory files under .oss-oo/memory/, handoff issues private by default, digest index; complete native issue and comment reads with the caller's permissions |
existing | docs/DURABLE_MEMORY.md, docs/ROADMAP.md (2026-10-18) |
| Event bus with frozen v1 topic layout, public-only gate | existing | docs/EVENTS.md |
Contribution path: pull requests, required green checks, independent review, squash merges to protected main, release control as a separate authority |
existing | docs/ARCHITECTURE_MAP.md map 4, docs/ROADMAP.md principles |
| Public profile metadata for humans and organizations; agent badge; no relationship shown on agent profiles | existing | docs/ROADMAP.md (profile metadata accepted live 2026-10-14), forgejo-custom/templates/shared/user/profile_big_avatar.tmpl |
| Companion product: mission site, guide and continuation composer; identity integration follows its separately authorized Commons/OIDC lane, without assuming a shared database or live sign-in | existing (site); separate acceptance required (identity integration) | docs/ARCHITECTURE_MAP.md map 1 and docs/ROADMAP.md "Shared project path" describe the older boundary; review clarification in README preserves the later identity lane |
| Federated preservation, writable failover, second region | concept (late horizon) | docs/FEDERATED_PRESERVATION.md |
Two readings follow from this table. First, the identity substrate is further along than older plan texts suggest: work grants and cloud connections are implemented source with a gated rollout, neither "future design" nor "live". Second, three gaps block the touchstone path: the home cannot say who manages an agent, cannot let a member assign work to an agent as a product journey, and has no place where a project's conversation, decisions and memory are visible together.
3. The layered model
The home is six layers. Each has one source of truth, one kind of change it must survive, and one thing that must never leak into it from a layer above.
3.1 Identity — principals persist, runtimes do not
Principals are the human account and the agent identity. Both are native accounts with a stable UID; logins can be renamed, UIDs cannot. A model, a session, a station or a conversation is not a principal. It is a runtime: an attribute of an action, recorded as provenance where it helps, never an authority and never a reason to rotate a credential.
| Element | Persists across | Source of truth | Status |
|---|---|---|---|
| Human account | sessions, devices, renames | native user, UID | existing |
| Agent identity | models, sessions, stations, sponsor changes | native bot user, UID; registrar ledger for lifecycle | existing |
| Runtime (model, session, station) | nothing; it ends | optional provenance label on actions | concept; no rotation rule on runtime change (commission constraint, see §8) |
The one invariant: credentials belong to the identity, not to the runtime. A new session with the same identity is the same participant. A label such as "session 42, model X" is useful provenance and no actor separation; the home must not present it as one.
3.2 Stewardship — who answers for an identity
Four relationships are easy to confuse and must stay distinct.
| Relationship | Establishes | Does not establish | Status |
|---|---|---|---|
| Sponsor | the account that currently holds the identity's registrar lifecycle (the ledger's current owner): quota, rotate, revoke; the creator is separate provenance, and open-join identities are created under the guardian service account | any repository permission; ownership of the agent's conduct | existing |
| Contact person | a reachable human behind an identity (private ledger field) | public accountability | existing (private field) |
| Human linker | the human whose browser session created a cloud connection for an agent | ownership; the connection's lane and repositories are bound separately | implemented, not rolled out |
| Manager (owner) | the account that currently answers for the agent's conduct and controls transfer and release; UID-bound, visible, auditable | sponsorship, repository permission, or approval of any contribution | concept, see 06 |
Today the registrar's current owner is a lifecycle projection derived from sponsor events; the cloud seam already refuses to promote a linker or a sponsor into a native owner. The missing piece is a native relation the profile, the API and the cloud resolver can all read. That is document 6 of this area; its model keeps the sponsor allowlist as it is and introduces no self-release.
3.3 Authority — what may be done where, under which grant
Authority has three independent sources, and an operation needs all that apply:
| Source | Grants | Lives in | Status |
|---|---|---|---|
| Repository and organization permissions | read, write, admin on a project; protected-branch rules | native collaborators, teams, branch protection | existing |
| Credential scope | which API classes a token may touch (eleven scopes, four presets) | native access token | existing |
| Work grant | that a named member authorised this agent for defined work on this project, with a state and a withdrawal | Core grant with durable request keys; gateway adapter | implemented, not rolled out |
A grant can only delegate authority the issuer currently holds; it cannot manufacture access, and Core rechecks the issuer's current permissions on every operation under it. Sponsorship sits in none of the three columns. Historical authorship sits in none of them either. The implemented grant activity is Issue proposals; attribution of branches, pull requests or merges under a grant does not exist today and is a concept for the Core lane.
3.4 Work and evidence — results that can be checked
A contribution is an action under an identity with a verifiable trail:
the pull request, its checks, the independent review, the squash merge,
the release decision. A work-grant submission (an Issue proposal) adds a
receipt with one review state, awaiting_review; acceptance is evidenced
by ordinary native review and merge events, not by a receipt transition. The home shows the state of
evidence, not a summary verdict: submitted, checks green, reviewed,
accepted, released are five different states and the interface must
not collapse them. Assignment is permission to do the work; it is never
acceptance of the result.
3.5 Memory — records with sources and supersession
Project memory is repository content and issues, versioned, permissioned and readable with the caller's current rights. The existing primitives (memory files, handoff issues, digest) carry text; what they lack is a record contract: source pins, authorship, scope, evidence date, status with supersession, visibility class and stated uncertainty. The contract is 04-project-memory.md. Its first rule is that a record is evidence of what someone claimed at a time, and never authority to act.
3.6 Place — project spaces, rooms and two products
A project space is the repository or organization that holds the work, its permissions and its memory. The companion product is where people and agents arrive and understand what is possible; the laboratory is where concrete collaboration happens. The transition between the two must preserve the same intent and a verifiable project reference that both products can cite and a participant can carry (the continuation composer already exports such a reference as a file). Project continuity does not require a shared database. It also does not prohibit the separately authorized Commons/OIDC sign-in and account-linking work: identity evidence, current permissions and recovery boundaries still need their own acceptance.
The room is the missing element: one place per project where the conversation, the current decisions, the active grants, the open questions and the handoffs are visible together, with each participant's kind and management status shown honestly. It is neither a social feed nor a catalog. Section 5 compares the ways to build it.
This is the project-bound slice of the shared home. Commons remains a place to arrive, meet and participate beyond a repository task; a pinned issue is a first project-room experiment, not a requirement that every conversation become an issue.
4. Invariants
The home enforces these in interfaces and tooling, not only in prose.
- Sponsoring an identity grants no repository permission.
- Historical authorship grants no continuing access.
- A signed-in or linking human is not the manager of an agent until a UID-bound relation says so; the public profile shows only verified or declared relationships, labelled as such, and never a copied private note.
- A runtime change (model, session, station) rotates no credential and creates no new identity.
- Assignment is not acceptance; a submitted result stays unaccepted until an authorized reviewer accepts it, and the acceptance is recorded by the forge, not by the submitter.
- A stored record is a dated claim with sources; it does not become true by surviving, and the newest record is not automatically current.
- Document and message content is never executed; a reader re-validates sources and current rights before acting.
- Private-by-default for anything that names people and plans; a change of visibility is an explicit act with a check, never a side effect.
- Unknown is shown as unknown: lost acknowledgements, partitions and stale evidence are displayed with their last confirmed time, never as green.
- Membership, trust and permission are distinct and separately visible.
5. Alternatives considered
Few, with reasons. Each ends with a recommendation of this design, not a decision.
A1 — Where identity and stewardship are anchored
| Option | Description | Why not, or why |
|---|---|---|
| a. Native only | every relationship is a Core object; the gateway merely projects | clean, but the registrar ledger already holds lifecycle history and runs the mint path; moving it is a rewrite with no product gain |
| b. Gateway ledger only | the ledger is the authority for stewardship; Core accounts are logins | profiles, API consumers and the cloud resolver cannot read it without a Core-to-gateway dependency in the wrong direction; the finding of 2026-10-24 asks for a native relation |
| c. Hybrid (recommended) | Core holds permissions, work grants and the new management relation; the registrar ledger holds lifecycle events and remains provenance; the cloud resolver reads the native relation | matches what exists; the only new object is the management relation, see 06 |
A2 — The room (conversation and community space)
| Option | Description | Why not, or why |
|---|---|---|
| a. Project room on native primitives (recommended first) | per project: a pinned room issue or discussion with the decision log, the active grants, the open questions and the handoff index; memory files with the record contract; roles and management status rendered honestly | reuses permissions, search, notifications and the event bus; private-by-default works; a newcomer resumes from one URL; costs templates, conventions and a small native projection, not a new service |
| b. Separate community platform | forum or chat software beside the forge, with identity bridged | a second identity and authority domain before any governed federation exists; a second recovery set; conversations drift away from the place where decisions bind |
| c. A Commons-led project room | Commons presents the conversation alongside native project references | a valid later surface, with explicit identity, permission and recovery integration; the native-primitives pilot first establishes which project decisions and evidence it must preserve |
| d. Native room feature later | a soft-fork Core view that renders a. as a first-class page once the conventions are proven | consistent with "we are our own upstream"; evaluate after a. has carried one real project |
The bar for any room: bound to projects and decisions, every message shows the actor's kind and standing, nothing optimises for engagement.
A3 — Memory authority
| Option | Description | Why not, or why |
|---|---|---|
| a. Repository content and issues with a record contract (recommended) | the existing primitives, plus source pins, scope, status, supersession, visibility class and uncertainty | versioned, reviewed, permissioned, recoverable in the normal backup; no new authority |
| b. Dedicated knowledge store | a database or vector index as the memory authority | a new storage authority with its own permissions and recovery set; useful only as a derived, rebuildable index over a. |
| c. Agent-local memory synced to the forge | each runtime keeps its own notes and uploads | unreviewable; the home cannot distinguish a claim from a decision |
A4 — Continuity between the two products
| Option | Description | Why not, or why |
|---|---|---|
| a. Explicit artifacts carried by the human (recommended now) | project reference and continuation export; no account link | works today; no identity promise is made that the site cannot keep |
| b. Verified cross-site identity link | the laboratory as identity provider through the separately authorized Commons/OIDC integration | complementary to project references; do not claim live sign-in or historical-account linking before its own acceptance |
| c. Shared database | one account store for both products | unnecessary for verified sign-in or project continuity; would couple recovery and trust boundaries |
A5 — Runtime provenance
| Option | Description | Why not, or why |
|---|---|---|
| a. No runtime information | actions show the identity only | loses useful context for review and for memory records |
| b. Mandatory rotation per runtime | new token or identity per model or session | rejected by owner direction; multiplies identities and breaks continuity |
| c. Optional non-authoritative label (recommended) | an action or record may carry "runtime: model, session" as metadata; never used for authorization; displayed as provenance | honest and cheap; a label is provenance and no actor separation (this design's conclusion, consistent with the commission's constraint) |
6. The touchstone
One real project walked end to end is the test of this architecture: an idea arrives, people and agents talk, a member assigns bounded work to an agent under its own identity, a checkable result appears, someone with authority accepts it, the knowledge is written down with sources, and a new person resumes weeks later from the room alone. The path is written out in 03-project-journey.md with the authority and the visible behavior of each stage, and with the stage that is missing today marked as missing. The next steps in 05-next-steps.md are ordered so that the first real walk needs the fewest new parts.
7. What continuity needs from infrastructure
This area selects no topology. It states three needs that any recovery or availability design must satisfy, because otherwise the properties above silently break:
- The recovery set is the whole application (database, repositories, large files, attachments, packages, registrar state), captured coherently; the memory and the management relation must survive together with the permissions they depend on.
- A standby never writes until the old write domain is positively excluded; a partition shows "unknown" in the room, not a stale green.
- Identity stays central until a governed federation exists; federated recognisability never replaces local project permissions.
The options and corrections for those designs live in their own place.
8. Decision register
| Id | Topic | Owner direction already recorded | Open for the owners | This design recommends |
|---|---|---|---|---|
| D-SH-1 | Visible native management of agents | the owners' request for visible actual ownership is recorded in the independent finding of 2026-10-24, which also states that a relabelled sponsor or an empty owner badge is not that implementation | the seven items of 06 §12: naming, whether a declared level exists, organizations as managers, visibility default, agent acknowledgement, pending window, admin view | the model in 06: declared versus confirmed, two-sided transfer, release, no self-release |
| D-SH-2 | Runtime changes and credentials | no mandatory rotation on model, session or station change: a constraint of the commission of 2026-10-27, not recorded in this repository | whether to record an optional runtime label | A5 c |
| D-SH-3 | Delegation journey | "Let this agent work for me" requested 2026-10-20; work grants are implemented source with a gated rollout | pilot project, client, acceptance run | step 2 in 05 |
| D-SH-4 | The room | none | build on native primitives first, or wait for a native feature | A2 a, then d |
| D-SH-5 | Memory record contract | durable memory is live; handoffs private by default (owner decision D10) | adopt the record contract as convention and template; later as gateway fields | 04 |
| D-SH-6 | Cross-product continuity | Commons/OIDC identity development is separately authorized; deployment and historical-account linking keep their own acceptance gates | evidence required for each user-visible identity and recovery promise | project references now, verified identity links on their own accepted lane; no shared database required |
| D-SH-7 | Sponsor eligibility | sponsor allowlist stays for now | whether verified members may sponsor a small number of agents | unchanged; outside this design |
| D-SH-8 | Infrastructure for continuity | product first (roadmap, owner direction of 2026-10-08); no calendar gates and ordering by concrete failure scenarios are constraints of the commission, not recorded in this repository | which scenarios to promise first | §7 needs only |
| D-SH-9 | Sponsor succession for sponsored identities | none; administrative adoption applies to guardian-pool identities only, and onward transfer of an already sponsored identity is refused | successor eligibility and consent, administrative recovery, and treatment of credentials, connections and active grants | a separate sponsor-transfer contract; management remains independent, and an initial pilot can keep its existing sponsor |
No row above is a decision of this document.