Files
derp/TASKS.md
user 8cabe0f8e8 feat: add URL title preview plugin
Event-driven plugin that auto-fetches page titles for URLs posted in
channel messages. HEAD-then-GET via SOCKS5 pool, og:title priority,
cooldown dedup, !-suppression, binary/host filtering. 52 tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:57:00 +01:00

3.5 KiB

derp - Tasks

Current 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)