SOURCE MANIFEST, Mariano's #23 v2.2.16 (browser-readable review copies, 2026-11-02) Original archive (unchanged): marianos-scraper-2.2.16.zip SHA-256 04f5c4bca887d9f04f408162fc97b378476b9a922bf8f21d94180df6c26b94b8 code fingerprint 4d768340f2d4ce48 Every file inside marianos-scraper-2.2.16.zip (SHA-256 of the exact bytes in the archive): ddd9a1b585081f45e48fed700489126537e9a50e59d605e8a16c9121fba8b7d4 scraper/marianos_scraper/mapper.py dc8c0f64f93b9cdbedb7f76327a292ecd6bf9d9aa826f892c18bc582ee840703 scraper/marianos_scraper/storage.py 35c06812117d83e5e2d08017122598f112ca8d5687aa719555a03a9405bdbdbd scraper/marianos_scraper/oxylabs_source.py 35226ef877656f5d7996b493f3fd5cc5903208d8a0575182b7985ed24d7262a7 scraper/marianos_scraper/config.py 92dcaf48ff42be3326d103bf417b6dea546d4a733c04b70923e0b6a06bab6d89 scraper/marianos_scraper/log.py d1f746b5f1a56cd7c6d89953c65e4a13c47b0c9d398fffb7f70df44ba240dd2a scraper/marianos_scraper/kroger_api.py d96d8536f778996095b64beea09e79c750cc990e20efa9dfadcea743179f6c5e scraper/marianos_scraper/__init__.py 9855881ffdbde4370ba60e75ff85dd718e878d757d4901af50a75dd28b84167d scraper/marianos_scraper/validate.py c8592dc3244ffeee38009012728ab9b511b8a0c184e667887bb062beee32f3cf scraper/marianos_scraper/runner.py 65ceb83d59585a093b94a94c3ee8f2f42001741871a632dd0dfc857408da320f scraper/marianos_scraper/__main__.py 27f7ff1e6f0bc0bbf64a36a80263549863a956857e9a3ff74bb78085d09eaf67 scraper/marianos_scraper/probe.py db67667e39b2c5763335186ccfb991adfbaeab7ab32d8259d5ee87eb75cf3944 scraper/marianos_scraper/site_source.py 0346d8c70aec9afb39c6454757e9040f028c938846d8b95483127043d1202303 scraper/marianos_scraper/site_runner.py bd54769b131ac8ef65e92b9c547bc07b5641713a4b016a1704e0528ea999c8bd scraper/requirements.txt 260ae7c9360bbfa7bc29c5bef386bdbc15107d99a3ef0c517180b1a647751736 scraper/config/settings.json b6fcb1dfb60c2a6114fbdf8d9637a0cc8046b74d51cf5a5615b0503a4156a7fd scraper/config/site_taxonomy.json c2fbc809a2b209499e722de605329a4d20ef0904dd125a3e7fa6d9b808cdc1b9 scraper/config/locations.json 68b03743f4378ff2cb328eefda0af0681fe481d8244b6c4924614d4f0e48bb07 scraper/config/category_sources.json 606133cb12548d3f7f437ea9e0a056d88d0dd7f621ec0e1c210bb2fc20044da4 scraper/config/categories.csv 75bceb69ef6c957499a5d96d850402a55fd72b6e83ba9694e78e77bd7921443c scraper/README.md a9c4f54d4f0b980452c58bf442748b817c0ebb61f12b6ab02699225d75fe587a scraper/Dockerfile da991bcc82eada6def4edd6ac67126e2dbd0844e828a57b2060cf3b636573105 scraper/tests/test_oxylabs_probe.py 708619a08f52114fbd7fc57fac0624d7c8c207f9ec37227f797f994e40f67dbc scraper/tests/fixtures/site_coupon.json e224dc09cf2212fa3891733036b0b8aaecc66b84e846ba2ed3c352f276f77c55 scraper/tests/fixtures/site_products.json d4bcc782518988cc3665a64c88de7af02be7410faf4dd5ff9b88f3f416ff5206 scraper/tests/azurite_check.ps1 7e934e18b7b8b07c299209d01330bc27ca0c2b6822eb5123582fbd73ba11bef8 scraper/tests/test_scraper.py 4c46dbe77ff604bb1e5f473407c0fdeaf07a877d8a9bfaaeb8d16934524d351b scraper/tools/evidence_from_raw.py 42d55b2e26aae8d0d31653e4e4d954c84aeddd12b328d62a0db2443e977ff5e6 scraper/infra/deploy.ps1 57da7e2289c5cf4ba956275d9835e6a653abd98d6bbab478276ec9d8ac195d0d scraper/infra/main.bicep 64b94dc294bc8f0b49ff46538355ae5e51867609445bae75295b0f1ed112ae5b scraper/infra/windows_schedule.ps1 b327829673bc39690cb3ac20bb1c9feb6c24448e0d240783bb36d2703d87c3ca scraper/infra/windows_chrome.ps1 49e68e86c0316a5923f5601202d8e52d4b6cc26d853abdeea16759cd384e8725 scraper/infra/run_until_done.ps1 b93c88172d97d4611e39c0e21d43ccc4ae3a52595128831dcc352abbc6bebf9c scraper/infra/run_scheduled.cmd 4f8c178172bc5849bd92f4d39ff3fb1e49d6b5f75e9e01eeb6a52040f122df5f scraper/infra/vm/cloud-init.yaml ca83b0b855182efaa432614e5c8b8664725bf7d67af5fa4000d7933c1abfcb36 scraper/infra/vm/run_until_done.sh 3d61b44f475c86252ab425c03e5a7ef0ec56288999e1e322ea9c7c7cd2bc9eb2 scraper/infra/azure_vm_run.ps1 261499d8e65a26c89708c9a735c264643cd1b21d0ffed47308267c28ec934f66 scraper/docs/AZURE_DEPLOY.md f0ef245668d2195fae03efaacba7e7546fc344832081fc00084d264098601142 scraper/docs/EVIDENCE.md 12635ebf5321c73ca574c6de4db2582f0a629543a5f74bdeb714f4c5c0dc07fd scraper/docs/TRANSPORT_OXYLABS.md 1438527233ce7beb1cdf4a046b8b5d38f140bd77217ef4df17d5592989d3ec15 scraper/requirements-dev.txt 0ffa43abf3013be233098b72729d552a61a7ac03b2b1f7c03f3970fc91c8a6bd scraper/docs/OPERATIONS_MANUAL.md 8b9100e0fe73b06df8c5f3f181b5ac5a013eba1920048a7580c979fb661b1c54 scraper/infra/upload_probe_evidence.ps1 b7ae0da2f2088491042d31c07e0bf2564c971819d3b33b93b8e9ba8ff5e7613e scraper/infra/run_probe.ps1 b185655973e242cd5123d605c34870e22a7fa9cfbc32f193555c75514e532997 scraper/marianos_scraper/allowance.py Review copies in this message, renamed to .txt only so a browser shows them: - 02, 03 and 09: byte-for-byte copies of the files in the archive above or in release/ (same SHA-256 as listed above). - 04 to 07 and 11 to 15: byte-for-byte copies of the operator tools and exports as kept in our workspace, the source of the operator-tools/ and azure-exports-2026-11-01/ folders of the delivery zip; the hashes below let you compare them with your copy of that zip. - 01: the text of CHANGES-2.2.16.md from the delivery zip, written out again (same text; compare it with your copy). - 08: a cut of the two test files (exact line ranges in its header). SHA-256 of each review copy: 0403b63b7dc806cf549f101115cf0af4d62633ec9af75686e5cec5840228af27 01-CHANGES-2.2.16.md.txt <= CHANGES-2.2.16.md (text of the delivery zip marianos-23_v2.2.16_2026-11-01.zip) b185655973e242cd5123d605c34870e22a7fa9cfbc32f193555c75514e532997 02-allowance.py.txt <= package scraper/marianos_scraper/allowance.py 27f7ff1e6f0bc0bbf64a36a80263549863a956857e9a3ff74bb78085d09eaf67 03-probe.py.txt <= package scraper/marianos_scraper/probe.py ae06abd018c8d784223e4b3da2f20fb86ab3026e0f3c0b5fcf4666f719ddd081 04-probe_orchestrator.py.txt <= operator-tools/probe_orchestrator.py 6d8a7d0e86304af5e92841efd608eea1932d4ac12debfb2d25589e9d058b8787 05-vm_probe_session.tpl.ps1.txt <= operator-tools/vm_probe_session.tpl.ps1 a42d0e0c06d944737818fc14279a5df7ed1593398c05b6e63c285bc816e4e6b5 06-test_orchestrator.py.txt <= operator-tools/test_orchestrator.py e91eb3bd45f4891f866d3914d64dab8334ed28ee4b04145b1f6d9455a3e1b24b 07-OPERATOR_TOOLS.md.txt <= operator-tools/OPERATOR_TOOLS.md 585283bc12de73c0763e949cc61fc54c1e20f68fe370ddd3c99fc525594b43f2 08-focused-tests-2.2.16.txt <= cut from the package test files (see header) a2b7d7880d490ca94065fbd40237997bdbc81df08a5a1f64cf22672b72ac7f14 09-marianos-scraper-2.2.15-to-2.2.16.diff.txt <= release/marianos-scraper-2.2.15-to-2.2.16.diff 9df1442c9baabacb4e1668df5d050685099c633aaf92392290b9af76a4066ef6 11-exports-README.md.txt <= azure-exports-2026-11-01/README.md 0556d49148ff47699ace255a586f0b46892b9c8cacbf7300658babae56726f8e 12-ledger-cumulative-usage.json.txt <= azure-exports-2026-11-01/cumulative-usage.json bddd88b2913609184f5251f3f335a6d2cb77eb74f7fa2780f64c660a8136ccd7 13-log-analytics-events.csv.txt <= azure-exports-2026-11-01/log-analytics-shifullahscraper-events.csv b0251a19aabf54d38358379e692a33bc1c27b2ca0d4c00b25084577425c7ab83 14-log-analytics-table-summary.csv.txt <= azure-exports-2026-11-01/log-analytics-table-summary.csv 6f904400eee4ee5811c8a114f467ff96298c0ab045ded5e118b78eb8c0497288 15-activity-log-vm-summary.csv.txt <= azure-exports-2026-11-01/activity-log-vm-summary.csv Not copied here (kept private or too large for preview): the full Activity Log JSON (590 KB; sign-in claims and IP addresses already removed) and the test logs; both are in the original delivery zip. No credential, token or key is in any file.