ik
9e4d7aefba
A05: Restore draft on rate_limited/server_error/timeout states
...
- Extend draft recovery to create_error, rate_limited, server_error, timeout
- Clear draft only on success (sent/screenshot_sent)
- Focus on form-error after recovery
- Double submit protection already in place (R10)
- Astro check: 0 errors
2026-09-10 06:12:09 +07:00
ik
2ccca7350f
A04: Fix selected attributes for all period options
...
- Add selected={hours === '6/12/72'} to all period options (was only on 24)
- Ensures correct UI state when URL has hours=6/12/72
- CSS for filter-compact-hidden already correct (display:none!important)
- Filter fallback details working for no-JS mobile
- Pagination (R09) already handles offset preservation
2026-09-10 06:11:49 +07:00
ik
4974f362ac
A03: Validate scheme/host/port before every network I/O
...
- _validate_url_before_io: check scheme (HTTPS only), port (80/443), host
- fetch_html: recursive redirect validation with hop limit (MAX_REDIRECT_HOPS=5)
- Reject non-HTTPS redirects and non-standard ports
- All validation happens BEFORE urlopen() call
- Updated tests for new validation messages
- 109 Python tests pass
2026-09-10 06:11:17 +07:00
ik
79245965ec
A02: Atomic cooldown state with exclusive lock and flush
...
- _write_state: write to temp file, fsync, rename atomically
- Acquire exclusive lock before any file operations
- Flush and fsync before unlock to prevent data loss
- Remove stale .tmp file after successful write
- Add test for atomic write behavior
- 109 Python tests pass
2026-09-10 06:10:35 +07:00
ik
779d554057
A01: Separate API readiness from import health diagnostics
...
- Infrastructure (DB/MinIO) blocks readiness; imports are diagnostic only
- Per-source community scheduler health with backoff detection
- Stale/failed imports never block /ready — scheduler can recover them
- Add 'blocking: false' to all import components
- 4 new tests: per-source health, backoff detection, stale/failed non-blocking
- 108 Python tests pass
2026-09-10 06:10:01 +07:00
ik
98e7649f9d
docs: define verified regression recovery plan and executor prompt
2026-09-10 06:07:36 +07:00
ik
4f68d6b004
D09: Import record event history for revision tracking
...
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
- Add ImportRecordEvent model to track per-record import changes
- Log created/updated events for each official record import
- Add alembic migration 0014 for import_record_event table
- Enables audit trail for which import run modified which records
2026-09-10 05:54:31 +07:00
ik
3ea08fa706
S03: Consistent site origin — trailingSlash never, canonical URLs
...
- Add trailingSlash: 'never' to Astro config
- Normalize sitemap paths to never use trailing slash
- Ensures consistent canonical URLs across all pages
- Prevents duplicate content from / vs /path/ variants
2026-09-10 05:53:36 +07:00
ik
2c7dd27b4f
T08: Python lock files, CI web unit tests, dependency audit
...
- Generate requirements-lock.txt and requirements-dev-lock.txt via pip-compile
- CI uses locked files for reproducible installs
- Add web unit tests to CI (npm run test:unit)
- Add dependency-audit job using pip-audit
- Add Makefile with lock/lock-dev targets for regeneration
2026-09-10 05:53:15 +07:00
ik
f550639456
R15: Fix D04/D06/D07 partial completion
...
D04: Add fish name-based fallback in _auto_publish (was external_id only)
D06: Cap confidence at 50% for 1 player, 65% for 2 players
D07: Set caught_at=None for community imports (not published_at)
D08: Already OK - activity_rows has no top-100 limit
- Add Fish import to community_importer.py
- Add 2 unit tests for D06 confidence caps
- Update test_community_importer.py for D04 name match behavior
2026-09-10 05:51:50 +07:00
ik
e2bed0db89
R13: Fix X-Forwarded-For trust boundary — only trust from known proxies
...
- Add _is_trusted_proxy() to check client IP against trusted CIDRs
- Only use X-Forwarded-For if connection came from trusted proxy
- Add TRUSTED_PROXY_CIDRS config (default: 127.0.0.1/32, ::1/128)
- Add parse_comma_separated_lists for env var parsing
- Add 3 unit tests: trusted CIDR check, untrusted ignores forwarded, trusted uses forwarded
2026-09-10 05:49:23 +07:00
ik
cc3b42eaf6
R12: Fix readiness — stale/failed community_scheduler blocks ready
...
- Add 'ready = ready and healthy' for community_scheduler check
- Add 'ready = False' for community_scheduler exception path
- Add 3 unit tests: success=ready, stale=not_ready, failed=not_ready
- Monitoring now correctly reports community import health
2026-09-10 05:46:49 +07:00
ik
39f66481be
R11: Validate URL host before network I/O — prevent SSRF
...
- Add _validate_url_host() to check allowlist before urlopen()
- Validate both original URL and redirect target
- Reject localhost, internal IPs, and non-allowlisted hosts
- Add 2 unit tests for disallowed host rejection
- Prevents SSRF attacks via malicious source URLs
2026-09-10 05:45:57 +07:00
ik
6e0077bd4d
R10: Fix TimeoutError handling — use DOMException.TimeoutError check
...
- AbortSignal.timeout() throws DOMException with name='TimeoutError', not TypeError
- Check for DOMException.TimeoutError, TypeError(fetch), or Error(abort)
- Apply same fix to report.ts and report-screenshot.ts
- Timeout redirects to 'timeout' state, other errors to 'create_error'
2026-09-10 05:43:34 +07:00
ik
67681ee039
R09: Fix pagination — preserve filters and use offset from URL
...
- Read offset from URL search params (default 0)
- Pass offset to /api/v1/activity instead of hardcoded 0
- Append items when offset > 0 (infinite scroll behavior)
- Fix 'load more' link to not duplicate URL params
- Astro check: 0 errors, Python tests: 97 passed
2026-09-10 05:41:53 +07:00
ik
51b3eb5e17
docs: update REGRESSION_FIXES_REPORT.md with R03-R08 fixes ( #1788956171115 )
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-10 05:39:13 +07:00
ik
38bb871638
fix: R08 filter-compact-hidden display:none + details fallback for no-JS ( #1788956171115 )
2026-09-10 05:39:06 +07:00
ik
0b3a5ece4b
fix: R06 community_observations filters by fish/waterbody slug via JOIN ( #1788956171115 )
2026-09-10 05:38:22 +07:00
ik
fc878c81d4
fix: R04 site cooldown uses full registry for disabled sources; R05 remove proxy/scheduler from bootstrap ( #1788956171115 )
2026-09-10 05:37:38 +07:00
ik
ff0bc08222
fix: R03 research CLI cooldown — _read_state/_write_state helpers, handle missing file ( #1788956171115 )
2026-09-09 21:23:29 +07:00
ik
d962ba2f90
fix: R02 activity API contract — PaginatedActivity + all consumers ( #1788956171115 )
2026-09-09 20:58:42 +07:00
ik
a37f9c4696
fix: R01 Caddy body_limit → request_body max_size (Caddy 2.10.2 compat) ( #1788956171115 )
2026-09-09 20:35:36 +07:00
ik
cefb4494a5
docs: audit regressions and prioritize recovery plan
2026-09-09 20:22:50 +07:00
ik
9ae05ef6f0
fix: S01 HTTP/SEO contract — noindex for errors, 422/503 status codes ( #1788956171115 )
2026-09-09 20:14:10 +07:00
ik
b31042337b
fix: U03 pagination + U04 form errors with retry ( #1788956171115 )
2026-09-09 20:08:20 +07:00
ik
63e33e1861
fix: audit P0-P1 — T03-T07, D01-D08, U01-U02 ( #1788956171115 )
2026-09-09 20:02:52 +07:00
ik
c6fdc969c2
fix: separate admin page and API authentication
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-09 07:29:39 +07:00
ik
eb501affb8
test: verify production proxy form routing
2026-09-09 07:27:52 +07:00
ik
bb61d21dd6
sync
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 21:07:07 +07:00
ik
3e70b0f387
docs: audit production readiness UX identity and SEO
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 16:43:33 +07:00
ik
486b4e9645
fix: enforce community cooldown per site
2026-09-08 16:32:42 +07:00
ik
731eade7b3
fix: polish narrow mobile layouts
2026-09-08 16:29:03 +07:00
ik
6e21bb774d
perf: optimize public image assets
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 16:18:32 +07:00
ik
18855644a4
build: separate API development dependencies
2026-09-08 16:16:09 +07:00
ik
25114d18c4
build: make web image dependencies reproducible
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 13:26:26 +07:00
ik
1f63f71600
Fix review queue pagination and API fallback handling
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 13:24:58 +07:00
ik
ddb6909c4d
sync
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-08 09:31:41 +07:00
ik
8b2d7e2e1c
feat: suggest confirmed external aliases
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 18:57:09 +07:00
ik
214b328cd2
perf: cache public activity aggregates
2026-09-07 18:54:58 +07:00
ik
24ee01b9c3
feat: show catch freshness on spot details
2026-09-07 18:53:04 +07:00
ik
f04dbabb3c
fix: avoid duplicate leader panel
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 18:51:22 +07:00
ik
fa3b24fb1f
feat: add safe diagnostics export
2026-09-07 18:49:53 +07:00
ik
6477681e41
ops: monitor database and object storage growth
2026-09-07 18:46:34 +07:00
ik
0f9c255596
feat: group duplicate field signals
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 18:45:16 +07:00
ik
02b67741f8
feat: expose deployment build identity
2026-09-07 18:43:20 +07:00
ik
ef8355904c
feat: paginate public field signals
2026-09-07 17:12:41 +07:00
ik
37aa8ec60d
feat: add open alpha banner
2026-09-07 17:11:08 +07:00
ik
dbe01359de
feat: illustrate empty states
2026-09-07 17:09:22 +07:00
ik
6d88ba030f
feat: add subtle fish silhouettes
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 17:08:11 +07:00
ik
0a27c55da7
feat: add fishing activity timeline
2026-09-07 17:06:44 +07:00
ik
72057c7b99
feat: add spot coordinate radar
2026-09-07 17:04:59 +07:00
ik
ebdeaf3659
feat: publish data source legend
2026-09-07 17:03:54 +07:00
ik
f2a97d2b80
feat: add unified data passports
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 17:02:14 +07:00
ik
3529b6a1c8
feat: complete brand icon and static caching
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 16:59:44 +07:00
ik
486016d977
feat: expose safe source health status
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 16:57:14 +07:00
ik
0701383c28
feat: schedule authorized community imports
2026-09-07 16:45:49 +07:00
ik
4e037eb7e8
feat: add canonical spot URLs
2026-09-07 16:43:12 +07:00
ik
233c5887eb
feat: add searchable fish and waterbody pages
2026-09-07 16:39:28 +07:00
ik
7e60daed6f
feat: add branded social preview
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 13:31:34 +07:00
ik
494a37ce8f
feat: establish public SEO foundation
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 13:29:13 +07:00
ik
9275799ce7
feat: display provenance and incomplete signals
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 13:21:15 +07:00
ik
7217356594
feat: enable safe community auto publishing
2026-09-07 13:00:58 +07:00
ik
c4d1c8b87b
feat: audit full alpha catalog
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 09:37:01 +07:00
ik
600abd81f5
test: define open alpha acceptance gates
2026-09-07 09:31:35 +07:00
ik
9e71215bd8
feat: publish open alpha policies
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 09:29:26 +07:00
ik
16e4c071d1
docs: target an open alpha launch
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 09:27:11 +07:00
ik
24b33695b2
test: cover external staging queue UI
2026-09-07 09:25:32 +07:00
ik
a37b1c2b8b
docs: define code license and data policy
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 09:24:24 +07:00
ik
0b2c7f719f
docs: refresh alpha operations guide
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 09:22:55 +07:00
ik
2aa2d30750
feat: add production deployment preflight
2026-09-07 09:18:22 +07:00
ik
d69ad9c01d
test: enforce accessibility quality gates
2026-09-07 09:12:30 +07:00
ik
fec830879b
feat: improve accessibility and admin safety
2026-09-07 08:58:20 +07:00
ik
2b7ad4a03a
feat: improve record filters on mobile
2026-09-07 08:52:15 +07:00
ik
62e584e8e7
feat: simplify catch report form
2026-09-07 08:51:20 +07:00
ik
aeef99920a
feat: shorten mobile path to activity
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 08:10:07 +07:00
ik
5e27a5b066
perf: stabilize list queries for pilot
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 08:02:37 +07:00
ik
c45b4511b7
feat: serialize official record imports
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-07 07:54:07 +07:00
ik
687b4c9cb5
feat: harden production security boundaries
2026-09-07 07:51:25 +07:00
ik
2fa6b68279
feat: automate production maintenance
2026-09-07 07:44:11 +07:00
ik
6e60988ac9
docs: record rf4spotter deployment status
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-06 14:46:11 +07:00
ik
e6653d4c77
feat: add production health monitoring
2026-09-06 14:44:38 +07:00
ik
2200336524
feat: add production data retention
2026-09-06 14:37:58 +07:00
ik
0f075469c8
test: verify clean production bootstrap
2026-09-06 14:34:05 +07:00
ik
66fb1625da
feat: verify production backup restore
2026-09-06 14:24:26 +07:00
ik
870d9cc7f9
feat: harden production data and backups
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-06 14:08:07 +07:00
ik
a4bd395856
feat: add production deployment for rf4spotter.ru
2026-09-06 13:52:30 +07:00
ik
b45ba38a00
feat: add fishing iconography and float gauge
2026-09-06 13:37:03 +07:00
ik
366ff83a60
fix: unify activity labels and Russian plurals
2026-09-06 13:31:44 +07:00
ik
a4b51027e2
docs: add prioritized UI UX audit
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-05 07:55:13 +07:00
ik
3f468799bd
feat: enforce community source cooldown
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-05 07:52:37 +07:00
ik
1a09bd59f3
feat: add RF4MAP and RF4 Posts research parsers
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s
2026-09-05 07:36:35 +07:00
ik
9cc3d44a49
ci: validate backend web migrations and e2e
2026-09-05 07:28:40 +07:00
ik
b574d94f4a
docs: expand pilot readiness roadmap
2026-09-04 07:51:21 +07:00
ik
398b35e843
feat: add privacy-safe structured logging
2026-09-04 07:49:14 +07:00
ik
3b26c59219
feat: add dependency readiness checks
2026-09-04 07:38:34 +07:00
ik
d131662d5f
docs: record source permissions and next steps
2026-09-03 18:53:24 +07:00
ik
e5f26adba1
test: cover home filters on desktop and mobile
2026-09-03 18:53:17 +07:00
ik
b0974d5e4c
test: cover weekly official records import
2026-09-03 18:53:10 +07:00
ik
fda2e5a7bc
refactor: share official records parser
2026-09-03 18:53:03 +07:00
ik
c4f4deb24b
feat: add external observation review queue
2026-09-03 18:47:31 +07:00