Make the gates green after the workflow stage reader

JE
2mo ago
+303-17

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/net to go/go.mod and conformance/runner/go/go.mod.
  • Teaches the Rust generator about text/html 2xx responses: the Route now carries an html flag, so the generated get_stage asks for the page as served (no .json, Accept: text/html) and returns the body as a String; the read is named workflow_stage.
  • Regenerates rust/hey-sdk/src/generated and updates the route count test to 131.
  • Extends the Rust conformance runner with the GetWorkflowStage arm, serves HTML fixture bodies as wire text, and decides the path from route.html rather 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.