HowlFrame #90 Phase 2d: mediate fetch on Go and JavaScript - #57
Conversation
Generated Go and JavaScript check the network grant in howlFrameFetch before any HTTP request. An empty, missing, or non-network HOWLFRAME_ALLOW_CAPS grant fails with CAPABILITY_DENIED and does not open a connection. Conformance covers fetch_denied and fetch_granted on the interpreter, bytecode VM, Go, and JavaScript. Production -compile-bc is unchanged. #90 stays Partial. Co-authored-by: William Elias <wylelias.123@gmail.com>
howlcipher
left a comment
There was a problem hiding this comment.
COMMENT OK on head 32cd2e40 (CI build green).
Phase 2d scope check: Go+JS mediate (fetch) under existing network via HOWLFRAME_ALLOW_CAPS / howlFrameGrantHas; CAPABILITY_DENIED before http.NewRequest / fetch; denial text has no URL; denied cases record zero HTTP hits. Interpreter sends only after its existing network gate. Conformance fetch_denied / fetch_granted on interpreter / bytecode VM / Go / JS. write_file / mkdir untouched. -compile-bc still AST path. #90 stays Partial.
Hard nos clean: no half bytecode linker / HFIR module smuggle / VM module opcodes; no new caps or opcodes; don’t reopen #102–#105/#108; no path flip / Wasm as this item; no batch of remaining host effects.
Okabe: undraft + squash-merge when ready.
Summary
Phase 2d of #90 mediates
(fetch url method [body])on generated Go and JavaScript under the existingnetworkgrant. This follows the Phase 2a–2cHOWLFRAME_ALLOW_CAPS/CAPABILITY_DENIEDpattern. #90 stays Partial. Production-compile-bcis unchanged.howlFrameFetchchecksnetworkbeforehttp.NewRequest/http.DefaultClient.Do(Go) orfetch(JavaScript). An empty, missing, or non-networkgrant panics or throwsCAPABILITY_DENIED: capability denied: networkand does not open a connection. The denial text does not include the URL.networkgrant performs the request. Gotry_letstill binds(bytes, error).letandbytes_to_stringusehowlFrameFetchBytes. JavaScript returns the response text.networkcheck. The bytecode VM is unchanged:OpFetchis alreadynetwork, and the gate runs before the request.fetch_deniedandfetch_grantedon the interpreter, the bytecode VM, Go, and JavaScript. The fixture is(fetch "http://127.0.0.1:47653/howlframe-abi-v1-phase2d" "GET"). Denial records zero requests to that server.write_file,mkdir, and other host effects are not mediated. No new capability, no new opcode, and no Wasm change.Journal:
docs/journals/2026-09-30_lowered_hfir_abi_phase2d_fetch.md.How to test
TestLoweredHFIRABIConformanceservesphase2d-fetch-markeron127.0.0.1:47653and checks thatfetch_deniedmakes no HTTP request whilefetch_grantedprints the marker on all four hosts.Local evidence:
gofmt -l .was clean,go vet ./...passed, andgo test ./...passed.