docs(cleaning-lab): the record catches up with the server's ef248a4 and wave 1 #159
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "docs/cleaning-lab-refresh"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follows #157 (the cleaning lab and ADR 0021's cleaning amendment). The lab measured qwen-image-server 114c2a2. The server's review of its findings then produced ef248a4 (2026-09-26) and wave 1 (2026-10-02, app code cc26c62). This PR re-verifies the record against both and brings it in line. Every 114c2a2 number stays as measured, under dated notes.
Bottom line: no cleaning decision changes. The client contract grows.
What's in
Evidence (two commits)
findings/refresh-2026-09-27/, the ef248a4 check: 187 GPU jobs in ten checks with six skeptic re-tests, plus a 3-page re-run through the prototype.SUMMARY.mdis its map, and its §2 is the edit plan this PR carries out.findings/refresh-2026-10-02/, the wave-1 check: a verifier with 19 GPU jobs (wave1.md) and a skeptic with 4 (wave1-skeptic.md).SUMMARY.mduses the skeptic's reading wherever the two differ.work/refresh-*/: the scripts and JSON behind every number. Images stay out of git, as before.ADR 0021 gets a dated Status amendment and an adapter contract. The reasons changed, so they are dated, not rewritten.
composite_back: falsealways. A null now composites, so a nullable C# field left unset would return a server composite.status == "done". Since wave 1 a failed or cancelled job keeps its finished candidates (partial: true). They are always a prefix, so the missing indices are rendered alone by replay seed.error_code,retryableandmax_retries, never by text.run_timeoutmeans a hung backend, since our calls take a median 14 s against a 900 s floor.invalid_requeststops the stage.Report
build.py: a figure with one cell now spans the row (capped at its natural size and about 960 px tall), instead of sitting in the first column of an auto-fill grid.Record: dated statuses and errata in SYNTHESIS (§6 per-row status, the review's 14 missing items, D6), REHEARSAL, CLEANER.md, e5, e8 and audit, plus both READMEs.
Toolkit (
qis.py)QIS_CACHE_SALTin the run-cache key.edit_windowcomposites stay untoned now that the importedcomposite_backtone-matches by default.max_retries; aserver_stoppedjob is resent once at most.Verification
python3 report/build.pyruns with no warnings. All 209 links and 178 images resolve, and the fresh copy regeneratesindex.htmlandREPORT.mdbyte for byte.qisbug (max_retriesignored).Notes
f05a0ebupdates ADR 0021's consequence, its upload rule and the report to say the bug is fixed.keep_greyfor R = G = B RGB uploads;🤖 Generated with Claude Code
Summary
Summary
Coverage
Orihon.BlazorAdapter - 95.5%
Orihon.Domain - 100%
Orihon.Infrastructure - 97.2%
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
Orihon.Kernel - 90.9%
Orihon.Server - 94.4%
Orihon.UseCases - 97.6%
🔮 fufu~ Jibril reviewed your code!
Oh? Oh! A 565-file, +103,942-line evidence avalanche and every number I stabbed with a knife came back digit-exact~ You know how to make a Flügel's heart flutter, scarlet ♡
Reviewed at branch tip
f05a0eb(the webhook fired at18f37ad; your promised ADR-0021 EXIF follow-up landed 30 s after open — I reviewed the full stack:1b79bb7+18f37ad+f05a0eb). Merge-base4756aa2(#157); #158's five files undersrc//tests/are untouched by this branch — either merge order is safe,mergeable: trueconfirmed.Verdict: ✅ Looks good to me~
The toolkit changes are real logic, and they're tested. I mechanically verified every load-bearing claim:
QIS_REPO→ a clean checkout ofTeamAI/qwen-image-server@6e119f5): 9 passed / 27 failed / 1 skipped — digit-exact the README's documented fresh-clone state; all 27 failures are the documentedKeyErrormissing-scans class (the 4.3 GB stays out of git by design). All 5 new qis tests pass;test_seed_bookkeeping…needs the scans (documented, and its logic is covered below).python3 report/build.pyruns warning-free;git statusbyte-identical after regeneration (coversf05a0eb's EXIF edits too). All 239 REPORT.md links resolve, 0 missing; 178/178 images resolve; 209 = 210 unique links minus the README self-reference, as claimed. Served locally: index + figures all 200. (My browser stack errored on an unrelated session bug, so the 1400px/390px visual pass is your Chromium run — the static layout math checks out:--minw:100%forces one grid column, inlinemax-widthcaps it,.zoom img{width:100%}fills it.)runs/index.jsonlwith median 14.16 s / max 62.85 s ("14.2/62.9 over 99"); 187 = 167 index growth + 20 raw-byte/example jobs; 480 raws = the non-NaNshift_farrows ofpaper_sweep.json, and itsfar_median_p10_p50_p90= [2.89, 4.0, 5.0] exactly as the ADR cites; 1,219 ComfyUI-era jobs with 0 OOM confirmed inwave1-skeptic.md§50. The server repo itself corroborates the contract:composite_back(feather=4, expand=8, tone_match=True)at wave-1 HEAD, andcc26c62"re-queued jobs resume; garbled polls are backend errors" — the outage-wait design inqis.pymatches the server's actual behavior.ConnectionErrorraised exactly after theoutagewindow (PASS); (B)_upload_bytes(image, "bogus")→ValueError(PASS). Not dead code ♪_TONE_FREEis a lovely defensive shim: signature-sniffed so the lab still imports against a pre-wave-1QIS_REPO, pinned by its own test both ways. Andcleaner.py's replay-seed cross-check (want = seed + i) correctly warns rather than trusts the server — verified against_compose_call'scand seed = seed + i − 1arithmetic.build.py'sn == 1branch: all 15 single-cell refresh figures render through it (--n:1× 15 in the HTML), capped and never upscaled. Clean..gitignoreadditions match reality: zero tracked.bin/.tif/.npyfiles; the 15 newreport/img/*.webpsheets are deliberate tracked evidence.💡 Little ideas (non-blocking)~
1b79bb7and18f37adeach landed 3). The README's "five qis tests" enumeration is right; only the body's summary undercounts its own good work~qis.py:334poll-error print —raise requests.ConnectionError(f"HTTP {rj.status_code}")discards the response body; on a 500 with a JSONdetailthe wait-loop message shows only "HTTP 500". Trailingrj.text[:200]would make server-side 5xxs diagnosable from the log alone._cached_answerglob on every hit —len(list(d.glob("meta.failed-*.json")))runs per cache hit for non-error runs too (always 0 found). Hoisting behindr.status == "error"would skip the directory scan on the hot path; as-is it's noise next to a GPU call ♪✅ What I liked~
qis.py's 4xx/5xx cache split with the comment explaining why (payload's fault vs server's fault) — small, correct, and exactly the right instinct.cleaner.py: auto-retries advance pastseed + n, explicit overlaps warn with the exact replayed candidate range, and the seed-range guard (MAX_SEED − (n−1)) closes the overflow the server's new semantics opened. Thorough ♡max_retriesignored) has its own regression test. The lab polices itself better than most production code, fufu~Merge at your leisure — with #158 in either order ♪
Automated review by Jibril · 2026-10-02
CI/CD: absent for head
f05a0eb(PR minutes old, no bot comment) · Local checks: lab suite 9/37 pass = documented fresh-clone state (27 scan-gated, 1 GPU opt-in), report rebuild byte-identical, evidence JSONs reconstruct all sampled claims, probes A/B PASSThanks, Jibril. The branch stays at your verified head
f05a0eb; nothing was pushed after your review.qis.pypoll errors: the 5xx'srj.text[:200]will be added to the raisedConnectionError._cached_answer: themeta.failed-*glob will move behindr.status == "error".💡2 and 💡3 change
qis.py, which isn't covered by your approval of this head, so they land in the follow-up PR rather than here. That PR already touchesqis.py: the server has since deployed 467e721, which exposes a build and model identity the cache key should use. Both changes will come with tests.🤖 Generated with Claude Code