Drop GeoLite2-ASN.mmdb dependency (required license key) in favor of iptoasn.com ip2asn-v4.tsv (no auth, public domain). Bisect-based lookup in pure stdlib, downloaded via SOCKS5 in update-data.sh. Adds 30 test cases covering load, lookup, and command handler. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
120 lines
5.8 KiB
Markdown
120 lines
5.8 KiB
Markdown
# derp - Tasks
|
|
|
|
## Current Sprint -- v1.2.8 ASN Backend Replacement (2026-02-19)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | Replace MaxMind ASN with iptoasn.com TSV backend (no license key) |
|
|
| P0 | [x] | Bisect-based lookup in `plugins/asn.py` (pure stdlib) |
|
|
| P1 | [x] | `update_asn()` in `scripts/update-data.sh` (SOCKS5 download) |
|
|
| P2 | [x] | Tests: load, lookup, command handler (30 cases, 906 total) |
|
|
| P2 | [x] | Documentation update (USAGE.md data directory layout) |
|
|
|
|
## Previous Sprint -- v1.2.7 Subscription Plugin Enrichment (2026-02-19)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | Twitch: viewer count in live announcements (`| 50k viewers`) |
|
|
| P0 | [x] | YouTube: views, likes, published date in announcements (`| 1.5Mv 45klk 2026-01-15`) |
|
|
| P0 | [x] | RSS: published date in announcements (`| 2026-02-10`) |
|
|
| P1 | [x] | Twitch `check`/`list` show viewer count |
|
|
| P1 | [x] | RSS `_parse_date` helper (ISO + RFC 2822) |
|
|
| P2 | [x] | Tests: twitch/youtube/rss enrichment (263 sub-plugin tests, 868 total) |
|
|
| P2 | [x] | Documentation update (USAGE.md announcement formats) |
|
|
|
|
## Previous Sprint -- v1.2.6 Alert Backend Metadata Enrichment (2026-02-18)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | `_compact_num` helper (1k/1.2M formatting) |
|
|
| P0 | [x] | DB migration: `extra` column in results table |
|
|
| P0 | [x] | Backend metadata: 15 backends populate `extra` field |
|
|
| P1 | [x] | Move engagement metrics from titles to `extra` (HN, GH, GL, SE, DH, HF, KK) |
|
|
| P1 | [x] | Display: announcements, history, info show `| extra` suffix |
|
|
| P2 | [x] | Tests: `TestCompactNum`, extra in poll/history/info (91 total) |
|
|
| P2 | [x] | Documentation update (USAGE.md metadata table) |
|
|
|
|
## Previous Sprint -- v1.2.5 Paste Site Keyword Monitor (2026-02-18)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | Pastemoni plugin (`plugins/pastemoni.py`) |
|
|
| P0 | [x] | Pastebin archive scraping + raw content matching |
|
|
| P0 | [x] | GitHub Gists API keyword filtering |
|
|
| P1 | [x] | Polling/subscription architecture (rss.py pattern) |
|
|
| P1 | [x] | State persistence + restore on connect |
|
|
| P1 | [x] | Command handler: add/del/list/check |
|
|
| P2 | [x] | Tests for pastemoni (15 test classes, ~45 cases) |
|
|
| P2 | [x] | Documentation update (USAGE.md) |
|
|
|
|
## Previous Sprint -- v1.2.4 URL Title Preview (2026-02-17)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | URL title preview plugin (`plugins/urltitle.py`) |
|
|
| P0 | [x] | HEAD-then-GET fetch via SOCKS5 connection pool |
|
|
| P1 | [x] | `_TitleParser`: og:title/description + `<title>` fallback |
|
|
| P1 | [x] | URL extraction with `!`-suppression and balanced parens |
|
|
| P1 | [x] | Dedup/cooldown (5 min, 500 entry cache) |
|
|
| P1 | [x] | Skip non-HTML, binary extensions, FlaskPaste host |
|
|
| P2 | [x] | Tests for urltitle (11 test classes, ~40 cases) |
|
|
| P2 | [x] | Documentation update (USAGE.md) |
|
|
|
|
## Previous Sprint -- v1.2.3 Paste Overflow (2026-02-17)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | `Bot.long_reply()` method with FlaskPaste overflow |
|
|
| P0 | [x] | Configurable `paste_threshold` (default: 4) |
|
|
| P1 | [x] | Refactor alert history to use `long_reply()` |
|
|
| P1 | [x] | Refactor exploitdb search/cve to use `long_reply()` |
|
|
| P1 | [x] | Refactor subdomain, crtsh, abuseipdb, dork to use `long_reply()` |
|
|
| P2 | [x] | Tests for paste overflow (10 cases) |
|
|
|
|
## Previous Sprint -- v1.2.2 Connection Pooling + Batch OG (2026-02-17)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P0 | [x] | Batch `_fetch_og` calls via ThreadPoolExecutor (alert.py) |
|
|
| P0 | [x] | Connection pooling via `urllib3[socks]` SOCKSProxyManager (http.py) |
|
|
| P1 | [x] | Cache FlaskPaste `_ssl_context()` at module level |
|
|
| P1 | [x] | Backward-compat `urllib.error.HTTPError` for 4xx/5xx in pooled path |
|
|
| P1 | [x] | Legacy opener fallback for `context=` callers (username.py) |
|
|
| P2 | [x] | Containerfile uses requirements.txt for deps |
|
|
|
|
## Previous Sprint -- v1.2.1 Performance + Polish (2026-02-17)
|
|
|
|
| Pri | Status | Task |
|
|
|-----|--------|------|
|
|
| P1 | [x] | Cache default HTTP opener at module level |
|
|
| P1 | [x] | `--tracemalloc` CLI flag for memory profiling |
|
|
| P1 | [x] | Background seeding on `!alert add` (instant reply) |
|
|
| P1 | [x] | Per-backend error tracking with exponential backoff |
|
|
| P1 | [x] | Concurrent fetches for multi-instance backends (PeerTube, Mastodon, Lemmy, SearXNG) |
|
|
| P1 | [x] | `retries` parameter for `derp.http.urlopen` |
|
|
| P2 | [x] | Full alert titles (ACTION metadata + PRIVMSG content) |
|
|
| P2 | [x] | Remove title truncation from backend builders |
|
|
|
|
## Completed
|
|
|
|
| Date | Task |
|
|
|------|------|
|
|
| 2026-02-17 | v1.2.3 (paste overflow with FlaskPaste integration) |
|
|
| 2026-02-17 | v1.2.1 (HTTP opener cache, alert perf, concurrent multi-instance, tracemalloc) |
|
|
| 2026-02-16 | v1.2.0 (subscriptions, alerts, proxy, reminders) |
|
|
| 2026-02-15 | Calendar-based reminders (at/yearly) with persistence |
|
|
| 2026-02-15 | v1.1.0 (channel filter, JSON logging, dork, wayback, tests) |
|
|
| 2026-02-15 | v1.0.0 (IRCv3, chanmgmt, state persistence) |
|
|
| 2026-02-15 | Wave 4 (opslog, note, subdomain, headers, exploitdb, payload) |
|
|
| 2026-02-15 | Wave 3 plugins (geoip, asn, torcheck, iprep, cve) + update script |
|
|
| 2026-02-15 | Admin/owner permission system (hostmask + IRCOP) |
|
|
| 2026-02-15 | SASL PLAIN, rate limiting, CTCP responses |
|
|
| 2026-02-15 | Wave 2 plugins (whois, portcheck, httpcheck, tlscheck, blacklist, rand, timer) |
|
|
| 2026-02-15 | CLI --cprofile flag |
|
|
| 2026-02-15 | Wave 1 plugins (dns, encode, hash, defang, revshell, cidr) |
|
|
| 2026-02-15 | Hot-reload, shorthand, plugin help |
|
|
| 2026-02-15 | Container deployment (Containerfile, compose, Makefile targets) |
|
|
| 2026-02-15 | crt.sh CT lookup plugin |
|
|
| 2026-02-15 | TLS verify option for self-signed certs |
|
|
| 2026-02-15 | Initial implementation (IRC, plugins, config, CLI) |
|