The public main branch contains three small network components and their tests. They are intentionally isolated and readable; the full service chain is not integrated yet.
Python HTTP client
The client in http-server/client.py accepts [http://]host[:port][/path], defaults to port 80, builds an HTTP/1.0 GET request, and reads the status line, headers, and body from the socket. Unsupported transfer and content encodings are rejected explicitly.
Minimal HTTP server
http-server/server.py sequentially binds to 0.0.0.0:8088, reads one request segment, and returns a CRLF-framed HTTP/1.1 response with Content-Length, Connection: close, and HELLO WORLD!.
Go DNS MVP
dns-server/server.go answers UDP queries on 127.0.0.1:8053. An A query for app.local returns 127.0.0.1; unknown names receive NXDOMAIN, while unsupported or malformed queries stay deliberately limited.
Behavior-focused tests
http-server/tests/ covers URL parsing, client-server integration, refused connections, HTTPS rejection, and the server smoke test. dns-server/server_test.go covers the known record, NXDOMAIN, unsupported types, and malformed packets.
Documentation and ADRs
The README files document how to run and test each component. ADRs record the Python unittest choice, the Go choice, and the DNS MVP test structure.