# SUBMIT-SELECT: how the ten were chosen, what they show, and what is wrong with them 9 September 2026. Work package SUBMIT-SELECT of the SGH synthetic gastric histology programme (`operations/research/sgh-program-20260908`). Ten 4096x2048 RGB PNGs at 0.25 um/px, chosen from every heavy-pass and from-noise output the programme produced, by an explicit rule applied to per-image measurements, then looked at. **Engineering evidence only.** No pathologist has seen any of these images. Nothing here is a diagnosis, a grade, or a claim of clinical validity. The H. pylori organisms are procedural drawings placed by a script. Machine-readable version of everything below, with every number: `SELECTION.json`. --- ## Two swaps made after review Work package SUBMIT-FIX, 9 September 2026, same day. After the package below was reviewed, two of the ten were replaced. Everything else in this document is the SUBMIT-SELECT result and is unchanged; the numbers throughout have been brought up to date for these two images. Images 01-06, 08 and 09 and all of their artefacts are byte-for-byte as they were. The swaps are in `SELECTION.json` (`swaps_after_review`), `selection/selection-rule.json` (`swaps_after_review`, with the pre-swap picks kept in `chosen_before_swaps`), and in a `selection_note` in `provenance/SGH_synthetic_07.json` and `_10.json`. The script that applied them is `selection/apply_swaps.py`. ### 07 mixed: `a5 bag-diverse mixed_s15_across` -> `a5 match-si3 mixed_s15_oblique` | | out | in | |---|---|---| | arm / provenance | `a5 bag-diverse`, bag over 24 real fields | `a5 match-si3`, mosaic over 11 real fields | | cartoon | `mixed_s15_across` | `mixed_s15_oblique` | | envelope D | **3.01** | 3.50 | | ring / copy margin | 0.281 / **0.168** | 0.377 / 0.110 | | own-source fraction | 0.625 | **0.250** | | largest bright component | **9284 px** | 21283 px | | organisms placed | **0** of 90 | 36 of 90 | **Reason: a mixed image must carry the procedural H. pylori overlay to represent its category.** The image this replaces had no bright connected component above the organism renderer's 20000-px minimum, so the renderer placed nothing on it and one of the two images labelled "Mixed H. pylori, gastritis, and intestinal metaplasia" showed no organisms at all. The replacement is the next mixed survivor that accepts the overlay - survivor rank 7 of 12 by envelope D, with one 21283-px component - and it is the swap section 5 of the SUBMIT-SELECT document already named as the one-step fix. **No filter was relaxed**: the replacement passes all five hard filters and is inside the mixed band. The price is 0.49 of envelope distance (3.01 -> 3.50, still well inside the mixed band of 4.38) and 0.058 of copy margin (0.168 -> 0.110, still the fourth widest of the ten), and it means the mixed category is no longer a strict envelope-distance ranking of its survivors - the rule's own second pick was passed over on a criterion the rule does not contain. Against that, the token provenance gets *more* conservative, not less: a mosaic drawing from 11 real fields at own-source 0.250 in place of a bag drawing from 24 fields at own-source 0.625. ### 10 normal: `f3 B_si3_donor normal_s13_across` -> `f3 B_si3_donor normal_s14_across` | | out | in | |---|---|---| | cartoon | `normal_s13_across` | `normal_s14_across` | | envelope D | **7.12**, 2.78 outside the band | **3.27**, inside the band | | ring | 0.740, inside the real range | **0.985**, 0.009 above the 0.976 ceiling | | copy margin | 0.063 | 0.088 | | detail (mean abs Laplacian) | 17.8 | **23.7**, above the real normal median of 22.8 | | stromal nuclei /mm2 | 2012 | 5511 (real held-out normal 4211) | | cartoon lumen IoU | **0.622** | 0.269 | | pale-tissue fraction | 0.147 | 0.295 | Same arm, same package, same donor class; a different cartoon seed. **Reason: the replacement fails only filter (2)'s upper ring bound, and only by 0.009.** That ceiling, 0.976, is the maximum of just four real held-out normal fields. The judgement recorded here is that a 0.009 overshoot of a four-field maximum is a weaker reason to exclude an image than a D of 7.12 - 2.78 outside the same four fields' envelope band - is to include one. So the package's one relaxation moves from filter (1) to filter (2), and gets much smaller. Relaxing only the ring **ceiling**, and leaving the 0.671 floor in place, admits exactly two normal images: this one at D 3.27 and `f3 B_fromnoise normal_s14_across` at D 3.68, both of them cartoon seed s14 and both passing filter (3). The D order and filter (4) then pick this one uniquely. **Nothing else gets in.** The only in-band normal with a lower D, `a5 match-si3 normal_s15_across` at D 3.10, fails the ring *floor* at 0.446, and the floor is untouched; and the two lowest-D normals in the whole pool, the `f3` pair on cartoon `normal_s12_across` at D 2.20 and 2.22, still fail filter (3) on copy margin (0.046 and 0.033, under the 0.05 line) and filter (4) on seed s12, which image 08 already holds. - **Filter (4) holds.** The three normals are now cartoon seeds s12 (08), s11 (09) and s14 (10) - three distinct (category, seed) pairs, as before. - **Filter (5) holds.** Pairwise SSIM of the three normals on 1024-px greyscale downscales: 08-09 **0.523**, 08-10 **0.565**, 09-10 **0.555**, all under the 0.75 limit. Mixed 06-07 is **0.643**, also under. Two costs, both recorded rather than argued away. First, **architecture**: cartoon lumen IoU falls from 0.622 to 0.269, so much less of the procedural drawing's layout survives in the image, and the "most architectural of the three normals" is now image 09, not image 10. Second, the ring overshoot is real and visible - at 1:1 the openings are small intercellular holes spread evenly over the canvas, not gland lumina with a bordering epithelial row (section 4) - and this image's pale-tissue fraction, 0.295, is 1.53x the real held-out normal median, so it would fail the 1.5x pale rule if that rule were applied outside gastritis, which it is not. ### What the two swaps change about the ten as a set - **All ten are now inside their category's real envelope band**; before, image 10 was not. In exchange, nine of the ten are inside their category's real ring range instead of all ten. - **Both mixed images now carry organisms**, so all five images that should carry them do. - **No `bag` image remains in the ten.** The provenance mix is five mosaic, four procedural-layout, one single-donor. - The mixed category is no longer a strict envelope-distance ranking of its survivors. --- ## 1. The candidate pool 244 generated canvases, every one with its own morphometrics, envelope distance, copy-screen values and (where the arm defines it) cartoon layout IoU. Joined into one table at `selection/pool.csv` alongside the 22 real held-out reference rows. | arm | provenance class | n | package | |---|---|---:|---| | v1 a1 pass2-si3 | single-donor | 60 | `packages/sweep-v1` | | v1 a1 pass2-si6 (the four on sweep-v1's Pareto candidate list) | single-donor | 4 | `packages/sweep-v1` | | v2 a1v2 pass2-si3 | single-donor | 60 | `packages/sweep-v2` | | a4 bag-window si3 | bag | 10 | `packages/a4` | | a5 match-si3 | mosaic | 40 | `packages/a5` | | a5 inflamed-si3 | mosaic | 10 | `packages/a5` | | a5 bag-diverse | bag | 20 | `packages/a5` | | f3 B_fromnoise (unrotated) | procedural-layout | 20 | `packages/f3` | | f3 B_si3_donor | procedural-layout | 20 | `packages/f3` | By category: gastritis 70, IM 62, normal 57, mixed 55. ### What the four provenance classes mean, and why it matters for a finalist stage | class | how the canvas got its appearance | what a finalist stage inherits | |---|---|---| | **single-donor** | one real training field supplied all 16x21 UNI2-h tokens | the whole canvas is conditioned on one real slide's field. Every tile's nearest real neighbour is that field (own-source 0.63-1.00). A reviewer asking "is this a re-rendering of one public field?" gets the least reassuring answer here. | | **mosaic** (A5 `token_assignment`) | each of the 21 canvas windows drew its tokens from the real training window whose lumen mask best matched that part of the drawing; 9-12 distinct real fields per canvas | no single real field supplies the canvas; own-source fraction 0.25-0.50 over 9-12 fields. The most conservative provenance in the package and, on the envelope, the best arm the programme produced. | | **bag** (A4 `token_patchbag` / A5 `bag-diverse`) | 16 random (library window, patch) draws per canvas window from the whole category token library, 24 real fields | the cartoon has no influence on the tokens at all, so the layout is whatever the generator invents; provenance is spread over 24 fields (own-source 0.625). Realistic but architecturally unguided. | | **procedural-layout** (F3 coarse adapter) | a 5-channel structure adapter conditioned on the procedural drawing's label map, with one donor field's tokens for appearance | **the only class whose layout is the synthetic drawing's, not a real slide's**: cartoon lumen IoU 0.27-0.69 for the four F3 finals against 0.04-0.13 for every two-pass arm. It buys that by leaning harder on one donor's appearance statistics (own-source 0.750-1.000, and four of the five tightest copy margins in the package). | The single sentence a document should carry: **the images with the most defensible provenance (mosaic, bag) have the least of the drawing's architecture in them, and the images that carry the drawing's architecture (procedural-layout) have the least defensible provenance.** Five of the ten are mosaic, four are procedural-layout and one is single-donor; after the 07 swap no `bag` image is among the ten. (Before that swap the count was four mosaic, one bag, four procedural-layout and one single-donor; the SUBMIT-SELECT text said "six of the ten are mosaic or bag", which was a miscount - it was five, and the six is the number that do *not* carry the drawing's architecture, which is what caveat 6 uses and which the swap leaves unchanged.) --- ## 2. The rule, applied exactly ### Hard filters 1. **Envelope.** C1 MinCovDet Mahalanobis distance `D` inside the category's real held-out band, i.e. `D <= max D over that category's held-out fields`. For **gastritis**, whose band is by far the widest (max 7.97, because one of the six held-out fields is atypical), additionally **pale-tissue fraction <= 1.5x the real held-out median** (0.343), to exclude the faded honeycombs that EVAL_RESULT.md (j) showed were gaming the ring metric. 2. **Topology.** `ring_with_lumen_fraction` inside the real held-out min-max range for the category. 3. **Copy.** phikon copy margin (0.95 - max cosine) >= 0.05 **and** pixel NCC max < 0.92. 4. **Duplication.** No byte-identical duplicates, and no two finals from the same cartoon seed within a category. Plus one addition the A4 evidence forces: **at most one `a4 bag-window si3` image per category**, because the five outputs of an a4 bag-window cell share one token bag and are near-copies of one another (within-cell mean pairwise SSIM 0.981-0.986, A4_RESULT.md section 4). 5. **Repetition.** Pairwise SSIM between the chosen finals of a category below 0.75, on 1024-px greyscale downscales. ### Ranking among survivors Envelope `D` ascending; tie-break provenance class `procedural-layout > bag > mosaic > single-donor`; then copy margin descending. **The tie-break never bound**: `D` is continuous and no two survivors tied on it. So provenance class did not change which images were chosen - it is recorded, and it is the axis section 1 discusses, but the ten as the rule produced them are a pure envelope-distance ranking of what survived the hard filters. **The ten as they now stand are not.** Two of them were swapped after review, on criteria the rule does not contain - the organism overlay for 07 and the relative weight of two filters for 10 - and in mixed that means the rule's second-ranked survivor was passed over for its seventh. Everything in this section describes the rule; "Two swaps made after review", at the top, describes what was done to its output and why. Of the structural constraints, only two ever fired. **Filter (4)'s one-cartoon-seed-per-category rule** skipped 7 images (2 in gastritis, 5 in normal); the eye check skipped 3 more (section 4). Filter (4)'s byte-identical rule, filter (5)'s SSIM limit and the A4 one-per-category cap **never bound** - no two survivors were byte-identical, every accepted pair was well under 0.75 SSIM, and no a4 bag-window image ever ranked high enough to be reached twice in a category. ### Real held-out reference, per category (the bands the filters use) | category | n | D median | D max (the band) | ring min-max | ring median | pale median (1.5x) | lap | str nuc/mm2 | nuc/mm2 | |---|--:|--:|--:|--:|--:|--:|--:|--:|--:| | gastritis | 6 | 4.19 | **7.97** | 0.297-1.000 | 0.807 | 0.229 (0.343) | 20.40 | 4588 | 5996 | | IM | 6 | 2.58 | 4.50 | 0.128-0.953 | 0.774 | 0.208 | 23.62 | 2134 | 6326 | | mixed | 6 | 3.66 | 4.38 | 0.268-1.000 | 0.774 | 0.176 | 22.77 | 3528 | 6762 | | normal | 4 | 3.33 | 4.34 | **0.671-0.976** | 0.884 | 0.193 | 22.78 | 4211 | 6350 | ### The funnel | category | pool | after (1) envelope | of which dropped by the gastritis pale rule | after (2) ring | after (3) copy = **survivors** | |---|--:|--:|--:|--:|--:| | gastritis | 70 | 62 | 6 | 31 | **27** | | IM | 62 | 40 | - | 36 | **34** | | mixed | 55 | 17 | - | 13 | **12** | | normal | 57 | 14 | - | 4 | **2** | Survivors by provenance class: gastritis mosaic 14 / single-donor 8 / bag 3 / procedural-layout 2; IM single-donor 13 / mosaic 10 / bag 10 / procedural-layout 1; mixed mosaic 7 / bag 4 / procedural-layout 1; normal single-donor 1 / procedural-layout 1. **Filter (3) removed nine images and removed none of them for a copy.** Four gastritis, two IM, one mixed and two normal images fell below the 0.05 margin, and **all nine are F3 images** (six `B_fromnoise`, three `B_si3_donor`) with max cosines of 0.902-0.937 - the highest in the pool, and the same donor-dependence signature the F3 finals carry. Their pixel NCC against the same donors is 0.436-0.741, so none is near a copy. Nothing in the entire pool exceeds the 0.95 fail line or the 0.92 NCC flag. **Filter (2) is what makes normal hard.** The real normal held-out band starts at ring 0.671, the highest floor of the four categories, and only 4 of the 14 normal images inside the envelope band clear it. The three lowest-D normal images in the whole pool - `a5 match-si3 normal_s15_across` (D 3.10), `a5 bag-diverse normal_s14_across` (D 3.38) and `f3 B_si3_donor normal_s14_across` (D 3.27) - are all excluded on ring (0.446, 0.417 and 0.985 against a 0.671-0.976 range). That is the programme's normal problem stated as a filter: the arms that get the *statistics* of normal mucosa right do not produce gland openings, and the one that produces plenty of openings over-produces them. The third of those three, the one that over-produces, is the image the SUBMIT-FIX swap admits as image 10 by relaxing the ring ceiling by 0.009; the two that under-produce stay excluded, because the floor is untouched. ### Relaxation, and where it was needed **Normal only, in both versions of the package.** 2 survivors against a target of 3. Gastritis, IM and mixed needed no relaxation. **As the package now stands (after the SUBMIT-FIX swap): filter (2)'s upper ring bound, relaxed by 0.009.** The ring ceiling for normal, 0.976, is the maximum of four real held-out fields. Moving it to admit `f3 B_si3_donor normal_s14_across` at ring 0.985 admits exactly two images - that one at **D 3.27** and `f3 B_fromnoise normal_s14_across` at D 3.68, both cartoon seed s14 - and the D order plus filter (4) then take the first uniquely. That image is final 10. The ring **floor** (0.671), filter (1), filter (3) and filter (4) are all untouched, so **all ten finals are inside their category's real envelope band**. The reasoning is in "Two swaps made after review". **As SUBMIT-SELECT built it: filter (1), the envelope band, relaxed by 2.78.** Filter (1) was relaxed to admit the images nearest the band in D order, keeping filters (2) and (3). The brief's minimum is the two nearest; those two were `f3 B_fromnoise normal_s11_across` (D 4.89) and `v1 a1 pass2-si3 normal_s12_along_si3` (D 5.34), and **both were blocked by filter (4)** because seeds s11 and s12 were already taken by the two in-band picks. The relaxation therefore ran on down the D order - 5.61, 6.34, 6.34, 6.58, 6.62, 6.79, 6.91 - to the tenth admitted image, `f3 B_si3_donor normal_s13_across` at **D 7.12**, which is **2.78 outside the normal band**. Every step of that is still in `SELECTION.json` (`relaxations.normal`), because it is the ladder the rule actually walked; it is no longer the relaxation the package rests on. --- ## 3. The ten Ordered gastritis 01-03, IM 04-05, mixed 06-07, normal 08-10, as `images/SGH_synthetic_NN.png`. `band` is 1 when D is inside the category's real held-out band; `IoU` is cartoon lumen IoU against the output's own label map; `margin` is 0.95 - phikon max cosine as measured in the source package; `org` is the procedural organism count. | # | category | arm | provenance | cartoon | D | band | ring | lap | str nuc | nuc | pale | IoU | margin | NCC | own-src | fields | org | |---|---|---|---|---|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:| | 01 | gastritis | f3 B_si3_donor | procedural-layout | `hpylori_gastritis_s11_across` | 3.85 | 1 | 0.901 | 20.4 | **6229** | 8282 | 0.294 | **0.305** | 0.053 | 0.457 | 1.000 | 1 | 90 | | 02 | gastritis | f3 B_si3_donor | procedural-layout | `hpylori_gastritis_s15_across` | 4.55 | 1 | 0.636 | 17.6 | 1318 | 6727 | 0.188 | **0.359** | 0.050 | 0.538 | 1.000 | 1 | 90 | | 03 | gastritis | a5 match-si3 | mosaic | `hpylori_gastritis_s12_across` | 4.99 | 1 | 0.459 | 19.0 | 1637 | 6476 | 0.140 | 0.044 | 0.146 | 0.526 | 0.375 | 10 | 78 | | 04 | IM | a5 match-si3 | mosaic | `intestinal_metaplasia_s12_oblique` | **2.60** | 1 | 0.478 | 17.4 | 1342 | 5670 | 0.145 | 0.098 | 0.122 | 0.608 | 0.375 | 9 | - | | 05 | IM | a5 match-si3 | mosaic | `intestinal_metaplasia_s13_across` | 2.64 | 1 | 0.434 | 16.5 | 1139 | 5231 | 0.136 | 0.076 | 0.137 | 0.746 | 0.500 | 12 | - | | 06 | mixed | a5 match-si3 | mosaic | `mixed_s13_across` | 2.95 | 1 | 0.315 | 20.2 | 1809 | 7035 | 0.111 | 0.082 | 0.102 | 0.527 | 0.375 | 12 | 42 | | 07 | mixed | a5 match-si3 | mosaic | `mixed_s15_oblique` | 3.50 | 1 | 0.377 | 20.5 | 1603 | 6672 | 0.130 | 0.109 | 0.110 | 0.508 | 0.250 | 11 | 36 | | 08 | normal | v1 a1 pass2-si3 | single-donor | `normal_s12_oblique` | 3.66 | 1 | 0.816 | 17.9 | **4520** | 5913 | 0.272 | 0.126 | 0.078 | 0.473 | 0.625 | 1 | - | | 09 | normal | f3 B_si3_donor | procedural-layout | `normal_s11_across` | 4.24 | 1 | 0.690 | 20.8 | 4046 | 6938 | 0.165 | **0.694** | 0.085 | 0.491 | 0.875 | 1 | - | | 10 | normal | f3 B_si3_donor | procedural-layout | `normal_s14_across` | 3.27 | 1 | **0.985** | **23.7** | 5511 | 5830 | 0.295 | 0.269 | 0.088 | 0.504 | 0.750 | 1 | - | **All ten are inside their category's real envelope band.** Nine of the ten are inside their category's real ring range; image 10 is not - it is 0.009 over the normal ceiling, which is the relaxation the package rests on (section 2, and "Two swaps made after review"). Detail (mean absolute Laplacian) is 16.5-23.7 against real category medians of 20.4-23.6. Measured against its own category's real median, eight of the ten fall short, image 01 is level with it (20.4 against 20.4) and image 10 is the one that exceeds it (23.7 against 22.8) - the only image in the programme that does. The gap is widest in IM (16.5-17.4 against 23.6). **Pairwise SSIM within each category** (filter 5, limit 0.75): gastritis 0.524 / 0.532 / 0.541, IM 0.586, mixed 0.643, normal 0.523 / 0.555 / 0.565. All clear. But real held-out fields of one category sit at **0.034-0.047**, so the ten are still far more alike one another than real fields are - that gap is unchanged by this selection and is a property of the generator, not of the rule. **Duplicates:** no two of the 244 pool canvases share a sha256, and none of the ten does. ### Cartoon seed and cut coverage Gastritis s11/s15/s12, IM s12/s13, mixed s13/s15, normal s12/s11/s14 - ten distinct (category, seed) pairs, as filter (4) requires. Cuts: seven `across`, three `oblique`. The `across` bias is a consequence of the arms, not of the rule: F3 was only run on `across` cartoons and four of the ten are F3 images. The three `oblique` images are A5 `match-si3` (04, 07) and sweep-v1 (08), arms that were run on every cut. --- ## 4. The eye check Method: a 1024-px contact sheet of all ten, then one 768-px 1:1 crop of each at canvas (1664,640) beside the same rectangle of that category's real held-out reference field, plus extra 1:1 spot checks wherever a field looked uniform or a region looked odd. Written by a machine reviewer; these are observations about shapes and artefacts, not diagnoses. Full text per image in `SELECTION.json` (`eye_check_notes`) and in each `provenance/SGH_synthetic_NN.json`. Sheets are in `selection/review/`. Summary of what each image shows: - **01 gastritis** - epithelial groups with pale granular cytoplasm and dark ovoid nuclei, in places one row along a group's edge; small irregular clear spaces read as pit lumina; a dense scatter of small dark nuclei between the groups reads as inflamed lamina propria. **The only final above real on stromal nuclear density** (6229 against 4588) - every other image in the programme is far below. Its epithelium is less polarised than real and there is no clean columnar band. - **02 gastritis** - long parallel gland profiles with foamy vacuolated cytoplasm and a border row of dark nuclei. The vacuolation is coarser and more regular than real mucin (a soap-bubble texture). Infiltrate is thin (1318/mm2). - **03 gastritis** - crowded cells with pale vacuolated cytoplasm, one row of nuclei per group, a prominent red-cell cluster in the middle, small clear lumina. Infiltrate thin (1637/mm2). - **04 IM** - gland profiles with an open lumen, pale vacuolated cytoplasm and large basally placed ovoid nuclei with a visible nuclear membrane. **No goblet cell with a crisp single apical vacuole is identifiable**; the vacuolation is diffuse cytoplasmic, so the field reads as metaplastic-looking glandular tissue rather than as unambiguous intestinal metaplasia. - **05 IM** - two or three gland cross-sections with clear lumina and a one-cell wall with basal nuclei; a band of eosinophilic stroma across the middle. Same goblet-cell criticism. - **06 mixed** - glandular clusters with one nuclear row each, and between them a dense scatter of small dark nuclei: a glandular and an inflammatory component in the same field, which is what the mixed category asks for. - **07 mixed** - at field scale, gland profiles with open lumina and columnar borders across the upper right and left, a broad pale mucus channel at the top centre with a columnar palisade along its left wall, and a red-cell mass at the lower left. At 1:1 at (1664,640) it is solid cellular tissue: epithelial groups with pale vacuolated cytoplasm and dark ovoid nuclei, thin eosinophilic strands with spindle nuclei, small capillaries, and a scatter of small dark nuclei between the groups - a glandular and an inflammatory component in the same field. Unlike the bag canvas it replaced, the field is **not uniform**: (300,300) and (3100,1100) look materially different from the centre, which is the mosaic construction over 11 real fields showing. No clean columnar palisade in the centre crop, softer nuclear membranes than real, infiltrate thin at 1603/mm2 against a real 3528. - **08 normal** - the best-organised of the three normals and the only final with a real mucosal surface: empty slide above an eosinophilic surface strand at (200,120), a columnar band below it, and gland profiles with clean lumina, a basal nuclear row and capillaries with red cells at (2600,1400). Stromal nuclear density 4520/mm2, closest to real of the ten. - **09 normal** - polygonal cells with fine granular cytoplasm, one small round nucleus each, small round clear holes; plausible as oxyntic mucosa cut transversely. Identical at (300,300), (1664,640) and (3100,1100): **the whole canvas carries one texture**, with no gland outlines, no stromal bands and no surface. Not a lattice or a tiling - the outlines are irregular and the spacing is not periodic - but monotonous. - **10 normal** - cohesive polygonal cells with granular cytoplasm and one round dark nucleus each, separated by thin eosinophilic strands with spindle nuclei, with frequent red-cell clusters and **very many small round clear holes spread evenly over the whole canvas**. Those holes are the 0.985 ring measurement: at 1:1 they are small intercellular openings, not gland lumina with a bordering epithelial row, which is exactly the over-production filter (2)'s ceiling exists to catch. The **crispest nuclear detail in the package** - speckled chromatin, sharp nuclear membranes, mean absolute Laplacian 23.7 - and stromal nuclear density 5511/mm2, the highest of the three normals and 1300 *above* the real held-out normal median of 4211: on this measure it overshoots, where the gastritis and mixed images all fall far short. The same at (300,300), (1664,640) and (3100,1100): like image 09, one texture over the whole canvas, no gland outlines, no surface, no distinct lamina propria. The cells are cohesive, so this is **not** the dissociated-cell failure the three v2 `normal_s14` canvases were rejected for below. It is less architectural than the image it replaced (cartoon lumen IoU 0.269 against 0.622). ### Window seams: measured, absent The A5 instrument (mean absolute horizontal gradient per column; the value at each 1024-window boundary x = 512, 1024, ... divided by the median of the 32 columns around it) on all ten: **boundary ratios 0.938-1.024** against off-boundary nulls of 1.00-1.04 and a per-image maximum of 1.14. The four real held-out reference fields, which have no windows at all, sit at 0.948-1.005. No seam is detectable in any of the ten, including image 03, which is assembled from ten different real donor fields, or image 07, assembled from eleven. A seam would read *above* 1; the lowest value in the set, image 10 at 0.938, is a boundary column quieter than its neighbours, not a seam. Numbers in `selection/seam-check.json` and in each provenance file. The two swapped files were measured by a re-implementation of the instrument (`selection/apply_swaps.py`), because the code that wrote the original file did not survive the SUBMIT-SELECT session; re-running it on the eight untouched files reproduces their recorded triples to within 0.0066, which is recorded in `seam-check.json` as `_reimplementation_note`. ### One replacement was made `v2 a1v2 pass2-si3 normal_s14_across_si3.png` (D 6.58) was selected by the ranked rule as the third normal and **rejected on sight**. Across the whole canvas the cells are dissociated - individual polygonal cells floating in wide empty white space with no gland wall, no epithelial band and no cohesive stroma, with bright red-orange globules throughout. Checked at 1:1 at (300,300), (1664,640) and (3100,1100): the same everywhere. This is the failure mode EVAL_RESULT.md (j) recorded for normal candidates at ranks 3-5. Its two siblings, `normal_s14_oblique_si3.png` (D 6.79) and `normal_s14_along_si3.png` (D 6.91), show the same thing and were rejected with it - and they are near-copies of it, mean absolute pixel difference 3.57/255 and 4.73/255 (not byte-identical; the three sha256 differ), which is itself worth recording: **at si3, three different cuts of the same v2 cartoon produced essentially the same canvas.** The rule then took the next admissible image, `f3 B_si3_donor normal_s13_across` at D 7.12, which was image 10 in SUBMIT-SELECT. Recorded in `selection/eye-check-rejects.json`. **Those three rejects and the present image 10 share a cartoon, not a canvas.** All four are `normal_s14`; the rejects are `v2 a1v2 pass2-si3` two-pass canvases and the present image 10 is `f3 B_si3_donor`, a different arm with a different failure mode. The rejects were rejected for dissociated cells floating in white space; image 10 is cohesive throughout, which was checked at 1:1 at the same three positions the rejects were checked at. No other image was replaced at the eye-check stage. Two images were replaced later, after the whole package was reviewed: see "Two swaps made after review" at the top of this document. Nothing in the ten shows tiling, a mucus wash, a honeycomb or a lattice. --- ## 5. Organisms `scripts/pixcell_hp_stage.py --renderer surface --organisms 90 --seed 7301+i` was run on the three gastritis and two mixed finals. The renderer finds bright connected components of at least 20000 px (pit lumina, gland lumina, surface mucus), rejects those riddled with dark holes (exudate, haemorrhage, torn stroma), and places clustered faint curved rods 10-18 px long inside them within 2-14 px of the bordering tissue, six per cluster, deterministically from the seed. Every organism is recorded in a per-image JSON sidecar. | file | seed | requested | **placed** | large lumen components | largest bright component | |---|--:|--:|--:|--:|--:| | SGH_synthetic_01 | 7301 | 90 | **90** | 2 | 44154 px | | SGH_synthetic_02 | 7302 | 90 | **90** | 2 | 132659 px | | SGH_synthetic_03 | 7303 | 90 | **78** | 1 | 36187 px | | SGH_synthetic_06 | 7306 | 90 | **42** | 1 | 26121 px | | SGH_synthetic_07 | 7307 | 90 | **36** | 1 | 21283 px | The overlaid PNG is the submitted file for all five. The un-overlaid original and the sidecar sit beside it under `overlay/SGH_synthetic_NN/`. **All five images that should carry organisms now do.** That is what the 07 swap bought: the `a5 bag-diverse mixed_s15_across` canvas SUBMIT-SELECT chose had a largest bright component of 9284 px against the renderer's 20000-px minimum, so the renderer accepted nothing and placed 0 organisms, and one of the two images labelled "Mixed H. pylori, gastritis, and intestinal metaplasia" showed none. SUBMIT-SELECT named the one-step fix - the next mixed survivor with a usable surface, `a5 match-si3 mixed_s15_oblique_match-si3` (D 3.50, seed s15, one 21283-px component), at a cost of 0.49 D - and that is the swap that was made. Capacities for the top eight mixed survivors are in `selection/mixed-surface-capacity.json`. **Placement is uneven, and the shortfalls are not cosmetic.** Only 01 and 02 took the full 90. Where a canvas has one qualifying component the renderer fills it and stops: 78 rods into one 36187-px lumen on image 03, 42 into one 26121-px lumen on 06, 36 into one 21283-px component on 07. On image 07 that means **all 36 organisms sit inside a single 300x230-px region of the top centre** and the rest of the canvas carries none - a real limitation of the images, not of the renderer, and one a reviewer will see immediately at field scale. ### What the overlay looks like at 2x Looked at a 2x before/after crop of one cluster per overlaid image (`selection/review/overlay-2x.jpg` for 01, 02, 03 and 06; `selection/review/overlay-2x-07.jpg` for the swapped image 07). - **01** (cluster at 2635,125): rods inside a pale pit lumen and along its epithelial rim, roughly parallel to the nearest dark surface, as the renderer intends. - **02** (3008,1943): rods in a wide open pale space beside a thin strand of epithelium. Several are far from any epithelial border - the renderer measures its band to the nearest sub-228 brightness pixel, which here is a faint mucus wisp - so they read as free-floating in mucus rather than as surface-adherent. - **03** (545,1865): a gland lumen bordered by dark basal nuclei, filled with rods. Visibly denser per lumen than the other four, because 78 rods went into one 36187-px component. - **06** (603,508): rods inside a gland lumen directly against a clean columnar palisade. The most convincing placement of the five. - **07** (1948,108): a pale mucus channel bordered on the left by an eosinophilic epithelial strand with dark nuclei and on the right by a faint bluish mucus wisp. About twenty rods are visible in the one crop, because all six cluster anchors fall within ~120 px of one another. A few lie within a few pixels of the left epithelial border; **most are in mid-channel, 20-40 px from any tissue** - the same failure as image 02, and for the same reason, because the renderer measures its 2-14 px band to the nearest sub-228 brightness pixel and here that is the mucus wisp rather than the epithelium. They read as free in mucus, not as surface-adherent. In all five the rods read as an overlay rather than as objects in the mucus: every rod has the same colour and edge softness, none is partly obscured, none is out of focus, and their thickness does not vary the way real bacilli do at 0.25 um/px. **This is disclosed, not hidden**: the organisms are procedural and the package says so in every provenance file. --- ## 6. Copy screens on the ten final files Both screens were re-run on the bytes in `images/`, i.e. **post-overlay**. Full report: `screens/RESULTS.md`. - **phikon-v2 embedding screen**, 1024-px tiles, fail line 0.95, 10 images -> 80 tiles against all **118 real reference fields** (96 train + 22 held out) -> 944 reference tiles: **max cosine 0.8995, 0 tiles at or above the fail line, minimum copy margin 0.0505, `passed: true`.** - **Pixel NCC search**, 64-px windows, stride 256, threshold 0.92, targeted references (each image against every field its own tokens came from, plus its phikon nearest neighbours): **83 pairs, 10568 windows, max NCC 0.7889, median of the per-pair maxima 0.543, 0 flagged windows, 83/83 `NO_COPIED_PATCHES`.** The pair count fell from 94 to 83 with the 07 swap, because the replacement draws its tokens from 11 real fields where the image it replaced drew from 24; that is fewer pairs to search, not a weaker screen - every field either image was conditioned on is still searched. For calibration: a recoloured copy scores 0.987 (embed) and 0.9995 (NCC); a generated field against its own reference scores 0.83 / 0.85; two unrelated real fields score 0.66 / 0.88. The tightest margins are the five images conditioned on a single real donor field - the four F3 images (0.0505, 0.0532, 0.0849, 0.0877) and the single-donor image 08 (0.0779) - at own-source fraction 0.625-1.000. **That is donor dependence, not copying**: the same five sit at NCC 0.457-0.567 against those donors. The five mosaic images are the other end: margins 0.104-0.146, own-source 0.250-0.500 spread over 9-12 real fields. Both swaps move this axis the safe way: the new image 07 has the lowest own-source fraction of the ten (0.250, against 0.625 for the image it replaced), and the new image 10 has the widest margin of the five donor-conditioned images (0.0877, against 0.0632 for the image it replaced, which was the third tightest in the package). --- ## 7. Best across all runs, per category `doc/img/best-by-arm-.jpg` shows, for each category, the lowest-D image of each provenance class in the whole pool (among images passing the copy filter) as a 512-px 1:1 crop, beside the real held-out reference crop, labelled with D / ring / margin / pale and with whether it passed the selection's hard filters. Values in `SELECTION.json` (`best_by_arm`). | category | procedural-layout | bag | mosaic | single-donor | |---|---|---|---|---| | gastritis | D **3.49** `f3 B_fromnoise s14_across` - **fails**, pale 0.484 | D 5.02 `a4 bag-window s11_across` - fails ring | D 4.72 `a5 match-si3 s11_across` - passes | D 5.01 `v1 a1 si3 s11_oblique` - passes | | IM | D 3.52 `f3 B_si3 s11_across` - passes | D 2.74 `a4 bag-window s14_across` - passes | D **2.60** `a5 match-si3 s12_oblique` - **final 04** | D 3.17 `v1 a1 si3 s12_across` - passes | | mixed | D 4.33 `f3 B_si3 s15_across` - passes | D 3.01 `a5 bag-diverse s15_across` - passes; was final 07 until the swap | D **2.95** `a5 match-si3 s13_across` - **final 06** | D 4.46 `v1 a1 si3 s15_oblique` - fails envelope | | normal | D 3.27 `f3 B_si3 s14_across` - fails ring (0.985) by 0.009; admitted by the relaxation as **final 10** | D 3.38 `a5 bag-diverse s14_across` - fails ring (0.417) | D **3.10** `a5 match-si3 s15_across` - fails ring (0.446) | D **3.66** `v1 a1 si3 s12_oblique` - **final 08** | Two things a document should take from this table. First, **the best envelope distance in every category except gastritis belongs to a mosaic arm**, and in IM and mixed those are the images that were actually chosen. (The SUBMIT-SELECT text said "except normal" and "a mosaic or bag arm"; the table's own bold minima say otherwise - gastritis's best is procedural-layout at 3.49, and normal's best is mosaic at 3.10 - so that sentence is corrected here.) Second, the gastritis procedural-layout cell is the clearest picture of why the pale rule exists: at D 3.49 it is the best envelope distance in the category and it is a washed-out field at pale fraction 0.484, more than double the real 0.229. The two swaps move two `is_a_final` flags in this table and nothing else, because it ranks the whole pool rather than the finals: the mixed `bag` cell is no longer a final, and the normal `procedural-layout` cell now is. The `doc/img/best-by-arm-*.jpg` sheets were not regenerated - they carry no "final" label and their D / ring / margin / pale figures and pass-or-fail captions are unchanged and still correct, including the normal procedural-layout cell's "DOES NOT pass the selection hard filters", which is exactly why it needed a relaxation. --- ## 8. Caveats 1. **No pathologist.** Nobody qualified has seen these images. Every judgement in section 4 is a machine reviewer's engineering observation. No image here is known to be diagnostically correct, and "inside the real held-out band" means only "not separated from the real fields by this instrument". 2. **The organisms are procedural.** They are drawn by `pixcell_hp_stage.py`, not generated, not verified, and not biology. No verified H. pylori organism exists anywhere in this programme. All five images that should carry them now do, but only two took the 90 that were asked for: the counts are 90 / 90 / 78 / 42 / 36. On images 03, 06 and 07 every rod on the canvas is inside one lumen or mucus component, and on image 07 that is a single 300x230-px region of a 4096x2048 canvas, so a reviewer looking anywhere else sees none. 3. **The category names are dataset labels, not diagnoses.** `metadata.csv` uses the exact strings from `build_submission_package.py` (`H. pylori organisms with gastritis`, `Intestinal metaplasia only`, `Mixed H. pylori, gastritis, and intestinal metaplasia`, `Normal control`). They name the category a canvas was generated *for*, via the cartoon preset and the donor pool of that category. They are not an assertion that the feature is present and legible in the image - and for image 04/05 the goblet cells, for images 02/03/06/07 the infiltrate (1318, 1637, 1809 and 1603/mm2 against a real 4588 and 3528), and for images 03/06/07 the organisms confined to one lumen each, are the specific places where the label outruns the picture. 4. **The infiltrate that defines gastritis is mostly absent.** Stromal nuclear density is 1318/mm2 (02) and 1637/mm2 (03) against a real held-out 4588, and 1809 (06) and 1603 (07) against a real mixed 3528. Image 01 is the only gastritis or mixed image that reaches its category's real level at all, at 6229/mm2 - and it overshoots. A5's `inflamed` arm tried to fix this and failed because it ranked windows on the wrong instrument (A5_RESULT.md section 8). Two of the three normals are at or above the real normal level (08 at 4520, 10 at 5511, against 4211), so the shortfall is specific to the categories where the infiltrate is the point. 5. **Detail still falls short in nine of the ten.** Mean absolute Laplacian 16.5-23.7 against real category medians of 20.4-23.6. Image 10 is the single exception, and the only image in the programme above its own category's real median (23.7 against 22.8): at 1:1 it does carry speckled intranuclear chromatin and crisp nuclear membranes. The other nine do not, and the real crops carry both. Image 10 is also the image with the least architecture of the three normals, so the package has detail and architecture in different images and in none of them together. 6. **Layout provenance cuts both ways** (section 1). Six of the ten inherit their architecture from real public fields; four carry the procedural drawing's architecture but lean hardest on one donor's appearance. Disclose both. 7. **The copy screens are not proofs.** The NCC search is targeted, not exhaustive (83 pairs; an exhaustive 1180-pair search was not run), and neither screen tests inherited layout, which is the risk that actually applies here. 8. **The phikon-v2 licence is non-commercial.** `owkin/phikon-v2` is used here for internal evaluation only; it is a screening instrument, not part of the generator. The generator's own licence question - PixCell-1024 and UNI2-h for a company submission - remains parked and uncleared, as it has been since the 6 September session. The real fields are HiESD, CC BY 4.0, and require attribution. 9. **This is not a builder output.** `build_submission_package.py` would anonymise the filenames and refuse to package until the human gates in `operations/research/pixcell-preselection-package-v1/PENDING_HUMAN_GATES.md` are filled (clinical review, disease truth, target-scale fidelity, manual layout retention, submission rights, package authority). None of those gates is filled here and none may be filled by machine. This package is the material a submission document would draw on, with named files. 10. **One relaxation, one eye-check replacement and two post-review swaps.** The relaxation is filter (2)'s upper ring bound, moved by 0.009 for normal, and image 10 is the image it admits. That image over-produces gland openings, which is what the ring ceiling measures, and its pale-tissue fraction of 0.295 is 1.53x the real held-out normal median - it would fail the 1.5x pale rule that filter (1) applies to gastritis, if that rule were applied outside gastritis, which it is not. Before the swap the relaxation was of filter (1) instead, by 2.78 in envelope distance. Either way, **normal is the weakest category in this package**, as it was in every package before it: three normals, none of which has both a mucosal surface and real detail, and the only one with a surface (08) is the furthest of the three from real on detail. On top of the rule sit three human-style judgements - the eye-check rejection of three v2 canvases (section 4) and the two swaps at the top of this document - and none of them is a criterion the rule contains. --- ## 9. Files ``` operations/research/sgh-submission-20260909/ images/SGH_synthetic_01.png .. _10.png the ten, 4096x2048 RGB, verified metadata.csv filename, assigned category (builder label strings) SHA256SUMS the ten plus metadata.csv provenance/SGH_synthetic_NN.json arm, package, run id, cartoon stem/set/seed/cut, provenance class and donor field(s) / assignment file / patch-bag seed, adapter checkpoint + sha, generator seed and start_index, overlay sidecar and organism count, every instrument value, both screens, the seam check, the eye-check note; for 07 and 10 also a selection_note naming the swap and the relaxation it rests on overlay/SGH_synthetic_NN/ pre-overlay PNG, overlaid PNG, per-organism sidecar overlay/overlay-report.json the step-down ladder and what each attempt returned screens/RESULTS.md both screens re-run on the ten final files screens/{embed-screen.json,screen-embed.csv,screen-ncc.csv,screens-summary.json,ncc/*.json} doc/img/NN_full.jpg, NN_crop.jpg 1024-px full view; 768-px 1:1 crop at (1664,640) doc/img/ref__full.jpg, _crop.jpg the real held-out comparison field, same sizes doc/img/best-by-arm-.jpg best of each provenance class beside the real crop doc/img-index.json what every jpg is, and which real field it names SELECTION.json everything above, machine readable SELECTION.md this file selection/pool.csv the 244-canvas pool plus 22 real held-out rows selection/{build_pool,apply_rule,make_review,run_overlay,assemble,run_screens, make_doc_images,write_docs}.py the pipeline, in that order selection/apply_swaps.py SUBMIT-FIX: applies the two swaps and rebuilds only what depends on them (overlay, review crops, seam, images, provenance, sums, doc images, SSIM); run_screens and write_docs were then re-run unchanged over all ten selection/{selection-rule,finals,manifest,heldout-refs,eye-check-notes,eye-check-rejects, seam-check,overlay-surface-diagnostic,mixed-surface-capacity, finals-pairwise-ssim}.json selection/review/ the sheets the eye check was done on, including crop-07/10, full-07/10, spotcheck-07/10 and overlay-2x-07 for the two swapped images ``` `selection/selection-rule.json` carries the swap in `swaps_after_review` and keeps the rule's own pre-swap picks in `chosen_before_swaps`; `selection/eye-check-notes.json` carries the rewritten notes for 07 and 10, the new overlay note for 07 and the two `selection_notes`. The sheets, files and numbers for images 01-06, 08 and 09 are untouched. Real held-out comparison fields, named in `doc/img-index.json`, `SELECTION.json` and every provenance file: | category | field | |---|---| | gastritis | `hiesd-0d55cc29__hpylori_gastritis__118720_7424__mpp0.25.png` (ring 1.000, env pct 67, D 4.24) | | IM | `hiesd-0d55cc29__intestinal_metaplasia__31296_31808__mpp0.25.png` (ring 0.953, env pct 67, D 2.81) | | mixed | `hiesd-0d55cc29__mixed__12864_3776__mpp0.25.png` (ring 0.979, env pct 67, D 3.87) | | normal | `hiesd-0d55cc29__normal__115904_9920__mpp0.25.png` (ring 0.976, env pct 50, D 3.23) | These are the four fields sweep-v1's headline sheet used. No code for that sheet survives in the programme tree, so each was identified by matching the ring / env pct / D labels printed under the sheet's own "real held-out" cell in `packages/sweep-v1/eval/headline-sheet.png`; each triple has exactly one match among that category's held-out fields. All four come from held-out slide `0d55cc29`.