. The inline basic-auth credential\n(\"admin:DWSecure2024!\") was already in this file at lines 60 + 66 before\nthis commit and is unchanged by it. Credential rotation across the fleet\nis tracked separately (cred is also in dozens of sibling repos per MEMORY).\n\nSurfaced by tick 169 session #102 Teal mechanical refactor pass; that\npass deferred the fix because the diff touches the cred line, but the\nLIVE-BROKEN production UI takes precedence — fixing now, rotation later.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) "},{"h":"941feb1","d":"2026-05-19","s":"Snapshot-files cleanup: untrack server.js.bak-*, broaden .gitignore, add 404 guard","b":"- Untrack the 7-month-old server.js.bak-20260421-094351 snapshot that was\n tracked in the repo (still present on disk, now ignored).\n- Broaden .gitignore to cover *.bak.*, *.bak-*, *.pre-*, *.orig, *.rej,\n *.swp, *~ so future snapshots don't slip back in.\n- Add a static-snapshot 404 guard middleware that runs before\n express.static('public'); any URL matching .bak, .bak-*, .pre-*, .orig,\n .rej, .swp, or trailing ~ returns 404 regardless of disk state.\n Defense-in-depth on top of the existing basic-auth gate.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) "},{"h":"c2bdfca","d":"2026-05-19","s":"add trash-fleet-mailtests.js — one-off cleanup of 89 fleet delivery-test emails (modeled on trash-redfin-zillow.js)","b":""},{"h":"ab70d2e","d":"2026-05-19","s":"George: make the 'From job:' provenance banner opt-out (no_source_tag flag / x-george-no-tag header) so customer-facing sends can be banner-free","b":"Co-Authored-By: Claude Opus 4.7 (1M context) "},{"h":"fd1481e","d":"2026-05-19","s":"Fleet auto-responder: stop logging non-fleet mail to UI run-log (run-log tracks fleet inquiries only)","b":""},{"h":"8f310af","d":"2026-05-19","s":"Fleet auto-responder: update usage docstring (daemon/force flags, HTML reply, UI)","b":""},{"h":"2f343b5","d":"2026-05-19","s":"Fleet auto-responder: fix scan query (bare deliveredto:steve+ never matches in Gmail) + probe-subject safety guard (RETEST/FLEETMAILTEST/DTEST/PMRCV)","b":""},{"h":"e9fdf0f","d":"2026-05-19","s":"Fleet auto-responder: --daemon self-scheduling mode (pm2-managed, 3-min interval); UI on port 9768","b":""},{"h":"9c7a470","d":"2026-05-19","s":"fleet-autoresponder UI: move port 9766→9768 (9766 reserved for agent-architect mindmap viewer)","b":""},{"h":"d6e30ce","d":"2026-05-19","s":"Fleet auto-responder: pm2 ecosystem config — 3-min cron schedule + UI process","b":""},{"h":"fb57ee9","d":"2026-05-19","s":"Fleet auto-responder admin UI dashboard (Express viewer, port 9766, pm2-managed)","b":""},{"h":"13d4e3b","d":"2026-05-19","s":"Fleet auto-responder: multipart/alternative HTML+plain reply, structured run-log + state","b":""},{"h":"7d77cad","d":"2026-05-19","s":"Fleet auto-responder: deliveredto query fix + --only-ids scoped-test flag","b":"Tested live on barwallpaper.com + grassclothwallcovering.com (2-domain test):\n- Gmail does not match plus-tags via to:; switched candidate query to\n deliveredto: and rely on Delivered-To header parsing for domain recovery.\n- Added --only-ids flag so a scoped test does not touch the inbox backlog\n of unrelated probe mail.\n- Verified: reply sent from info@designerwallcoverings.com landed in the\n recipient INBOX (not Spam), correct per-domain sign-off, no loop, label\n + 7-day ledger dedup both idempotent on re-run.\n\nLedger (data/fleet-autoresponder-ledger.json) gitignored — runtime state.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) "},{"h":"d135118","d":"2026-05-19","s":"Add fleet auto-responder for the 44 dw-domain-fleet domains","b":"Sends one warm acknowledgment from info@designerwallcoverings.com to genuine\nnew customer inquiries arriving at info@ (forwarded into the\nsteve-office Gmail via Purelymail catch-all + plus-tag). Reply-To is set to\ninfo@ so customer replies route back to the right site.\n\nSpam-safety: skips Spam, no-reply/bounce senders, bulk/auto/list mail, and any\nmail from designerwallcoverings.com or a fleet domain (loop guard). One reply\nper sender per rolling 7-day window (persisted ledger). Marks every processed\nmessage with the 'fleet-autoreplied' Gmail label — idempotent on re-run.\n\nReuses George's DW-MCP/.env OAuth credentials; no prod deploy needed.\nNot yet scheduled — run manually with: node fleet-autoresponder.js\n\nCo-Authored-By: Claude Opus 4.7 (1M context) "},{"h":"02ef28b","d":"2026-05-18","s":"Make /api/profile honor ?account= param like the other 31 routes","b":""},{"h":"2cbc311","d":"2026-05-18","s":"remove bogus stevesclaude account from George — theagentabrams@gmail.com (agentabrams) is the real AI account; also exempt /auth/agentabrams from basic auth","b":""},{"h":"23979b0","d":"2026-05-18","s":"Add agentabrams (theagentabrams@gmail.com) as 5th george account slot","b":""},{"h":"ec801aa","d":"2026-05-18","s":"george /auth honors ?account= — dispatches to per-account re-auth routes","b":""},{"h":"a4d0448","d":"2026-05-12","s":"fix(george): ENV_PATH portable across Mac2/Kamatera","b":"ENV_PATH was hardcoded to /root/Projects/Designer-Wallcoverings/DW-MCP/.env\nwhich only exists on Kamatera. On Mac2 the same .env lives at\n~/Projects/Designer-Wallcoverings/DW-MCP/.env. The readFileSync would\nquietly fail in the try/catch upstream, INFO_REFRESH_TOKEN stayed empty,\nand the boot log said 'Info@ not configured' even though the token IS\nin the Mac2 .env.\n\nFix: try $DW_MCP_ENV then $HOME/Projects/.../DW-MCP/.env then the\nlegacy /root/ path. First readable wins.\n\nSymptom that exposed this: GET /api/search?account=info returned\n'unknown account: info' because infoGmail was never built. After\nrestart with the fix, log says 'Info@ account initialized (full\nWorkspace)' and /api/search returns the real DW inbox (201 messages\nfor a Shopify-orders query, including 'New Order on the New DW')."},{"h":"facbb3b","d":"2026-05-06","s":"initial scaffold (gitify-all 2026-05-06)","b":""}]; const q = document.getElementById('q'); const list = document.getElementById('bp-commits'); const tally = document.getElementById('bp-tally'); function applyFilter() { const term = q.value.toLowerCase().trim(); let shown = 0; for (const li of list.children) { const match = !term || li.dataset.blob.includes(term); li.style.display = match ? '' : 'none'; if (match) shown++; } tally.textContent = term ? `${shown} / ${DATA.length} match "${q.value}"` : `${DATA.length} commits indexed`; // Reflect search state in URL so a filtered view is shareable. Use // replaceState so the back button still escapes the project page. const url = new URL(window.location.href); if (term) url.searchParams.set('q', q.value); else url.searchParams.delete('q'); history.replaceState(null, '', url); } q.addEventListener('input', applyFilter); // Apply the initial ?q= from the server-rendered value field. if (q.value) applyFilter();

George Gmail

repo: ~/Projects/george-gmail · 70 commits · 2 in last 24h, 14 in last 7d · ███████

Search the build

70 commits indexed

  1. bc88ec5 2026-07-28 auto-save: 2026-07-28T08:28:39 (1 files) — data/bridge-alert-state.json
  2. b05223a 2026-07-27 auto-save: 2026-07-27T14:21:14 (1 files) — data/bridge-alert-state.json
  3. 82cb9b3 2026-07-27 auto-save: 2026-07-27T08:19:05 (1 files) — data/bridge-alert-state.json
  4. 5aad99c 2026-07-26 auto-save: 2026-07-26T14:13:54 (1 files) — data/bridge-alert-state.json
  5. 569e097 2026-07-26 auto-save: 2026-07-26T08:11:40 (1 files) — data/bridge-alert-state.json
  6. a782058 2026-07-25 auto-save: 2026-07-25T14:06:43 (1 files) — data/bridge-alert-state.json
  7. 4beb2bc 2026-07-25 auto-save: 2026-07-25T08:04:52 (1 files) — data/bridge-alert-state.json
  8. 2435de6 2026-07-24 auto-save: 2026-07-24T14:28:09 (1 files) — data/bridge-alert-state.json
  9. 59af615 2026-07-24 auto-save: 2026-07-24T08:26:42 (1 files) — data/bridge-alert-state.json
  10. bb6e047 2026-07-23 auto-save: 2026-07-23T14:21:54 (1 files) — data/bridge-alert-state.json
  11. 742a6a4 2026-07-23 auto-save: 2026-07-23T08:19:35 (1 files) — data/bridge-alert-state.json
  12. 3d4e782 2026-07-22 auto-save: 2026-07-22T14:14:43 (1 files) — data/bridge-alert-state.json
  13. 7af8d23 2026-07-22 auto-save: 2026-07-22T08:12:31 (1 files) — data/bridge-alert-state.json
  14. cc6d073 2026-07-21 auto-save: 2026-07-21T14:07:54 (1 files) — data/bridge-alert-state.json
  15. f40bafb 2026-07-21 auto-save: 2026-07-21T08:06:27 (1 files) — data/bridge-alert-state.json
  16. 1720459 2026-07-20 auto-save: 2026-07-20T14:02:31 (1 files) — data/bridge-alert-state.json
  17. bf346cb 2026-07-20 auto-save: 2026-07-20T08:00:46 (1 files) — data/bridge-alert-state.json
  18. 7357bd8 2026-07-19 auto-save: 2026-07-19T14:26:43 (1 files) — data/bridge-alert-state.json
  19. fd852cb 2026-07-19 auto-save: 2026-07-19T08:25:31 (1 files) — data/bridge-alert-state.json
  20. 9d08c5a 2026-07-18 auto-save: 2026-07-18T14:21:38 (1 files) — data/bridge-alert-state.json
  21. f9948ba 2026-07-18 auto-save: 2026-07-18T08:20:26 (1 files) — data/bridge-alert-state.json
  22. 5f87f20 2026-07-17 auto-save: 2026-07-17T14:16:47 (1 files) — data/bridge-alert-state.json
  23. 373e7d4 2026-07-17 auto-save: 2026-07-17T08:15:49 (1 files) — data/bridge-alert-state.json
  24. 0432323 2026-07-16 auto-save: 2026-07-16T08:12:03 (1 files) — data/bridge-alert-state.json
  25. a078db7 2026-07-15 auto-save: 2026-07-15T12:36:34 (1 files) — data/bridge-alert-state.json
  26. c4c9ba4 2026-07-15 bridge: every-6-day 1-click renewal email to steve-office for the 2 consumer accounts (CADENCE mode) + dead-token safety net stays on 8/2/8
  27. a2eaa2d 2026-07-15 bridge: nudge to renew at day 5 (2-day runway before the 7-day expiry)
  28. bb1ae3a 2026-07-15 auto-save: 2026-07-15T12:06:24 (1 files) — data/
  29. 7b49e78 2026-07-15 feat(bridge): painless George token renewal — WARN/CRIT accounts get a one-click re-consent email (DTD verdict B, 2026-07-15)
  30. 76f3426 2026-07-15 docs: lead the OAuth runbook with the Internal-flip fast path + consumer-account fork
  31. fbeffde 2026-07-15 docs: service-account + domain-delegation runbook — permanent zero-expiry fix for steve@/info@ Workspace accounts
  32. 2c2c36d 2026-07-13 chore: version v1.1.1 (session close)
  33. a9140cb 2026-07-13 auth: unify both middlewares on resolved GEORGE_BASIC_AUTH cred + fail-closed on empty password (rotation completed 2026-07-13)
  34. b6e91b3 2026-07-10 auto-save: 2026-07-10T11:07:57 (1 files) — server.js
  35. e86cb67 2026-07-07 feat(api): add /api/attachment-local — fetch a Gmail attachment by filename to /tmp (normal auth, /tmp-only)
  36. ee22604 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  37. 89b542a 2026-07-01 chore: v1.1.0 (session close — dormant SA/DWD path)
  38. 769c500 2026-07-01 george-gmail: pre-write dormant SA/DWD (domain-wide delegation) auth path for Workspace accounts
  39. 9e11f3d 2026-07-01 george: pre-emptive OAuth token-age monitor + durable-migration decision memo
  40. 3608276 2026-07-01 Add OAuth durability decision memo — retire the weekly-token treadmill (SA/DWD for Workspace, fold/WARN for consumer)
  41. 0ff8bf3 2026-06-26 auto-save: 2026-06-26T16:04:29 (1 files) — server.js
  42. 23d49a6 2026-06-24 send-with-attachment: resolve any account (steve-personal/agentabrams), not just office/info
  43. 2626a50 2026-06-24 Add DELETE /api/drafts/:id route + make GET /api/drafts account-aware (was always steve-office)
  44. a42bc74 2026-06-17 George external-send guard: block outbound sends to non-Steve recipients unless human-approval token present (X-Send-Approval / send_approval_token); fail-closed. Born from autonomous-worker auto-send incident 2026-06-17. NOTE: must also deploy to the Kamatera george (the instance MCP actually uses).
  45. 918647c 2026-06-17 Add launchd KeepAlive supervisor for george-gmail :9850 (durable fix for the unsupervised-death outage)
  46. 8c22e56 2026-06-12 secret-strip george-gmail: env-first the hardcoded George basic-auth cred (server) + remove browser-embedded copy (client)
  47. cf27272 2026-06-12 Add scoped one-shot trash for benign cron-drift alert flood in info@
  48. 8599fb2 2026-05-31 Link favicon.svg in head (use branded SVG, not .ico fallback)
  49. 0d55d20 2026-05-31 Add per-site favicon (kills /favicon.ico 404)
  50. ac33e88 2026-05-26 george-gmail: recover prod hand-patches (basic-auth env migration) into source + preserve Mac2 static-snapshot 404 guard
  51. 630eea8 2026-05-19 fix(public/index.html): wrap xfetch helper in <script> tags
  52. 941feb1 2026-05-19 Snapshot-files cleanup: untrack server.js.bak-*, broaden .gitignore, add 404 guard
  53. c2bdfca 2026-05-19 add trash-fleet-mailtests.js — one-off cleanup of 89 fleet delivery-test emails (modeled on trash-redfin-zillow.js)
  54. ab70d2e 2026-05-19 George: make the 'From job:' provenance banner opt-out (no_source_tag flag / x-george-no-tag header) so customer-facing sends can be banner-free
  55. fd1481e 2026-05-19 Fleet auto-responder: stop logging non-fleet mail to UI run-log (run-log tracks fleet inquiries only)
  56. 8f310af 2026-05-19 Fleet auto-responder: update usage docstring (daemon/force flags, HTML reply, UI)
  57. 2f343b5 2026-05-19 Fleet auto-responder: fix scan query (bare deliveredto:steve+ never matches in Gmail) + probe-subject safety guard (RETEST/FLEETMAILTEST/DTEST/PMRCV)
  58. e9fdf0f 2026-05-19 Fleet auto-responder: --daemon self-scheduling mode (pm2-managed, 3-min interval); UI on port 9768
  59. 9c7a470 2026-05-19 fleet-autoresponder UI: move port 9766→9768 (9766 reserved for agent-architect mindmap viewer)
  60. d6e30ce 2026-05-19 Fleet auto-responder: pm2 ecosystem config — 3-min cron schedule + UI process
  61. fb57ee9 2026-05-19 Fleet auto-responder admin UI dashboard (Express viewer, port 9766, pm2-managed)
  62. 13d4e3b 2026-05-19 Fleet auto-responder: multipart/alternative HTML+plain reply, structured run-log + state
  63. 7d77cad 2026-05-19 Fleet auto-responder: deliveredto query fix + --only-ids scoped-test flag
  64. d135118 2026-05-19 Add fleet auto-responder for the 44 dw-domain-fleet domains
  65. 02ef28b 2026-05-18 Make /api/profile honor ?account= param like the other 31 routes
  66. 2cbc311 2026-05-18 remove bogus stevesclaude account from George — theagentabrams@gmail.com (agentabrams) is the real AI account; also exempt /auth/agentabrams from basic auth
  67. 23979b0 2026-05-18 Add agentabrams (theagentabrams@gmail.com) as 5th george account slot
  68. ec801aa 2026-05-18 george /auth honors ?account= — dispatches to per-account re-auth routes
  69. a4d0448 2026-05-12 fix(george): ENV_PATH portable across Mac2/Kamatera
  70. facbb3b 2026-05-06 initial scaffold (gitify-all 2026-05-06)

Authors

  • Steve70

Agents used

  • none detected

Skills used

  • /bridge-alert-state25
  • /auth3
  • /info3
  • /agentabrams2
  • /drafts2
  • /search2
  • /dead1
  • /day1
  • /attachment-local1
  • /tmp-only1
  • /npm1
  • /npx1
  • /homebrew1
  • /favicon1
  • /index1
  • /script1
  • /force1
  • /alternative1
  • /fleet-autoresponder-ledger1
  • /bounce1
  • /auto1
  • /list1
  • /profile1
  • /catch1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

7b49e78 · 2026-07-15 · feat(bridge): painless George token renewal — WARN/CRIT accounts get a one-click re-consent email (DTD verdict B, 2026-07-15)
token-age-warn.mjs computed WARN/CRIT but never alerted. token-bridge.mjs reads its latest.json and emails Steve a "Renew now" button (George /auth/<account>) for each aging/dead token, throttled 1/20h per account, +CNCP card. 3x/day launchd plist runs monitor then bridge. Verified: emailed 4 accounts (steve-personal dead, calendar dead, steve@/info@ aging).
769c500 · 2026-07-01 · george-gmail: pre-write dormant SA/DWD (domain-wide delegation) auth path for Workspace accounts
Adds a service-account/JWT impersonation path alongside the existing OAuth refresh-token
path so the Workspace pair (steve@ + info@) can drop off the ~7-day Testing-mode token
treadmill. Fully DORMANT by default: with no GOOGLE_SA_KEYFILE set, saAuthFor() returns
null and the SA-override block is a no-op — every account keeps its refresh-token client
byte-for-byte. Arm via GOOGLE_SA_KEYFILE + GEORGE_SA_ACCOUNTS=steve-office,info (Workspace
only; consumer gmail keys can never be SA-backed). resolveAccount() reads the module-level
service-client vars per request, so it transparently picks up the SA clients when armed.

Verified by boot tests: dormant -> 0 SA lines + all accounts on refresh tokens; armed w/
missing or bogus keyfile -> clear warn + safe fallback + still boots. Live JWT impersonation
awaits Steve's gated console work (SA creation + domain-wide delegation authorization).
Arming checklist + rollback in PLAN-OAUTH-DURABILITY.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9e11f3d · 2026-07-01 · george: pre-emptive OAuth token-age monitor + durable-migration decision memo
Council #3 — end the weekly-token treadmill. Read-only token-age-warn.mjs probes each
refresh token against Google's token endpoint (idempotent refresh, never writes creds) and
combines validity with a hash-tracked age; WARNs ~1d before the 7d Testing-mode expiry,
CRIT on invalid_grant. Alerts on worsening transition only (CNCP + George email via run.sh).
First run surfaced a live finding: GOOGLE_CALENDAR_REFRESH_TOKEN is DEAD (appointments push
silently broken). Migration paths (service-account/DWD or Internal user-type) in
PLAN-OAUTH-DURABLE-TOKENS.md — those steps are Steve-gated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
918647c · 2026-06-17 · Add launchd KeepAlive supervisor for george-gmail :9850 (durable fix for the unsupervised-death outage)
Tracked plist + install note. Not bootstrapped here — Steve runs the bootstrap
(starts the email service + touches launchd). RunAtLoad+KeepAlive so the :9850
send service self-respawns; daily-overnight-skus + idea-loop-digest were only
failing because this send path died.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
630eea8 · 2026-05-19 · fix(public/index.html): wrap xfetch helper in <script> tags
xfetch was sitting OUTSIDE any <script> tag, wedged between the
react.production.min.js and react-dom.production.min.js script tags.
Browsers parsed it as text content → xfetch was undefined → every
api()/apiPost() call (lines 67-74, 88, 96, 105, 113) threw ReferenceError
on page load. George admin inbox UI was unusable in any browser.

Pure positional fix — wrapped the existing one-line function in
<script>...</script>. The inline basic-auth credential
("admin:DWSecure2024!") was already in this file at lines 60 + 66 before
this commit and is unchanged by it. Credential rotation across the fleet
is tracked separately (cred is also in dozens of sibling repos per MEMORY).

Surfaced by tick 169 session #102 Teal mechanical refactor pass; that
pass deferred the fix because the diff touches the cred line, but the
LIVE-BROKEN production UI takes precedence — fixing now, rotation later.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
941feb1 · 2026-05-19 · Snapshot-files cleanup: untrack server.js.bak-*, broaden .gitignore, add 404 guard
- Untrack the 7-month-old server.js.bak-20260421-094351 snapshot that was
  tracked in the repo (still present on disk, now ignored).
- Broaden .gitignore to cover *.bak.*, *.bak-*, *.pre-*, *.orig, *.rej,
  *.swp, *~ so future snapshots don't slip back in.
- Add a static-snapshot 404 guard middleware that runs before
  express.static('public'); any URL matching .bak, .bak-*, .pre-*, .orig,
  .rej, .swp, or trailing ~ returns 404 regardless of disk state.
  Defense-in-depth on top of the existing basic-auth gate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7d77cad · 2026-05-19 · Fleet auto-responder: deliveredto query fix + --only-ids scoped-test flag
Tested live on barwallpaper.com + grassclothwallcovering.com (2-domain test):
- Gmail does not match plus-tags via to:; switched candidate query to
  deliveredto: and rely on Delivered-To header parsing for domain recovery.
- Added --only-ids flag so a scoped test does not touch the inbox backlog
  of unrelated probe mail.
- Verified: reply sent from info@designerwallcoverings.com landed in the
  recipient INBOX (not Spam), correct per-domain sign-off, no loop, label
  + 7-day ledger dedup both idempotent on re-run.

Ledger (data/fleet-autoresponder-ledger.json) gitignored — runtime state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
d135118 · 2026-05-19 · Add fleet auto-responder for the 44 dw-domain-fleet domains
Sends one warm acknowledgment from info@designerwallcoverings.com to genuine
new customer inquiries arriving at info@<fleet-domain> (forwarded into the
steve-office Gmail via Purelymail catch-all + plus-tag). Reply-To is set to
info@<fleet-domain> so customer replies route back to the right site.

Spam-safety: skips Spam, no-reply/bounce senders, bulk/auto/list mail, and any
mail from designerwallcoverings.com or a fleet domain (loop guard). One reply
per sender per rolling 7-day window (persisted ledger). Marks every processed
message with the 'fleet-autoreplied' Gmail label — idempotent on re-run.

Reuses George's DW-MCP/.env OAuth credentials; no prod deploy needed.
Not yet scheduled — run manually with: node fleet-autoresponder.js

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a4d0448 · 2026-05-12 · fix(george): ENV_PATH portable across Mac2/Kamatera
ENV_PATH was hardcoded to /root/Projects/Designer-Wallcoverings/DW-MCP/.env
which only exists on Kamatera. On Mac2 the same .env lives at
~/Projects/Designer-Wallcoverings/DW-MCP/.env. The readFileSync would
quietly fail in the try/catch upstream, INFO_REFRESH_TOKEN stayed empty,
and the boot log said 'Info@ not configured' even though the token IS
in the Mac2 .env.

Fix: try $DW_MCP_ENV then $HOME/Projects/.../DW-MCP/.env then the
legacy /root/ path. First readable wins.

Symptom that exposed this: GET /api/search?account=info returned
'unknown account: info' because infoGmail was never built. After
restart with the fix, log says 'Info@ account initialized (full
Workspace)' and /api/search returns the real DW inbox (201 messages
for a Shopify-orders query, including 'New Order on the New DW').

File tree

28 files tracked. Click any to browse the source at HEAD.

Other build journals

← Generative Art Canvas  ·  all 4 projects  ·  George Mcp →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 0ms