Commit Graph

109 Commits

Author SHA1 Message Date
iomgaa 64d0fac879 docs: clarify where the invalid-settings exception is raised
Implementation confirmed that no invalid GatewaySettings instance can exist, so
the factory test's exception fires while evaluating the argument rather than
inside from_settings. Recorded so the test is not misread as the factory
carrying its own validation.
2026-07-30 00:09:47 -04:00
iomgaa f92065bc0b docs: design settings invariant guards on every construction path
Guards for the three cross-field invariants (source timeout vs lease TTL,
stall window vs max TTFT, probe TTL vs slowest timeout) only ran inside
from_env, so the from_settings path could build a GatewaySettings that
violates the class's own documented invariants. Design moves all of them
plus a non-empty sources check into __post_init__ as _validate_* methods,
matching the existing frozen dataclasses in types.py.

Covers two defects left by PR#1: probe_ttl_s was never moved, and an empty
sources tuple leaked a bare 'max() arg is an empty sequence'.
2026-07-29 23:55:47 -04:00
iomgaa f17044dead docs: record wiki structure and doc-sync convention 2026-07-23 04:02:47 -04:00
iomgaa b2ee4fa383 docs: record v1.0.0 release and close out M4 roadmap status 2026-07-22 11:47:16 -04:00
iomgaa e09362dcd1 docs: sync M4 outcomes into roadmap, architecture, and migration docs
VT migration abandoned (v1.0 scope becomes two projects), Q1 resolved
to Gitea PyPI, Q6 resolved as judge exemption (unwired zero-consumer
eval scaffolding), migration docs annotated with implementation errata,
and the reference/ read-only rule clarified for the worktree workflow.
2026-07-22 10:57:00 -04:00
iomgaa 7ac51f1f55 docs: register m4-acceptance finding in wiki 2026-07-22 10:36:33 -04:00
iomgaa f50df42084 docs: record M4 two-project migration acceptance 2026-07-22 10:36:33 -04:00
iomgaa 547141cf0a docs: revise M4 plan per independent review (4I/6M) 2026-07-22 05:46:14 -04:00
iomgaa 84e23dc5c3 docs: add M4 migration implementation plan 2026-07-22 05:33:05 -04:00
iomgaa ee1bc403ad docs: revise M4 design per independent review (3I/6M) and register wiki entity 2026-07-22 05:12:45 -04:00
iomgaa c95c70b69b docs: add M4 migration verification design 2026-07-22 04:57:54 -04:00
iomgaa d883d6e9c7 docs: record verifier fixes and P7 confirmation round 2026-07-22 02:42:33 -04:00
iomgaa 18d4f60665 docs: record P7 OCR soak acceptance at 99.73 percent 2026-07-22 01:37:17 -04:00
iomgaa 0f9ecad2c4 docs: sync OCR architecture wording and close G1 R9 R10 2026-07-21 23:34:33 -04:00
iomgaa 88127a6e8b docs: address M3 plan review findings 2026-07-21 22:21:16 -04:00
iomgaa e51f0773ac docs: add M3 OCR implementation plan and telemetry metric 2026-07-21 22:11:33 -04:00
iomgaa dfc013e8ed docs: note 35-sample multipart evidence and archive path 2026-07-21 21:54:33 -04:00
iomgaa 40be3a22ef docs: address M3 OCR design review findings 2026-07-21 21:50:56 -04:00
iomgaa b8f7007d06 docs: add M3 OCR port family design 2026-07-21 21:39:49 -04:00
iomgaa a06761917e fix: address M2.5 verifier findings before merge
AIMD ceiling now respects per-source max_concurrency and the pacer is
assembled explicitly in the client; MIN_CALLS parses as strict int;
acceptance doc corrects source-5 attempt count to 549; design and
migration notes aligned with implemented 429/stall/suppression
semantics and AIMD constants documented.
2026-07-21 21:10:02 -04:00
iomgaa 9d28e03d49 docs: record M2.5 acceptance at 98.96 percent on unchanged P6 2026-07-21 17:34:13 -04:00
iomgaa 121888a0eb feat: suppress consecutive-channel opening on evidently healthy sources
Round 8 forensics caught the healthy source circuit-opened by five
random empty completions (~20% ambient failure rate makes a 5-streak
land every ~3000 attempts), blacking out the only good source for 60s.
When the window holds min_calls samples below the failure-rate
threshold, a streak is noise and no longer opens the gate; cold-start
and low-traffic semantics are unchanged and sudden death of a warm
source is still caught by the rate channel.
2026-07-21 15:28:34 -04:00
iomgaa 69968f2e8b feat: exempt 429 pushback from retry budget with stall ceiling
Round 6 hit account-level rate throttling the concurrency AIMD cannot
absorb: at 26 req/min the gateway still returned 16% 429s and each one
burned a third of the retry budget. Retry-After-guided 429s now back
off without consuming attempts (gRPC pushback semantics); the retry
loop gains a per-call ceiling using the same dual-condition stall
verdict as quota-wait (local window exceeded AND no global progress).
2026-07-21 13:19:16 -04:00
iomgaa 6b98a89bb3 feat: default two structured re-asks and sharper AIMD cut
Round 5 left three residual failure classes; ladder exhaustion (3.2%
of structured calls with a single re-ask) and 429 leakage (5.8%, AIMD
oscillating above the sustainable point) are addressable: re-ask
default goes 1 to 2 (conservative vs instructor's 3) and the AIMD cut
factor drops to 0.5.
2026-07-21 12:52:32 -04:00
iomgaa 0e17f71482 feat: gate in-call demotion on credible alternative health
Round 3 showed unconditional yield-after-two-failures pushes the third
attempt onto known-bad sources in heterogeneous pools (83% vs 10%
expected success). OutcomeAwareSelector now exposes health(); a failed
source only yields when some untried candidate scores at least half its
health. Health-blind selectors keep the unconditional rule.
2026-07-21 11:24:52 -04:00
iomgaa 58061c7536 feat: add AIMD adaptive concurrency pacing per source
P6 round 2 showed routing convergence turns account-level 429s into
the binding constraint (62% throttle rate at full concurrency). Each
source now carries a local AIMD limit: multiplicative cut on 429,
additive growth on success. Over-limit picks queue via the existing
quota-wait poll instead of burning retry budget or tripping the
circuit-open verdict.
2026-07-21 10:38:48 -04:00
iomgaa 910857fd13 docs: sync env template, migration notes and architecture for M2.5 2026-07-21 10:00:11 -04:00
iomgaa 8e2673487a docs: revise M2.5 plan per independent review 2026-07-21 08:41:17 -04:00
iomgaa 3542917ba8 docs: register M2.5 plan in wiki graph 2026-07-21 08:30:36 -04:00
iomgaa f92124fb8c docs: add M2.5 resilience implementation plan 2026-07-21 08:30:33 -04:00
iomgaa f621508117 docs: add M2.5 resilience design with review revisions 2026-07-21 08:26:43 -04:00
iomgaa 1a8931613a docs: correct P6 finding per verifier review 2026-07-21 07:42:54 -04:00
iomgaa 8c178a249c docs: record P6 soak baseline and scoreboard artifact fixes 2026-07-21 07:22:34 -04:00
iomgaa 3f7a0ecebb docs: mark M2 milestone complete in roadmap 2026-07-21 03:46:33 -04:00
iomgaa 326dd24dd1 fix: address M2 verifier findings in soak harness 2026-07-21 02:05:49 -04:00
iomgaa 724dc3c328 docs: backfill env template and migration notes for M2 2026-07-21 01:28:33 -04:00
iomgaa f9677fbd8e docs: revise M2 plan per independent plan review 2026-07-21 00:13:12 -04:00
iomgaa b1778fd278 docs: add M2 distributed implementation plan 2026-07-20 23:47:40 -04:00
iomgaa b165c2aae6 docs: finalize M2 design after human approval gate 2026-07-20 23:41:20 -04:00
iomgaa dfd9dcfee4 docs: revise M2 design per independent review findings 2026-07-20 23:17:24 -04:00
iomgaa 8aaf8f200b docs: add M2 distributed design and record Q3 embedding decision 2026-07-20 23:01:29 -04:00
iomgaa e101d82400 docs: record completed soak corpus pull and redis isolation rules 2026-07-20 22:37:00 -04:00
iomgaa 2e9e2b7c36 docs: add M2 soak-test scenario matrix and data manifest
Records the human decision to test against the real gateway with real
data instead of building a mock gateway, six execution scenarios with
fault-source mixing, hard invariants scored from our own telemetry,
and the corpus inventory pulled from the lab server.
2026-07-20 22:27:47 -04:00
iomgaa 7163005edf docs: mark M1 milestone complete in roadmap 2026-07-20 22:04:00 -04:00
iomgaa 0b8460b6d5 fix: address independent verification findings
Classify empty completions as transient per human ruling (fixes flaky
real-gateway smoke and prevents caching empty responses), rename the
factory injection parameter gate to breaker per the frozen design,
rewrite the probe-entry cleanup without except BaseException, declare
python-dotenv explicitly, add a mid-backoff cancellation test, and
record all implementation errata in the design and architecture docs.
2026-07-20 22:01:26 -04:00
iomgaa 0be111d64c docs: register llm_calls telemetry schema in wiki 2026-07-20 07:12:27 -04:00
iomgaa b568b61a34 docs: pin register_provider as pure function per plan review
Also note that the seven architecture amendments predate the plan,
tighten T12 to independent implementation layers, and add fallback
guidance for read-only reference protocol imports.
2026-07-20 06:26:46 -04:00
iomgaa f5623166a6 chore: register M1 plan entity in research wiki 2026-07-20 06:19:38 -04:00
iomgaa 8b64274add docs: add M1 implementation plan with fifteen verifiable tasks 2026-07-20 06:18:08 -04:00
iomgaa 2fb968b851 docs: apply seven M1-design feedback amendments to architecture
Correct the section 6.1 reason enum against actual CHS code, make
retry_after_s a non-optional float, add structured_data to LLMResponse
extensions, finalize the structured parameter type, document SSE
missing-done semantics and watchdog thinking-token liveness, add the
StructuredMW layer to the default onion order, and register
middleware/structured.py in the module map.
2026-07-20 06:12:52 -04:00