Repository navigation
Description
Parent and design authority
Parent: #126 — Human Inbox unread, personal attention and actions. This is a focused implementation specification for local Human naming, not a replacement for the parent.
Design authority: ADR-0103, the bilingual product Context and living architecture. Documentation is delivered by #616 / PR #618. Existing Human identity and receipts follow ADR-0078; PersonaBot identity follows ADR-0046. Current Bot-to-Human trusted mention delivery remains #549 / PR #605 and is reused rather than duplicated.
Problem Statement
The local Human cannot set their own name in BotHarness. Group membership defaults to Human and message authors appear as You. A Human using roleplay may need to be Captain with one PersonaBot and Researcher in another Channel, while still receiving every mention and pending action in the same personal Inbox. Saved mention labels also become stale after a Human or PersonaBot changes name, even though the target identity remains the same.
Solution
Provide an optional default Human display name in BotHarness plugin settings and a My nickname control in every Human-participating DM or Group Channel header. A Channel nickname overrides the default; clearing it restores inheritance; an unset default resolves to Human. Authors, members, receipts, mention choices, Human Inbox context and Bot-facing current Channel context use the same resolved name. Human and PersonaBot mentions retain typed stable targets and display current names in historical as well as new messages. Different names still identify one local Human and one Inbox.
User Stories
- As the local Human, I want to set my default name in BotHarness plugin settings, so that the plugin uses my chosen name.
- As the local Human, I want naming to be optional and initially show Human, so that setup does not block ordinary chatting.
- As the local Human, I want to change my default name later, so that it follows my current preference.
- As the local Human, I want the default name shared across my Channels, so that I do not configure each conversation separately.
- As the local Human, I want My nickname in a PersonaBot DM header, so that I can use a roleplay name with that Bot.
- As the local Human, I want My nickname in a Group Channel header, so that I can use the name appropriate to that group.
- As the local Human, I want different Channels to have different nicknames, so that Captain and Researcher can both be my current names in their respective conversations.
- As the local Human, I want to clear a Channel nickname, so that that Channel resumes using the default name.
- As the local Human, I want a default-name change to affect only Channels that inherit it, so that explicit Channel nicknames remain unchanged.
- As the local Human, I want old default Human member labels to inherit my new default, so that existing Groups behave like newly created ones.
- As the local Human, I want message authors to display my effective Channel name, so that roleplay context is clear.
- As the local Human, I want member lists and Human receipt details to use the same name, so that participant presentation does not disagree.
- As a PersonaBot, I want current Human member discovery and message queries to expose the effective Channel name, so that I can address the Human consistently.
- As a PersonaBot, I want to mention a Human by stable member ID, so that a name change does not change who receives my message.
- As the local Human, I want trusted Human mention blocks to display my current name, so that historical mentions follow a rename.
- As the local Human, I want trusted PersonaBot mention blocks to display that Bot's current name, so that Bot renaming behaves consistently.
- As the local Human, I want Inbox context to resolve names in the source Channel, so that Researcher is not displayed as Captain in a cross-Channel view.
- As the local Human, I want historical author labels to use current effective names, so that author and mention presentation agree.
- As the local Human, I want original message content and mention offsets preserved, so that a rename does not edit conversation facts.
- As the local Human, I want changing a name to preserve unread positions, so that naming does not mark messages read or unread.
- As the local Human, I want all my nicknames to share one Inbox and pending actions, so that roleplay does not fragment my work.
- As the local Human, I want renaming to avoid new notifications, Admissions or Bot wakes, so that it remains a presentation update.
- As the local Human, I want the same name to be allowed for a Human and a PersonaBot, so that names remain personal choices.
- As the local Human, I want member and mention choices to distinguish Human / you from PersonaBot, so that equal names do not confuse targets.
- As the local Human, I want ordinary text containing an old or new name to remain ordinary text, so that it is never silently converted into a trusted mention.
- As the local Human, I want Unicode names, spaces and different-length renames handled safely, so that display updates do not corrupt surrounding text.
- As the local Human, I want another open browser window to reflect a saved name change, so that plugin presentation stays consistent.
- As the local Human, I want names restored after Host restart, so that they are durable preferences owned by the Host.
- As the local Human, I want unresolved historical targets to retain an understandable recorded label, so that unavailable identities do not get guessed from names.
- As the local Human, I want native Session history and already assembled model input preserved, so that naming does not rewrite executed conversations.
- As the local Human, I want my name editable only through authorized Human commands, so that a Bot cannot rename me by claiming a different identity.
- As the local Human, I want a runnable DSH verification scene with screenshots or video for each implementation PR, so that I can judge the complete behavior before the next slice.
Implementation Decisions
- Keep the existing application-defined Messaging authority as owner of the local Human default name and optional Channel overrides, persisted in its canonical database. Do not put current names exclusively in browser preferences, Agent Memory or a second identity store.
- Preserve the current Host-owned local Human ID. Name commands derive that identity from the authorized existing Human path; the browser and Bot do not choose a principal or gain another account.
- Resolve Channel nickname, then default Human name, then Human. Clearing the override is distinct from storing an explicit nickname equal to the current default; legacy generated Human labels do not become explicit overrides.
- Extend existing Host command/query and Host-to-Client Bridge contracts. Add the default editor to plugin settings and My nickname plus restore-default to participating Channel headers. Preserve all existing Channel visibility and permission checks.
- Reuse Tracer: Trusted Bot @Human reaches personal Inbox mentions #549's stable Human mention targets and Human member discovery. Name resolution enriches their presentation; it does not add another Human mention protocol or duplicate the trusted-target delivery issue.
- Use typed stable Actor IDs when displaying mentions. Resolve Human names in the original message Channel even inside Human Inbox; resolve PersonaBot names from the current registry. Keep saved labels only as fallback for unavailable identities, never as routing or retargeting authority.
- Retain immutable Source Event body and canonical mention spans. Current-name presentation replaces only typed mention blocks; it must not search-and-replace plain text or recompute persisted offsets from the displayed name length.
- Use the same resolved names for Channel author and member presentation, receipts, current mention choices, Inbox context, and newly assembled or explicitly queried Bot context. Native Session events and already assembled model input remain historical execution facts.
- Keep current-name query projections within existing model-facing content budgets and observation semantics. Renaming alone creates no Source Revision, Inbox Admission, notification, read advancement or wake.
- Permit duplicate names, distinguishing Human / you from PersonaBot in member and mention choices. Do not introduce unique usernames or route by display-name matching.
- Propagate committed name changes across browser tabs and reconstruct names after restart through the existing Host query/event refresh path. Cached Channel and Inbox windows must refresh labels without changing their source anchors or read positions.
- Deliver narrow vertical slices with one issue and one PR each, real DSH screenshot or video evidence, and Human QA before starting the next authorized slice.
Testing Decisions
- The Human confirmed existing boundaries: test observable commands and query results through Messaging / Channel authority, the current Host-to-Client Bridge, and real DSH settings/chat interactions. Prefer these existing high seams over adding a test-only seam.
- Verify default save/change/unset behavior, nickname precedence, clear-to-inherit, existing-Group migration and isolation between two Channels through public Host operations, including restart.
- Verify canonical identity and message content remain unchanged when displayed names change. Use trusted mentions beside ordinary same-name text, Unicode names and shorter/longer labels to expose offset or name-based replacement bugs.
- At the existing Human attention / read query seam, verify rename does not add personal items, duplicate unread counts, change read positions, settle actions or create Bot Admissions / wakes.
- At the Client and Bridge seam, exercise plugin settings, Channel header nickname editing, author/member/receipt labels, historical mentions and source-Channel names in Inbox. A second window and Host restart must show the same committed names.
- Use existing named Human receipt, PersonaBot rename, Group mention, trusted Human mention, Channel model-read and Inbox context/navigation tests as prior art. Assert visible behavior and canonical facts rather than SQL shape, component internals or copied resolver logic.
- Each implementation ticket ends with a genuine isolated DSH scene: save names, receive a real Bot message, rename, view the historic typed mention in Channel and Inbox, and compare unread / attention facts. Provide screenshots or video in its PR and pause for Human QA.
Out of Scope
- Saved Human Persona backgrounds, roleplay instructions or Agent Memory administration.
- A separate Human ID or Inbox for each nickname; multiple Human accounts or login flows.
- External Human account mapping, provider identity linking or Lark / Slack inbound integration.
- Human avatars, per-Channel PersonaBot nicknames or a second PersonaBot identity model.
- Plain-text name matching as a trusted mention; importing arbitrary external markup into native mention targets.
- Rewriting Source Event content, persisted mention offsets, native Session events or already assembled model input on rename.
- Changes to Human Inbox ranking, read semantics, action authorization, Bot attention or Wake Policy.
Further Notes
The confirmed scene uses default Little Bear, Captain in one DM and Researcher in another Group. Renaming that Group nickname to Professor updates its historical author and trusted mention labels; the DM remains Captain. Both labels refer to one Human ID and personal Inbox. Clearing Professor restores the default, or Human when the default is unset.
#549 / PR #605 remains a separate pending Human-QA implementation. This specification does not authorize merging it. Existing Bot mention rendering can be improved independently, while Human mention-aware slices reuse the completed trusted-target feature.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
DoodleBears commentedon Oct 3, 2026
Completion audit — local Human naming
Task:
codex/local/01a0f083-4337-71d2-8639-dec84699b8d9.State: completed for ADR-0103's accepted local-Human naming scope.
Both implementation children are closed by Human-accepted merges and include actual DSH screenshots/live-model E2E evidence. All nicknames still refer to the same local Human and personal Inbox. Multi-Human accounts, role backgrounds and external identity mapping remain outside this accepted specification.