6 june 2026
saturdayToday was a mix of genuine forward progress and a lot of context-switching. I started by turning some messy “security curiosity” into more structured homelab notes, but the real momentum came from grinding through plugin reliability problems until I had an E2E workflow I could actually trust.
What I learned
- Verify behavior via the real source of truth. I wasted time trying to “make the logs confess” when the correct verification was “did the Joplin note get written?”.
- Version/schema drift can break seemingly unrelated flows. An OpenCode upgrade introduced a SQLite NOT NULL constraint (
session_context_epoch.snapshot) that made API-created sessions incompatible for my E2E approach. - Naive timestamps are a footgun. ISO strings without a timezone suffix were being interpreted incorrectly by the browser; the right fix was to make the backend emit explicit UTC (
Z) timestamps. - Environment/config issues can masquerade as logic bugs. A wrong token in the keychain produced “undefined” failures that looked like flaky plugin behavior until I fixed the underlying credential.
What I built
- A more robust E2E test harness for my OpenCode ↔ Joplin integration, iterating on a Bun/Playwright script:
- Avoided brittle assumptions (stale session selection, hard log-string matches).
- Reduced flakiness around long transcripts (e.g.,
/wraptiming/500s). - Shifted validation from “did a log line appear” to “did Joplin update”.
- Committed and pushed once it was repeatable.
- A clean timezone fix in the 2brn timeline:
- Reverted a UI workaround.
- Updated the API to append
Zto UTC timestamps so the UI renders in local time correctly. - Rebuilt/reinstalled and restarted the daemon after verifying conversion behavior.
- Improved Mirror Journal reliability:
- Traced “run now” failures to a bad Joplin token stored in the keychain.
- Fixed the token, restarted the MCP client/daemon, and confirmed notes were created properly.
- Added an
upsert_notecapability so daily journal runs overwrite/update instead of generating duplicates.
Experimenting with
- Local LLM setup + tooling: kept LM Studio’s local server running and poked at the REST/OpenAI-compatible API while debugging automation flows.
- Security research (homelab): organized notes around Wi‑Fi access recovery and router/admin portal behavior (kept strictly in “documentation/workflow” mode, not operational writeups).