Skip to content

fix(manager): the guided setup dropped the holder's own visibility decision - #214

Merged
stormer78 merged 1 commit into
mainfrom
fix/setup-honours-visibility
Sep 9, 2026
Merged

fix(manager): the guided setup dropped the holder's own visibility decision#214
stormer78 merged 1 commit into
mainfrom
fix/setup-honours-visibility

Conversation

@stormer78

Copy link
Copy Markdown
Contributor

Reported from the live console: an attribute set to show it still rendered as ●●●● in "N attributes so far", with a Show button beside it.

Cause

One missing prop, at three call sites. Every AttributeValue in persona-setup.tsx passed type and value and never sensitivity, so treatmentFor fell through to the registry — and for an unregistered token like profile.github the registry's answer is the conservative floor, high/full.

The holder's answer existed, was stored, was returned by the agent, and was dropped on the way to the component.

This is the defect treatmentFor's own docstring records having fixed once already, arriving by a different route: there the decision lost to a fail-closed branch, here it never reached the function at all. AttributeValue documents that a surface holding a whole attribute should pass sensitivity — the guide held whole attributes and passed none of them.

onReveal is threaded in alongside, because without it a Show on a genuinely withheld value has nothing to call. The map and the list already had it; the guide never did.

Three tests, and the two that aren't the report matter as much

  • The reported case — a holder's show it on an unregistered token is legible. Asserted on the value being present, not on the mask being absent: "no bullets" would also pass if the value vanished entirely.
  • Absent is not a decision — an unregistered token the holder did not decide on stays masked, so this fix cannot quietly become "never mask".
  • §3.3 stays intact — a declared token (email.workemailLocal) keeps the registry's mask however the holder marks it, so the narrow unregistered exception does not widen into declared tokens.

Verified non-vacuous: removing the one prop again fails the first test with "the holder said show it and the guide hid it anyway".

extension 485/485.

…cision

Reported from the live console with a screenshot: an attribute set to *show
it* still rendered as ●●●● in "N attributes so far", with a Show button
beside it.

**One missing prop, at three call sites.** Every `AttributeValue` in
`persona-setup.tsx` passed `type` and `value` and never `sensitivity`, so
`treatmentFor` fell through to the registry — and for an unregistered token
like `profile.github` the registry's answer is the conservative floor,
`high`/`full`. The holder's answer existed, was stored, was returned by the
agent, and was dropped on the way to the component.

That is the exact defect `treatmentFor`'s own docstring records having fixed
once already, arriving by a different route: there the decision lost to a
fail-closed branch, here it never reached the function. `AttributeValue`
says a surface holding a whole attribute should pass `sensitivity`; the
guide held whole attributes and passed none of them.

**`onReveal` is threaded in with it.** Without it a *Show* on a genuinely
withheld value has nothing to call, and a button that cannot do what it says
is the same defect one step along. The map and the list already had it; the
guide never did.

Three tests, and the two that are not the report matter as much:

- the reported case — a holder's *show it* on an unregistered token is
  legible, asserted on the value being present rather than the mask being
  absent, since "no bullets" also passes if the value vanishes;
- **absent is not a decision** — an unregistered token the holder did not
  decide on stays masked, so the fix cannot become "never mask";
- **§3.3 stays intact** — a declared token keeps the registry's mask however
  the holder marks it, so the narrow unregistered exception does not widen.

Verified non-vacuous: removing the one prop again fails the first test with
"the holder said show it and the guide hid it anyway".

extension 485/485.

Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
@stormer78
stormer78 merged commit 209010b into main Sep 9, 2026
3 checks passed
@stormer78
stormer78 deleted the fix/setup-honours-visibility branch September 9, 2026 07:28
@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