ik
0f078ab482
feat: prioritize risky moderation records
2026-09-12 21:45:29 +07:00
ik
ba4c42f8f6
feat: streamline moderation decisions
2026-09-12 21:43:41 +07:00
ik
8e419c1832
feat: filter external moderation queue
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 21:37:10 +07:00
ik
6e18e8e565
feat: add admin operations dashboard
2026-09-12 21:35:18 +07:00
ik
7c28a0c36a
security: rate limit admin authentication
2026-09-12 21:33:26 +07:00
ik
ff8ea40d40
security: expire admin browser sessions
2026-09-12 21:29:18 +07:00
ik
ca22042d18
security: harden admin external links
2026-09-12 21:26:51 +07:00
ik
1776283a95
refactor: assign submissions to dedicated router
2026-09-12 21:21:34 +07:00
ik
31bbc15535
refactor: isolate submission rate limiting
2026-09-12 21:19:10 +07:00
ik
e48b9ef876
refactor: extract public data router
2026-09-12 21:15:51 +07:00
ik
6974ae690d
refactor: extract activity and spot router
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 21:12:35 +07:00
ik
b84f1fe815
refactor: extract public catalog router
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 21:05:13 +07:00
ik
8d7fab97b9
ci: lock generated OpenAPI contract
2026-09-12 21:03:37 +07:00
ik
049f1ef30a
refactor: separate migrations from API runtime
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 16:02:19 +07:00
ik
868278fdba
security: restrict MinIO app to one bucket
2026-09-12 16:01:00 +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
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
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
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
67d81f81ff
fix: keep advanced filters accessible on mobile
2026-09-11 07:45:45 +07:00
ik
5b2db1cf48
fix: reject idempotency key payload conflicts
2026-09-11 07:44:07 +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
641374ddbc
A05: Add server-side idempotency for catch report creation via Idempotency-Key header
2026-09-11 07:35:01 +07:00
ik
f29ec706fd
R09: Add PaginatedOfficialRecordOut schema and paginated /api/v1/records endpoint
2026-09-10 20:27:45 +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