Repository navigation
test(qa): name the failing step in three real-cluster QA flakes - #2856
Conversation
- dev-up Keycloak second-pass case (finding 1884): on a mismatch, the failure message carries the last 40 lines of dev up's stdout and stderr (each bounded to 6,000 characters) instead of Node's cut stdout quote. - OpenShell OAuth2 refresh sources (finding 1883): an echo call whose output is not JSON keeps that output, redacted and bounded, and the substitution assertion prints it. After the reconfigured source loses its token, a non-JSON client-credentials echo is logged and polled again on the existing loop's 15 s interval and 420 s deadline; a JSON answer still ends the poll and is checked as before. - OpenShell first Workspace read (finding 1882): a non-200 answer records the Agent Gateway Pods' state and log and how a second read answered, then fails. No retry: a 503 right after the Sandbox is ready may be a real readiness bug. - file-durations.json: console-agents-list-return 17.6 s -> 25.0 s, the median of the five green main runs ending at 5cc5984.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Review follow-up. The re-poll of a non-JSON client-credentials echo could absorb a real failure (a proxy denial or a curl timeout looks the same), and the client-credentials value was only ever read once after the epoch loop. Drop it: the loop is back to main's, and a non-JSON echo is printed in the assertion message only. The Workspace read diagnostic no longer drops the occ-workspace-files connect lines, which show whether the read reached the Agent Gateway, and its comment names the other hops (Envoy Gateway, host relay).
|
Free's clanker here. I found a false pass in the refresh-token check this PR touches. It also reproduces on the parent; this change did not introduce a credential regression. At I ran the exact response parser, epoch loop, and Could we make the refresh result three-way: confirmed loss, still usable, inconclusive? Record only the curl exit, HTTP status, and a safe recognized echo or refusal class. A timeout must not pass; it can fail immediately as inconclusive. The existing |
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: test(qa): name the failing step in three real-cluster QA flakes This is item 1/1 in the current shard. Shard 0/1. This temporary status tracks the active review worker. The completed review will appear in the durable ClawSweeper review comment. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
…he shared helper Main added a local, unredacted outputTail to dev-up-k3d-real.test.mjs (#2856) while this branch exports a redacting outputTail from the dev-up helper; the merge declared the name twice. Use the shared helper so this case's dev up output is masked like the others.
Problem
The 10-18 flake sweep found three new low QA advisory flakes in real-cluster tests. In each case the failure message did not say what had failed:
dev upfailed before the second Helm pass. The assertion's message quoted only the start of stdout, which was cut off with "3927 more characters" left, and never showed stderr.sandbox-driver-openshell-k3d-real.test.mjs:3430 (run 39131550422, main 23ad336): after the reconfigured source lost its token, the unchanged client-credentials echo call printed something that was not JSON. The test reported only "oauth2-client-credentials must arrive substituted" (undefined !== false).503 DEPENDENCY_UNAVAILABLE. The API leaves the cause out of its answer, and the test setup has no API log, so nothing named the failing dependency.Separately, the
console-agents-list-returnrow infile-durations.jsonwas stale: 17.6 s, against about 25 s since #2837 and #2847 added tests.Change
Test-only. These are diagnostics only, with no new timeouts or caps.
cause.redactLogLineandturnFailureSecretsand cut to 1,000 characters. The result still has noplaceholderorjwt, so every check treats it as a missing token, as before.assertIssuednow prints that output. The final check is not polled again. The loop above it polls for the refresh-token loss, not for the client-credentials value, which is read only once after the loop. A transient non-JSON answer, such as a proxy denial or a curl timeout, looks the same as a real failure. So the next sighting should show it, not absorb it. (A first draft re-polled that check; internal review flagged that it could absorb a real failure, so it was dropped.)console-agents-list-returngoes from 17,600 ms to 25,000 ms. That is the median wallDurationMs over the five green main runs ending at 5cc5984 (23.7, 23.7, 25.0, 26.4 and 27.1 s), the method test(ci): refresh three stale file duration rows #2815 and test(console): make the utc-offset log timestamp test fast again #2841 used. Thesourcenote says so.Verification
These QA files need real k3d/OpenShell clusters, so I could not run them locally. Instead, I checked the new helper and formatting code with a small pure-node script that extracts each new piece from the test files:
cause. A 20,000-character stream is cut to 6,000.placeholderorjwt. JSON output still parses as before.assertIssued's message includes the printed output.node --check, prettier and eslint pass on both test files.node scripts/ci/run-tests.mjs auditreports no issues.CI Required passed on the first head, 49f791e.
Shared test files: for each open PR that touches these files, I compared
git merge-treeagainst main with the same check against this head. This PR adds no conflicted file and no conflict hunk:Risks
Low. The changes are test-only and change nothing on the passing path: each echo output is trimmed once before it is parsed, as before. On the failure path, only 1882 makes a call the test did not make before: one read-only GET, made after the diagnostics are collected, and the test still fails.
Findings 1882, 1883 and 1884 stay open: these changes add diagnostics and don't fix them.