Make the gates green after the workflow stage reader
Main has been red since #141 (Add workflow stage reader) merged: run 34435818422. It was a first-time contributor PR, so its check runs sat in action_required and main is the first place these gates saw the change. Three jobs failed outright and the two conformance jobs were skipped behind them. Each below with root cause and fix, all reproduced locally before and after.
Go Tests (go build ./...: "updates to go.mod needed") and Go Lint (golangci-lint: "no go files to analyze"), same cause
go/pkg/hey/workflows.go imports golang.org/x/net/html and go/go.mod never declared it. Fix: go mod tidy in go/ (adds the direct requirement; go.sum already carried the module via the oapi-codegen tool graph) and in conformance/runner/go (indirect requirement plus sum entries), which is what the skipped Conformance Tests job would have failed on next.
Rust Tests (make rs-check-drift: routes.rs, services/workflows.rs, types.rs stale)
#141 never ran make rs-generate. Regenerating alone was not enough: GetWorkflowStage is the first modelled route whose 2xx is text/html, and the generator only knew JSON or empty, so it emitted a get_stage that returned () and would have sent /stages/{id}.json with a JSON Accept. Fix at the generator: rust/generator/src/model.rs reads a text/html 2xx as Response::Html, emit/services.rs emits a method that calls the new Operation::html_representation() (no .json suffix, Accept: text/html) and returns the page as a String through the new Client::send_text. rust/hey-sdk/src/generated is regenerated from that. rust/hey-sdk/tests/routes.rs pins the modelled-route count, which #141 moved from 130 to 131. A unit test covers the generated read's path, Accept and body.
Conformance Tests (Rust) (skipped in the run; FAIL: GetWorkflowStage uses the HTML workflow stage path locally)
The fixture #141 added to conformance/tests/paths.json got a dispatch arm in the Go runner only. conformance/runner/rust gains the arm, serves an HTML fixture body as wire text the way the Go runner's patch already does, and stops appending .json to the expected path of a case whose mock is text/html, since the SDK asks for such a page as written.
Not a #141 behavior defect: the Go Workflows().GetStage and its HTML parsing do what the fixture and its unit test say. What #141 left behind is a Rust parity gap: workflows().get_stage() now returns the stage page as HTML, but nothing on the Rust side parses it into the stage name and thread cards the Go WorkflowStageView carries. That is a feature to follow, not a gate fix, so it is not in here.
Not in here either: #151 (Retry-After second-boundary flake) is already on main, and none of the failures in the run were that.
Local gate state on this branch: make smithy-check behavior-model-check url-routes-check drift-check-mvp go-check go-check-drift rs-check rs-check-drift all pass; Go conformance 191/191; Rust conformance 190/190.
Summary by cubic
Fixes the gates that went red on main after #141 merged: the Go SDK was missing a declared dependency, the Rust SDK wasn't regenerated for the new HTML-answering route, and the Rust conformance runner didn't know how to exercise it.
- Adds
golang.org/x/nettogo/go.modandconformance/runner/go/go.mod. - Teaches the Rust generator about
text/html2xx responses: theRoutenow carries anhtmlflag, so the generatedget_stageasks for the page as served (no.json,Accept: text/html) and returns the body as aString; the read is namedworkflow_stage. - Regenerates
rust/hey-sdk/src/generatedand updates the route count test to 131. - Extends the Rust conformance runner with the
GetWorkflowStagearm, serves HTML fixture bodies as wire text, and decides the path fromroute.htmlrather than the mock's content type. - The Rust SDK returns the stage page as raw HTML; parsing it into the stage view is a follow-up.
- The API compatibility job now tidies its base checkout before reading the baseline, so it no longer fails on a PR that fixes main's untidy
go.mod.
API Compatibility (apidiff: "updates to go.mod needed" while loading base/go)
This one fails on the base checkout, not the head: the job builds its baseline from main's go/pkg/hey, and main's go.mod is the thing this PR fixes, so apidiff -w fails before comparing anything. Run locally with a tidied main as the baseline, apidiff -incompatible reports nothing: no public-surface change, from this PR or from #141. Fix: the job tidies the throwaway base checkout before reading its surface (.github/workflows/test.yml), so a main left untidy by a merge that skipped this gate still yields a baseline and the PR repairing it can pass.
Second commit, after review: Route carries html, so the client, the emitter and the Rust conformance runner all read "this route answers HTML" from the route table rather than each deciding it; and GetWorkflowStage reports workflow_stage to the hooks, as the Go wrapper does.