Why
PR #575 follow-up review surfaced eight Index-tab improvements that are each non-trivial enough to ship as their own PR — each carries a small policy, verification, or design decision that doesn't fit the static-disclosure bundle (#5.1a) or the namespace cluster (#5.NS). This issue is an umbrella for tracking them; individual PRs should reference back here when they land.
Tasks
4.2 — force re-index metadata cascade
4.10a — Surface the Search NS filter dropdown in prod
4.11 — Indexing in-flight visibility + double-click guard
4.12 — Folder mode directory picker
Prev #1 — Collapse the two index buttons
Prev #2 — Upload dropzone proportions
Prev #4 — Visual hierarchy between main tab nav and mode toggle
Decisions already made (linked above)
- 4.10a: backend
/api/namespaces is not dev-gated; the change is frontend-only (verified).
- 4.12: allow-list is a discoverability boundary, not a security boundary. Text input stays free-form.
- 4.2: requires the spike before implementation; the spike outcome determines whether this is a doc fix, a code fix, or an ADR.
References
All paths under packages/memtomem/src/memtomem/.
- IndexEngine force path:
indexing/engine.py: IndexEngine.index_file() force branch (~656)
- Storage delete by source:
indexing/engine.py: IndexEngine._storage.delete_by_source()
- Namespace dropdown loader:
web/static/settings-namespaces.js: loadNamespaceDropdowns() (~59)
- Namespaces endpoint:
web/routes/namespaces.py: list_namespaces()
- Index button + handler:
web/static/index.html folder panel; web/static/app.js: index-btn listener (~2950)
- Upload dropzone markup:
web/static/index.html upload panel
- Mode toggle CSS:
web/static/style.css (.index-mode-toggle)
Out of scope
🤖 Generated with Claude Code
Why
PR #575 follow-up review surfaced eight Index-tab improvements that are each non-trivial enough to ship as their own PR — each carries a small policy, verification, or design decision that doesn't fit the static-disclosure bundle (#5.1a) or the namespace cluster (#5.NS). This issue is an umbrella for tracking them; individual PRs should reference back here when they land.
Tasks
4.2 —
forcere-index metadata cascadeforce=True's metadata cascade.indexing/engine.py: IndexEngine.index_file()force branch (~656). Rungit blameand walk back through related PRs / commits.delete_by_source(file_path)followed by re-embedding currently resetsaccess_count,importance_score, andcreated_at. Decide which case applies:force re-indexcheckbox: "Existing chunks plus access/importance metadata will be regenerated."--reset-metadataopt-in. Plus the tooltip.forcedocumenting the chosen contract, then either case 1 or case 2 flow.4.10a — Surface the Search NS filter dropdown in prod
STATE.uiMode !== 'dev'early return inloadNamespaceDropdowns()(web/static/settings-namespaces.js~59)./api/namespacesalready has no dev gating (web/routes/namespaces.py) — frontend-only change, ~1 line.4.11 — Indexing in-flight visibility + double-click guard
폴더 인덱싱toggle button when an index is running. Avoids "where did my index go?" when the user switches mode mid-run.Indexbutton should be disabled (verify currentbtnLoadingbehavior first); a second click should show a toast "Already in progress" instead of resetting the status panel of the first click.btnLoadingalready disables; if so this is just a status-reset guard.4.12 — Folder mode directory picker
📁 Browsebutton beside the path text input. Keep the text input free-form (current behavior).GET /api/fs/list?path=...endpoint returning subdirs.memory_dirs+~) with breadcrumb navigation. To go outside the allow-list, the user closes the picker and types the path explicitly.Prev #1 — Collapse the two index buttons
Indexbutton + a small "Show progress" toggle.인덱스(primary) +진행률 표시 인덱스(ghost) buttons make users guess which to pick. The two-button shape dilutes the form's primary action.Prev #2 — Upload dropzone proportions
max-width: 480-560pxcentered, or a left/right split (drop zone on the left, file list on the right).Prev #4 — Visual hierarchy between main tab nav and mode toggle
Decisions already made (linked above)
/api/namespacesis not dev-gated; the change is frontend-only (verified).References
All paths under
packages/memtomem/src/memtomem/.indexing/engine.py: IndexEngine.index_file()force branch (~656)indexing/engine.py: IndexEngine._storage.delete_by_source()web/static/settings-namespaces.js: loadNamespaceDropdowns()(~59)web/routes/namespaces.py: list_namespaces()web/static/index.htmlfolder panel;web/static/app.js: index-btnlistener (~2950)web/static/index.htmlupload panelweb/static/style.css(.index-mode-toggle)Out of scope
🤖 Generated with Claude Code