Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
39b1068
refactor(persistence): switch 6 files to providers.management.capabil…
Aureliolo May 15, 2026
245fe70
feat(scripts): add no-api-dto-in-persistence-or-service gate
Aureliolo May 15, 2026
2cf6941
feat(persistence): add CeremonySchedulerStateRepository protocol and …
Aureliolo May 15, 2026
453e156
feat(api): wrap webhook retry endpoint in IdempotencyService
Aureliolo May 15, 2026
68524f9
fix(memory): acquire _store_lock on all readers and writers of InMemo…
Aureliolo May 15, 2026
c00a289
feat(persistence): add 6 generic repository protocols in _generics.py
Aureliolo May 15, 2026
871d05f
docs(decisions): ADR-0001 repository protocol consolidation
Aureliolo May 15, 2026
21695af
feat(persistence): add MeetingCooldownRepository protocol and dual-ba…
Aureliolo May 15, 2026
ead3bfd
feat(persistence): add TrackedContainerRepository and sync schema.sql
Aureliolo May 15, 2026
79fe034
build(pre-commit): wire schema-drift-revisions-sqlite gate at pre-push
Aureliolo May 15, 2026
3444dec
test(persistence): remove dead raw DDL from tests/unit/memory/org/con…
Aureliolo May 15, 2026
a3df458
refactor(messaging): split JetStreamTaskQueue lifecycle and hot-path …
Aureliolo May 15, 2026
5d805e7
refactor(communication): split InMemoryMessageBus lifecycle and hot-p…
Aureliolo May 15, 2026
73c1e32
refactor(messaging): align JetStreamMessageBus shutdown with lifecycl…
Aureliolo May 15, 2026
d0aacef
feat(sandbox): add Docker container reconciliation helper for restart…
Aureliolo May 15, 2026
60fb67c
feat(persistence): wire 3 new WP-1 repos into PersistenceBackend prot…
Aureliolo May 15, 2026
c4368e5
feat(engine): persist and hydrate ceremony scheduler state on sprint …
Aureliolo May 15, 2026
d59d56a
feat(communication): persist meeting cooldowns and wire cooldown_repo
Aureliolo May 15, 2026
476ea48
feat(sandbox): tag managed containers with synthorg.managed label
Aureliolo May 15, 2026
99c425d
test(persistence): conformance tests for 3 new WP-1 repos
Aureliolo May 15, 2026
f366f6c
test(persistence): WP-1 restart-safety conformance test
Aureliolo May 15, 2026
00de2a4
test(persistence): add stubs for 3 new WP-1 repo properties on _FakeB…
Aureliolo May 15, 2026
7ae984b
fix(wp1): pre-PR triage Wave 1 (M/Md/Mn fixes)
Aureliolo May 15, 2026
7ad72ff
refactor(persistence): WP-1 protocols compose IdKeyedRepository per A…
Aureliolo May 15, 2026
03e2ff6
fix(persistence): keep convention_gate_map single-entry per MANDATORY
Aureliolo May 15, 2026
0a26c03
fix(persistence): allowlist canonical page-size literal in IdKeyed li…
Aureliolo May 15, 2026
72c5f59
refactor(persistence): PresetOverrideRepo composes IdKeyedRepository …
Aureliolo May 15, 2026
416a5f7
test(providers): align _FakeOverrideRepo with new save/list_items sur…
Aureliolo May 15, 2026
caf3e1c
refactor(persistence): ProviderAuditRepo composes AppendOnlyRepositor…
Aureliolo May 15, 2026
a61ffc8
test(providers): align fake audit repos with new AppendOnly surface
Aureliolo May 15, 2026
fe38de8
refactor(persistence): CheckpointRepository composes AppendOnlyReposi…
Aureliolo May 16, 2026
be91e66
test(persistence): align test_checkpoint_repo with append surface
Aureliolo May 16, 2026
a29236f
test(engine,persistence): align checkpoint test fixtures with append …
Aureliolo May 16, 2026
fe64062
fix(engine): document state_repo arg in CeremonyScheduler.__init__
Aureliolo May 16, 2026
dfeb61d
refactor(persistence): MessageRepository composes AppendOnlyRepositor…
Aureliolo May 16, 2026
875bd01
test(persistence): align sqlite test_repositories with append surface
Aureliolo May 16, 2026
bee360c
refactor(persistence): WorkflowDefinitionRepository composes IdKeyed …
Aureliolo May 16, 2026
2179813
test(persistence): align workflow definition test fakes with Filtered…
Aureliolo May 16, 2026
483f4da
refactor(persistence): AgentStateRepository composes IdKeyedRepositor…
Aureliolo May 16, 2026
725ab1c
refactor(persistence): ParkedContextRepository composes IdKeyedReposi…
Aureliolo May 16, 2026
9df4bcc
refactor(persistence): CircuitBreakerStateRepository composes IdKeyed…
Aureliolo May 16, 2026
35af5c4
refactor(persistence): CustomRuleRepository composes IdKeyed+Filtered…
Aureliolo May 16, 2026
87b96e5
refactor(persistence): McpInstallationRepository composes IdKeyedRepo…
Aureliolo May 16, 2026
6f3c1bf
refactor(persistence): RiskOverride+SsrfViolation compose IdKeyedRepo…
Aureliolo May 16, 2026
9c99357
docs(persistence): mark VersionRepository as bespoke per ADR-0001 D7
Aureliolo May 16, 2026
c5efe25
refactor(persistence): Wave A composes Task+CostRecord+Approval+Proje…
Aureliolo May 16, 2026
e3a74ac
refactor(persistence): PrincipleOverride composes IdKeyedRepository p…
Aureliolo May 16, 2026
f33350b
refactor(persistence): ArtifactRepository composes IdKeyedRepository …
Aureliolo May 16, 2026
46ef33f
refactor(persistence): TrainingPlan + TrainingResult compose IdKeyed …
Aureliolo May 16, 2026
cc1a498
refactor(persistence): SettingsRepository composes IdKeyedRepository …
Aureliolo May 16, 2026
7d0ebe4
refactor(persistence): WorkflowExecutionRepository adds list_items + …
Aureliolo May 16, 2026
fa2adba
refactor(persistence): Connection family composes IdKeyed+FilteredQue…
Aureliolo May 16, 2026
6c51793
merge: Artifact migration (worktree branch)
Aureliolo May 16, 2026
5caa084
merge: WorkflowExecution migration (worktree branch)
Aureliolo May 16, 2026
e876528
docs(adr-0001): add comprehensive per-entity inventory table
Aureliolo May 16, 2026
9626759
refactor(persistence): PersonalityPresetRepository composes IdKeyedRe…
Aureliolo May 16, 2026
2accfc6
refactor(persistence): WorkflowExecutionRepository composes IdKeyed+F…
Aureliolo May 16, 2026
7acec0e
refactor(persistence): SessionRepository, LockoutRepository, RefreshT…
Aureliolo May 16, 2026
d96b3b5
refactor(persistence): OntologyEntityRepository + OntologyDriftReport…
Aureliolo May 16, 2026
51e2aa9
refactor(persistence): SubworkflowRepository composes IdKeyedReposito…
Aureliolo May 16, 2026
1d34f25
fix(persistence): wave-C callsites (user_service list_users->list_ite…
Aureliolo May 16, 2026
4c24474
merge: WorkflowExecution-fix (proper generic composition)
Aureliolo May 16, 2026
a00e779
merge: Ontology migration (worktree branch)
Aureliolo May 16, 2026
a6e2517
merge: ADR-0001 docs (worktree branch)
Aureliolo May 16, 2026
65b7393
fix(persistence): add purge_before stubs to OntologyDriftReportReposi…
Aureliolo May 16, 2026
fcae465
test(persistence): update fakes/conformance tests to new generic surf…
Aureliolo May 16, 2026
63ce081
test(persistence): finish stale-fake cleanup; tests/ + src/ mypy + ru…
Aureliolo May 16, 2026
00fa1c1
chore(hooks): restore check_no_bulk_edit guard
Aureliolo May 16, 2026
b99b93e
fix(tests): clear ADR-0001 protocol migration residuals (settings + a…
Aureliolo May 16, 2026
fe16ca5
fix(tests): update protocol-compliance fakes for ADR-0001 generic met…
Aureliolo May 16, 2026
5e1e678
fix(tests): align org mutations/task engine/memory tests with ADR-000…
Aureliolo May 16, 2026
95cd9db
fix(tests): convert remaining tuple-shaped settings mocks to SettingR…
Aureliolo May 16, 2026
832dc63
fix(tests): add ADR-0001 query/list_items to fakes; keyset-filter in …
Aureliolo May 16, 2026
c8cb787
fix(tests): final ADR-0001 residuals (drift/escalation/subworkflow/ta…
Aureliolo May 16, 2026
0ae8b09
fix(types): satisfy mypy on engine fakes + test_org_mutations + test_…
Aureliolo May 16, 2026
e96f181
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
7d9ada3
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
d118021
perf(test): halve migration cost in test_multi_tenancy_separate_datab…
Aureliolo May 16, 2026
6b50d2c
fix(wp1): pre-PR triage Wave 2 — push-persistence, restart cycle, doc…
Aureliolo May 16, 2026
896b074
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
b8c0290
fix(wp1): replace placeholder text in schema_drift_baseline for 3 WP-…
Aureliolo May 16, 2026
afffb76
fix: apply WP-1 persistence review feedback round 1
Aureliolo May 16, 2026
58e08c9
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
f6e4088
fix: complete WP-1 persistence review feedback + tests
Aureliolo May 16, 2026
7a28923
fix: align test doubles + expectations with WP-1 protocol changes
Aureliolo May 16, 2026
b89488d
chore: add PreToolUse hook blocking git --no-verify/bypass flags
Aureliolo May 16, 2026
17d4366
refactor: replace 5 ad-hoc pagination loops with shared paginate() he…
Aureliolo May 16, 2026
e4160c4
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
911abca
fix: babysit round 2 -- 22 CodeRabbit findings + paginator gate
Aureliolo May 16, 2026
68fa85c
fix: babysit round 3 -- 11 CodeRabbit findings + skill dedup
Aureliolo May 16, 2026
0678972
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
43f9f7f
fix: babysit round 4 -- 2 CodeRabbit findings + attachments field + c…
Aureliolo May 16, 2026
85638bf
fix: ruff-format conformance tests + regen openapi.gen.ts for attachm…
Aureliolo May 16, 2026
1704bd5
fix: CodeRabbit findings -- hook fail-closed + UTC timestamp persistence
Aureliolo May 16, 2026
493a24a
fix: pin MessageFactory.attachments to avoid polyfactory DataPart syn…
Aureliolo May 16, 2026
c61e442
Merge remote-tracking branch 'origin/main' into refactor/wp1-persiste…
Aureliolo May 16, 2026
c765393
fix: address CodeRabbit review on persistence-layer-discipline (error…
Aureliolo May 17, 2026
3bc7d0d
fix: exhaustive owner detection in bootstrap + tolerant ceremony hydr…
Aureliolo May 17, 2026
1c3f726
chore: regenerate runtime_stats.yaml (convention_gates 46->47, test c…
Aureliolo May 17, 2026
949abda
fix: babysit round 8, codecov/patch coverage (pagination-validation +…
Aureliolo May 17, 2026
a973311
fix: babysit round 9, CodeRabbit review 4304596685 (13 findings) + ru…
Aureliolo May 17, 2026
5f998ff
fix: babysit round 10, Test Integration postgres parity + CodeRabbit …
Aureliolo May 17, 2026
146c7d9
fix: babysit round 11, CodeRabbit review 4304654075 (Task/Message/Cos…
Aureliolo May 17, 2026
73bb723
fix: babysit round 12, codecov/patch coverage (project_repo pg+sqlite…
Aureliolo May 17, 2026
36cda40
fix: babysit round 13, codecov/patch coverage (sqlite decision_repo u…
Aureliolo May 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@
"command": "bash scripts/check_git_c_cwd.sh",
"timeout": 5000
},
{
"type": "command",
"command": "bash scripts/check_no_git_no_verify.sh",
"timeout": 5000
},
{
"type": "command",
"command": "python3 scripts/check_no_bulk_edit.py",
Expand Down
32 changes: 7 additions & 25 deletions .claude/skills/babysit-pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -336,36 +336,18 @@ Group findings by file. For each file:

If a fix changes test expectations: update the test in the same round. If a fix introduces a new code path: add coverage in the same round.

## Phase 9: verify locally
## Phase 9: verification is delegated to the commit/push hooks (do NOT re-run them)

Conditional gates by file type touched:
**Do not manually run `ruff` / `mypy` / `pytest` / `eslint` / `go test` here.** This repo's `.pre-commit-config.yaml` already hard-gates every push:

- **Python** (`.py` in `src/` or `tests/`):
- **pre-commit stage** (fires on Phase 10's `git commit`): `ruff`, `ruff-format`.
- **pre-push stage** (fires on Phase 10's `git push`): `mypy` (affected modules, via `run_affected_mypy.py`), `pytest-unit` (affected modules, via `run_affected_tests.py`), `eslint-web`, `go-vet` / `go-test`, plus every convention gate (kill-switch, list-pagination, no-migration-framing, schema-drift, no-magic-numbers, boundary-typed, and the rest).

```bash
uv run ruff check src/ tests/ --fix
uv run ruff format src/ tests/
uv run mypy --num-workers=4 src/ tests/
uv run python -m pytest tests/ -m unit -n 8
```

- **Web** (`.tsx`/`.ts`/`.css` in `web/src/`):
A failing hook **aborts the commit or push locally**, so nothing reaches CI or CodeRabbit and no review cycle is burned. The affected-subset hooks are also strictly faster than a manual full-suite run, so re-running the full `pytest -m unit` or whole-tree `mypy` here is pure duplicated wall-clock with no extra safety.

```bash
npm --prefix web run lint
npm --prefix web run type-check
npm --prefix web run test
```

- **Go** (`.go` in `cli/`):

```bash
go -C cli vet ./...
go -C cli test ./...
go -C cli build ./...
```
The `skip:` list in `.pre-commit-config.yaml` only suppresses these on **pre-commit.ci** (the cloud mirror); locally they all run. Do not mistake that skip list for "these do not run on my push".

Failure handling: if a gate fails, fix the failure in this round (don't push broken code). If you can't, surface it via `AskUserQuestion` and pause the loop.
What this phase actually does: **nothing but proceed to Phase 10.** The push there is the gate. If the commit or push is rejected by a hook, Phase 10 step 4 owns the fix-forward loop (triage the hook output, fix the real issue, new commit, re-push; never `--no-verify`, never `--amend`). If a hook failure cannot be fixed this round, surface it via `AskUserQuestion` and pause the loop. The only manual check worth running here is one a hook genuinely does NOT cover (rare, e.g. a one-off repro the reviewer explicitly asked for), and even then scope it to the single file, never the whole tree.

## Phase 9b: pre-push completeness sweep (mandatory before EVERY push)

Expand Down
28 changes: 10 additions & 18 deletions .claude/skills/pre-pr-review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -889,38 +889,30 @@ After all fixes:
- If a fix requires test changes, change the tests too
- If a fix introduces new code paths, add test coverage

## Phase 8: Post-Fix Verification
## Phase 8: Stage (verification is delegated to the commit/push hooks)

Run automated checks again (same conditional gating as Phase 2):
**Do NOT manually re-run `ruff` / `mypy` / `pytest` / `eslint` here.** The Phase 2 initial run already informed the review agents; re-running the full suite before the commit is pure duplicated wall-clock. Phase 10's `git commit` + `git push` fire this repo's real gates:

**Python checks (steps 1-4):** Run only if `src_py` or `test_py` files were changed or modified during Phase 7.
- **pre-commit stage** (on `git commit`): `ruff`, `ruff-format`.
- **pre-push stage** (on `git push`): `mypy` (affected, `run_affected_mypy.py`), `pytest-unit` (affected, `run_affected_tests.py`), `eslint-web`, `go-vet` / `go-test`, plus every convention gate.

1. `uv run ruff check src/ tests/`
2. `uv run ruff format src/ tests/`
3. `uv run mypy --num-workers=4 src/ tests/`
4. `uv run python -m pytest tests/ -n 8`
A failing hook aborts the commit/push **locally** (nothing reaches the remote or a PR), and the affected-subset hooks are faster than a manual full run. The `skip:` list in `.pre-commit-config.yaml` only suppresses these on pre-commit.ci (the cloud mirror); locally they all run.

**Web dashboard checks (steps 5-7):** Run only if `web_src` or `web_test` files were changed or modified during Phase 7.

5. `npm --prefix web run lint`
6. `npm --prefix web run type-check`
7. `npm --prefix web run test`

If anything fails, fix and re-run. Stage all changes after passing:
Just stage:

```bash
git add -A
```

If Phase 10's commit or push is then rejected by a hook, Phase 10 step 6 owns the fix-forward loop (fix the real issue, NEW commit, re-push; never `--no-verify`, never `--amend`).

## Phase 9: Polish Pass (code-simplifier)

**Skip this phase if:** quick mode was used, OR no agent findings were implemented (nothing changed beyond Phase 2 auto-fixes).

1. Launch `code-simplifier` on all modified files
2. If it suggests improvements, apply them
3. Re-run verification (same conditional gating as Phase 8):
- If `src_py` or `test_py` changed: `uv run ruff check src/ tests/` + `uv run ruff format src/ tests/` + `uv run mypy --num-workers=4 src/ tests/` + `uv run python -m pytest tests/ -n 8`
- If `web_src` or `web_test` changed: `npm --prefix web run lint` + `npm --prefix web run type-check` + `npm --prefix web run test`
3. `git add -A`. Do NOT manually re-run ruff/mypy/pytest/eslint; Phase 10's commit + push hooks gate the final state (see Phase 8). A hook rejection there is handled by Phase 10 step 6's fix-forward loop.

## Phase 10: Commit + Push + Create PR

Expand Down Expand Up @@ -964,7 +956,7 @@ git add -A
- Review coverage note (agents run, findings count)
- Issue linkage (`closes #N`) if user provided an issue number as argument or commits reference one

6. **If commit fails due to pre-commit hooks:** fix the issue and create a NEW commit. **NEVER use `--no-verify`.**
6. **If the commit or the push is rejected by a hook** (pre-commit: ruff/ruff-format; pre-push: mypy-affected, pytest-unit-affected, eslint-web, go, convention gates): triage the hook output, fix the real issue, create a NEW commit, and re-push. **NEVER use `--no-verify`, never `--amend`.** If a hook failure cannot be fixed in this pass, surface it to the user rather than bypassing.

## Phase 11: Summary

Expand Down
21 changes: 21 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,19 @@ repos:
pass_filenames: false
stages: [pre-push]

- id: schema-drift-revisions-sqlite
name: schema.sql matches accumulated revisions (sqlite arm)
entry: uv run python scripts/check_schema_drift_revisions.py --backend sqlite
language: system
# Trigger when the sqlite schema, sqlite revisions, the gate
# script itself, or this config changes. The postgres arm
# needs Docker and runs in CI only; sqlite catches the
# 'forgot to update schema.sql' bug-class at pre-push without
# external dependencies (~5-10s).
files: ^(src/synthorg/persistence/sqlite/(schema\.sql|revisions/.*\.sql)|scripts/check_schema_drift_revisions\.py|scripts/_schema_drift_.*\.py|\.pre-commit-config\.yaml)$
pass_filenames: false
stages: [pre-push]

- id: convention-gate-inventory
name: convention-gate inventory (MANDATORY <-> gate parity)
entry: uv run python scripts/check_convention_gate_inventory.py
Expand Down Expand Up @@ -666,3 +679,11 @@ repos:
# ~13s wall-clock on the full repo; same cost trade-off as
# no-review-origin-in-code above. Moved to pre-push.
stages: [pre-push]

- id: no-api-dto-in-persistence-or-service
name: forbid synthorg.api.dto_* imports inside persistence/ and service/
entry: uv run python scripts/check_no_api_dto_in_persistence_or_service.py
language: system
files: ^(src/synthorg/(persistence/.*\.py|api/services/.*\.py|.*_service\.py|.*/service(?:/.*)?\.py)|scripts/check_no_api_dto_in_persistence_or_service\.py|\.pre-commit-config\.yaml)$
pass_filenames: false
stages: [pre-commit, pre-push]
Comment thread
coderabbitai[bot] marked this conversation as resolved.
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Web: see `web/CLAUDE.md`. CLI: see `cli/CLAUDE.md` (use `go -C cli`, never `cd c
- **Planning (MANDATORY)**: present every plan for accept/deny before coding.
- **Web Dashboard Design System (MANDATORY)**: reuse `web/src/components/ui/`; design tokens only. Detail in `web/CLAUDE.md`.
- **Regional Defaults (MANDATORY)**: no region/currency/locale privileged; metric units; British English. See [docs/reference/regional-defaults.md](docs/reference/regional-defaults.md).
- **Persistence Boundary (MANDATORY)**: only `src/synthorg/persistence/` may import sqlite/psycopg or emit raw SQL. See [docs/reference/persistence-boundary.md](docs/reference/persistence-boundary.md).
- **Persistence Boundary (MANDATORY)**: only `src/synthorg/persistence/` may import sqlite/psycopg or emit raw SQL. New repository protocols inherit one or more generic categories from `persistence/_generics.py` (`SingletonRepository` / `IdKeyedRepository` / `FilteredQueryRepository` / `AppendOnlyRepository` / `StatefulRepository` / `MVCCRepository`); bespoke methods are permitted only under [ADR-0001](docs/decisions/0001-repository-protocol-consolidation.md) D7 (real perf optimisation or domain invariant callers must not bypass). Protocols stay `@runtime_checkable`. See [docs/reference/persistence-boundary.md](docs/reference/persistence-boundary.md).
- **Convention Rollout (MANDATORY)**: every convention PR ships its enforcement gate. See [docs/reference/convention-gates.md](docs/reference/convention-gates.md).
- **Configuration Precedence (MANDATORY)**: DB > env > code default via `SettingsService`/`ConfigResolver` (Cat-1) or env > code default (Cat-2, `read_only_post_init`); Cat-3 bootstrap secrets are pure env at the boot site. YAML is a company-template ingestion format, not a precedence tier. No `os.environ.get` outside startup; pre-init Cat-2 reads use `settings.bootstrap_resolver.resolve_init_value`. See [docs/reference/configuration-precedence.md](docs/reference/configuration-precedence.md).
- **No Hardcoded Values (MANDATORY)**: numerics live in `settings/definitions/`; allowlist 0/1/-1, HTTP codes, hex masks, powers-of-2, and module-level annotated named constants of the form `NAME: int|float|Final|Final[int]|Final[float] = literal`. Enforced by `scripts/check_no_magic_numbers.py`.
Expand Down
16 changes: 8 additions & 8 deletions data/runtime_stats.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
schema_version: 1
last_generated_utc: '2026-05-16T21:47:36Z'
generator_revision: 7088ff365
last_generated_utc: '2026-05-17T01:30:00Z'
generator_revision: 949abda43
stats:
tests:
raw: 30667
rounded: 30000
display: 30,000+
raw: 31136
rounded: 31000
display: 31,000+
mem0_stars:
raw: 55866
raw: 55881
rounded: 55000
display: 55k+
providers_curated:
Expand All @@ -20,8 +20,8 @@ stats:
raw: 26
display: '26'
convention_gates:
raw: 46
display: '46'
raw: 47
display: '47'
sources:
tests: uv run python -m pytest --collect-only -q
mem0_stars: gh api repos/mem0ai/mem0 --jq .stargazers_count
Expand Down
Loading
Loading