Grail Computer · research record
Dated experiment record. Statements describe this run, not current submission readiness. Historical H. pylori category names do not establish infection; copy screens are bounded tests. Claims that a source does not exist mean none was identified in that recorded search, not proof of absence. Licensing interpretations in the notes remain unconfirmed. Local access details have been omitted. Current limitations and remaining work.

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.

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


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:

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).

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.

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-<category>.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_<cat>_full.jpg, _crop.jpg    the real held-out comparison field, same sizes
  doc/img/best-by-arm-<cat>.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.

Download public Markdown export