ik
883ad2c73b
feat: audit media catalog integrity
2026-09-12 15:57:04 +07:00
ik
215af73388
feat: add explicit media review workflow
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 15:55:39 +07:00
ik
26724c7675
feat: validate and unblock media downloads
2026-09-12 15:54:53 +07:00
ik
bda0a0ef5e
feat: add rate-limited RF4 media collector
2026-09-12 15:52:27 +07:00
ik
52ff29668e
feat: add visual links between atlas entities
2026-09-12 15:46:36 +07:00
ik
45c7e65bc4
feat: connect atlas pages with breadcrumb line
2026-09-12 15:44:38 +07:00
ik
cadd5607b8
feat: compose atlas identity for fishing pairs
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 15:37:54 +07:00
ik
2ce1e20af2
feat: add unique waterbody fingerprints
2026-09-12 15:35:57 +07:00
ik
80d534d549
feat: add semantic tackle glyphs
2026-09-12 15:30:40 +07:00
ik
c3e847c249
feat: distinguish fish by visual family
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 15:28:24 +07:00
ik
b71e4a22a2
docs: plan entity visual identification
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 15:23:45 +07:00
ik
966000b0b0
feat: transform catalogs into field atlas
2026-09-12 15:20:26 +07:00
ik
a8b1775169
refactor: establish brand motion system
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 10:07:47 +07:00
ik
0c25cf020f
refactor: unify action hierarchy
2026-09-12 10:05:49 +07:00
ik
2477543029
refactor: unify public state panels
2026-09-12 10:02:19 +07:00
ik
c944db54af
refactor: unify catalog page heroes
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 09:59:14 +07:00
ik
9647667ae2
refactor: unify editorial section headings
2026-09-12 09:57:56 +07:00
ik
fc22795b63
refactor: clarify visual motif grammar
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 09:56:16 +07:00
ik
1fabf21935
refactor: introduce semantic brand tokens
2026-09-12 09:54:26 +07:00
ik
b0dd703f72
feat: establish brand identity hierarchy
2026-09-12 09:49:19 +07:00
ik
987d9ea109
perf: establish frontend performance baseline
2026-09-12 09:46:52 +07:00
ik
e7f3de1ddc
fix: tighten narrow viewport behavior
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-12 09:42:17 +07:00
ik
4fef0e8b74
feat: add accessible queue loading states
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 08:08:52 +07:00
ik
45b73ec54a
docs: refresh roadmap after recovery acceptance
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 08:06:40 +07:00
ik
907ad537e2
fix: accept non-hex alembic revision ids
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 07:58:40 +07:00
ik
51728bf3f2
test: clean up concurrent cooldown processes
2026-09-11 07:56:01 +07:00
ik
8f76f70409
feat: add activity level legend to spot view
2026-09-11 07:54:16 +07:00
ik
8c94d40766
feat: add one-click coordinate copying
2026-09-11 07:52:07 +07:00
ik
1ffaf7478d
fix: synchronize normalized records on import revisions
2026-09-11 07:50:31 +07:00
ik
2ad2bdcdff
fix: mark catalog outage pages as SEO errors
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 07:49:58 +07:00
ik
6664f24f20
fix: invoke Caddy adapter correctly in bootstrap
2026-09-11 07:48:05 +07:00
ik
0b7bbc78a6
fix: make report and idempotency insert transactional
2026-09-11 07:47:36 +07:00
ik
fc963101b3
fix: handle concurrent idempotency key conflicts
2026-09-11 07:46:50 +07:00
ik
d28ad31aca
fix: fail closed on bootstrap migration inspection
2026-09-11 07:46:10 +07:00
ik
67d81f81ff
fix: keep advanced filters accessible on mobile
2026-09-11 07:45:45 +07:00
ik
d6bc5ce85c
fix: alert on degraded community scheduler health
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 07:44:30 +07:00
ik
5b2db1cf48
fix: reject idempotency key payload conflicts
2026-09-11 07:44:07 +07:00
ik
42bdec6c2f
fix: isolate scheduler validation in bootstrap
2026-09-11 07:43:14 +07:00
ik
531f1aa82f
fix: replay idempotent upload token safely
2026-09-11 07:42:41 +07:00
ik
486e4c4673
fix: wire report idempotency and bootstrap scheduler check
2026-09-11 07:41:55 +07:00
ik
bea3b9ccbb
fix: align recovery schema idempotency and record counts
2026-09-11 07:40:58 +07:00
ik
13e04e6c66
A12: Add meaningful changes/provenance to ImportRecordEvent, skip events for unchanged data
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-11 07:36:21 +07:00
ik
5107a7c467
A11: Use requirements-lock.txt in Dockerfile for reproducible builds
2026-09-11 07:35:35 +07:00
ik
2ba4f6027d
A10: Add Caddy config validation and scheduler checks to bootstrap
2026-09-11 07:35:22 +07:00
ik
641374ddbc
A05: Add server-side idempotency for catch report creation via Idempotency-Key header
2026-09-11 07:35:01 +07:00
ik
57aa3ffafb
A02/A03: Add state validation and normalize subdomain keys for shared cooldown
2026-09-10 20:34:05 +07:00
ik
f29ec706fd
R09: Add PaginatedOfficialRecordOut schema and paginated /api/v1/records endpoint
2026-09-10 20:27:45 +07:00
ik
7e08ecbfc6
A13: Finalize RECOVERY_FIXES_REPORT with verified status and commit history
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-10 20:06:28 +07:00
ik
ec3a1ca516
A09: Use static registry for CLI choices, check enabled at runtime
...
Bug: 'choices=configured_sources()' in argparse opened DB session at
import time, causing --help to fail when DB was unavailable.
Fix:
- Added STATIC_SOURCE_CHOICES list with known source keys
- argparse uses static choices — no DB required for --help
- fetch-community command now checks enabled status at runtime
- Disabled sources return error: 'source X is disabled or not configured'
- run_source still handles locked/cooling down state
Verification:
- CLI --help works without DB
- fetch-community --help shows all known sources
- Disabled sources are rejected at runtime with clear error
- 124/124 Python tests pass (1 skipped)
2026-09-10 19:53:15 +07:00
ik
e2223c6f24
A07: Fix _auto_publish to allow fish name fallback without external_id
...
Bug: 'observation.fish_external_id is None' in early return prevented
auto-publishing observations that only have fish_name (no external_id),
even when name-based fallback matching was available.
Fix:
- Removed fish_external_id check from early return condition
- Auto-publish now tries external_id first, falls back to name match
- review_note now describes actual matching method:
'Auto-matched: fish via external_id/name, waterbody via external_id/name'
- Previous note 'Automatically matched by previously reviewed source aliases'
was misleading when name fallback was used
Verification:
- 14/14 community_importer tests pass
- 124/124 Python tests pass (1 skipped)
- Observations without fish_external_id can now auto-publish via name match
- review_note accurately describes matching method
2026-09-10 19:42:56 +07:00