feat(web): add Directory and Settings workspaces - #705
Conversation
6f89076 to
14f2506
Compare
roborev: Combined Review (
|
c0a8ebf to
55b1029
Compare
roborev: Combined Review (
|
55b1029 to
75bf0c0
Compare
roborev: Combined Review (
|
c1741cc to
c3d785c
Compare
roborev: Combined Review (
|
c3d785c to
9d3c381
Compare
roborev: Combined Review (
|
9d3c381 to
5d9074e
Compare
roborev: Combined Review (
|
7abc72a to
73db967
Compare
roborev: Combined Review (
|
73db967 to
0628e0a
Compare
0628e0a to
6a7540c
Compare
roborev: Combined Review (
|
f52d2fe to
56f16aa
Compare
roborev: Combined Review (
|
253dd22 to
a1f5c68
Compare
roborev: Combined Review (
|
|
I did a full review pass and pushed 21 follow-up commits on top of de3dd10. CI checks, lint, OpenAPI generation, the web suite, and the full Go suite (SQLite plus a PostgreSQL 17 run of the store tests) pass locally. Summary of what changed and why: Store
API and CLI
Web
Docs and repo
|
roborev: Combined Review (
|
|
Both roborev findings on
Both have regression tests that fail on the previous head. |
roborev: Combined Review (
|
4cf3393 to
39e5675
Compare
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
Add the durable-person Directory, relationship network, profile maintenance, and CardDAV publication workflows. Expose safe daemon, embedding, enrichment, source, and future attachment-download controls in Web and TUI Settings. Keep provider credentials write-only, origin-bound, independently versioned, and stored outside config.toml. - docs: record Directory, Settings, and API 2.14.0 in changelog - fix(web): drop directoryCursor URL compat stripping - fix(web): stop sending confirm_api_key_restart on settings save - fix(web): show the server's reason when a CardDAV save or test fails - perf(web): fetch each Directory person section once per selection - fix(web): debounce Directory text filters and keep rows while reloading - docs: describe Settings, stored provider credentials, and TUI shortcuts - refactor(api): split settings PATCH commit and rollback into helpers - fix(api): sever stored provider credentials when their endpoint moves - fix(api): drop unreachable operation 409 and API-key restart confirmation - fix(api): publish the Directory and Settings work as schema 2.14.0 - fix(carddav): finish the sync run row even when the pull panics - fix(api): log why a saved CardDAV credential could not be loaded - refactor(cli): require the credential-store lookups the daemon builds - test(web): drop confirm_api_key_restart from browser settings spec - Install the Directory projection with one migration - Charge the person network edge budget once per distinct edge - Claim dirty Directory people before rebuilding their rows - Index running and successful runs for operation lane status - Tidy Directory projection and operation run helpers - Rebind the employment lookup in the network truncation test - fix(api): retry stale credential severing and always validate kind - fix(store): retry contended enrichment claims - fix(settings): keep provider credentials bound and recoverable - fix(web): refresh Directory after detail mutations - fix(settings): keep credential repair paths available - fix(tui): carry credential token across settings saves - fix(carddav): allow credential-free disable - fix(settings): clean up orphaned provider credentials Generated with Claude Code (claude-fable-5-1) Generated with Codex Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com>
e7b89c3 to
99518ae
Compare
roborev: Combined Review (
|
A completed CardDAV run must release the active-run constraint even when history retention fails. Rolling both operations back together left finished work marked as running and blocked the next sync until startup recovery. Keep retention cleanup retryable and best effort after the terminal state is durable. Apply the same boundary to startup recovery so it cannot recreate the same blockage. Generated with Codex Co-authored-by: Codex <noreply@openai.com>
roborev: Combined Review (
|
The person network route worked with a direct store in API tests but the daemon supplies its production adapter. Without the network capability on that adapter, every real request returned a service-unavailable response. Keep a compile-time interface check beside the other daemon capabilities so future adapter drift fails during the build instead of at runtime. Generated with Codex Co-authored-by: Codex <noreply@openai.com>
roborev: Combined Review (
|
Settings reloads replace the parent state, but the CardDAV form kept the values captured when it was first mounted. Reconcile refreshed values into untouched fields while preserving intentional local edits, including the latest stored-password metadata. Generated with Codex Co-authored-by: Codex <noreply@openai.com>
roborev: Combined Review (
|
Person enrichment commands are registered before Cobra loads the user configuration. Read the active configuration when a command needs its suppression key so stored credentials remain available at execution time. Stored people-provider credentials are intentionally unsupported on Windows. Keep the combined proxy lookup test on platforms that implement that store. Generated with Codex Co-authored-by: Codex <noreply@openai.com>
roborev: Combined Review (
|
An unavailable stored credential prevented users from disabling a CardDAV account in the web form, even though the API supports a config-only update. Allow an unchanged account to be saved while disabled without a password. Continue to require a password for connection tests, identity changes, and re-enabling. Preserve the actual credential state after a config-only save. Generated with Codex Co-authored-by: Codex <noreply@openai.com>
roborev: Combined Review (
|
|
@salmonumbrella merged, I didn't have time to really QA this much, but I figure whatever doesn't work we can fix |
msgvault.io previously served only the reference docs at the domain root, with no page that says what msgvault is or where it is going. This gives the site the same three-tier shape as the other kenn-io project sites, in a carbon monochrome design matched to the existing msgvault mark: - **`/`** — marketing page: msgvault as the system of record for your communications and relationships. Covers every shipped source, the people layer, hybrid search, the Docbank-backed document and visual lanes, the interface surfaces, and the verify → stage → gated-execute → restore deletion model. An install matrix offers the macOS/Linux script, Homebrew, and Windows PowerShell journeys with per-row copy buttons. - **`/guide/`** — a nine-stop archive lifecycle tour (Capture → Preserve → Resolve → Curate → Understand → Search → Analyze → Act → Own), each stop pairing copy with a hand-drawn SVG diagram or a capture from the reviewed Enron fixture, and deep-linking into the docs. - **`/docs/`** — the existing Zensical docs, now built into a subpath by the same `vercel-build.sh`. The Directory/Reviews/Settings workspaces from #705 appear only as a labelled "in development" placeholder; nothing unshipped is claimed as current. Both new tiers ship exact Markdown twins (`/index.md`, `/guide.md`) and an `llms.txt` index for machine readers. Moving the docs under `/docs/` changes every published URL, so `vercel.json` adds permanent redirects for all legacy paths (top-level pages, `usage/`, `guides/`, `architecture/`, `search/`, and the hydrated asset directories), and absolute internal links in the docs sources now carry the `/docs/` prefix. `check_built_site.py` validates the combined site and `check_vercel_redirects.py` enforces the full redirect table; `bash scripts/check-docs.sh` passes end to end. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Wes McKinney <wesm@users.noreply.github.com>
|
@wesm agree. it's ugly anyway, in the future the frontend needs to be redesigned. |
What changed
Why
Msgvault already had rich People and daemon configuration models, but maintaining them required the CLI, config files, or direct API calls. These workspaces make the safe, routine controls available in the browser and TUI while preserving provenance, optimistic concurrency, restart visibility, and secret boundaries.
Usage
Directory and Reviews are top-level Web workspaces. Select a person to inspect or maintain their profile, employment, relationships, network, files, tracking, publication, and merge history.
Settings is also a top-level Web workspace; press
,in the TUI to open the keyboard-only Settings screen. Provider keys can be added, replaced, or removed without revealing their values. Save endpoint and model changes before credential changes when both revisions have moved. Named provider policy remains Web-only; the TUI exposes its current state as read-only.Attachment controls affect future downloads only. A size limit of
0is unlimited, while a positive participant cap skips conversations larger than that cap.Closes #639
Screenshots
Settings
Embedding providers, write-only credentials, and restart metadata:
Named Exa and SixtyFour person-enrichment policies:
Future-only attachment rules by source, conversation scope, participant count, and size:
Directory and person workspace
Directory list, search, last-contact controls, and stable sorting:
Structured profile, service-scoped observation, tracking, and CardDAV publication state:
Responsive person drawer:
Profile editing, history, custom fields, employment, relationships, and bounded network:
Review and identity flows
CardDAV and operation history