feat(zetesis,syntaxis,ergasia,horismos): live acquisition config + seed-threshold restart reclass (#529 step 7) - #587
Merged
Merged
Conversation
…ed-threshold restart reclass (#529) Gate-Passed: kanon 0.1.5 +stages:fmt,check,clippy,nextest,lint sha:d417d2dbc6b917b0632594700fbc7d1dc06c0f0c
forkwright
force-pushed
the
audit/529-step7
branch
from
July 7, 2026 02:46
fa0a6aa to
0375701
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Step 7 of the #529 reactive-config migration — the acquisition subsystems (indexer search, download queue, extraction) reconfigure live, and two structurally-frozen seed thresholds are reclassified as restart-required.
zetesis —
SearchIndexerServiceholdsSection<SearchSubsystemConfig>and takes one.get()snapshot per operation (max_concurrent_searches,search_timeout_seconds,max_response_body_bytes, per-op client timeout go live). NewRateLimiter::reconfigure(requests, window)updatesmax_tokens/refill_rateand clampstokensto the new ceiling, but leavesretry_afterandlast_refilluntouched — so a reconfigure racing an active 429 embargo cannot un-embargo the indexer or resurrect burst tokens (the #533 embargo-freeze invariant survives). The cf-proxy, cardigann registry, and HTTP client are each behind astd::sync::RwLock<Arc<…>>read through a sync snapshot helper that clones theArcand drops the guard before any await (never held across.await); an archonrun_zetesis_supervisorswaps the proxy/registry on the relevant config change (a cardigann load failure keeps the old registry +error!).syntaxis —
DownloadQueue::update_configreplaces the stored config (liveretry_count/retry_backoff_base_seconds) and callsSlotAllocator::set_limits;next_dispatchablenow readsallocator.max_per_tracker(), healing the frozen-vs-livemax_per_trackersplit-brain. A cap decrease below the in-flight count simply stops new dispatch until it drains — in-flight downloads are never cancelled; a cap increase runs a backlog pass so raised capacity fills immediately.run_syntaxis_supervisordrives it.ergasia —
SessionEngineholdsSection<ErgasiaConfig>and buildsExtractionLimitsper extract call, somax_extraction_depth/max_decompression_ratioare live.horismos —
ergasia.seed_ratio_thresholdandergasia.seed_time_threshold_hoursare added toRESTART_REQUIRED(frozen into the librqbitSeedingPolicyat session build with no reconfigure API, so a reload would otherwise "apply" them with zero effect — a step-1 honesty-invariant violation). Held back + reported on reload.Tests (real
ConfigManager/Sectionwhere a live handle is needed): rate-limiter embargo/accrual survives reconfigure (4 tests), a loweredmax_concurrent_searchesbounds the next fan-out, a cf-proxy swap proxies a previously-unproxied service,SlotAllocator/update_configdecrease stops dispatch without eviction and increase dispatches backlog, and the two seed thresholds are held back on reload.Gate:
kanon gate --fullgreen — fmt, check, clippy (-D warnings), nextest 646 (5 crates) / full workspace, deny, kanon lint (0/0).Gate-Passedstamped.Refs #529