dev
main
Two bodies of work since v26.05.28.0 (18 commits).
Dashboard insights (Subscriptions hub)
last_verified_at
Project-wide DRY pass — 8 chunks, ~-600 lines net, behavior-preserving
utils/{toast,date.formatRelative,downloadStatus}
app
client
useAsyncAction
errorAs
_bad
api/_responses.py
async_session_factory
tasks/_async_session.py
ImportSettings.load()/load_sync()
Importer._get_or_create
useTabQuery
?tab=
Deliberately skipped where extraction would be premature/over-engineering: dashboard cluster (already collapsed by F2), settings/modal (DestructiveConfirmModal already shared), extension platform table (intentional cross-runtime dup), model timestamp mixin (unverifiable core-ORM change for trivial columns).
DestructiveConfirmModal
🤖 Generated with Claude Code
No dependencies set.
The note is not visible to the blocked user.
Summary
Two bodies of work since v26.05.28.0 (18 commits).
Dashboard insights (Subscriptions hub)
last_verified_atfield-name bug)Project-wide DRY pass — 8 chunks, ~-600 lines net, behavior-preserving
utils/{toast,date.formatRelative,downloadStatus}app/clienttest fixtures hoisted into conftest (−424)useAsyncActionstore lifecycle helper (11 stores,errorAspreserves each store's error shape)_baderror helper →api/_responses.py(8 blueprints)async_session_factory→tasks/_async_session.py(3 tasks)ImportSettings.load()/load_sync()classmethods (15 sites)Importer._get_or_createrace-safe find-or-create (3 methods, reduces drift risk on a banked race-condition pattern)useTabQuerycomposable (?tab=routing, 2 views)Deliberately skipped where extraction would be premature/over-engineering: dashboard cluster (already collapsed by F2), settings/modal (
DestructiveConfirmModalalready shared), extension platform table (intentional cross-runtime dup), model timestamp mixin (unverifiable core-ORM change for trivial columns).Test plan
🤖 Generated with Claude Code