Roadmap¶
go-ruby-rack/rack is grown test-first, each capability differential-tested
against the rack gem rather than built in isolation. The deterministic,
interpreter-independent slice of Rack 3.x's pure-compute surface extracted from
rbgo's internals is complete.
| Stage | What | Status |
|---|---|---|
| Query & parameters | ParseQuery / ParseNestedQuery bracket nesting (foo[bar], foo[], x[][a]), the array-of-hash vs nested-array subtleties, ParameterTypeError / ParamsTooDeepError, and BuildQuery / BuildNestedQuery inverses. |
Done |
| Escaping | Escape / Unescape, EscapePath / UnescapePath (RFC 2396), EscapeHTML / UnescapeHTML — byte-identical to MRI. |
Done |
| Status codes & headers | The full HTTPStatusCodes table, symbol → code reverse map (deprecated aliases), StatusWithNoEntityBody, and the insertion-ordered, key-down-casing Headers. |
Done |
| Content negotiation & cookies | QValues, BestQMatch, GetByteRanges; ParseCookiesHeader, MakeCookieHeader / MakeDeleteCookieHeader and the …Into mutators. |
Done |
| Request over an Env | Method predicates, PathInfo / QueryString / GET / POST / Params / Cookies, ContentType / MediaType, Host / Port / Scheme / SSL / BaseURL / URL, XHR, IP with trusted-proxy filter. |
Done |
| Response & SPEC tuple | NewResponse / NewResponseString / ResponseTuple, Write, Finish / ToA, SetStatus, SetCookie / DeleteCookie, Redirect, status-class predicates. |
Done |
| Body/Input seam | The single Input interface through which the host supplies the request body, memoised into the env like the gem. |
Done |
| Differential oracle & coverage | Escape, query, status, cookie, media-type, byte-range and Response#finish checked byte-for-byte against ruby + the rack gem; 100% coverage, green across 6 arches and 3 OSes. |
Done |
Documented out-of-scope boundaries¶
These are deliberate, recorded so the module's surface is unambiguous:
- No HTTP server.
Rack::Handler, the socket accept loop and TLS are the host's job. This library never touches the network; the request body comes in through the one explicitInputseam. - No interpreter. The library implements the deterministic compute; it never
runs arbitrary Ruby (
Rack::BuilderDSL, middlewarecallchains). Anything that needs a live binding is the consumer's job — that is whyrbgobinds this module rather than the reverse. - Reference is the
rackgem (Rack 3.x, MRI). Byte-for-byte conformance targets the reference gem's behaviour, pinned by the differential oracle. - Standalone & reusable. The module has no dependency on the Ruby runtime; the dependency runs the other way.
See Usage & API for the surface and Why pure Go for the deterministic/interpreter split.