test(web): document canonical NAT64 policy boundary (#710)

This commit is contained in:
jason.woltje committed 2026-10-29 00:24:04 -05:00
1 parent 4cf888c04c
commit a19b936a8c
3 files changed
+15

No files matched your search

+2
View File
@@ -5818,3 +5818,5 @@ Before: agents can read the library; supporting-path and push-credential depende
2026-10-26 | Sage | Mos1909/1915/1917 real postlanding reviews | Boyd/Dewey/Filbert/Gladstone real authored candidate52ba verdictfiles independently byte/hash-verified, allAPPROVE scoped; Dewey656broaderPARTIAL retained. Formal330R1/331R4 requests failedpre-send/no comments or approvals; no borrowed/copied/mintedkeys. LegacyhelperGETname jason.woltje is NOT ownJarvis, ownslotabsent; rows tracking-open/#436, files cited via normalqueue. NewFilbertNEW-330-01 filedtask665 exactreadback, notlandingreopen/gate. Repair646-648/652-656 remainOPEN untilactualcomments;1917 conditionalbacklog routing retained. #662scope1338posted;660PR405REVISE/notready. Product1968inputs unchanged; no source/helper/test/gate edits/runs; peerjournal prefixes preserved.
2026-10-28T22:18:42-05:00 | Codex FIX-A4-001 project19 #710 BEFORE/AFTER | Isolated branch work/q284-web-fetch-ipv6-ssrf at exact base09a847ed; source pine5a7b647 and A4 report39380B/5ee6f798 verified. Focused web test baseline7/7; regression-first exact mapped-IPv6 literal/DNS/redirect run6pass/4fail; canonical-bit implementation then10/10pass. Changed only web source/test plus append-only receipts; no live/internal probe, scratch, dependency/install, heavy/full gate, commit, push, PR or API mutation. Full CI/cross-family/PR/release remain parent-owned.
2026-10-29 | Sage | #710 independent-review follow-up | Claude source approval of 4cf888c04 records LOW NAT64 policy disclosure: canonical classification refuses exact 64:ff9b::/96; the old text prefix also refused some addresses outside that range. Added explicit boundary tests; production source unchanged. Zone-suffixed inputs also fail closed. Other IPv6 transition/special-use ranges remain a separate deployment-dependent follow-up, not resolved here. Prior author no-commit statements describe that earlier session; local commit and Mos PR1834 publication followed. No native/CI/merge claim.
+2
View File
@@ -1881,3 +1881,5 @@ are never rewritten or removed; corrections are new entries.
2026-10-26 | Sage | Mos1909/1915/1917 real postlanding reviews | Boyd/Dewey/Filbert/Gladstone real authored candidate52ba verdictfiles independently byte/hash-verified, allAPPROVE scoped; Dewey656broaderPARTIAL retained. Formal330R1/331R4 requests failedpre-send/no comments or approvals; no borrowed/copied/mintedkeys. LegacyhelperGETname jason.woltje is NOT ownJarvis, ownslotabsent; rows tracking-open/#436, files cited via normalqueue. NewFilbertNEW-330-01 filedtask665 exactreadback, notlandingreopen/gate. Repair646-648/652-656 remainOPEN untilactualcomments;1917 conditionalbacklog routing retained. #662scope1338posted;660PR405REVISE/notready. Product1968inputs unchanged; no source/helper/test/gate edits/runs; peerjournal prefixes preserved.
2026-10-28T22:18:42-05:00 | Codex Daybreak Blue xhigh | FIX-A4-001 / project19 #710 mapped-IPv6 SSRF source and focused test fix on work/q284-web-fetch-ipv6-ssrf | Regression-first red6pass/4fail, focused green10/10; no live/heavy gate, scratch, dependency, commit, push, PR or API mutation; full CI and integration remain with parent.
2026-10-29 | Sage | #710 independent-review follow-up | Claude source approval of 4cf888c04 records LOW NAT64 policy disclosure: canonical classification refuses exact 64:ff9b::/96; the old text prefix also refused some addresses outside that range. Added explicit boundary tests; production source unchanged. Zone-suffixed inputs also fail closed. Other IPv6 transition/special-use ranges remain a separate deployment-dependent follow-up, not resolved here. Prior author no-commit statements describe that earlier session; local commit and Mos PR1834 publication followed. No native/CI/merge claim.
+11
View File
@@ -145,6 +145,17 @@ test("web: address rules refuse every private, loopback, link-local, mapped and
for (const a of ["10.1.1.1", "127.0.0.1", "127.9.9.9", "0.0.0.0", "169.254.1.1", "172.16.0.1", "172.31.255.255", "192.168.0.1", "192.0.0.1", "100.64.0.1", "198.18.0.1", "224.0.0.1", "255.255.255.255", "::1", "0:0:0:0:0:0:0:1", "::", "0:0:0:0:0:0:0:0", "::ffff:10.0.0.1", "::ffff:127.0.0.1", "::ffff:7f00:1", "0:0:0:0:0:FFFF:0A00:0001", "fd00::1", "FC00::1", "fe80::1", "FE80:0:0:0:0:0:0:1", "fec0::1", "ff02::1", "FF00:0:0:0:0:0:0:1", "64:ff9b::a00:1", "64:ff9b:0:0:0:0:a00:1", "not-an-ip", "999.1.1.1"]) assert.equal(isPublicAddress(a), false, a);
});
test("web: NAT64 refusal uses the well-known /96 boundary", () => {
// The old textual prefix also refused some addresses outside the well-known
// prefix; the canonical classifier deliberately uses its exact bit boundary.
for (const address of ["64:ff9b::", "64:ff9b::ffff:ffff", "64:ff9b:0:0:0:0:a00:1"]) {
assert.equal(isPublicAddress(address), false, address);
}
for (const address of ["64:ff9a::1", "64:ff9b:0:0:1:0:a00:1"]) {
assert.equal(isPublicAddress(address), true, address);
}
});
async function assertPrivateBeforeRequest(url, expectedRequestHosts = []) {
const before = requestHosts.length;
await refuses(webFetch(fast(), { url }, deps), WEB_REFUSAL.PRIVATE);