From 136567d9643cc3b693cf61f9f6fc9fcfa47f39b2 Mon Sep 17 00:00:00 2001 From: Christophe Vila Date: Sat, 25 Jul 2026 21:31:24 +0200 Subject: [PATCH] docs: remove stale cmd/mcpspike references --- .claude/skills/geniusrun-dev/SKILL.md | 5 ++--- CLAUDE.md | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.claude/skills/geniusrun-dev/SKILL.md b/.claude/skills/geniusrun-dev/SKILL.md index 0c5a34e..e90ac2c 100644 --- a/.claude/skills/geniusrun-dev/SKILL.md +++ b/.claude/skills/geniusrun-dev/SKILL.md @@ -17,8 +17,7 @@ geniusrun is a personal web app that pulls running activities from Garmin Connec backend/ cmd/geniusrund/ main server entrypoint cmd/seedsample/ inserts synthetic data for frontend dev/demoing without live Garmin creds - cmd/mcpspike/ throwaway MCP-client spike, safe to delete - internal/garmin/ MCP client wrapper (auth, get_activities, get_activity_splits, get_activity_details) + internal/garmin/ Garmin Connect client: spawns an embedded Python wrapper over a JSON-lines subprocess protocol internal/garmin/mock/ fake Client for tests internal/classify/ pure rule engine (condition tree eval, scoring, interval detection, HR drift/recovery) internal/store/ SQLite layer + embedded migrations @@ -87,4 +86,4 @@ Each `workout_kinds.rule_json` is a recursive AND/OR condition tree (`internal/c - `internal/classify` tests are pure (no DB/network): construct a `MetricContext` + `RuleKind`s directly. - `internal/store` and `internal/sync` tests open a real temp-file SQLite DB (`store.Open` against `t.TempDir()`) — this is deliberate, not mocked, since the migration/SQL correctness is exactly what needs catching. - `internal/api` tests use `httptest` against a `Server` wired to a temp DB + `mock.Client`. -- The MCP/Garmin integration itself can't be safely automated (real account, MFA, rate limits) — it's a manual smoke test via `cmd/mcpspike` or the real `geniusrund` auth endpoints. +- The Garmin integration itself can't be safely automated (real account, MFA, rate limits) — it's a manual smoke test via the real `geniusrund` auth endpoints. diff --git a/CLAUDE.md b/CLAUDE.md index 2055f7f..e4bdb87 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,7 +45,6 @@ backend/ cmd/geniusrund/ main server entrypoint cmd/seedsample/ inserts synthetic data for frontend dev/demoing without live Garmin creds cmd/dumpschema/ regenerates docs/DATABASE.md from the live schema -- run after editing schema.sql - cmd/mcpspike/ throwaway MCP-client spike, safe to delete internal/garmin/ Garmin Connect client: spawns an embedded Python wrapper (pyscript/wrapper.py, garminconnect) over a JSON-lines subprocess protocol (auth, get_activities, get_activity_splits, get_activity_details, get_workout_by_id) internal/garmin/mock/ fake Client for tests internal/classify/ pure rule engine (condition tree eval, scoring, interval detection, HR drift/recovery) @@ -125,4 +124,4 @@ See `docs/DATABASE.md` for the full, always-current schema (every table/column/i - `internal/store` and `internal/sync` tests open a real temp-file SQLite DB (`store.Open` against `t.TempDir()`) — deliberate, not mocked, since schema/SQL correctness is exactly what needs catching. Since every table is `user_id`-scoped, tests provision a user first (`db.ProvisionUser`) and thread that `userID` into every call. - `internal/api` tests use `httptest` against a `Server` wired to a temp DB + `mock.Client`; `newTestServer` auto-provisions a `"test-user"` account matching the session cookie `doJSON` mints, so most handler tests don't need to think about provisioning at all. Tests that specifically need an *unprovisioned* session (e.g. the setup flow, or `resolveUser`'s not-found path) build a bare `NewServer` directly instead of using `newTestServer`. - **Cross-user isolation is tested adversarially, not just in parallel** — `internal/store/isolation_test.go` and `internal/api/isolation_test.go` provision two real users and attempt real reads/writes against the *other* user's real row IDs, asserting on not-found/403/empty-result rather than merely checking two separately-created rows don't collide. Any new per-user-scoped feature should get the same treatment, not just a "two users each see their own data" happy-path test. -- The MCP/Garmin integration itself can't be safely automated (real account, MFA, rate limits) — it's a manual smoke test via `cmd/mcpspike` or the real `geniusrund` auth endpoints. +- The Garmin integration itself can't be safely automated (real account, MFA, rate limits) — it's a manual smoke test via the real `geniusrund` auth endpoints.