aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-25 01:02:20 -0400
committerCraig Jennings <c@cjennings.net>2026-06-25 01:02:20 -0400
commit12610e7255c37c77f3eaae5b2da33f79ea6b7472 (patch)
tree93df4b058a2e7879dbeeca38dfccbfcc8766e2a3 /todo.org
parent85452c2a841585884d937aad9622a4c10b689686 (diff)
downloaddotemacs-12610e7255c37c77f3eaae5b2da33f79ea6b7472.tar.gz
dotemacs-12610e7255c37c77f3eaae5b2da33f79ea6b7472.zip
chore(google-keep): mark v1 implemented, file live-setup VERIFY, record in spec
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org25
1 files changed, 22 insertions, 3 deletions
diff --git a/todo.org b/todo.org
index 0d2c70cf8..76f74b579 100644
--- a/todo.org
+++ b/todo.org
@@ -67,6 +67,24 @@ CLOSED: [2026-06-25 Thu]
A recurring event declined for just one occurrence synced out with =:STATUS: accepted= (chime then faithfully showed it). Root cause (diagnosed by a chime session, 2026-06-24): =calendar-sync--apply-single-exception= merged the override's =:attendees= but never re-derived =:status=, so the occurrence kept the series master's accepted status, and =calendar-sync--filter-declined= (which keys off =:status=) didn't drop it. Fix (TDD): in =apply-single-exception=, when overriding =:attendees=, re-derive =:status= via =calendar-sync--find-user-status= against =calendar-sync-user-emails=. Four new tests in =test-calendar-sync--apply-single-exception.el= (declined → "declined"; no-attendee override → inherited intact; accepted override → accepted; override without the user → inherited intact); recurrence + find-user-status + integration suites unchanged. Live-reloaded; a manual re-sync ran clean. The specific 2026-06-24 Arusyak occurrence is past now (its RECURRENCE-ID override aged out of the feed), so the live confirmation lands on the next single-occurrence decline.
** PROJECT [#A] Manual testing and validation
Exercised once the phases above land.
+*** VERIFY Google Keep v1 live setup and first fetch
+What we're verifying: read-only v1 fetches real Keep notes and renders =data/keep.org= once the one-time gkeepapi + master-token setup is done. The code and 27 tests (12 Python + 15 ERT) are green; this is the live-credential step only Craig can run.
+- Install the client into the interpreter =cj/keep-python= uses: =pip install gkeepapi= (or pipx).
+- Obtain a Google master token (one-time, via gkeepapi's current login/gpsoauth flow against your account).
+- Set your email:
+#+begin_src emacs-lisp
+(setq cj/keep-email "you@gmail.com")
+#+end_src
+- Add the token to =~/.authinfo.gpg= (line: =machine google-keep login you@gmail.com password <master-token>=), then clear the auth cache so the daemon sees it:
+#+begin_src emacs-lisp
+(auth-source-forget-all-cached)
+#+end_src
+- Fetch (or press =C-c k r=):
+#+begin_src emacs-lisp
+(cj/keep-refresh)
+#+end_src
+- Open the result with =C-c k o=.
+Expected: =data/keep.org= lists your Keep notes, pinned first, each a header with title/body, labels as org tags, a property drawer (=:KEEP_ID:= / =:UPDATED:= / ...), and an "open in Keep" link. A missing piece (gkeepapi / token / auth) shows a clear =*Warnings*= message naming it, not a crash.
*** TODO theme-studio preview-locate discoverability read
What we're verifying: the locate hover/flash actually feels discoverable in a live frame — the subjective read the deterministic gates can't make.
- Open theme-studio in Chrome (=make theme-studio-open=, or open theme-studio.html).
@@ -3760,9 +3778,10 @@ These may override useful defaults - review and pick better bindings:
:END:
Display slack.el message and thread buffers in a dedicated popup window (side or bottom) and reuse that one window instead of spawning a new window per buffer. Likely a =display-buffer-alist= rule (or popper integration) in =modules/slack-config.el=.
-** TODO [#C] google-keep in-editor integration — build, module-to-package :feature:
-Build a native Keep integration: an org page of notes (each note an org header), read-only in v1, a gkeepapi Python subprocess bridge for data (the MCP is agent-only, not callable from elisp), auth via authinfo.gpg, eventually extracted to a standalone package. vNext: read-write, the org-capture-style popup, list rendering.
-Spec: [[file:docs/specs/google-keep-emacs-integration-spec.org][google-keep-emacs-integration-spec.org]]. All five decisions resolved 2026-06-25 (org page; read-only v1 then read-write v2 immediately after; gkeepapi sole bridge; authinfo.gpg auth; extractable core + glue). In spec-review before implementation.
+** DOING [#C] google-keep in-editor integration — build, module-to-package :feature:
+v1 (read-only) implemented and tested (Phases 1-3): the gkeepapi Python bridge (=scripts/google-keep/keep-bridge.py=, 12 tests), the elisp core + =cj/keep-refresh= renderer with atomic writes and async make-process (=modules/google-keep-config.el=, 15 ERT tests), un-orphaned under a =C-c k= prefix, graceful warning when gkeepapi/token/auth is missing. The pure JSON-to-org core is kept extractable per the spec. Live fetch needs the one-time gkeepapi + master-token setup — see "Google Keep v1 live setup and first fetch" under Manual testing and validation.
+Next: v2 (read-write — create/edit back to Keep, with a staleness guard) per the spec, the immediate follow-on once the live read is confirmed. Later: list/checkbox rendering, package extraction.
+Spec: [[file:docs/specs/google-keep-emacs-integration-spec.org][google-keep-emacs-integration-spec.org]] (Ready, 2 review rounds; all five decisions resolved 2026-06-25).
** TODO [#D] Theme Studio nerd-icons vNext follow-ups :feature:
Deferred from [[file:docs/specs/theme-studio-nerd-icons-colors-spec.org][theme-studio-nerd-icons-colors-spec.org]]: extend the legend to
buffer-mode and command/symbol categories if the file set proves insufficient;