Skip to content

fix(profiles): a mistyped profile leaves no state file; doctor suggests setup - #735

Merged
leemour merged 1 commit into
mainfrom
fix/ux-68-max-small-items
Oct 18, 2026
Merged

leemour merged 1 commit into
mainfrom
fix/ux-68-max-small-items

Conversation

@leemour

@leemour leemour commented Oct 18, 2026

Copy link
Copy Markdown
Collaborator

Task: small items from the public-readiness review of max (UX-68).

Why

  • max typoprofile chats list refused the profile, but left profiles/typoprofile.json behind. From then on "name a profile" and max complete listed typoprofile as a profile on this computer.
  • max <profile> doctor without a token suggested session start, while the README and the "no session" error say setup.
  • A global npm install writes the agent skill into ~/.claude/skills and ~/.agents/skills; the README did not say so.

What

  • SessionStore#viewerId() reads the viewer id without creating the state file. Every caller that only needed the viewer id (adapter self, records, people, live, serve) uses it. readState() stays the writer before login, so the device identity is still saved before it is used.
  • forget() (session end) no longer creates a state file for a profile that has none.
  • doctor's no-token note names setup.
  • README: one sentence on where the global install puts the skill and MAX_INSTALL_AGENT=none.
  • CHANGELOG under «Не выпущено».

Testing

  • New test in src/program.test.ts: a mistyped profile is refused and not listed afterwards (fails without the fix).
  • Manual, fresh HOME: chats list, messages list, doctor, session end, messages send --dry-run, contacts list, inbox, watch --once, mcp with a typo profile leave no file in profiles/.
  • pnpm typecheck, pnpm lint, pnpm test (1523 passed), pnpm docs:check, pnpm docs:lint.

🤖 Generated with Claude Code

…ts setup

`max typoprofile chats list` refused the profile but first wrote
profiles/typoprofile.json: the adapter and other callers read only the
viewer id through readState(), which invents and saves a device identity.
That file then listed the typo as a profile in "name a profile" and in
completion. Callers that only need the viewer id now use a read-only
SessionStore#viewerId(); the device identity is still saved before login.
`session end` for a profile with no state file no longer creates one.

doctor without a token suggested `session start`; the README and the
"no session" error use `setup`.

README: a global install puts the agent skill in ~/.claude/skills and
~/.agents/skills, and MAX_INSTALL_AGENT=none turns that off.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@leemour
leemour force-pushed the fix/ux-68-max-small-items branch from bbdc34e to 61f428d Compare October 18, 2026 18:23
@leemour
leemour merged commit cefb41e into main Oct 18, 2026
9 checks passed
@leemour leemour mentioned this pull request Oct 18, 2026
leemour added a commit that referenced this pull request Oct 18, 2026
Version and the dated changelog for 0.63.0: «Не выпущено» → `0.63.0 —
19.10.2026`, package.json, src/version.ts. Nothing else.

Since v0.62.0: #733, #734, #735, #737, #738.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.

1 participant