# Sydney-QA v1 implementation report Date: 2026-08-27 Result: **IMPLEMENTATION PASS; CLINICAL/REFERENCE GATE NOT YET CALIBRATED** ## What was built - Literature-grounded local-field rubric for the five Updated Sydney attributes. - NumPy/Pillow-only classical extractor in `scripts/sydney_qa.py` with pinned parameters in `config/sydney_qa_v1.json`. - Raw RGB, raw H&E-deconvolved, and Macenko-style robust normalized concentration statistics. - Auditable tissue, nuclei, gland/lumen, epithelial-boundary, mucin/vacuole, inflammation, candidate-bacillus, clustering, repetition, and topology features. - Optional segmentation masks for visual audit. - A calibration command that refuses synthetic, non-reference, non-pathologist-complete, or patient/slide-unidentified records. - A transparent per-category real-reference envelope comparison. No classifier and no Sydney grade are fitted. - A separate preregistered downstream-utility protocol. The only runtime dependencies are NumPy and Pillow, already present in the project virtual environment and the IOFlood workbench LXC. ## Bounded smoke test The extractor completed on one M1 held-out real normal field and one historical Q0 synthetic normal output. Both emitted complete JSON plus four audit masks. Output JSON hashes were: - held-out real normal: `c53973add13407d397f5419810b379acf4a31dde9ec940c97837ecc0df648a5a`; - historical Q0 synthetic normal: `6d3b06df932fcd51bfb00119ed57ddee4ef3c0adfae2e77089e1f673e2e6b37b`. The run is a software smoke test only. The M1 real field is not a pathologist-complete Sydney calibration set, and the Q0 synthetic is already ineligible. Both outputs correctly remain `CALIBRATION_REQUIRED`. The exact pushed implementation was also deployed to the IOFlood workbench and completed against one field from the corrected slide-disjoint corpus. Its JSON SHA-256 is `5e664456018b3bbd8ea3b3088945e136670e54fa808dfcb0ac344c35f8b5a3cb`; it decoded as 1024×1024 RGB and correctly remained `CALIBRATION_REQUIRED`. This proves CPU portability, not clinical validity. The smoke test also exposes an important failure mode instead of hiding it: the shape/colour heuristic reports 66 candidate bacillus-like components in the held-out real normal field. These may be stain debris, small nuclear fragments, or other structures. Therefore candidate count cannot be interpreted as H. pylori density, and no observed output was used to tune the threshold. The same restriction applies to the inflammatory and mucin surrogates. ## What can be measured now - deterministic hashes, dimensions, colour and stain distributions; - interpretable segmentation masks and their component features; - physically scaled candidate-object measurements; - within-image repetition/topology diagnostics; - runtime-independent feature JSON suitable for CPU batch execution on IOFlood. ## What still requires pathologist-labelled real data - real-reference feature envelopes by category; - Sydney attribute grades and acceptable local-field ranges; - reliable neutrophil-versus-lymphocyte, goblet-versus-artifact, and bacillus-versus-debris decisions; - any rule-based or small-ML scoring layer; - clinical acceptance of the final images. ## Gate decision Sydney-QA is added to the acceptance stack but remains non-passing until an independent, slide/patient-disjoint, pathologist-annotated real calibration manifest is frozen. It may reject engineering outliers after calibration; it may never override privacy, full-resolution review, or GI-pathologist rejection. DINO and Sydney-QA remain engineering tools, not clinical validators.