Skip to content

docs(persona): the on-screen word for an attribute is "attribute", not "fact" - #191

Merged
stormer78 merged 1 commit into
mainfrom
docs/persona-attribute-vocabulary
Sep 8, 2026
Merged

docs(persona): the on-screen word for an attribute is "attribute", not "fact"#191
stormer78 merged 1 commit into
mainfrom
docs/persona-attribute-vocabulary

Conversation

@stormer78

Copy link
Copy Markdown
Contributor

The persona vocabulary table translated attribute to fact on screen. That was wrong in two independent ways, and the console is where it showed.

It asserts what the model cannot promise. What a holder keeps here is self-asserted until a credential backs it, and the whole point of a face is that a person chooses what to show — an old value, a value pinned to a version, a value overridden for one context, or a value that is simply not true. The card said fact directly above the provenance line that said you said so.

And the word was already spent. fact is the VTC ceremony engine's term for a verified policy input (vtc-service/src/ceremony/facts.rs, Facts assembly, every .rego) — very nearly the opposite meaning, in the same product, which the table's own rule forbids.

The friendlier candidates fail that rule too: detail is the persona audit envelope's field (detail.reason), trait is a Rust keyword, entry names an entry in a face, value is the field inside an attribute. So the spec word comes to the screen and the table stops translating this one row. Truth is carried by the provenance beneath the value, never by the noun.

What changed

  • Identity map, editors, guided setup and the holder-gate caution say attribute; FactNodeAttributeNode, factIdsattributeIds, factReachattributeReach, kind: "fact"kind: "attribute".
  • The definition phrase is now the guide's: "Something you say about yourself, held once."
  • The vocabulary guard in manager-holder-gate.test.mts now bans fact and permits attribute, with the reasoning inline so it is not "fixed" back.
  • The step-up fixture follows the agent's card text — the matching VTI change (1 fact1 attribute) lands alongside in verifiable-trust-infrastructure.

Untouched on purpose: trust-graph.tsx / network-pane.tsx facts (a node's detail rows — a different feature), and ordinary English (after the fact, hides the fact that).

Companion changes: design-docs/persona-vocabulary.md (the table, plus a new Why not "fact" section) and the VTI branch of the same name.

Verification

tsc -b clean across workspaces; 309 extension tests and 548 core tests pass.

…t "fact"

The vocabulary table translated `attribute` to **fact** on screen. That was
wrong in two independent ways, and the console is where it showed.

It asserts what the model cannot promise. What a holder keeps here is
self-asserted until a credential backs it, and the whole point of a face is
that a person chooses what to show: an old value, a value pinned to a version,
a value overridden for one context, or a value that is simply not true. The
card said *fact* directly above the provenance line that said *you said so*.

And the word was already spent. `fact` is the VTC ceremony engine's term for a
*verified* policy input (`vtc-service/src/ceremony/facts.rs`, `Facts` assembly,
every `.rego`) — very nearly the opposite meaning, in the same product, which
the table's own rule forbids.

The friendlier candidates fail that rule too: `detail` is the persona audit
envelope's field, `trait` is a Rust keyword, `entry` names an entry in a face,
`value` is the field inside an attribute. So the spec word comes to the screen
and the table stops translating this one row. Truth is carried by the
provenance beneath the value, never by the noun.

- identity map, editors, guided setup and the holder-gate caution now say
  attribute; `FactNode`/`factIds`/`factReach`/`kind: "fact"` renamed with them
- the vocabulary guard in manager-holder-gate now bans `fact` and permits
  `attribute`, with the reasoning in place so it is not "fixed" back
- step-up fixture follows the agent's card text (VTI change lands alongside)

309 extension tests and 548 core tests pass; `tsc -b` clean across workspaces.

Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
@affinidi-appsecurity-bot

Copy link
Copy Markdown

🛡️ AI Agentic Security Code Review

🔎 A manual security review is recommended before merging. Please contact the Security team for specifics and remediation guidance.

ℹ️ Detailed findings are not published on public repositories; the Security team holds the complete report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants