refactor(persona): one word for a persona [on hold — awaiting vocabulary] - #278
Closed
stormer78 wants to merge 3 commits into
Closed
refactor(persona): one word for a persona [on hold — awaiting vocabulary]#278stormer78 wants to merge 3 commits into
stormer78 wants to merge 3 commits into
Conversation
The identity pane called a persona DID a "face". Nothing else does: not the Trust Tasks spec, not the VTA, not the SDK, not `pnm persona binding set --persona-did`, not the console pane shipped this week, and not this repo's own `PersonaRecord` / `persona_ref` / `persona_did`. A holder moving between two of those surfaces had to translate, and translation is where a boundary gets misread. "Profile" was the other candidate and it is the one that would have hurt: it already names the thing a persona *presents*. Calling the DID a profile would have collided head-on with `persona/profile/*` — you bind a profile to a persona; the reverse is not a sentence. The word "persona" is genuinely overloaded — the task family spans the DID and everything above it — and "face" was an attempt to fix that by inventing a third noun. The overload is a prose problem with a prose fix: say "persona DID" where a sentence has to be unambiguous about which layer it means, exactly as `pnm`'s own help does. The pane's module header now states both words and the direction between them. `ContentPanelState::personas` becomes `identity`, so the list can take the name it should have had: `identity.personas` rather than `personas.personas`. That matches the menu entry, which has read "My Identity" since the pane landed — the pane is not only personas, and now the field says so. Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
The pane shipped unable to do most of its job, and the reason was an ACL scope nobody had connected to it. Setup provisions a context-scoped admin — `pnm contexts create --admin-did` writes `allowed_contexts: ["openvtc"]` — while the attribute pool, the profiles over it and the disclosure history are gated on an *unscoped* holder credential, because they sit above every trust context. So on every install the Attributes, Profiles and Disclosures tabs were refused, correctly, by a gate this client could not satisfy without becoming an administrator of every context on the agent. The command the setup page shows now ends `--admin-holder`, which grants the `persona-holder` capability alongside the context-scoped entry (verifiable-trust-infrastructure#1286). The entry stays scoped to its one context and gains authority over the holder's own identity — which is what a client that *is* the holder should have and an integration should not. It is not a way around the boundary; it is the grant the boundary was waiting for. For installs that already exist, the pane's refusal now carries the command instead of only the agent's (accurate, abstract) explanation. Matched on the phrase both the current and pre-capability VTA use, so an operator pointing at either gets the hint; matched on that phrase rather than on "forbidden", because a false positive sends someone to fix something that is not their problem. The command is now tested. It is pasted character for character into another terminal, and a mangled string literal — a run of spaces where a line continuation collapsed — is invisible in review and survives all the way to the operator's shell. One had already got in. Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
stormer78
marked this pull request as draft
September 7, 2026 11:16
Contributor
Author
|
Superseded by #280, which does this against The guess was half right and half backwards: The functional half — the ACL grant — is #279. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this was going to do
Rename the pane's "face" to persona, on the evidence that "face" appears
nowhere else in the ecosystem:
pnm persona binding set --persona-did"Profiles", "What each persona presents")
PersonaRecord/persona_ref/persona_didsurface/interface)Not "profile" — that already names the thing a persona presents. You bind
a profile to a persona; the reverse is not a sentence, and reusing the word
would collide head-on with
persona/profile/*.The overload "face" was invented to dodge is real — the
persona/*task familyspans the DID and everything above it — but it's a prose problem with a prose
fix: say "persona DID" where a sentence has to be unambiguous, exactly as
pnm'sown help does.
Also renames
ContentPanelState::personas→identity, so the list can take thename it should have had (
identity.personas, notpersonas.personas) — thatpart is independent of which noun wins, since the menu entry has read
"My Identity" since #277.
When the vocabulary lands
The sweep is mechanical (~112 occurrences, mostly prose) and I'll re-run it
against the agreed terms. Worth deciding at the same time: whether the menu
entry stays "My Identity", and whether the tab keeps the plural noun.