Commit Graph

75 Commits

Author SHA1 Message Date
iomgaa b693d442f5 docs: record approval, verification evidence and a follow-up gap
Corrects the changelog claim that the old guard messages only named env keys:
they named fields too, it was the remediation advice that pointed at env keys.

Records the human approval of the design, the mutation-testing evidence from
the independent verifier, and the same-class gap it found: 14 checks (redis_url
presence, telemetry paths, enum validity) still live only in from_env, while
client.py asserts they were already validated. Deliberately out of scope here.
2026-07-30 00:36:59 -04:00
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 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 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 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 f621508117 docs: add M2.5 resilience design with review revisions 2026-07-21 08:26:43 -04:00
iomgaa 3f7a0ecebb docs: mark M2 milestone complete in roadmap 2026-07-21 03:46:33 -04:00
iomgaa f9677fbd8e docs: revise M2 plan per independent plan review 2026-07-21 00:13:12 -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 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 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 0e271f2b06 chore: initialize research wiki graph and register M1 design entity 2026-07-20 05:56:27 -04:00
iomgaa 2daeb4ae36 docs: revise M1 design per independent review findings
Fix Decision/Update field freeze (retry_after_s in seconds, source_name
included), freeze the 18 telemetry fields with model_name->model rename,
add thinking-token watchdog liveness semantics (CHS R1), add client
lifecycle/from_settings/gather_bounded/shared-backend injection
signatures, and register two more ARCHITECTURE feedback amendments.
2026-07-20 05:54:12 -04:00
iomgaa 6442461201 docs: add M1 core milestone design with frozen public signatures 2026-07-20 05:41:24 -04:00