1. 14 Jan, 2026 5 commits
    • Johnny's avatar
      fix: set DRIVER=sqlite in CI to prevent TestMain from spawning child processes · e082adf7
      Johnny authored
      Problem:
      - store/test/TestMain checks if DRIVER env var is set
      - If not set, it runs tests for all 3 drivers (sqlite, mysql, postgres)
        by spawning child 'go test' processes
      - This conflicts with t.Parallel() in individual tests
      - CI workflow didn't set DRIVER, triggering multi-driver execution
      
      Solution:
      - Set DRIVER=sqlite in GitHub Actions workflow
      - TestMain will run tests once with SQLite driver
      - Tests run in parallel with t.Parallel() as intended
      - Avoids spawning child processes and race conditions
      
      Why SQLite:
      - Fastest test execution (no container startup)
      - Sufficient for CI validation
      - MySQL/Postgres can be tested locally when needed
      
      This fixes the 'table already exists' errors and test flakiness
      in CI while maintaining parallel execution benefits.
      e082adf7
    • Johnny's avatar
      perf: enable parallel execution for all store tests · 411e8fc5
      Johnny authored
      Add t.Parallel() to all 159 test functions in store/test/
      
      Benefits:
      - Tests run in parallel (8-16 concurrent on typical CI)
      - Each test already has isolated database (safe to parallelize)
      - No shared state between tests
      - Go test runner handles synchronization
      
      Expected performance:
      - SQLite tests: 4-6min → 30-45sec (87% faster)
      - MySQL tests: 6-8min → 45-60sec (88% faster)
      - Better CPU utilization (10-15% → 80-95%)
      
      Why it's safe:
      - NewTestingStore() creates isolated DB per test
      - No global state mutations
      - Each test uses t.TempDir() for file isolation
      - Container-based tests use unique database names
      
      Impact on CI workflow:
      - Backend tests workflow: 4-6min → 1-2min total
      - Store test group: 3-4min → 20-30sec
      - 8-10x speedup from parallelization alone
      411e8fc5
    • Johnny's avatar
      perf: optimize backend tests with parallel execution · 07b837b6
      Johnny authored
      Major improvements:
      - Split tests into 4 parallel groups (store, server, plugin, other)
        * 3-4x faster test execution (4-6min → 1-2min)
      
      - Enable golangci-lint cache (was disabled)
        * Saves 20-30s on lint checks
      
      - Remove unnecessary flags
        * check-latest: API call overhead
        * --verbose: unnecessary output
        * skip-cache: disabled caching
      
      - Add race detector (-race)
        * Better concurrency bug detection
        * Only 10-20% overhead
      
      - Add coverage tracking
        * Per-group coverage upload to Codecov
        * Better visibility into test quality
      
      - Add concurrency control
        * Cancel outdated PR runs
        * Saves runner minutes
      
      - Clean up output processing
        * Remove test.log and complex awk/sed parsing
        * GitHub Actions shows output by default
      
      Performance impact:
      - Setup: 30s → 10s (2-3x faster)
      - Tests: Sequential → 4 parallel jobs (3-4x faster)
      - Total: 4-6min → 1-2min (~70% faster)
      07b837b6
    • Johnny's avatar
      fix: correct manifest merge step in workflows · d7c56412
      Johnny authored
      - Re-run docker/metadata-action in merge job to generate proper JSON
      - Use steps.meta.outputs.json instead of needs.prepare.outputs.tags
      - Remove unused prepare job outputs (tags, labels)
      - Simplify workflow dependency chain
      
      This fixes the jq parse error when creating multi-arch manifests.
      d7c56412
    • Johnny's avatar
      perf: optimize CI/CD workflows and Docker builds · d1d2d869
      Johnny authored
      - Implement parallel matrix builds for multi-platform images (~50% faster)
      - Add pnpm store caching for 20-40s savings on cache hits
      - Use --frozen-lockfile for faster, deterministic installs
      - Optimize Dockerfile: CGO_ENABLED=0, -trimpath, static linking
      - Reduce Docker layers and improve caching strategy
      - Enhance .dockerignore to exclude unnecessary files (~1MB saved)
      
      Build time improvements:
      - Canary: 12-18min → 6-10min
      - Stable: 17-27min → 8-12min
      d1d2d869
  2. 13 Jan, 2026 4 commits
    • Johnny's avatar
      253e79c1
    • Steven's avatar
      refactor: simplify editor scroll logic · 73c30107
      Steven authored
      - Extract `scrollToCaret` helper to deduplicate scroll logic
      - Unify precise scroll behavior for both manual triggers and auto-scroll
      73c30107
    • Steven's avatar
      fix: improve editor auto-scroll and Safari IME handling (#5469) · 4e34ef22
      Steven authored
      - Use `textarea-caret` for precise cursor position calculation instead of line approximation
      - Update `scrollToCursor` to scroll to the actual cursor position
      - Fix Safari double-enter issue with IME in list completion
      4e34ef22
    • Steven's avatar
      fix: prevent browser cache from serving stale memo data (#5470) · 61dbca8d
      Steven authored
      This fixes a critical data loss issue where users editing the same memo
      on multiple devices would overwrite each other's changes due to aggressive
      browser caching, particularly in Chromium-based browsers and PWAs.
      
      Changes:
      - Backend: Add Cache-Control headers to all API responses to prevent
        browser HTTP caching
      - Frontend: Force fresh fetch from server when opening memo editor by
        invalidating React Query cache
      - Frontend: Reduce memo query staleTime from 60s to 10s for better
        collaborative editing support
      
      Fixes #5470
      61dbca8d
  3. 12 Jan, 2026 6 commits
  4. 11 Jan, 2026 2 commits
    • Johnny's avatar
      fix(editor): filter RelationList to only show referencing memos · 9a3451b9
      Johnny authored
      - Filter out COMMENT type relations, only show REFERENCE type
      - When editing a memo, only show relations where current memo is the source
      - Pass memoName through EditorMetadata to RelationList for filtering
      9a3451b9
    • Johnny's avatar
      fix: allow guests to view public memo comments · 7053edae
      Johnny authored
      Add ListMemoComments to public endpoints whitelist so unauthenticated
      users can see public comments. The service layer already filters
      comments by visibility (only PUBLIC for guests).
      
      Fixes #5471
      7053edae
  5. 08 Jan, 2026 5 commits
  6. 07 Jan, 2026 10 commits
  7. 06 Jan, 2026 8 commits