-
5b238b3f54
docs: align historical plans/specs with renamed identifiers (roundTrip -> execute, log schema)
main
Christophe Vila
2026-08-04 20:24:05 +02:00
-
5ebb0f756d
feat(frontend): pathname-addressable views, deep links survive login, config page layout
Christophe Vila
2026-08-04 20:23:05 +02:00
-
49ebd289a4
chore: untrack Garmin token store, ignore token/db-sidecar/IDE files
Christophe Vila
2026-08-04 20:21:03 +02:00
-
10cdc4176a
refactor(log): split location into package/file/class/method, auto-derived
Christophe Vila
2026-08-04 19:59:48 +02:00
-
6effb79097
refactor(log): unified schema — mandatory type/class/method, request_id removed
Christophe Vila
2026-08-04 19:45:30 +02:00
-
78c494affb
fix(garmin): startup tokenstore resume recovers after its 10s timeout
Christophe Vila
2026-08-04 18:17:24 +02:00
-
0e6cf00dba
refactor(config): mandatory app-config rows seeded in DB; rename to session.setup_timeout
Christophe Vila
2026-08-04 18:17:24 +02:00
-
8c9285f33c
fix: IDEAS.md quickfixes — idle-timeout app config, id_token out of Claims, FormEvent import
Christophe Vila
2026-08-04 17:44:37 +02:00
-
dcbb1d8bb0
feat(garmin): all-JSON wrapper protocol and log stream
Christophe Vila
2026-08-04 16:42:25 +02:00
-
431315bac3
refactor(log): replace stdlib log with the application JSON logger
Christophe Vila
2026-08-04 16:33:26 +02:00
-
042579a396
refactor(store): single account name on users; rename profile/laps tables
Christophe Vila
2026-08-04 16:11:23 +02:00
-
e2b2bf9611
refactor: merge internal/sync into internal/garmin, regroup api files and routes
Christophe Vila
2026-08-04 16:04:18 +02:00
-
19c9aecdeb
docs(skill): update renamed env vars in geniusrun-dev skill
Christophe Vila
2026-08-04 06:46:10 +02:00
-
bee3d7e493
feat(frontend): /config page + icon-only header (profile/settings/logout)
Christophe Vila
2026-08-04 00:20:02 +02:00
-
d45489714d
feat(api): GET/PUT /api/config serving app + env configuration
Christophe Vila
2026-08-04 00:16:26 +02:00
-
e6cb21c65a
feat(config): app-config registry, env-var renames, wire session.duration from DB
Christophe Vila
2026-08-04 00:11:56 +02:00
-
f6712497ba
feat(store): config table for instance-global app-config overrides
Christophe Vila
2026-08-04 00:06:22 +02:00
-
8508e89ad7
chore: onboarding/MFA-modal WIP, dev-workflow guidance, ideas updates
Christophe Vila
2026-08-04 00:04:03 +02:00
-
27af77418e
feat(store): default backfill horizon to 90 days
Christophe Vila
2026-08-04 00:04:03 +02:00
-
a2f24273ce
feat(frontend): error banners persist until manually dismissed
Christophe Vila
2026-08-04 00:04:03 +02:00
-
a394bbb770
refactor(api): merge review-queue into /api/activities, rename resolve to assign
Christophe Vila
2026-08-04 00:04:03 +02:00
-
eb24dcd89d
docs: spec for application vs environment configuration
Christophe Vila
2026-08-03 23:47:57 +02:00
-
c40f6634f2
test(store): cover SetActivityWorkoutNotFound adversarially for user isolation
Christophe Vila
2026-07-27 19:16:43 +02:00
-
6f6d1ea5e0
fix(sync): stop retrying a workout Garmin confirms is gone
Christophe Vila
2026-07-27 19:03:09 +02:00
-
7d371219b7
feat(store): add workout_not_found_at, exclude it from missing-workout queries
Christophe Vila
2026-07-27 18:58:21 +02:00
-
c6e2c5c00e
feat(garmin): expose ErrNotFound for a wrapper-reported 404
Christophe Vila
2026-07-27 18:53:59 +02:00
-
1d878e0f46
feat(garmin): mark a wrapper 404 with not_found in the error response
Christophe Vila
2026-07-27 18:50:43 +02:00
-
b5cd47c219
docs: add implementation plan for permanently-missing-workout handling
Christophe Vila
2026-07-27 18:45:11 +02:00
-
67f4ec27ab
docs: add design spec for permanently-missing-workout handling
Christophe Vila
2026-07-27 18:00:38 +02:00
-
fe344867c0
fix(frontend): show a banner when LoginGate can't reach the backend
Christophe Vila
2026-07-27 11:00:00 +02:00
-
0e3295b746
fix(auth): stop flipLastChar's tamper tests from flaking
Christophe Vila
2026-07-27 10:59:49 +02:00
-
f9b1d454bc
fix(frontend): dedupe identical banners in banner.ts
Christophe Vila
2026-07-27 10:34:57 +02:00
-
83a59d0fdd
chore(frontend): remove the now-dead .error CSS class
Christophe Vila
2026-07-27 10:20:14 +02:00
-
3cf5d4b747
refactor(frontend): split OnboardingWizard's validation vs real failures
Christophe Vila
2026-07-27 10:11:18 +02:00
-
273731442f
refactor(frontend): migrate LoginGate.tsx's auth_error to the banner system
Christophe Vila
2026-07-27 10:07:00 +02:00
-
7e960e3ce1
refactor(frontend): migrate TrainingTypesCard.tsx to the banner system
Christophe Vila
2026-07-27 10:01:56 +02:00
-
687dc2bca2
refactor(frontend): migrate Analysis.tsx to the banner system
Christophe Vila
2026-07-27 09:59:32 +02:00
-
668fb9efb8
refactor(frontend): migrate Activities.tsx to the banner system
Christophe Vila
2026-07-27 09:56:33 +02:00
-
940295510e
refactor(frontend): migrate Profile.tsx to the banner system
Christophe Vila
2026-07-27 09:53:28 +02:00
-
a5fffff737
refactor(frontend): SyncModal reports its result via a banner, auto-closes
Christophe Vila
2026-07-27 09:47:53 +02:00
-
d48bbfd43e
refactor(frontend): migrate GarminConnection.tsx to the banner system
Christophe Vila
2026-07-27 09:44:53 +02:00
-
a147f5cffa
fix(frontend): show a friendly message when the backend is unreachable
Christophe Vila
2026-07-27 09:41:34 +02:00
-
aef58fd529
feat(frontend): add shared banner system (error/warning/notice/success)
Christophe Vila
2026-07-27 09:37:24 +02:00
-
3bf11ae6bf
docs: add implementation plan for modern error displays
Christophe Vila
2026-07-27 09:31:57 +02:00
-
b2c705ce29
docs: add design spec for modern error displays
Christophe Vila
2026-07-27 09:22:47 +02:00
-
6e01037832
fix(frontend): stop SyncModal polling once sync has finished
Christophe Vila
2026-07-27 09:01:38 +02:00
-
f7e7b68078
test(sync): cover FullSync's phase transitions end-to-end
Christophe Vila
2026-07-27 09:01:30 +02:00
-
3a7f305221
docs(store): update stale SyncRun doc comment
Christophe Vila
2026-07-27 09:01:17 +02:00
-
0a7aa3a5e0
test(store): adversarially cover ActivitiesMissingWorkout isolation
Christophe Vila
2026-07-27 09:01:10 +02:00
-
1046e9f7a0
fix(store): gate ActivitiesMissingWorkout on details already fetched
Christophe Vila
2026-07-27 09:01:02 +02:00
-
101ef639ab
feat(frontend): replace inline sync progress with SyncModal
Christophe Vila
2026-07-27 08:36:31 +02:00
-
1fb9271aaa
feat(frontend): add SyncModal component
Christophe Vila
2026-07-27 08:31:01 +02:00
-
39aa121420
feat(api): reshape /api/sync/status for phase-aware progress
Christophe Vila
2026-07-27 08:27:34 +02:00
-
35d9933d1b
feat(sync): split FillPendingDetails into activities/workouts phases
Christophe Vila
2026-07-27 06:55:23 +02:00
-
32fdfc1c72
feat(store): add ActivitiesMissingWorkout/CountActivitiesMissingWorkout
Christophe Vila
2026-07-27 06:49:44 +02:00
-
7204a48c1c
refactor(sync): remove dead Backfill/IncrementalSync exported wrappers
Christophe Vila
2026-07-27 06:44:39 +02:00
-
9d65c50068
chore: ignore .worktrees/ directory
Christophe Vila
2026-07-27 06:37:25 +02:00
-
aac9359b02
docs: add implementation plan for improved synchronization UX
Christophe Vila
2026-07-26 23:05:43 +02:00
-
a828055c30
docs: fold dead Backfill/IncrementalSync wrapper cleanup into sync spec
Christophe Vila
2026-07-26 22:45:59 +02:00
-
7f5618ce49
docs: add design spec for improved synchronization UX
Christophe Vila
2026-07-26 22:09:49 +02:00
-
d3b26d7d41
fix(frontend): fix off-by-one date shown in the backfill horizon picker
Christophe Vila
2026-07-26 21:52:38 +02:00
-
0211dffa1e
fix(config): stop deriving GarminTokenStoreRoot's default from DBPath
Christophe Vila
2026-07-26 21:45:39 +02:00
-
12cbfdbbee
docs(ideas): refine backlog notes on sync UX and error banners
Christophe Vila
2026-07-26 21:26:24 +02:00
-
92284d3b96
polish(frontend): tighten the onboarding wizard's UX
Christophe Vila
2026-07-26 21:26:14 +02:00
-
45f2921971
fix(garmin): make wrapper.py's startup tokenstore login lazy
Christophe Vila
2026-07-26 21:25:53 +02:00
-
77f9588c2d
refactor(config): rename default Garmin token-store dir to .garmin
Christophe Vila
2026-07-26 21:25:39 +02:00
-
a12fe3e810
fix(api): stop promoting the ephemeral Garmin client after setup completes
Christophe Vila
2026-07-26 21:23:24 +02:00
-
4d2cbe4883
refactor: remove automatic background incremental sync
Christophe Vila
2026-07-26 18:01:41 +02:00
-
7346e2eadd
docs: add implementation plan for structured JSON logging
Christophe Vila
2026-07-26 14:36:04 +02:00
-
c9e089a2b2
feat(garmin): log every wrapper subprocess call as structured JSON
Christophe Vila
2026-07-26 14:33:20 +02:00
-
1d4b1cccfd
feat(api): add structured JSON access log with request-id correlation
Christophe Vila
2026-07-26 14:30:39 +02:00
-
379e7cc990
feat(applog): add JSON logger and context helpers
Christophe Vila
2026-07-26 14:28:22 +02:00
-
501d951e5b
docs: add design spec for structured JSON logging
Christophe Vila
2026-07-26 14:22:28 +02:00
-
2fbe762290
docs: add implementation plan for deferred-commit onboarding wizard
Christophe Vila
2026-07-26 14:12:44 +02:00
-
84a7417781
feat(onboarding): replace CreateProfile/ConnectGarmin with a single deferred-commit wizard
Christophe Vila
2026-07-26 13:32:32 +02:00
-
7d68af5b3c
feat(api): defer account creation until Garmin actually connects
Christophe Vila
2026-07-26 13:30:51 +02:00
-
a1eaa42d42
docs: add design spec for deferred-commit onboarding wizard
Christophe Vila
2026-07-26 13:17:59 +02:00
-
35eff03509
docs: add implementation plan for improved first-connection flow
Christophe Vila
2026-07-26 12:29:26 +02:00
-
a622af1bfa
Merge branch 'worktree-improve-first-connection'
Christophe Vila
2026-07-26 12:28:45 +02:00
-
-
7f4f6d3493
docs: remove improve-first-connection-page from IDEAS backlog (implemented)
Christophe Vila
2026-07-26 12:26:33 +02:00
-
049ed16b69
feat(onboarding): add mandatory ConnectGarmin gate to first login
Christophe Vila
2026-07-26 12:25:09 +02:00
-
002858c1cb
feat(api): persist and expose garmin_connected on successful auth
Christophe Vila
2026-07-26 12:23:39 +02:00
-
6a3f0201af
feat(store): persist garmin_connected_at, set once on first successful auth
Christophe Vila
2026-07-26 12:21:42 +02:00
-
50d65b40c2
docs: add design spec for improved first-connection flow
Christophe Vila
2026-07-26 12:09:35 +02:00
-
-
d1d2d612a5
added ideas
Christophe Vila
2026-07-26 12:00:10 +02:00
-
4c939be6d6
added go work files
Christophe Vila
2026-07-26 12:00:00 +02:00
-
f7bf7e9c79
removed unwanted ide files
Christophe Vila
2026-07-26 11:57:33 +02:00
-
8353cd148b
feat(auth): pass id_token_hint on Keycloak logout
Christophe Vila
2026-07-26 11:55:13 +02:00
-
d7202eb9bb
docs: add implementation plan for profile deletion
Christophe Vila
2026-07-26 10:23:32 +02:00
-
ce5057a309
Merge branch 'worktree-profile-deletion'
Christophe Vila
2026-07-26 10:22:52 +02:00
-
-
efbe6a6760
docs: remove profile deletion from IDEAS backlog (implemented)
Christophe Vila
2026-07-26 10:21:31 +02:00
-
e2533bd1a8
feat(profile): add Danger zone account deletion UI
Christophe Vila
2026-07-26 10:20:56 +02:00
-
ab8cdea214
feat(api): add DELETE /api/profile with Garmin client/tokenstore teardown
Christophe Vila
2026-07-26 10:19:00 +02:00
-
e8c340a00e
feat(store): add DeleteUser with cascading account deletion
Christophe Vila
2026-07-26 10:17:21 +02:00
-
c5faaf5a17
docs: add design spec for profile deletion
Christophe Vila
2026-07-26 10:06:04 +02:00
-
-
65a2dc90d0
refactored component names
Christophe Vila
2026-07-26 10:00:24 +02:00
-
3b2b5d0735
refined ideas + start.sh rely on .env
Christophe Vila
2026-07-26 09:59:56 +02:00
-
d308201803
fix(api): logout's post_logout_redirect_uri uses FrontendURL, not BackendURL
Christophe Vila
2026-07-25 23:37:22 +02:00
-
099e746119
refactor(config): rename GENIUSRUN_PUBLIC_BASE_URL to GENIUSRUN_BACKEND_URL
Christophe Vila
2026-07-25 23:00:35 +02:00
-
db2e8e487d
fix(api): redirect the OIDC callback to FrontendURL, not a relative path
Christophe Vila
2026-07-25 22:52:15 +02:00