md-first memory extraction framework for AI agents. Markdown is the single source of truth; SQLite holds state and LanceDB provides the rebuildable vector + BM25 + scalar index. The codebase follows a single-direction DDD layering (entrypoints -> service -> memory -> infra, with component / core / config cross-cutting) enforced by import-linter. Engineering surface: - Coding conventions in .claude/rules/ (path-scoped) and workflows in .claude/skills/ (/commit, /new-branch, /pr). - GitHub Actions CI runs make lint + test + integration; pre-commit mirrors the gates locally (ruff, hygiene hooks, gitlint commit-msg). - Commit messages follow Conventional Commits, enforced by gitlint. - make lint also enforces datetime two-zone discipline and OpenAPI drift.
1.2 KiB
1.2 KiB
paths
| paths | ||
|---|---|---|
|
Datetime handling rule (two-zone discipline)
Never construct or read "now" directly. All datetime flows through
everos.component.utils.datetime. This is a hard CI gate
(make check-datetime, wired into make lint).
Banned (the checker fails the build on these)
datetime.now(),datetime.utcnow(),datetime.today()time.time(),time.time_ns()datetime(YYYY, ...)withouttzinfo=.astimezone(...)/.replace(tzinfo=...)outside the helper module
Use instead
| Need | Helper |
|---|---|
| "now" for storage (UTC) | get_utc_now() |
| "now" for display (configured TZ) | get_now_with_timezone() |
| today's date, display TZ | today_with_timezone() |
| normalize a value to UTC | ensure_utc(d) |
| render to display TZ | to_display_tz(d) |
| parse ISO / epoch / str | from_iso_format(v), from_timestamp(ts) |
| serialize | to_iso_format(d), to_date_str(d), to_timestamp_ms(d) |
Two zones: persist in UTC, present in the configured display TZ. Crossing them goes through the helpers — never ad-hoc. See docs/datetime.md.