
omarandClaude Opus 4.8
265fb5efaa
feat(daemon+panel): rule-set management — status + manual update (Wave C, #9)
Remote .srs rule-sets already auto-update (24h, cache.db, ETag) but the panel
showed nothing. Now: RemoteRuleSet exports LastUpdated()/UpdateInterval()/
RuleCount()/Update(ctx) (an updateMu serialises manual refresh vs the 24h loop;
lastUpdated writes moved under access lock). route.Router.RuleSets() enumerates
live sets. Engine.RuleSetStatus()/UpdateRuleSet(tag) via Instance().Router();
Applier exposes both (engine stays private). New GET /api/ruleset/status
([{tag,name,kind,remote,last_updated,interval_seconds,rule_count}]) + POST
/api/ruleset/update {tag|name+kind}. Tag map: ruleset X<->rs-X, blocklist
Y<->bl-Y, allowlist Z<->al-Z. Routing rulesets rows show relative last-update +
'every 24h' + rule count + an Update-now button (in-flight state, toast); inline
sets show nothing extra; install/remove unchanged (config PUT).
Verified: root+route+shater build (router tags)/vet 0, go test ok (tag-map,
status projection, engine nil-safety + real box.New apply), panel tsc/build clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLthkP2S8WAfxu7fcYbPfE
2026-07-18 03:04:45 +03:00
..
2026-05-13 23:39:27 +08:00
2026-06-25 17:38:55 +08:00
2026-06-25 17:35:25 +08:00
2026-07-06 21:13:33 +08:00
2026-01-17 05:44:29 +08:00
2026-06-25 17:35:30 +08:00
2026-06-25 17:38:10 +08:00
2026-06-25 17:35:30 +08:00
2026-01-17 05:44:29 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2026-06-25 17:38:13 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2026-05-13 23:39:27 +08:00
2025-01-13 15:14:29 +08:00
2026-06-25 17:35:25 +08:00
2026-06-25 17:35:25 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:30 +08:00
2025-01-13 15:14:29 +08:00
2025-07-08 13:12:14 +08:00
2026-06-23 01:32:46 +03:00
2026-06-25 17:38:13 +08:00
2026-03-23 18:57:35 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2026-06-25 17:38:10 +08:00
2026-07-08 16:30:06 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2026-03-23 18:57:35 +08:00
2025-01-13 15:14:29 +08:00
2025-01-13 15:14:29 +08:00
2026-06-25 17:35:25 +08:00
2026-06-25 17:38:13 +08:00
2026-07-07 18:37:18 +08:00
2026-06-25 17:35:25 +08:00
2026-06-25 17:33:05 +08:00
2026-06-25 17:33:05 +08:00
2025-01-13 15:14:29 +08:00
2026-01-17 05:47:32 +08:00
2026-04-20 09:49:39 +08:00
2025-01-13 15:14:29 +08:00
2026-06-25 17:35:25 +08:00
2026-06-25 17:35:25 +08:00
2026-06-03 12:56:36 +08:00
2026-06-25 17:38:55 +08:00
2026-07-18 03:04:45 +03:00
2026-06-25 17:38:13 +08:00
2026-06-25 17:35:25 +08:00
2026-06-25 17:38:55 +08:00
2026-06-25 17:38:02 +08:00