cassette-update
SkillCloud & infraRe-record VCR cassettes against the local docker-compose stack or staging. Use when a test fails on a recorded HTTP response, after a backend API change, or when adding a test that makes a new request. Triggers on "update cassettes", "re-record cassettes", "regenerate fixtures", "cassette mismatch", "CannotOverwriteExistingCassetteException".
Use cassette-update in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add cassette-update and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the cassette-update skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by gooddata/gooddata-python-sdk in .claude/skills/cassette-update/SKILL.md and read by Ahel’s review.
When to use
A test fails because the recorded response no longer matches what the code sends or expects
— a changed request body, a new query parameter, a new field in the response, a
CannotOverwriteExistingCassetteException. The fix is to re-record, never to loosen the
assertion or point the test at a live host.
Cassettes live in packages/*/tests/**/fixtures/*.yaml.
Decide the source first
Local docker-compose is the default. Use it for anything already supported by the demo layout.
Staging is needed when the change depends on a backend that is newer than the images in
docker-compose.yaml — typically a field the local stack does not serve yet. Ask the user
which one applies if it is not obvious from the failure.
Local stack
-
Preconditions, both easy to forget:
aws ecr get-login-password | docker login --username AWS --password-stdin \ 020413372491.dkr.ecr.us-east-1.amazonaws.com mkdir -p build && echo "<license-key>" > build/licenseThe license key comes from the GoodData team;
auth-servicereads it from that path. Ask the user for it rather than inventing one. -
Start the stack and wait for bootstrap — this takes minutes, and recording before it finishes produces cassettes full of errors:
docker compose up -d docker compose wait metadata-organization-bootstrap data-loader create-ds layout-uploaderwaitblocks until those one-shot containers exit and returns their exit code. Do not usedocker compose logs -ffor this — it follows indefinitely and never returns, so watching forLayout upload completed successfully!that way hangs instead of continuing. To read what bootstrap did, rundocker compose logs layout-uploader(no-f) afterwards.The API is then on
http://localhost:3000. -
gooddata-fdwtests only:docker compose --profile fdw up -d. -
Delete only the cassettes you intend to re-record.
make remove-cassettesdeletes every cassette in the repo, which turns a one-test change into a repo-wide diff:rm packages/gooddata-sdk/tests/catalog/fixtures/<specific>.yamlUse
make remove-cassettes(or the per-packagemake -C packages/<name> remove-cassettes) only when the change really is repo-wide, such as a normalization change intests-support. -
Re-run the affected tests to record:
TEST_ENVS=py314 ADD_ARGS="-k <test-name>" make -C packages/<name> test -
Review the diff before staging it. A re-recorded cassette should differ only in the ways the change explains — a diff touching timestamps, host names or ordering everywhere means normalization is not doing its job, and that is a bug in
tests-support/vcrpy_utils.py, not something to commit around. -
docker compose down -vwhen finished. Without-vthe next run starts from dirty volumes.
Staging
Requires STAGING_ADMIN_TOKEN and STAGING_DS_PASSWORD, from a gitignored .env at the
repo root or passed on the command line.
make clean-staging # drop the previous run's data
make load-staging # upload the demo layout
make test-staging TEST_ENVS=py314 ADD_ARGS="-k <test-name>"
Recording against staging still writes real cassettes — that is the point. Never bypass VCR to make a staging run pass; a test that only works against a live host is a test nobody else can run.
Committing
Cassettes are large and numerous, so keep them in a commit of their own with a
chore(tests): or chore(cassettes): subject describing what changed in the API, rather
than mixing them into the code change. risk: nonprod.
Signals
- GitHub stars
- 36
- Forks
- 71
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
cassette-update- Source
- github.com/gooddata/gooddata-python-sdk
github.com/gooddata/gooddata-python-sdk
More in Cloud & infra
Skill · vercel-labs
More in Cloud & infraweb-design-guidelines
Skill · vercel-labs
More in Cloud & infraturborepo
Skill · vercel
More in Cloud & inframicrosoft-foundry
Skill · microsoft
More in Cloud & infraazure-diagnostics
Skill · microsoft
More in Cloud & infrauncloud
Skill · affaan-m
More in Cloud & infra