1. 28 Jan, 2026 1 commit
  2. 27 Jan, 2026 2 commits
  3. 26 Jan, 2026 9 commits
  4. 23 Jan, 2026 4 commits
  5. 22 Jan, 2026 7 commits
  6. 21 Jan, 2026 2 commits
  7. 20 Jan, 2026 9 commits
  8. 19 Jan, 2026 2 commits
  9. 17 Jan, 2026 2 commits
    • Johnny's avatar
      feat: allow setting custom timestamps when creating memos and comments · dc7ec8a8
      Johnny authored
      Allow API users to set custom create_time, update_time, and display_time
      when creating memos and comments. This enables importing historical data
      with accurate timestamps.
      
      Changes:
      - Update proto definitions: change create_time and update_time from
        OUTPUT_ONLY to OPTIONAL to allow setting on creation
      - Modify CreateMemo service to handle custom timestamps from request
      - Update database drivers (SQLite, MySQL, PostgreSQL) to support
        inserting custom timestamps when provided
      - Add comprehensive test coverage for custom timestamp functionality
      - Maintain backward compatibility: auto-generated timestamps still
        work when custom values are not provided
      - Fix golangci-lint issues in plugin/filter (godot and revive)
      
      Fixes #5483
      dc7ec8a8
    • Johnny's avatar
      feat(filter): add CEL list comprehension support for tag filtering · cbf46a29
      Johnny authored
      Add support for CEL exists() comprehension with startsWith, endsWith, and
      contains predicates to enable powerful tag filtering patterns.
      
      Features:
      - tags.exists(t, t.startsWith("prefix")) - Match tags by prefix
      - tags.exists(t, t.endsWith("suffix")) - Match tags by suffix
      - tags.exists(t, t.contains("substring")) - Match tags by substring
      - Negation: !tags.exists(...) to exclude matching tags
      - Works with all operators (AND, OR, NOT) and other filters
      
      Implementation:
      - Added ListComprehensionCondition IR type for comprehension expressions
      - Parser detects exists() macro and extracts predicates
      - Renderer generates optimized SQL for SQLite, MySQL, PostgreSQL
      - Proper NULL/empty array handling across all database dialects
      - Helper functions reduce code duplication
      
      Design decisions:
      - Only exists() supported (all() rejected at parse time with clear error)
      - Only simple predicates (matches() excluded to avoid regex complexity)
      - Fail-fast validation with helpful error messages
      
      Tests:
      - Comprehensive test suite covering all predicates and edge cases
      - Tests for NULL/empty arrays, combined filters, negation
      - Real-world use case test for Issue #5480 (archive workflow)
      - All tests pass on SQLite, MySQL, PostgreSQL
      
      Closes #5480
      cbf46a29
  10. 14 Jan, 2026 2 commits