Skip to content

docs(qa): teach the QA skills to test a configurable surface - #2584

Merged
ktursunov merged 5 commits into
mainfrom
codex/report-testing-skills
Aug 17, 2026
Merged

docs(qa): teach the QA skills to test a configurable surface#2584
ktursunov merged 5 commits into
mainfrom
codex/report-testing-skills

Conversation

@ktursunov

@ktursunov ktursunov commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

.claude/skills/ holds the instructions an AI agent follows when it tests
something in this repo. Three of them now cover a configurable surface — a screen
whose options change what comes back, the report builder (#2508) being the
current example. Nothing covered that before, so testing one meant trying a few
combinations and calling it done.

Which skill changed

Skill Read when What it gained
scope-feature-tests planning what to test model the surface as options → validation → request → result → output, then name its axes and limits
drive-ui poking at a stand by hand inventory the controls before clicking, probe exact limits, inspect what the surface produced
stand-ui-test writing a committed browser test what a URL-state or output-producing journey must assert, and what belongs in a cheaper suite

The rules they now carry

  • Exercise every member of a short, closed option set once, and combine axes
    pairwise rather than as a full cross.
  • Test a limit as a pair: the last value accepted and the first one refused.
  • Check the output a surface produces against the data it was built from. The
    event saying something was produced is not evidence about its contents.
  • Treat each way into the same state as its own path — navigation, a cold URL, a
    reload, Back/Forward — because the validators behind them do not all fail the
    same way.
  • Put every check in the cheapest suite that can fail it, and keep the browser
    for what only a browser can show.

Also here: which origin to open for the test stand

drive-ui now says to open the seeded compose stand on its gateway port, not
the published frontend port. That port serves the SPA and nothing else, so
/auth/* comes back as index.html and sign-in loops — which reads as a broken
frontend and is not one.

Order

#2597 applies these rules to the browser tests that download a file, and adds the
tests/stand/ui/downloads.py this guidance names. Merge that one first and this
reads against code that exists.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review available on request

  • 🔍 Trigger review

Reviews should be triggered manually for repositories with fewer than 10 stars. Select Trigger review above or comment @coderabbitai review to review the latest changes. For a full review, comment @coderabbitai full review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 155d13a5-74ef-4c2f-97df-d1e818fd0da6


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ktursunov ktursunov changed the title docs(qa): cover report builder exploration and limits docs(qa): generalize configurable UI exploration guidance Aug 17, 2026
@ktursunov
ktursunov force-pushed the codex/report-testing-skills branch from d0f649a to c424bc6 Compare August 17, 2026 06:37
@ktursunov ktursunov changed the title docs(qa): generalize configurable UI exploration guidance test(stand): make the download journeys prove what the file holds Aug 17, 2026
Konstantin Tursunov added 4 commits August 17, 2026 15:27
Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
The guidance named a "strict hook" as what a deep-link renders into. That
phrase already means something else here — a context hook that throws outside
its provider — while URL state is handled by `validatePortalSearch`, which
drops what it cannot parse, and `assertDateRange`, which throws into
`AppErrorBoundary`. A reader grepping the old phrase landed in the wrong file.
Naming all three makes the two paths a malformed link can take checkable.

`drive-ui` claimed the frontend nginx serves `/api`. It serves neither `/api`
nor `/auth` — both fall through `try_files $uri $uri/ /index.html`, which is
the actual reason a browser on that port loops. Its exploration section also
argued against the skill's own opening line ("neither is about clicking") and
carried none of the moves the skill owns; the opening now names three concerns
and the section starts from `snapshot`, `requests` and the code behind the
controls.

Suite placement went vague where the repo has tags: "frontend tests" and
"unit/component suites" are `fe-unit` and `fe-component`. `stand-ui-test` adds
that the period boundary it points at is still unclaimed — the api suite clamps
at 399 days rather than asserting 400 — and that the three shipped download
journeys stop at suffix and size by history, so their assertions are not the
model to copy.

`scope-feature-tests` gets its quoted trigger phrasings back. Compressing the
description had removed every verbatim query a user actually types, and the
description is the only triggering signal a skill has.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
The rule says to parse a downloaded export and compare it against the grid it
came from. It did not say what does the parsing, so every journey that follows
it would arrive at the same reader independently.

Name `downloads.py`: `download_export` saves and parses the file,
`claimed_row_count` reads the `aria-rowcount` a virtualized grid uses to
declare the row total it is only showing a window of, and one normalizer spans
CSV strings, XLSX numbers and rendered DOM text so `29` and `29.0` compare
equal while an empty cell stays distinct from a zero. The three journeys that
download a file are named as the worked examples.

The helper itself lands in the test PR; this is the guidance that sends a
reader to it.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
@ktursunov
ktursunov force-pushed the codex/report-testing-skills branch from 2bf674c to 7be7371 Compare August 17, 2026 07:27
@ktursunov ktursunov changed the title test(stand): make the download journeys prove what the file holds docs(qa): teach the QA skills to test a configurable surface Aug 17, 2026
@ktursunov
ktursunov marked this pull request as ready for review August 17, 2026 09:24
@ktursunov
ktursunov requested a review from a team as a code owner August 17, 2026 09:24
@ktursunov
ktursunov enabled auto-merge August 17, 2026 09:35
@ktursunov
ktursunov added this pull request to the merge queue Aug 17, 2026
Merged via the queue into main with commit a984788 Aug 17, 2026
27 checks passed
@ktursunov
ktursunov deleted the codex/report-testing-skills branch August 17, 2026 10:53
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