ik
852e68d9a5
feat: show ordered tackle components
2026-09-21 08:13:37 +07:00
ik
86515a9da1
feat: expose reviewed media roles
2026-09-21 08:00:15 +07:00
ik
81af8a02b6
test: cover coordinate precision states
2026-09-21 07:56:20 +07:00
ik
eeef4bb536
feat: show catch method on spot detail
2026-09-21 07:42:43 +07:00
ik
3b4557b549
feat: add method and risk to fishing plans
2026-09-21 07:34:32 +07:00
ik
36d704d854
feat: expose explicit source conflicts
2026-09-21 07:31:17 +07:00
ik
46251c635f
test: add tackle query acceptance gate
CI / backend-and-migrations (push) Waiting to run
CI / astro-build (push) Waiting to run
CI / dependency-audit (push) Waiting to run
CI / compose-e2e (push) Waiting to run
2026-09-20 18:36:37 +07:00
ik
e94d247096
feat: add tackle catalog and recommendation analytics
2026-09-20 18:26:53 +07:00
ik
4f0c2d23de
feat: preserve gear components through catch imports
CI / backend-and-migrations (push) Waiting to run
CI / astro-build (push) Waiting to run
CI / dependency-audit (push) Waiting to run
CI / compose-e2e (push) Waiting to run
2026-09-20 18:10:41 +07:00
ik
4e9895fbf4
feat: add gear provenance models and browser fetcher
2026-09-20 15:50:43 +07:00
ik
b0edae98c6
feat: continue roadmap acceptance work
2026-09-20 15:17:21 +07:00
ik
d438c40542
sync
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-17 07:35:23 +07:00
ik
722c88d436
sync
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-17 07:35:04 +07:00
ik
85d81aa996
feat: add admin media upgrade decisions
2026-09-16 20:28:45 +07:00
ik
c216229c61
fix: type admin API contracts
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-16 20:09:41 +07:00
ik
9bcb019d3a
feat: extend admin operations and media review
2026-09-16 19:50:01 +07:00
ik
b47a6cc366
feat: publish approved RF4 media catalog
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-14 22:20:46 +07:00
ik
1305cccfa5
feat: check source links during scheduled fetches
2026-09-13 16:32:10 +07:00
ik
bc3ceb5dfe
feat: manage external source lifecycle
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-13 16:26:34 +07:00
ik
9c44cfc08f
refactor: extract admin api router
2026-09-13 09:59:55 +07:00
ik
b76da2edd0
refactor: remove legacy submission handlers
2026-09-13 09:42:15 +07:00
ik
30bfccd0e7
refactor: move submission endpoints to router
2026-09-13 09:38:20 +07:00
ik
0abe1a2bb4
feat: lock concurrent moderation decisions
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-13 09:26:18 +07:00
ik
c6ffded8d7
feat: complete moderation history dashboard
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-13 09:07:32 +07:00
ik
fcc26a5b34
feat: add moderation decision history
2026-09-12 21:52:25 +07:00
ik
def5c39aa1
feat: expose safe moderation provenance
2026-09-12 21:49:45 +07:00
ik
0f078ab482
feat: prioritize risky moderation records
2026-09-12 21:45:29 +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
7c28a0c36a
security: rate limit admin authentication
2026-09-12 21:33:26 +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
1ffaf7478d
fix: synchronize normalized records on import revisions
2026-09-11 07:50:31 +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
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
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
ik
883e63aa8b
A01: Fix scheduler aggregation to not mask stale/failed sources
...
Bug: has_any_success allowed one healthy source to give overall 'ready'
when another source was stale/not_started/running — masking failures.
Fix:
- Added has_any_stale and has_any_running tracking
- Overall status is 'degraded' if ANY source is failed/stale/running
- Overall status is 'ready' ONLY when ALL enabled sources are healthy
- 'not_started' when no sources are enabled
- readiness (ready flag) still NOT blocked by import health (A01 requirement)
Verification:
- 7/7 readiness tests pass
- 124/124 Python tests pass (1 skipped)
- Stale source now shows 'degraded' instead of 'ready'
- Failed source still shows 'degraded'
- All healthy sources show 'ready'
2026-09-10 19:32:33 +07:00