The devcontainer provides Go 1.27.1, Node 24, Task, kubectl, and k3d.
task fixtures-check # regenerate and verify shared fixture output
task test # gateway, Kubernetes adapter, and client suites
task lint # Go vet, golangci-lint, TypeScript, and Biome
task build-client # produce the dependency-free ESM bundleRun task fixtures-check, task test, and task lint before opening a pull request.
Start with watch streams and authoritative resource views; add editing as an optional layer. The README explains current capabilities and how to choose a native or gateway source. Current API examples must match this branch. Native viewing is LIST/WATCH on the shared connection lifecycle and resumes ordinary reconnects from a per-handle checkpoint, and native editing writes conditional merge patches back through the same proxy; the comparison example measures the sources side by side. Streaming lists, pagination and editor cleanup are separate. Save-progress evaluation remains a proposal until implemented.
- Keep the core gateway free of
client-go; Kubernetes integration belongs ingateway/kube. - Keep the browser client framework-free and free of runtime dependencies.
- Keep credentials, application identity, authorization policy, and writes in the host application.
- Keep one current name for each API. Before 1.0, remove superseded names and forwarding packages; update callers and document the replacement instead of adding compatibility shims.
- Add public surface only for a demonstrated use case within the library’s scope. Prefer composing existing primitives, and test the observable guarantee each addition promises.
- Treat
spec/v1.mdandconformance/as the shared contract between gateway and client.
- Update spec/v1.md when the wire contract changes.
- Add or update a fixture in
conformance/for behavior both sides share. - Add focused package tests for behavior a fixture cannot express.
- Run the validation commands above.
Protocol compatibility is explicit. Additive optional fields are allowed when consumers can ignore them; incompatible event semantics require a new protocol version rather than a silent reinterpretation.
Keep viewing and transport guidance in watching resources, editor behavior in the editor model and writes in saving. Examples own their framework-specific guidance. Link to these contracts rather than repeating them in proposals. Retain decisions and useful evidence when shortening completed plans; remove superseded request inventories and duplicate guides. Preserve dated observations and generated release history. Documentation-only changes need local link/anchor checks, snippet/API review and diagram review; cluster and runtime suites are required when behavior changes, not for prose alone.
Fixtures use source YAML in conformance/bodies/ and conformance/fixtures/. Run task fixtures to
regenerate conformance/gen/; generated files are committed. Each fixture's why field should name
the rule it protects.
| Command | Purpose |
|---|---|
task test |
Deterministic gateway, adapter, client, and shared-fixture coverage. |
task e2e-wire |
Real Go SSE bytes consumed by the TypeScript client over HTTP. |
task e2e-browser |
Native EventSource, unbundled ESM and the native viewer and editor pages in Chromium. |
task cluster-facts |
Record observed Kubernetes behavior for the supported cluster version. |
task test-real-api |
Compose the save path and native viewing and editing against a real API server: gateway or host proxy, host endpoint and browser store. |
task compare-browser |
The comparison page in Chromium against the real comparison host, on both entry points. |
task compare-measure |
Measure native, full and spec sources, unshared and shared, under identical workloads against a real API server; task compare-native-baseline BASELINE_REF=<sha> compares the native connector with an earlier build. Results are evidence for the run, recorded in docs/facts/. |
task test-cluster |
Exercise the Kubernetes backend against a real API server. |
The cluster tasks need Docker and take longer; the fixture suites are the per-pull-request baseline.
- Format Go with
gofmt; keepgo vetandgolangci-lintclean. - Keep TypeScript strict and pass
biome check. - Prefer narrow changes and comments that explain constraints or non-obvious choices.