Skip to content

docs: fix drift in Docker & Local Dev - #258

Open
jack-arturo wants to merge 2 commits into
mainfrom
docs/audit-getting-started-docker-20260716
Open

docs: fix drift in Docker & Local Dev#258
jack-arturo wants to merge 2 commits into
mainfrom
docs/audit-getting-started-docker-20260716

Conversation

@jack-arturo

Copy link
Copy Markdown
Member

Routine docs-accuracy audit of src/content/docs/docs/getting-started/docker.md against verygoodplugins/automem@main (never previously reviewed — page is a Getting Started twin of deployment/docker.md, which has been audited separately).

Claim Current state Fix
"Edit any Python file and the API automatically reloads within ~2 seconds" (hot-reload via FLASK_DEBUG=1) app.py starts via run_default_server(), which hardcodes app.run(host="::", port=port, debug=False). FLASK_ENV/FLASK_DEBUG are set in docker-compose.yml but never read anywhere in the codebase (confirmed via repo-wide search) — Werkzeug's reloader is never active. Rewrote the section: no hot-reload, restart the container (docker compose restart flask-api or make stop && make dev) after edits. Updated the two other mentions of "hot-reload" in the volume table and env-var notes for consistency.
FalkorDB persistence bullets list --dir /data as part of REDIS_ARGS docker-compose.yml's own comment says --dir is not set in REDIS_ARGS because FalkorDB's entrypoint always appends --dir $FALKORDB_DATA_PATH after it, silently overriding anything in REDIS_ARGS. The doc's own copy already includes FALKORDB_DATA_PATH=/data as a separate line further down, so this was an internal inconsistency. Removed the --dir bullet from the REDIS_ARGS list; added a sentence explaining FALKORDB_DATA_PATH is the actual mechanism.
Bare-metal "Expected startup output" shows [INFO] Loading configuration..., Connecting to FalkorDB..., FalkorDB connected successfully, Starting enrichment worker thread, etc. None of these strings exist anywhere in the automem repo (verified via code search). The only log line actually emitted at startup is logger.info("Starting Flask API on port %s", port), in the real %(asctime)s | %(levelname)s | %(name)s | %(message)s format. Replaced the fabricated log block with the real log line + Werkzeug's banner, and added a note that there's no per-step init logging (failures instead log the failed step and sys.exit(1)).
/health example response and field table (falkordb/qdrant: "connected"/"unavailable"/"not configured"; fields limited to status, falkordb, qdrant, memory_count, enrichment.status, enrichment.queue_depth, graph) Current automem/api/health.py only ever returns "connected"/"disconnected" for falkordb/qdrant (never "unavailable"/"not configured"), and the response also includes vector_count, sync_status, vector_dimensions (configured/effective/collection/mismatch), enrichment.pending/inflight/processed/failed, and timestamp — none of which were documented. Also, status becomes "degraded" (not "healthy") whenever either database is disconnected, which the old note undersold. Rewrote the example JSON and field table to match the current handler; corrected the Qdrant-unavailable note (this Docker Compose stack runs Qdrant by default, so "connected" is the expected steady state; "disconnected" + status: "degraded" is what actually appears if Qdrant isn't configured).

No other issues found on this page — volumes, port mappings, depends_on health-check semantics, and the Makefile command table all matched current source.

Verified against: verygoodplugins/automem@4b5eaaf (docker-compose.yml, Makefile, Dockerfile, app.py, automem/runtime_wiring.py, automem/runtime_environment.py, automem/api/health.py, automem/config.py)


Generated by Claude Code as part of the recurring automem-docs-review routine.


Generated by Claude Code

Routine docs-accuracy audit against verygoodplugins/automem@main.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FX7QQ4GSzzAbonMyeNDYzJ

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0bb9c07179

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

```

The server binds to `[::]` (IPv6 dual-stack) on port 8001.
`app.py` logs a single line before initializing FalkorDB, Qdrant, and the enrichment/embedding/consolidation workers — there is no per-step "connecting to..." or "worker started" logging. If initialization fails partway through, the process logs the failed step and exits (`sys.exit(1)`) rather than continuing to serve traffic. The server binds to `[::]` (IPv6 dual-stack) on port 8001.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exempt optional Qdrant failures from the exit claim

When Qdrant is absent or unreachable during bare-metal startup, AutoMem continues in graph-only mode with Qdrant disconnected, as this page itself states below and the API reference documents; it does not exit. The unconditional claim that any partial initialization failure calls sys.exit(1) therefore gives developers the wrong diagnosis for this supported configuration. Limit it to fatal initialization failures.

Useful? React with 👍 / 👎.

| `qdrant` | string | Qdrant connection: `"connected"` or `"disconnected"` |
| `memory_count` | integer | Total memories in the graph |
| `vector_count` | integer | Total points in the Qdrant collection |
| `sync_status` | string | `"synced"`, `"drift_detected"` (fewer vectors than memories), or `"orphaned_vectors"` (more vectors than memories) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Document the unknown sync status

When either database count cannot be collected, such as when Qdrant is disconnected, /health can return sync_status: "unknown"; the API and operations health references list that value. Omitting it here leaves readers unable to interpret a valid response precisely in the failure mode newly described immediately below.

Useful? React with 👍 / 👎.

| `falkordb` | string | FalkorDB connection: `"connected"` or `"disconnected"` |
| `qdrant` | string | Qdrant connection: `"connected"` or `"disconnected"` |
| `memory_count` | integer | Total memories in the graph |
| `vector_count` | integer | Total points in the Qdrant collection |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Mark vector_count as nullable

When Qdrant is unavailable—the supported degraded mode described below—/health returns vector_count: null, not an integer; both the API and operations health references document this. Advertising an unconditional integer can make health-check consumers reject the very degraded response this page instructs users to handle.

Useful? React with 👍 / 👎.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 17, 2026

Copy link
Copy Markdown

Deploying automem-website with  Cloudflare Pages  Cloudflare Pages

Latest commit: ba2d0e3
Status: ✅  Deploy successful!
Preview URL: https://af539a80.automem-website.pages.dev
Branch Preview URL: https://docs-audit-getting-started-d.automem-website.pages.dev

View logs

Scope the sys.exit(1) claim to genuinely fatal init failures (FalkorDB/Qdrant
connection errors are caught internally and degrade gracefully per
automem/stores/runtime_clients.py — only a VectorDimensionMismatchError is
re-raised as fatal), and document the nullable vector_count / "unknown"
sync_status values that automem/api/health.py returns when a count can't be
collected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FX7QQ4GSzzAbonMyeNDYzJ

Copy link
Copy Markdown
Member Author

Addressed all three Codex P2 comments in ba2d0e3, verified against automem/stores/runtime_clients.py and automem/api/health.py:

  • init_falkordb/init_qdrant catch connection failures internally and degrade gracefully (no sys.exit(1)) — only a VectorDimensionMismatchError is deliberately re-raised as fatal. Scoped the doc's exit claim down accordingly.
  • Documented vector_count as nullable and added the "unknown" sync_status value, both of which occur when a count can't be collected (e.g. Qdrant disconnected).

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants