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
e012b84969
feat: add safe media upgrade rollback
2026-09-16 20:16:54 +07:00
ik
4c75db1f74
feat: parse RF4DB waterbody 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-15 17:19:15 +07:00
ik
a8c0da837a
Publish first RF4 fish quality upgrades
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-15 11:45:54 +07:00
ik
7d009c932f
chore: audit RF4 media quality
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:25:45 +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
61c7ac7d51
feat: reconcile RF4DB 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 07:45:29 +07:00
ik
8207d3ae02
feat: download media in bounded domain batches
2026-09-13 16:58:45 +07:00
ik
f243807fc8
feat: plan media queue without network access
2026-09-13 16:50:27 +07:00
ik
392e1e534a
fix: exclude generic maps from coverage
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 08:54:53 +07:00
ik
3547598d37
fix: prioritize media URL classification
2026-09-13 08:46:42 +07:00
ik
0b7df7f721
fix: count unique media coverage
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 08:22:10 +07:00
ik
7e464ef598
feat: track media catalog coverage
2026-09-13 08:14:56 +07:00
ik
674bc5627f
feat: expand RF4 media inventory
2026-09-13 08:06:48 +07:00
ik
4042c80f00
feat: audit catalog media coverage
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:57:07 +07:00
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
51728bf3f2
test: clean up concurrent cooldown processes
2026-09-11 07:56: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
d0d208ebd7
A03: Manual redirect control with per-hop validation
...
Replace urlopen automatic redirect following with custom HTTPRedirectHandler
that raises on 3xx redirects. Each redirect hop is validated (scheme, host,
port) before the request is made using _validate_url_before_io().
Key changes:
- _StrictRedirectHandler intercepts 301/302/303/307/308 responses
- _extract_redirect_url() extracts Location header from redirect responses
- fetch_html() manually follows redirects with hop count limit (MAX_REDIRECT_HOPS=5)
- Relative redirect URLs resolved with urljoin() before validation
- All redirect targets validated against ALLOWED_HOSTS, ALLOWED_PORTS, HTTPS-only
Tests:
- test_fetch_html_redirect_to_disallowed_host_rejected (mocked redirect)
- test_fetch_html_redirect_chain_limit (exceeds MAX_REDIRECT_HOPS)
- test_extract_redirect_url_from_headers (Location/location headers)
- test_urljoin_resolves_relative_redirects (relative URL resolution)
2026-09-10 06:26:15 +07:00
ik
4ac50db1db
A02: Atomic check-and-reserve with lockfile for cross-process coordination
...
- Single exclusive lock covers read-check-write in one critical section
- Lockfile pattern ensures cross-process mutual exclusion
- Atomic write via temp file + rename after unlock
- Flush + fsync before unlock to prevent data loss
- Real multi-process test: 3 concurrent processes get exactly 1 reservation
- 111 Python tests pass (+2 new tests)
2026-09-10 06:23:14 +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
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
486b4e9645
fix: enforce community cooldown per site
2026-09-08 16:32:42 +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
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
16d64606f8
feat: add RF4DB and RF4-STAT research parsers
2026-09-03 18:37:09 +07:00
ik
17c9c40241
docs: audit data sources and parser contracts
2026-09-03 18:27:22 +07:00
ik
a6f91a1329
Complete stage 0 source research
2026-09-02 19:52:32 +07:00