Repository navigation
docs(ideation) astubbs#227: throttling and self-tuning ideation to plan, strategy bet, ledgers and learnings - #308
Conversation
Ideation document for the distributed rate limiting ask (#228, mirror of confluentinc#24), grounded in the linked production report confluentinc#766 (400K RPS in, 50K RPS downstream, 113 nodes on 100 partitions) and in a code-verified map of the dispatch seam, retry deferral, backpressure, and packaging conventions. 46 raw ideas from five parallel framing passes were deduped, verified by a fresh-context basis check (8/8 code spot-checks held), and cut to seven survivors spanning five axes: 1. Partition-share budget - distributed limiting with zero new dependencies (the consumer group itself as division substrate) 2. Dispatch-seam throttle via availableAt deferral - shape, don't police; reuses the RetryQueue calendar for wakeups 3. Little's Law controller - an RPS target becomes the in-flight target PC already enforces at dispatch AND poller 4. The throttling constitution - liveness beats the limit; epoch fencing; two verified corrections to #228's own architecture argument (ShardKey reach, batch cost timing) 5. Socket-and-plug packaging - SPI in core, bucket4j/Redis backends as opt-in artifacts per the -vertx/-reactor/-mutiny precedent 6. Adaptive AIMD on rate - no configured number, no coordination 7. Decorrelated jitter for the deterministic retry path - independently shippable The rejection table records the roads not taken with reasons, notably: assignor-userData lease allocation (feasible, deferred on adoption friction), offset-metadata stigmergy (contends with a near-capacity payload), and broker-side KIP-124 quotas (bytes-in is not requests-out). Also re-checks the 2020 library shortlist from confluentinc#24: bucket4j alive and grown (with a per-permit round-trip caveat), ratelimitj dormant, resilience4j#350 still unresolved - evidence the gap is real. Autopsy of the abandoned features/rate-limiting branch (e9f49d3) included; it policed instead of deferring and never used the distributed dependency it declared. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
The ideation doc names seven directions but no chosen one; this entry records the two gating decisions (enforcement fork, who owns the number) and the independently shippable jitter item, so a future session restarts from the artifact instead of re-deriving it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
…nk branch recovery Extends the throttling ideation with idea 8: one adaptive controller (#227 / confluentinc#21, TCP-congestion-theory concurrency) fed by latency gradient, failures, and a structured rate-limit exception the user function throws to teach the engine per-service ceilings at runtime. Capacity limits are discoverable; contractual quotas are not - explicit ceilings and adaptive discovery compose by min(), not compete. Also: idea 5 gains the curated strategy-menu framing (each strategy a distinct situation, min-composition, enforcement not user-selectable); docs/refactoring.md idea bank gains the three missing flow-control branches (dynamic-concurrency-control @6f85eac41, auto-tuning-pressure @f4aa09788, rate-limiting @e9f49d321) plus upstream draft PR confluentinc#22; the inflight entry now records the standalone-vs- self-scaling gating decision. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Too low silently wastes headroom, too high floods the downstream (confluentinc#766) - completes the case for adaptive control in idea 8. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Split from next-distributed-throttling.md: the two efforts will reach mergeable PRs at different times and carry distinct prototype trails. Records the two staged dimensions - per-instance adaptive concurrency first (no coordination substrate, design-to-optimal downstream feedback), instance-count recommendation later (metric + PC-owned cool-down + rebalance as acknowledgement, capped at partition count, HPA/KEDA as the consumer). Ranked into next-candidates.md; idea 8 card cross-references. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
… scaling Records the conflicting-recommendation problem (instances only see their own performance) with candidate resolutions ranked simplest-first: local delta-votes / headroom gauges that HPA aggregates natively, the assignor userData leader channel if a single number is ever needed, median-never- max if raw totals are aggregated anyway. Earmarks the partition-cap interaction with per-topic functions (#254) and share groups (KIP-932), and flags the STRATEGY.md positioning follow-up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
…al number Each instance votes +1/0/-1 from its own state; infrastructure sums (or HPA averages a headroom gauge). Post-rebalance cooldown per instance doubles as the acknowledgement loop: act -> rebalance -> cool down -> fresh votes. Assignor-leader coordination demoted to likely-unnecessary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Records what had only lived in conversation: plateau-cause-agnostic control (the reason runtime discovery beats configuration), the vote clamp rationale (bounded steps converge AIMD-style), dynamic cooldowns as the rule with fixed values only as fallback floor, the resolved relationship to rate limiting (ceilings as inputs, no substrate; shared SPI, independent shipping), the depersonalised engine-layer positioning argument for the strategy run, and the branch plan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Target problem gains the static-configuration crux (deploy-time guesses for runtime-dependent quantities, wrong in both directions). Approach gains the second half of the bet: the client is where ground truth lives, so the engine measures and decides what configuration used to guess - vs black-box lag-based autoscalers. New Self-tuning track (priority raised 2026-08-18) with the client-side-vantage moat argument. The achieved-fan-out-vs-configured-max metric becomes discovered concurrency vs sustainable ceiling, configured-max kept as interim proxy. One-liner unchanged. Also earmarks the #255 pairing: auto-scaling under a Kafka Streams topology. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
…ches Self-contained brief for a future session: one PR extracting stranded planning docs from unmerged branches onto master, sequenced on #305's audit, with provenance headers, three-shape triage, and a per-branch verdict as the definition of done. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
✅ Duplicate Code ReportTwo engines run in parallel for cross-validation. Each has its own thresholds tuned to its baseline - the real safety net is the per-engine "max increase vs base" check. ✅ PMD CPD
No new clones introduced by this PR. ✅ jscpd (language-agnostic)
No new clones introduced by this PR. Powered by astubbs/duplicate-code-cross-check |
✅ SpotBugs ReportNo bugs found (new bugs only — baseline from base branch excluded). |
🧪🔒 Quarantine Lane Report
🔴 expected while the owner PR is open · 🟡🎲 flapper, pass proves nothing · 🚨 a deterministic quarantined test passing means its fix landed: delete its |
…ension 1) Requirements-only unified plan from the ce-brainstorm session: the adaptive controller governs the admission target under min-composed ceilings, core engine first, opt-in with an optional seed. Records the seven session-settled decisions with provenance, the rip-out criteria as testable guardrails, the DynamicLoadFactor coexistence requirement, and the corrected #155 status (stall fixed upstream; residual mis-firing warning). CONCEPTS.md gains the admission-target term. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
Merging master brought #312 (the idea-extraction sweep this branch's handoff note commissioned - executed by another session) and #305 (the branch audit). Reconciliations git cannot do: the sweep handoff note retires as satisfied work; the orphans note's observability guess for feature/auto-tuning-pressure is corrected to the #227 flow-control family (settled by reading its commits); the idea-bank group gains its manifest cross-ref (sweep-2023-long-tail) per #305's convention. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
|
@claude review this |
|
Claude finished @astubbs's task in 4m 21s —— View job Review
This is a docs-only PR (1050+/4-, 9 files, no product code) and the diff matches the PR header exactly against merge-base Verified findings — the "code-verified" claims hold upI spot-checked the ideation doc's (
I couldn't verify the cited abandoned-branch SHAs ( One real finding
Notes, not defects
SummarySubstantively solid ideation/strategy work — the technical claims underpinning the eight ranked directions check out against the current source, and the docs are well cross-linked. One small |
…entry Review finding on #308: CONCEPTS.md entries stand alone - no file paths, class names or config values - so the glossary does not rot when the surface changes. Rephrased in prose. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
|
Review response - all points addressed:
Thanks for the check on the code claims - that was the part worth the scrutiny. |
…s - the NO_PROGRESS arm, twice in one night Two ProgressProbe fleet-stall kills of ChaosChurnStormIT four hours apart on unrelated docs-only branches (#310 and #308), seeds 3086917415748208232 and 8603691233664838594 captured before log expiry, each with its passing revoke-under-work control arm. Records the truncated-console-log trap that misattributed the first of them to the passing cooperative test (the circulated seed 4087023100803854645 is the control arm - do not replay it expecting a failure) and the run-logs-archive retrieval route that recovers what --job log cuts off. Also logs the untracked ReactorBatchTest.simpleBatchTest awaitility flake seen on #308's CI at d930ca9. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
|
Added in 54fad3e: fifth and sixth confluentinc#857-family sightings in the bug-857 ledger (the NO_PROGRESS fleet-stall arm, ChaosChurnStormIT, seeds 3086917415748208232 and 8603691233664838594 - the second was this PR's own first-wave chaos failure, since green on re-run), plus the ReactorBatchTest flake row. Note for anyone holding the earlier handoff: its cited seed 4087023100803854645 was the PASSING cooperative control arm - the truncated job log misattributed the failure; the ledger entry records the trap and the archive retrieval route. |
|
Claude finished @astubbs's task in 3m 9s —— View job Review — commit
|
…n with git -C Third recorded occurrence of the class (2026-08-06 checkout/rebase, 2026-08-10 merges on local master, 2026-08-18 merge on the rename branch); the middle one lived only in session memory, which is likely why it recurred. Records the merge-shaped tell (conflicts in files your branch never touched) alongside AGENTS.md's checkout-shaped one, and the discipline that held: git -C on every history-changing command. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
… endpoints for diagnosis Promotes the general retrieval mechanism out of the bug-857 ledger's bug-scoped notes: three routes ranked by completeness (report artifact, run-logs archive zip + attempts endpoint, console log as convenience only), the completeness check before any diagnosis, and the incident where 1654 of 5948 lines misattributed a chaos failure to a passing test in a circulated handoff. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx
…ttering drafts The first cut of the ladder let three kinds of overstatement through, all named in review: - 'implemented' now means the implementation intended to ship. A draft that will be replaced is at most a poc, and a draft that is not even the surviving direction does not advance the stage at all - so virtual-threads (#51 carries the upstream draft, not the fork's) drops to idea, and the health-check surface (#226, a working draft not yet accepted as the shipping surface) is a poc. - 'limited-poc' joins the ladder below poc: a slice runs but the central claim is not proven end-to-end. The Streams and Connect previews move there - 'poc' alone read as 'we proved we can do it', which neither spike claims. Java-and-Kafka drops to idea: compiling at 17 is exploration; the Java 11 + Kafka 4 work has not started. - 'planned' now means an implementation plan - the how. The self-tuning plan from #308 decides the what, so it is requirements-drafted. One promotion the review surfaced: the docs site has a drafted design on #316 (explicitly design only - no site is built there), so it moves from idea to planned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t just the file Review findings (#314, automated review round 2), both accepted: - The 'touches the roadmap' check was weaker than the gate's own promise: a carrier PR editing only some OTHER entry passed, so the claiming entry's stage could stay stale while the title said 'a carrying PR must move its entry'. The gate now snapshots the claiming entry's stage block (stage / stage_delivery / stage_detail, with folded continuations) at base and head and requires them to differ; touching the file elsewhere no longer counts. An entry removed or renamed at head counts as moved - the PR answers for it either way. - The carrier match accepted any '#N' suffix, so a copy-pasted confluentinc#N with a coinciding number would have claimed this fork's PR. Only the fork's own qualified form, astubbs#N, now claims. The merge of master directly before this commit resolves the review's round-1 finding: the branch asserted STRATEGY.md carries the self-tuning bet while its own tree predated #308's merge by six minutes; the merge brings the Self-tuning section in, making the roadmap's claim true in this tree. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… gate, and the self-tuning promotion (#314) The roadmap now carries the 2026-08-14..17 ideation wave, says how real every entry is, and enforces that it stays true. Six new entries at next-0x - the horizon the 1.0 exit criterion inspects: the language-proxy sidecar (#242), the polyglot proof demo, the performance comparison matrix, distributed throttling (#228), self-tuning concurrency (#227, promoted from the backlog to follow STRATEGY.md's self-tuning bet), and the batch-composition settlement (#145, confluentinc#266) that must precede confluentinc#915. Three backlog entries record what was considered and deliberately not scheduled: the proxy HTTP/REST-compat gateway, the Dapr component, and the actor/IPC revival. The running-instance-visibility entry is renamed web-gui - the name everything else uses. Every entry now carries stage and stage_detail - an eight-value ladder (idea, ideated, requirements-drafted, planned, limited-poc, poc, in-progress, implemented) ordered by the most advanced artifact that exists, with definitions deliberately hard to flatter: implemented requires proven use, and a brand-new system nobody has run in anger is a poc however large. An optional stage_delivery records the readiness judgment (draft vs pending-merge) for entries carried by an open PR. The schema makes stage/stage_detail entry_required, so no entry can claim a horizon without saying how real the work behind it is - built for the v6 release announcement to draw from directly. The ladder's ownership rule - the PR advancing a track moves its entry's stage in the same change - gets its own gate: roadmap-stage-gate.js compares the claiming entry's stage block between base and head (editing another entry does not count), accepts only the fork's qualified astubbs#N carrier form, and offers a reasoned roadmap-stage: N/A opt-out. Seventeen unit tests run before the gate in CI, one pinned against the real roadmap file. A merge-checklist line covers entries the gate cannot reach. Also corrects the module-records note that pointed at git history the #273 squash made unreachable - the drafted Connect feature record now rides its module-landing PR (#269) - and merges master so the tree actually contains the STRATEGY.md self-tuning section the roadmap cites (a review catch: the branch was cut six minutes before #308 merged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ectory a way to say so The ledger of live flakes is the note agents collide with, not the one they look up - and it has now been proved twice. A red test on a branch containing no Java at all was diagnosed from scratch on #308 and again on #320, both times while the ledger already held the sighting. The second time it was the same assertion in a different module, which is information the ledger would have handed over for free. So a note may now carry, on the line after its heading: <!-- inflight-priority: high - one line saying why, in the imperative --> and .claude/hooks/inject-recorded-knowledge.sh lifts it into a "Read these first" block at session start, above the flat list of everything else. THE REASON IS THE PAYLOAD: "live flakes; read this before diagnosing any red test" tells an agent WHEN the note applies, which a filename cannot. A path in a comma-separated list of forty is discoverable; it is not noticeable. Two rules in docs/inflight/AGENTS.md, which owns this: * THE TEST IS COLLISION, NOT IMPORTANCE. Every note here matters or it would be deleted. What earns the marker is that an agent working on something unrelated will otherwise waste the work, repeat it, or draw a wrong conclusion. * IF EVERYTHING IS HIGH, NOTHING IS. The block has to stay short enough to be read rather than skimmed, so a handful of notes and not a category - and adding one is the moment to ask whether another has stopped earning it. Two self-test cases, and the second is the one that matters: that a marked note's REASON is shown, not just its path. Both assert against the real corpus rather than this file's wording, so they track the convention rather than today's text. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…te-ups they earned
Records only - no mechanism here. Each of these was met while doing the work in
the preceding commits, and each is something the next person would otherwise
rediscover.
SIGHTINGS
* simpleBatchTest failed in Mutiny after failing in Reactor on
#308 - same alias, same 30-second timeout, same
shared BatchTestMethods lambda in core, BOTH on branches whose diffs contain
no Java at all. Two sightings in different modules say the wrapper is not
the variable. The assertion is off by one in the informative direction,
`Expected size: 3 but was: 4`: the records arrived, in one batch too many,
so it is a batch-BOUNDARY question rather than a lost-work one. Recorded
with the two readings that need separating - a loaded runner spreading work
out so the batcher closes early, or the batcher splitting under a timing the
library should tolerate - because assuming either is how a real defect gets
written off as a flake. Not quarantined: quarantine is master-state and
needs a diagnosis, and there is not one yet.
* The clones the widened scan exposed. Pre-existing - base and head both
report 27 CPD / 70 jscpd - and never triaged, because nothing outside four
directories was ever scanned. Deliberately not listed here: that is a
command's answer. What is recorded is that nobody has read them, and the
trap that the example modules are near-copies ON PURPOSE, so triage means
deciding per clone and saying which.
* A dispatched review ran 5m47s, concluded SUCCESS and posted nothing, while
claude-review stayed green on an older comment. Already-known, but this
sighting narrows it: two comment-route reviews on the SAME PR that morning
posted normally, so it is the route, not the diff or the reviewer.
* The scanner follow-up marked landed, with the warning that it is not the one
that mattered. Widening fixes SCOPE; the failure the write-up describes is
CAPABILITY, and follow-up (b) - assert a contract's canonical phrasing
appears in one file and nowhere else - is still open and is what would have
caught #287.
WRITE-UPS
* What a clone detector cannot see once scope is fixed: code embedded in
another language's file. CPD parses per language, jscpd keys format off the
extension, so JavaScript in a YAML string is never compared with JavaScript
in a shell heredoc - and no directory list changes that. It also records the
ratio trap: widening found MORE clones at a LOWER percentage, which killed
an absolute threshold silently.
* A forward-pointer on the 2026-08-12 write-up, whose findings are
deliberately NOT rewritten - a dated record says what was known that day, and
a "See also" is a cross-reference rather than a changed claim.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…te-ups they earned
Records only - no mechanism here. Each of these was met while doing the work in
the preceding commits, and each is something the next person would otherwise
rediscover.
SIGHTINGS
* simpleBatchTest failed in Mutiny after failing in Reactor on
#308 - same alias, same 30-second timeout, same
shared BatchTestMethods lambda in core, BOTH on branches whose diffs contain
no Java at all. Two sightings in different modules say the wrapper is not
the variable. The assertion is off by one in the informative direction,
`Expected size: 3 but was: 4`: the records arrived, in one batch too many,
so it is a batch-BOUNDARY question rather than a lost-work one. Recorded
with the two readings that need separating - a loaded runner spreading work
out so the batcher closes early, or the batcher splitting under a timing the
library should tolerate - because assuming either is how a real defect gets
written off as a flake. Not quarantined: quarantine is master-state and
needs a diagnosis, and there is not one yet.
* The clones the widened scan exposed. Pre-existing - base and head both
report 27 CPD / 70 jscpd - and never triaged, because nothing outside four
directories was ever scanned. Deliberately not listed here: that is a
command's answer. What is recorded is that nobody has read them, and the
trap that the example modules are near-copies ON PURPOSE, so triage means
deciding per clone and saying which.
* A dispatched review ran 5m47s, concluded SUCCESS and posted nothing, while
claude-review stayed green on an older comment. Already-known, but this
sighting narrows it: two comment-route reviews on the SAME PR that morning
posted normally, so it is the route, not the diff or the reviewer.
* The scanner follow-up marked landed, with the warning that it is not the one
that mattered. Widening fixes SCOPE; the failure the write-up describes is
CAPABILITY, and follow-up (b) - assert a contract's canonical phrasing
appears in one file and nowhere else - is still open and is what would have
caught #287.
WRITE-UPS
* What a clone detector cannot see once scope is fixed: code embedded in
another language's file. CPD parses per language, jscpd keys format off the
extension, so JavaScript in a YAML string is never compared with JavaScript
in a shell heredoc - and no directory list changes that. It also records the
ratio trap: widening found MORE clones at a LOWER percentage, which killed
an absolute threshold silently.
* A forward-pointer on the 2026-08-12 write-up, whose findings are
deliberately NOT rewritten - a dated record says what was known that day, and
a "See also" is a cross-reference rather than a changed claim.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Serves #228 and #227.
Description
Ideation, strategy, and ledger work for distributed throttling and its convergence with
self-tuning concurrency. Docs only - no product code changes.
Ideation doc (
docs/ideation/2026-08-17-distributed-throttling-ideation.html): eightranked, code-verified directions for distributed rate limiting
(#228, mirror of confluentinc#24), grounded in the
production report confluentinc#766 and a fresh-context verification pass
(8/8 code spot-checks held). Includes the rejection table (what was cut and why), the
strategy-menu framing (curated limit-source strategies composing by min-of-ceilings), the 2020
library shortlist re-checked (bucket4j alive, ratelimitj dormant, resilience4j still punting),
and idea 8: one adaptive controller replacing both concurrency and rate configuration
(#227, mirror of confluentinc#21).
Strategy (
STRATEGY.md): the self-tuning bet enters the doc - target problem gains thestatic-configuration crux (deploy-time guesses for runtime-dependent quantities, wrong in both
directions), approach gains the ground-truth argument (the engine measures and decides what
configuration used to guess), a new Self-tuning track (priority raised 2026-08-18), and the
achieved-fan-out metric reworked to discovered-concurrency-vs-sustainable-ceiling.
Inflight ledger (
docs/inflight/): notes -next-distributed-throttling.md(gating decisions for any throttle build),next-auto-scaling.md(the settled dimension-2 design: local +1/0/-1 delta votes, no globalnumber, dynamic variance-derived cooldowns, post-rebalance cooldown doubling as the
acknowledgement loop; positioning safekeeping; earmarks including the
#255 Kafka Streams pairing), and
the extraction-sweep handoff note this PR briefly carried - since executed and merged as
#312, so the note is retired again here as satisfied work.
next-candidates.mdgains the priority-raised auto-scaling entry.Idea-bank recovery (
docs/refactoring.md): the three flow-control branches missing fromthe abandoned-branch catalogue are now recorded -
features/dynamic-concurrency-control@6f85eac41 (Netflix concurrency-limits wired as the worker pool),
feature/auto-tuning-pressure@f4aa09788 (hand-rolled self-tuning; theDynamicLoadFactorno-step-down gap is its fossil), and
features/rate-limiting@e9f49d321 (bucket4j POC thatpoliced instead of deferring). Complements #305's manifest back-fill:
that PR owns the upstream-map layer, this one owns the editorial idea-bank layer; they touch
different sections of
docs/refactoring.md.Same-defect search (docs-shape: knowledge stranded off master): the flow-control branches
found here are now catalogued; the remaining class instances are inventoried, not fixed - the
extraction-sweep handoff note in this PR is the plan for them, starting from
#305's 196-branch audit. Verdict recording per branch is that sweep's
definition of done.
Requirements plan (
docs/plans/2026-08-18-001-feat-self-scaling-concurrency-plan.md): the ce-brainstorm output for the self-scaling controller (dimension 1 of #227) - session-settled decisions with provenance, admission-target control model, rip-out criteria as testable guardrails, and the corrected #155 status (original stall already fixed; residual mis-firing warning remains).CONCEPTS.mdgains the admission-target term.Chaos-sighting ledger (
docs/inflight/bug-857-family.md): the fifth and sixthconfluentinc#857-family sightings - two same-signature
NO_PROGRESSfleet-stallkills of
ChaosChurnStormITfour hours apart (one of them this PR's own first-wave chaos failure),replay seeds captured before log expiry, plus the truncated-console-log misattribution trap and its
recovery route. The untracked
ReactorBatchTestawaitility flake seen on this PR's CI is logged indocs/inflight/test-untracked-ci-flakes.md. (Fifth-sighting task executed here per handoff, foldedinto this PR at the owner's direction.)
Compounded learnings (
docs/solutions/workflow-issues/): two session learnings captured as durable docs -silent-cwd-reset-runs-git-in-the-wrong-checkout.md(third occurrence of the class; pin every history-changing git command withgit -C) andgh-run-view-log-truncation.md(the console-log truncation trap behind the misattributed chaos handoff, with the three retrieval routes ranked by completeness).Checklist
docs/features/- N/A - ideation/strategy/ledger docs only, no product feature shippedbin/check-issue-refs.shgreen on every commit🤖 Generated with Claude Code
https://claude.ai/code/session_01Fq6AcSoq6nMqbRHQxw25wx