Skip to content

ci(workflows): add missing repo test coverage#111

Merged
onutc merged 4 commits intomainfrom
codex/gha-test-coverage
Mar 13, 2026
Merged

ci(workflows): add missing repo test coverage#111
onutc merged 4 commits intomainfrom
codex/gha-test-coverage

Conversation

@onutc
Copy link
Member

@onutc onutc commented Mar 13, 2026

TL;DR

This adds the repo-level GitHub Actions coverage that was missing for Go packages, UI tests, e2e unit tests, and docs checks. It also fixes stale operator URL expectations so the new Go workflow runs green on the current code.

Summary

  • add Go test coverage for api, operator, and integrations/github-app
  • add UI workflow coverage for ui tests and entrypoint shell syntax
  • add e2e unit-test coverage for the ACP smoke harness modules
  • add docs convention checks for docs, README, and AGENTS changes
  • update operator URL tests to match the current chat-first access URL contract

Review focus

  • workflow path triggers and command choices
  • whether the added coverage is the right minimum set for this repo
  • operator URL test expectations against the current access/workspace URL helpers

Test plan

  • ok spritz.sh/api (cached)
    ok spritz.sh/api/cmd/shared-syncer (cached)
  • ok spritz.sh/operator (cached)
    ok spritz.sh/operator/api/v1 (cached)
    ok spritz.sh/operator/controllers (cached)
    ok spritz.sh/operator/sharedmounts (cached)
  • ok spritz.sh/integrations/github-app (cached)
  • ✔ entrypoint renders presets as a real JS array even with nested JSON env values (506.185459ms)
    ✔ entrypoint renders null when presets are unset (257.84ms)
    ✔ nginx config disables caching for index and runtime config (1.254834ms)
    ✔ nginx config keeps hashed js and css cacheable (0.21425ms)
    ✔ ACP client does not report ready or send prompts before bootstrap completes (41.34025ms)
    ✔ ACP client surfaces missing sessions instead of recreating them client-side (6.147333ms)
    ✔ ACP chat shell uses viewport-bound layout with internal scrolling (2.329375ms)
    ✔ ACP page restores cached transcript when revisiting a conversation (80.146ms)
    ✔ ACP page purges pre-cutover cached transcripts after the namespace cutover (8.298291ms)
    ✔ ACP page drops cached transcripts that contain raw HTML error documents (13.5715ms)
    ✔ ACP page replaces cached transcript with backend replay during bootstrap (7.898292ms)
    ✔ ACP page clears cached transcript when backend replay returns no transcript updates (7.580917ms)
    ✔ ACP page drops cached HTML error documents during transcript restore (7.162125ms)
    ✔ ACP page renders a two-pane shell with a single sidebar rail (20.170334ms)
    ✔ ACP client dispose errors do not surface as global notices (79.159125ms)
    ✔ ACP page surfaces real startup errors as toasts (8.8065ms)
    ✔ ACP page keeps the requested workspace route and shows provisioning state while chat is unavailable (18.213084ms)
    ✔ ACP page shows a not found state instead of redirecting when the requested workspace is missing (6.196959ms)
    ✔ ACP page sanitizes raw HTML bootstrap failures before showing a toast (25.736333ms)
    ✔ ACP page surfaces HTML tool failures as toasts without dumping raw markup (7.742583ms)
    ✔ ACP page surfaces HTML assistant failures as toasts without restoring markup into chat (7.307917ms)
    ✔ ACP page rebinds the selected conversation before sending on a stale client (101.438833ms)
    ✔ ACP page repairs a missing session by bootstrapping once and reconnecting (24.402292ms)
    ✔ ACP render adapter keeps commands out of transcript and upserts tool cards (15.208209ms)
    ✔ ACP render adapter summarizes HTML error pages in tool results (6.119125ms)
    ✔ ACP render adapter drops HTML error pages from assistant text updates (2.165125ms)
    ✔ ACP render adapter sanitizes raw HTML error pages at render time (2.1425ms)
    ✔ ACP render adapter treats bootstrap replay chunks as historical messages (5.829125ms)
    ✔ ACP render adapter coalesces bootstrap replay chunks for the same historical message (1.617917ms)
    ✔ ACP render adapter hydrates legacy cached messages that used kind (1.242709ms)
    ✔ chat hash route initializes without throwing (67.085916ms)
    ✔ spritz list shows a transitional chat action while workspace chat is still starting (58.523583ms)
    ✔ resolveRepoSelection falls back to repo defaults for presets without repo ownership (3.417625ms)
    ✔ resolveRepoSelection preserves explicit blank repo settings owned by the preset (0.333ms)
    ✔ buildCreatePayload uses presetId and does not serialize preset env overrides (1.665375ms)
    ✔ buildCreatePayload falls back to explicit image when preset is no longer aligned (0.360292ms)
    ✔ buildCreateFormState keeps preset selection only when image still matches (2.9205ms)
    ✔ writeCreateFormState stores reusable form state without a name field (0.58675ms)
    ✔ parsePresets returns raw arrays directly (0.877916ms)
    ✔ parsePresets returns null for the runtime placeholder (0.126125ms)
    ✔ parsePresets fails closed for malformed values (0.613666ms)
    ✔ setupPresetPanel injects the preset selector and updates image fields (3.805042ms)
    ✔ setupPresetPanel restores a saved preset selection and falls back to custom (2.10475ms)
    ✔ setupPresetPanel clears hidden repo defaults when a preset explicitly owns blank repo fields (0.4155ms)
    ℹ tests 44
    ℹ suites 0
    ℹ pass 44
    ℹ fail 0
    ℹ cancelled 0
    ℹ skipped 0
    ℹ todo 0
    ℹ duration_ms 1011.873625
  • [x]
  • ✔ connectACPWebSocket correlates RPC responses and collects session updates (28.457708ms)
    ✔ connectACPWebSocket times out RPC calls without a response (1006.664541ms)
    ✔ withACPWorkspaceClient always closes the websocket client and stops the port-forward (3.342375ms)
    ✔ runACPWorkspacePrompt delegates the ACP flow through the workspace client owner (1.26375ms)
    ✔ resolveSpzCommand prefers explicit binary env override (1.382125ms)
    ✔ resolveSpzCommand prefers the checked-out CLI before any global spz on PATH (0.1545ms)
    ✔ parsePresetList normalizes comma-delimited values (0.3255ms)
    ✔ parseSmokeArgs requires explicit presets instead of assuming example ids (0.566208ms)
    ✔ parseSmokeArgs normalizes provided preset ids (0.173334ms)
    ✔ parseSmokeArgs prefers the smoke namespace env over the generic namespace env (0.210333ms)
    ✔ parseSmokeArgs requires an explicit smoke api url and bearer token (0.311917ms)
    ✔ buildSmokeSpzEnvironment strips ambient spritz auth and profile state (0.326667ms)
    ✔ extractACPText flattens nested content blocks (0.266916ms)
    ✔ joinACPTextChunks preserves chunked tokens without inserted separators (0.242583ms)
    ✔ buildIdempotencyKey and smoke token normalize preset names (0.283792ms)
    ✔ resolveACPEndpoint prefers discovered ACP port/path and normalizes the path (0.260958ms)
    ✔ resolveWebSocketConstructor returns a usable client constructor (23.938416ms)
    ✔ assertSmokeCreateResponse accepts canonicalized preset ids from the API (0.162875ms)
    ✔ isForbiddenFailure only accepts explicit forbidden command failures (0.236166ms)
    ✔ runCommand marks timed-out child processes (32.346375ms)
    ✔ runCommand escalates to SIGKILL when the child ignores SIGTERM (28.671209ms)
    ✔ waitForWebSocketOpen rejects and closes on handshake timeout (1001.187625ms)
    ✔ waitForWebSocketOpen resolves when the socket opens (8.797208ms)
    ✔ summarizeWorkspaceFailure prioritizes shared mount init failures (1.774084ms)
    ✔ summarizeWorkspaceFailure reports image pull failures distinctly (0.158042ms)
    ✔ waitForWorkspace returns the ready workspace payload and discovered ACP endpoint (4.134708ms)
    ✔ waitForWorkspace recovers from transient kubectl polling errors (2.345208ms)
    ✔ waitForWorkspace fails with the last staged failure summary on timeout (10.465833ms)
    ℹ tests 28
    ℹ suites 0
    ℹ pass 28
    ℹ fail 0
    ℹ cancelled 0
    ℹ skipped 0
    ℹ todo 0
    ℹ duration_ms 1241.181208
  • OK: repo matches SimpleDoc conventions.
  • [x]

@onutc onutc merged commit e4cb164 into main Mar 13, 2026
6 checks passed
@onutc onutc deleted the codex/gha-test-coverage branch March 13, 2026 06:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant