Office sample scene: round 24 (chroma-key + composition fixes) — t-59 - #12
Closed
mahoudeau wants to merge 16 commits into
Closed
Office sample scene: round 24 (chroma-key + composition fixes) — t-59#12mahoudeau wants to merge 16 commits into
mahoudeau wants to merge 16 commits into
Conversation
Boss verdict 2026-08-16T09:32 (t-59 mission log): craft gap (shading detail/resolution, no facial expression, hair not a distinct/realistic haircut) plus a thematic reframe (Bureau = spy-agency HQ, FBI / Le Bureau des Legendes register, cool pixel-16-bit aesthetic, modern shading and lighting) -- both addressed this round without touching the palette-discipline or shape-language work rounds 8-14 already closed. - Environment repalette: graphite-blue walls, slate floor tile, charcoal mat, cool-cyan night skyline behind new venetian blinds - New ceiling downlight (briefing-room spot) alongside the recolored cool-white desk lamp; monitor glow promoted to a real second key light - Character: white shirt + tie + ID badge/lanyard, asymmetric side-part haircut (was 4 same-size round lobes), asymmetric expressive brows + nose highlight + downturned mouth corner, small rim-light catch-lights (shoulder + cheekbone -- a first full-height rim-stripe attempt read as a glitch line and was walked back) - Silhouette-diff palette check still holds: 32 distinct colors (was 34 round 14), inside the cited references' 27-33 whole-sprite range Standing infinite critic-gate loop on this mission continues -- this is round 15 of an intentionally open-ended loop, not a finished piece. Not touching gate (still critic) per the mission's own standing rule. t-59
Critic pass on round 15 credited the thematic reframe and expression/ haircut work as real, then confirmed round 15's own honest deferral: the boss's first-listed craft item, shading detail/resolution, was still live. - Hair: added directional strand highlights (new hairStrand tone) instead of one flat mass + single specular pixel - Shirt/jacket: widened the three shading bands' contrast and added a discrete highlight patch at the collar fold, closer to the references' hard-edged flat-color-block + highlight-patch construction than the prior soft-looking gradient - Face: added a jaw-shadow chip and a real highlight patch above the cheek tint for actual structure, not just a color wash Silhouette-diff palette count: 35 (round 15: 32) - a small, named, expected increase from adding real tonal detail on the targeted axis, not a regression; still close to the references' 27-33 range. Standing infinite critic-gate loop continues. Not touching gate. t-59
A fresh critic pass on round 16 found its fix (a handful of 1-2px hairStrand accent pixels) was the wrong shape of fix for the right diagnosis: the hair's shadow/mid tones themselves needed to carry the strand geometry, the same restructuring rounds 9-10 already gave the floor and torso, never applied to hair. Rebuilt every hair lock (crown, fringe, shadow-lobe) with the existing ovalShade helper - already used for the head, and it degenerates cleanly to a circular blob when its two radii are equal, so no new geometry code was needed - giving each lock its own internal lit/mid/ shadow gradient instead of one flat fill per lock. Added hairHi2 (peak highlight) and hairDeep (shadow rim) tones at the bright/dark ends so the four-lock composition still reads as distinct locks, not a melted mass, while each lock now individually carries real tonal range. Silhouette-diff palette count: 36 (round 16: 35) - small, expected, directly explained by the two new tones. Standing infinite critic-gate loop continues. Not touching gate. t-59
A critic pass on round 17 confirmed the per-lock internal banding that round built was real and closed, then found the gap one level deeper: the hair silhouette was still one continuous crown/cap outline holding 3-4 large tonal zones, where the reference's hair is built from 5-6 independently outlined spike/lock shapes. Replaced the crown/fringe/shadow-lobe trio (rounds 13-17) with six smaller locks fanned across the top of the head, via a new hairLock() helper: a small seam ring in the hair's darkest tone stamped before each lock's own internally-shaded fill, so touching/overlapping locks read as separately outlined without new per-shape boolean geometry. Locks drawn shadow-side first, lit-side last. Silhouette-diff palette count unchanged at 36 (no new tones, pure geometry restructure). Honest self-assessment, not claimed fully closed: the two lit-side locks (A/B) read as clearly distinct spike shapes; the four darker/shadow-side locks (C/D/E/F) sit closer in tone to each other and to the background, so their individual seams are less visually distinct than the lit pair's. Flagging for the critic's own read rather than asserting parity. Standing infinite critic-gate loop continues. Not touching gate. t-59
A critic pass on round 18 pixel-sampled the scene and root-caused why the four shadow-side hair locks were illegible: their own tones sat only ~15-20 points per channel below the dark wall/vignette behind them - a value-contrast problem underneath the geometry fix, not a residual geometry problem. Did both of her suggested fixes rather than betting on either alone: - Raised hairShadow/hairDeep's floor, kept strictly below hairMid so the lit>mid>shadow ordering within each lock still holds. - Added a thin rim-light edge (the existing cool-monitor-rim convention already used on the torso/head) along each shadow-side lock's own outer edge, so its silhouette reads against the dark backdrop even where the fill tone alone is close to the wall's value. The two already-legible lit locks (A/B) untouched. Silhouette-diff palette count unchanged at 36. Standing infinite critic-gate loop continues. Not touching gate. t-59
THE LAW amended (boss ruling 2026-08-16T13:12, t-54 log): the boss-generated sheets under references/office/ are owned source material now, not look-only references. Builders extract instead of redrawing what a sheet covers. This round deletes the entire rounds-1-19 hand-drawn canvas engine and replaces it with a real extraction pipeline: crop the desk/typing unit and the standing/idle unit directly from cast/sheet-agent-anims-a.jpg and sheet-agent-anims-b.jpg (despeckle + 40-color quantize + 3x nearest-neighbor upscale, no redraw), pack into an atlas + frame table (office-sample-assets/atlas.png + frames.json), and play it back via requestAnimationFrame per the frame durations - the data-driven animation convention from t-54's engine-outcomes ruling, now real. Also extracted a floor-lamp and wall-terminal prop from the same two sheets for room dressing. Fixed a leg/foot bleed artifact from the sheet's own row spacing by trimming the crop's top 65px. Named gaps left honest in the page's own About panel: a visible color seam where the character crop meets the lamp/wallmon crop (different source rows, different lighting grade); character-height-vs-native- anchor not verified against the Sea of Stars proportions crops. Gate untouched (still critic, per this mission's standing infinite-loop instruction) - not the builder's call to raise. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MyCYqR5n6t81MxdWQn4ReF
…y) - t-59 Fixes both gaps the round-20 critic pass named: 1. MECHANICAL FLOOR (automatic send-back per t-54): the composed room corner mixed two light sources - character+desk from sheet-agent-anims-a.jpg's cool cyan register, a floor lamp from sheet-agent-anims-b.jpg's near-black-to-warm-amber register glued on top. Fixed by re-sourcing idle from the SAME row of the SAME sheet as typing (cast/sheet-agent-anims-a.jpg row 2, columns 0 and 7 - the character standing before/after sitting) instead of sheet-agent-anims-b.jpg, and dropping the mismatched lamp entirely rather than re-matching it. Everything in the atlas now traces to one sheet, one row - one light source by construction. 2. EXTRACTION FIDELITY / palette drift: idle-0 and idle-1's skin tone visibly shifted frame to frame (independent per-frame quantize letting the same true color snap to different output values). Fixed with a SHARED palette: all 5 character frames are combined into one image, one 40-color palette is derived from that, and every frame quantizes against the same palette. Also: the wall terminal's red/green status-light pixels were being erased by the quantize regardless of color budget (tested 40/64/96, all merged them away - each cluster is under 0.4% of the crop). Fixed by exempting those two precisely-located regions from the quantize step and pasting back their true despeckled source colors. Gate untouched (still critic, per this mission's standing infinite-loop instruction). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MyCYqR5n6t81MxdWQn4ReF
Answers the boss's own question on this mission's log (2026-08-16T14:16): 'I see image compression artefacts. Is it because it's a zoomed screenshot? Is quality crisp enough for Retina display?' Investigated both possibilities and ruled them out: evidence screenshots are lossless PNG (no JPEG re-compression), and the page's canvas already renders at 1:1 native-asset resolution with image-rendering:pixelated (no browser-side scaling in the render path). The real cause: the despeckle step (a 3x3 mode filter) was too weak to fully remove the source JPEG's own compression ringing - a faint speckled noise pattern (most visible in shadow regions like the jaw/ear) survived despeckle and got carried through the palette quantize unchanged, since quantize maps existing pixels rather than smoothing spatial noise. Under a 3x nearest-neighbor upscale with zero smoothing (deliberate, for crispness), that residual reads exactly like a compression artifact - because it is one, just from the source photo, not from anything in this page's own display path. Fixed: A/B tested four despeckle strengths (mode 3/5/7px, median 3/5px) against the same face crop. Mode filter at larger kernels made the noise WORSE. Median filter at size 3 removed it cleanly while keeping edges/shading bands crisp; size 5 was cleaner but started softening real detail. Switched every crop's despeckle step from ImageFilter.ModeFilter(3) to ImageFilter.MedianFilter(3); the shared-palette quantize and wall-terminal accent-color preservation from round 21 are otherwise unchanged. Gate is boss (raised by moneta's round-21 critic pass) - this round answers his question and re-parks for his verdict, not self-approving. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MyCYqR5n6t81MxdWQn4ReF
… t-59 Boss ruling 2026-08-16T19:10 rejected round 22 and re-scoped this mission to own building the shared rectifier tool (the 'beads system') before any sample can be the art bar. hub/tools/rectify.py implements the pipeline from projects/bureau/references/office/PROMPTS.md's Rectification section: per-sheet grid-fit off a measured 48px anchor figure, deterministic phase search, per-cell dominant-color vote, palette shared across every frame of one subject, magenta-key-to-alpha, grid pitch as the only scaling knob. Rebuilt the one-desk corner entirely through it: character (idle + 4 typing frames) from cast/sheet-agent-undercut-typing.jpg, floor + wall from sheet-tiles-surfaces-v2.jpg, a second dressed desk from sheet-desks-workstations-v2.jpg, a BLUE NIGHT window from scene-window-states.jpg. Every region cited by exact box in office-sample-assets/rectify-manifests/, with a recorded rectify-report.json per sheet (sha256 per sprite) so the critic can re-run and diff. Ran one inner-critic sub-agent pass (fresh eyes, sprite-vs-source-crop) before parking: caught a real chroma-key bug (near-magenta gradient pixels surviving as opaque blotches on the typing sprite, most visibly over the lamp-glow area). Root-caused via direct pixel sampling, fixed by raising key_tolerance 100->170 (checked safe against the character's own darkest colors), re-verified determinism and re-screenshotted. Wall tile's crack detail loss (spatial-resolution limit, not a bug) left as a known open item for a future round. Determinism verified throughout: every manifest run twice, byte-identical PNG output (sha256-matched) each time. Rebased the existing t-59-office-sample-scene branch onto current main first (predated t-92/t-93's v2 chrome work) so this diff stays scoped to office-sample files only.
mahoudeau
force-pushed
the
t-59-office-sample-scene
branch
from
August 16, 2026 19:51
7857f0b to
b779eb4
Compare
consul's send-back on round 23 (2026-08-16T20:00), confirmed by the boss, named real gaps: fringe halos on nearly every sprite edge, key-tinted speckles on the tiled wall, a window reading as a floating monitor with a baked shadow, a second desk reading as an unidentified device on open floor, coarse face fidelity. New standing rule (t-54 protocol amendment, same log entry): reworks clear the critic before returning to the boss. Two real bugs in the rectifier, root-caused and fixed (not just tolerance tuning): - Hard chroma-key threshold: rebuilt as a soft two-band key, alpha ramps across an inner/outer distance band, edge pixels are color-decontaminated (observed = alpha_frac*fg + (1-alpha_frac)*bg, solved for fg) instead of shipped as a flat magenta-tinted blend. - Palette-averaging drift: the shared-palette builder's bucket average (a convex combination of individually-safe votes) could itself land back in key-adjacent territory and get handed out by snap_to_palette as if safe - this is what actually caused round 23's recurring blotches even after raising key_tolerance. Fixed with an explicit safety filter: any palette candidate whose own distance to the background falls under the outer tolerance is rejected outright. Verified: a full per-pixel distance-to-background scan of every sprite in this round's atlas finds zero pixels (opaque or semi-transparent) within key tolerance of the background color. Determinism re-checked after both fixes, byte-identical sha256 on repeat runs. Composition fixes: window sprite is now pane-only (dropped the disconnected floor-light-pool half that read as a baked shadow), repositioned higher on the wall; added a chair (same sheet as the second desk) so it reads as a workstation instead of an unidentified object. Face fidelity checked, not chased further: the coarseness is inherent to the mandated 48px-anchor canonical scale (pitch is fixed by measurement, never a free parameter), not a phase-alignment or vote defect - confirmed via the region's phase-search score. Flagged as an open question for the critic/boss (needs a scene-scale or crop-scope decision, not a rectifier fix) rather than assumed away. Per consul's amendment this parks for the critic's own render and clearance before returning to the boss - noted on the mission log that the gate field itself still reads 'boss' post-rejection, which isn't mine to change.
moneta's round-24 critic pass found real, deep gaps: round 24's chroma-key fix correctly closed the mechanism consul's round-23 send-back diagnosed (proximity to the exact background key color), but the visual 'speckle' symptom survived through a SEPARATE mechanism she identified precisely: rectify.py's accent-color exemption (accent_saturation_min/ accent_max_area_frac) preserves rare, high-saturation colors verbatim to protect genuine design accents (status LEDs etc.), but has no way to distinguish those from rare, highly-saturated JPEG-ringing/mosquito-noise pixels next to hard edges - which are also rare and saturated by nature. Sampled colors she cited (85,0,86) sat=1.0, (121,9,117) sat=0.93, (76,17,83) sat=0.80, (90,28,106) sat=0.74 - all comfortably clearing the old accent_saturation_min=0.5 threshold. Fix this round: set accent_max_area_frac to 0 across all four manifests, disabling the exemption entirely (this scene has no genuine accent-color content - no LEDs/status lights - so nothing is lost; every candidate color now goes through normal frequency-ranked palette reduction + background-distance rejection instead of a saturation-based carve-out that can't tell noise from design intent). Re-ran all four manifests, rebuilt the atlas. Visual re-check (8x upscale) on the character/typing sprites confirms the scattered speckle blobs on hair/shoulder/monitor edge are gone. NOT fully closed, found and disclosed rather than hidden under time pressure (end of shift): one residual dark-purple pixel remains on the chair sprite, likely a different sub-bug in the soft-alpha edge-blend band (a cell whose mode color happens to fall in the inner/outer key -distance band by coincidence, even though it isn't actually blending toward the magenta background, gets decontaminated under the wrong assumption). Root-caused via direct pixel inspection but not fixed this round - flagged precisely on the mission log for the next round, not glossed over. Also NOT attempted this round, per moneta's own list, out of time: chair repositioning (still melds into the desk leg, not 'in front of' it), window frame/mullion (still reads as a noisy rectangle, no visible frame), scene-level composition bridging (two disconnected furniture pieces, not yet one room corner). Named explicitly as still-open, not silently dropped.
…ture bridging) - t-59 moneta's round-25 critic pass named three gaps, all addressed this round: 1. Chair: root cause was the source region, not a rectifier bug. The round 24/25 chair region sampled a thin side-view chair (row 3, x515 y513) that mode-votes down into a ~19x19 blob at this sheet's fixed pitch. Switched to the front-facing chair at the start of the same row (x55 y519 w159 h239, tight-cropped to its own connected component) - wide, symmetrical, high-contrast, reads as a legible 17x25 chair icon. One disclosed residual: a single (22,1,23) pixel on the silhouette edge, confirmed invisible at rendered scale. 2. Window: root cause was the source region clipping both the top and bottom frame rails (old crop x215 y435 w273 h172; the cell's real tight bbox is x207 y420 w257 h219). Re-cropped to the full bbox so the frame border and center mullion both survive the mode-vote. 3. Furniture bridging: layout() pulled the second desk+chair in from x178 to x128/x168, right past the character's own desk footprint (was an 84px gap of bare floor), so the whole furniture run reads as one wall-hugging cluster instead of two disconnected groups. Verified: every manifest re-run twice (byte-identical sha256), five unchanged sprites confirmed byte-identical against the existing committed reports, zero key-adjacent pixels in the two changed sprites and the full repacked atlas, headless-Chromium render clean (idle + typing + phone width, one expected favicon 404 only). rectify.py itself untouched this round - only manifest regions and scene layout changed. Per this mission's standing infinite-loop discipline, gate is left untouched (critic) - not raised or self-promoted. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NRQ81As249Cast21VAwXm9
…t-59 An inner-critic sub-agent pass caught what round 26's own verification missed: closing the desk/chair X-axis gap exposed a real Y-axis one. Measured directly (not eyeballed): every sprite in this scene draws its own base on its own bottom-most pixel row (checked typing-0, desk-tidy, chair - all three carry opaque content to their sprite's last row), so the scene's shared floor plane is 'sprite bottom sits near FLOOR_Y.' The character's own bottom sits 3px past FLOOR_Y (the grounded reference); desk-tidy/chair were bottoming out 21-24px further into the floor than that, which is what read as 'two different depths shoved together' once the X-gap closed. Moved both up so their bottoms land close to the same line. The same inner-critic pass also re-flagged the chair's edge-blend residual as 7 pixels rather than the 1 disclosed in the prior commit (verified independently: it is 7, at a looser but still hue-diagnostic threshold) and raised a window-sprite-blur concern that direct pixel sampling does not support (the native 36x31 sprite is genuinely blocky/ mode-voted, not smoothed - the critic's dimension math referred to a local debug zoom image, not the shipped sprite). Full accounting posted to the mission log, not just this commit message. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NRQ81As249Cast21VAwXm9
… - t-59 moneta's round-26 critic pass: mechanical floors all pass, craft (face/ hair/shading) still loses to the reference and remains open, but a full- atlas hue scan (min(R,B)-G, not just Euclidean distance to the key) found 3 undisclosed magenta-tinted edge-fringe pixels on the character's own typing-1/typing-2 sprites - missed by round 24's Euclidean-only safety filter. Root cause was in rectify.py's decontamination math itself, not a region choice: the edge-band linear unmix estimates alpha_frac from a scalar distance-to-key, which understates true alpha on some isolated cells enough to leave residual magenta tint even after decontamination. Independently re-derived moneta's 3 pixels from the committed atlas (byte-identical), then ran the same full-atlas hue scan myself across all 10 shipped sprites and found one further undisclosed instance she hadn't flagged (typing-3, local (0,27)). Fixed at the tool level: magenta_hue_score() + a new edge_hue_tolerance manifest parameter (default 40, threaded through cell_vote_grid) - an edge cell whose decontaminated color still carries the key's own hue signature is dropped to fully transparent instead of shipped tinted. 40 is calibrated against this atlas's own committed content: every legitimate pixel scores <=28 (including the already-disclosed, already- accepted chair pixel at score 21, correctly left untouched), the 4 defects score 62-92. Re-ran all four manifests (typing/idle, desk, tiles, window) through the hardened rectifier: exactly 4 pixels changed atlas-wide (the 3 disclosed + the 1 self-found), all dropped to alpha 0, zero other pixels touched on any of the 10 sprites (full atlas diff, not spot-checked) - desk/tiles/ window manifests came back byte-identical to their committed reports, confirming the new safety net only fires on genuine key-hue residue. 10x-zoom crops of all 4 fixed coordinates confirm no visible hole - the fringe simply disappears into the surrounding tone. Rendered idle and typing states locally (python http.server + headless Chromium) to confirm nothing else broke. Craft dimensions (face expression, hair silhouette, shading resolution) are UNCHANGED this round - still the single biggest open gap per round 26's own verdict, deliberately not attempted: a disclosed mechanical floor violation takes priority over craft work in the round that finds it, per the loop's own no-taste-judgment-involved rule for mechanical floors. Gate stays critic, not raised or touched here. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144zxvVX3sZ27gvQGJ6mnXh
…root cause) - t-59 Root-caused the round-14..27 flat blue-grey face: raw cell-vote inspection showed a genuine multi-tone skin ramp already present in the source votes; build_shared_palette's frequency-sorted palette_size=28 truncation (shared across all 5 character frames) was discarding every warm/skin bucket before the cut, since skin/hair occupy far less total cell area than the navy suit and background that dominate the group. Not an accent-exemption gap either (skin saturation ~0.38-0.46, under accent_saturation_min's 0.5 floor). Fix: manifest-typing4.json palette_size 28 -> 128 (empirically chosen, diminishing warm-tone returns past 128). This alone recovered the skin ramp and hair variation, but exposed a second, previously-latent bug: a few dark -violet opaque votes clear build_shared_palette's Euclidean bg-distance net by a wide margin but carry the key's own hue signature (round 27's magenta_hue_score defect class, never threaded into the palette path because no prior smaller palette_size ever gave these buckets enough votes to survive the frequency cut). Fixed at the tool level: build_shared_palette now takes edge_hue_tol and rejects any candidate scoring above it. Verified: determinism (byte-identical re-run), source sheet sha256 matches prior rounds exactly, full-atlas hue+euclidean scan = 0 hits post-fix, the other three manifests (desk/tiles/window) re-run byte-identical to committed reports, and a full atlas pixel diff confirms exactly 1892 changed pixels, all inside the 5 character sprite regions. Reference still likely wins on precision — disclosed honestly in the page's About panel and frames.json's round28Fixes, not self-declared closed. Gate stays critic; parking for moneta's own render and judgment. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TA7S2NiNoA1Rfn3PHFpwZm
…in the shipped artifact - t-59
An independent inner-critic pass on round 28 confirmed the palette-starvation
diagnosis and edge_hue_tol fix hold up on every measurable axis, but flagged
one real gap: the shipped About panel and frames.json read as business-as-
usual ('pushed to the existing branch... gate stays critic') with no
indication that t-59 itself had already been discarded/tombstoned by the
boss's re-scope 13 minutes before this round's commit landed, or that a
second concurrent session had already delivered a different fix for the
same bug directly to the replacement task (t-141). Both facts were already
on t-59's mission log and in message m-157, but not in the artifact a cold
reader of PR #12 would actually open. Added a routing note to both.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TA7S2NiNoA1Rfn3PHFpwZm
Owner
Author
|
Backlog purge (t-274): ancient office sample round (t-59, round 24), superseded by the t-141 stage-1 pipeline (PR #50). |
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.
What this is
Round 24 of t-59. consul's send-back on round 23 (2026-08-16T20:00), confirmed by the boss, named real gaps in the served render: fringe halos on nearly every sprite edge, key-tinted speckles on the tiled wall, a window reading as a floating monitor with a baked shadow, a second desk reading as an unidentified device on open floor, coarse face fidelity. New standing rule landed the same log entry (t-54 protocol amendment): reworks clear the critic (Moneta) before returning to the boss. This round is parked for that pass, not self-promoted — draft, not merge-ready.
This round
Two real rectifier bugs, root-caused and fixed (not just tolerance tuning):
key_tolerance, but a single hard threshold is the wrong model for real anti-aliased edge pixels. Rebuilt as a soft two-band key: alpha ramps linearly across an inner/outer distance band, and edge pixels are color-decontaminated (observed = alpha_frac·fg + (1-alpha_frac)·bg, solved forfg) instead of shipped as a flat magenta-tinted blend.snap_to_paletteas if it were safe. This is what actually caused round 23's recurring blotches even after raising the tolerance. Fixed with an explicit safety filter: any palette candidate whose own distance to the background falls under the outer tolerance is rejected outright.Verified: a full per-pixel distance-to-background scan of every sprite in this round's atlas finds zero pixels (opaque or semi-transparent) within key tolerance of the background color. Determinism re-checked after both fixes — every manifest run twice, byte-identical PNG output (sha256-matched) both times.
Composition fixes:
Face fidelity — checked, not chased further: the coarseness is inherent to the mandated 48px-anchor canonical scale (pitch is fixed by measurement, never a free parameter), confirmed via the region's own phase-search score (unremarkable, not a bad-alignment outlier). Raised as an open question for the critic/boss (needs a scene-scale or crop-scope decision, not a rectifier fix), not assumed away.
Verification
projects/bureau/deliverables/t-59-current-{idle,typing}.png).Full reasoning, citations, and the open interpretation calls: t-59 mission log and the page's own "About this sample" panel.
🤖 Generated with Claude Code
Generated by Claude Code