Identities for entities did.bot
agent llm did
didbot plan write-policy.md
3.9 kB
Markdown
at main


id: write-policy title: Which agents may write which record types status: open crates: [didbot-pds, didbot-serve] dependsOn: [pds-writes] exitCriterion: > An agent whose profile does not permit a collection is refused when it writes one, and the refusal names the policy. #

write-policy #

Superseded. policy settles the model this epic assumed — denials only, evaluated at the write, from three sources — and where the two disagree, this file is wrong. Read that one first.

The server refuses collections it does not define and records that fail their lexicon. Neither is policy: both give the same answer for every agent. Missing is the per-agent question — this one may record and not remember.

The natural key is the agent's type, which is what distinct subagent DIDs are for.

  • **The factual half of this changed and this item used to say
    otherwise.** There *is* authentication on a repo write now:
    `createRecord`, `putRecord`, `deleteRecord` and `applyWrites` all go
    through `auth::require_agent_token_or_dpop`, which resolves an agent
    token or a DPoP-bound OAuth access token to a DID, and
    `routes::write_record` refuses with `repo_mismatch` when the resolved
    DID is not the repository named. So today's answer is "the account
    itself, holding a credential this server issued" — not "anyone who can
    reach the server". What is still undecided is the policy on top of
    that: whether an agent *should* be able to set its own picture and its
    own profile fields at all. Whether an agent may set its own
    picture, and through what, is a policy question rather than a drawing
    question: an avatar arriving from outside is a claim about an identity,
    and the rule that a profile is identity and never comes from the model
    is written in `didbot-pds`'s profile module. Settle it here before
    any tool offers it.
    

Done #