Skip to content

Web Notes: read / re-file / delete notes from the dashboard#23

Merged
agr77one merged 1 commit into
mainfrom
feat/web-notes-view
Jun 16, 2026
Merged

Web Notes: read / re-file / delete notes from the dashboard#23
agr77one merged 1 commit into
mainfrom
feat/web-notes-view

Conversation

@agr77one

Copy link
Copy Markdown
Owner

PR 4 (final) of chat→web + notes rework. The Notes tab becomes an organizer:
click a note to read its body + source, move it to another bucket, or delete it.

  • notes.get_note / move_note / delete_note (_vault_subpath containment +
    _safe_relpath traversal guard); list/search now return a vault-relative relpath.
  • daemon note_get / note_move [W] / note_delete [W] (re-validate containment).
  • reader pane in the dashboard (textContent only; addresses notes by relpath).

19 new tests; daemon action-count 56→59; ruff + 207 tests + node --check green.
A workflow_dispatch build after merge verifies the 3-exe freeze + ships the artifact.

PR 4 of the chat→web + notes rework. The Notes tab becomes an organizer:
- notes.py: get_note(relpath), move_note(relpath, category), delete_note(relpath)
  — all via the existing _vault_subpath containment guard + a new _safe_relpath
  traversal guard. list_recent_notes/search_notes now also return a vault-relative
  `relpath` so the browser can address a note.
- ffp_daemon.py: note_get, note_move [W], note_delete [W].
- Dashboard: notes rows are clickable → a reader pane shows the title, source
  link, and full body, with a bucket dropdown (Move) + Delete. All DOM via
  textContent/createElement; the reader addresses notes by relpath only and the
  daemon re-validates containment server-side.

19 new tests (notes get/move/delete + traversal rejection); daemon action-count
56→59. ruff + 207 tests + node --check all green. CHANGELOG updated for the full
chat→web + notes-organizer work.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@agr77one agr77one merged commit 70671df into main Jun 16, 2026
5 checks passed
@agr77one agr77one deleted the feat/web-notes-view branch June 16, 2026 19:17

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4bef8ffbb0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/notes.py
Comment on lines +600 to +601
dest.write_text(text, encoding="utf-8")
src.unlink()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make pending moves update the capture worker

When this runs on a newly captured note whose _categorize_in_background thread is still running (common for URL notes while fetch/LLM work is in progress), it copies the stub to the new bucket and unlinks the original, but the background worker still has stub_path and later writes a final note via _write_note(...) even if the stub was moved. The result is two notes: the moved (categorizing…) stub plus the final LLM-filed note, so the user's re-file is not authoritative. Please coordinate with the worker, such as by recording the moved path or marking the stub as user-managed before removing it.

Useful? React with 👍 / 👎.

Comment thread scripts/notes.py
target = _vault_subpath(*safe.split("/"))
if not target.exists():
return {"ok": False, "error": "note not found"}
target.unlink()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make pending deletes cancel background categorization

When deleting a freshly captured note before its _categorize_in_background thread finishes, especially for URL captures, this only removes the inbox stub; the worker still has the note contents and later writes a final note with _write_note(...). The deleted note therefore reappears in another bucket after the user removed it. Please record a cancellation/tombstone or have the worker stop when the stub is gone.

Useful? React with 👍 / 👎.

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.

2 participants