feat(manager): put attributes in a world, and show which world a value is in - #213
Merged
Conversation
…e is in Closes the half of the worlds feature the pane did not reach. The wire has carried `attributeIds` since the specification landed and the core client has always sent it; the editor preserved whatever it loaded and offered no way to change it. So "tie my work email, work number and workplace together" could only be expressed by building a face — which is a different statement, about what is shown together rather than about which part of a life a value belongs to. **An attribute may belong to several worlds, and nothing here implies otherwise.** That is the asymmetry with a face and the reason for it: a face belongs to one world because the world is where its colour is read from, and a mobile number is genuinely part of a working life and a home one at once. The agent enforces no exclusivity over attributes, so neither does the screen — no checkbox disables itself, and the copy says so before anyone wonders. **The picker groups by family**, reusing `groupRows` rather than laying out a flat column of thirty. One grouping of one pool, defined once: two that disagree is the defect where a person counts six in one place and five in another. **The list view now shows which worlds a value is in**, as dots in the world's own colour with the names on the title. Dots rather than named chips because a row already carries a type, a value, a provenance and a status, and four more words per row buries the value under its own metadata — this is a reminder that a value is arranged, not the place the arrangement is read. `worldsOfAttribute` returns worlds in listing order rather than membership order, so two attributes in the same worlds draw their marks in the same sequence: a row whose marks reshuffle between renders reads as a change when nothing changed. The attribute editor seeds from what was loaded and sends both lists, for the reason the face list already did — a put replaces, and an editor seeded empty silently empties a world on an edit that meant to rename it. A test asserts that adding an attribute does not drop the faces. extension 485/485, `tsc -b` and `npm run build` clean. Signed-off-by: Glenn Gore <glenn.g@affinidi.com>
🛡️ AI Agentic Security Code Review🔎 A manual security review is recommended before merging. Please contact the Security team for specifics and remediation guidance.
|
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.
Closes the half of the worlds feature the pane did not reach, and with it the last piece of the original ask: "is it possible to link attributes together — tie my work email, work number, work name together?"
The wire has carried
attributeIdssince the specification landed and the core client has always sent it; the editor preserved whatever it loaded and offered no way to change it. So that grouping could only be expressed by building a face — which is a different statement: what is shown together, rather than which part of a life a value belongs to.What's new
Two decisions
An attribute may belong to several worlds, and nothing implies otherwise. That is the asymmetry with a face and the reason for it: a face belongs to one world because the world is where its colour is read from, and a mobile number is genuinely part of a working life and a home one at once. The agent enforces no exclusivity over attributes, so the screen doesn't either — no checkbox disables itself, and the copy says so before anyone wonders. Asserted, so a later change that adds disabling has to delete a test.
Dots, not named chips. A row already carries a type, a value, a provenance and a status. Four more words per row buries the value under its own metadata. The dots are a reminder that a value is arranged; the editor is where the arrangement is read.
worldsOfAttributereturns listing order rather than membership order so two attributes in the same worlds draw their marks in the same sequence — marks that reshuffle between renders read as a change when nothing changed.Same replace hazard, third time
The editor seeds both membership lists from what it loaded and sends both, because
persona/facet/putreplaces. A test asserts that adding an attribute does not drop the faces — the failure mode would otherwise be silent and only visible on the next screen.Verification
extension 485/485 (8 new),
tsc -bandnpm run buildclean.I also deleted a test I had written with no assertions in it — it passed, and would have passed forever.