Skip to content

feat(loadtesting): close create/update/estimate/run guidance gaps - #400

Merged
sourabhd-cbu merged 2 commits into
browserstack:feat/capability-registryfrom
sourabhd-cbu:feat/loadtesting-guidance-gaps
Sep 8, 2026
Merged

feat(loadtesting): close create/update/estimate/run guidance gaps#400
sourabhd-cbu merged 2 commits into
browserstack:feat/capability-registryfrom
sourabhd-cbu:feat/loadtesting-guidance-gaps

Conversation

@sourabhd-cbu

Copy link
Copy Markdown
Collaborator

Guidance-only edits to the Load Testing capability index (capability/loadtesting.capability-index.json) — no code, index-only. Closes gaps the existing anti-refetch guidance (#394) did not cover.

Changes

  • createLoadTesttestType (plu/blu/hybrid) and framework are required and never inferred: ask the user, don't guess; the load profile (VUs/vuRamp + durationSec) is required too and never defaulted; to duplicate a test, copy the full source config (nothing is inherited).
  • updateLoadTestconfig fields replace wholesale: tags overwrite (they don't append) — send the union; tags live on the test, not its runs; to tag every test in a project, page listLoadTests until hasMore is false and update all.
  • startLoadTestRun — a non-dryRun run makes real load and burns VU-hours: dry-run first, show the estimate + parameters, and start only after the user confirms (the model's own confirmation is not the user's).
  • estimateLoadTestRunCost — a protocol (plu) run bills at full pod capacity + a 5-min floor (small runs look expensive — expected); and the estimate is type-specific — a browser (blu) run costs ~10× a plu run at the same VUs/duration, so always state the type and give both figures or ask when it's open.

Scope note

This supersedes #399 (closed): that PR also carried a generic opt-in read cache in src/tools/capability-registry/ (shared with tm). Per review it's kept index-only here; the generic cache / dedup is deferred to a separate, generic mcp-server change.

Notes for reviewers

These close the "assumed a value / skipped a step" class of agent failures. They do not address the redundant-call (thrash) class — that needs the generic cache/dedup, intentionally not in this PR.

Guidance the existing anti-refetch prose did not cover, all within the
Load Testing capability index:

- createLoadTest: testType (plu/blu/hybrid) and framework are required and
  never inferred — ask rather than guess; the load profile (VUs/vuRamp and
  durationSec) is required too and never defaulted — ask if unstated; and to
  duplicate a test copy the full source config, nothing is inherited.
- startLoadTestRun: a non-dryRun run makes real load and burns VU-hours —
  dryRun first, show the estimate and the parameters, and start the real run
  only after the user confirms; the model's own confirmation is not the user's.
- updateLoadTest: config fields replace wholesale — tags overwrite, not
  append; send the union. Tags live on the test, not its runs; to tag every
  test in a project, page listLoadTests until hasMore is false and update all.
- estimate: a protocol (plu) run bills at full pod capacity + a 5-minute
  floor, so a small run estimates higher than VUs x duration — expected.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited), Workspace UI (inherited)

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c2399576-8f03-43a2-be68-caaa40ce373b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

…ks the "include-comma" 400)

`include` and `errorCategory` are comma-separated multi-value params, but the
index declared them as single-value enums. The generic bind/coerce validates the
WHOLE value against the enum, so `include=config,thresholds` is rejected client-
side with "must be one of ..." before it reaches the backend — the root cause of
the QA "include-comma 400" (verified live through the beta MCP). It also forces
one call per sub-resource (a driver of the getLoadTest re-fetch thrash).

Drop the single-value enum on both; enumerate the options in the description (so
the model still sees them) and nudge combining into one call. The backend already
validates these values, so client-side validation isn't lost — it moves one hop.
@sourabhd-cbu
sourabhd-cbu merged commit efec81f into browserstack:feat/capability-registry Sep 8, 2026
1 check passed
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