QVAC-23575 chore[bc]: add @qvac/test-suite as a monorepo package - #4082
Merged
Conversation
Contributor
Review StatusCurrent Status: ✅ APPROVED |
Contributor
Workflow security (shadow mode)zizmor found 1074 finding(s) in Findings are annotated inline on the changed files and listed in the job summary. Reproduce locally: pipx run zizmor==1.27.0 --offline .github/ |
Contributor
License compliance — findings detected (warn-only)Critical: 0 · High: 5 · Medium: 0
How to resolve a blocking finding:
Warn-only (shadow) mode — this check does not block merges yet. Updated automatically by the canonical license compliance workflow. NOTICE presence (advisory)Missing NOTICE (advisory, does not block):
|
This was referenced Aug 26, 2026
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Moves the test-orchestration framework out of tetherto/qvac-test-suite into packages/test-suite, flattening the former framework/ directory, and registers it as a first-class SDK-pod package: SDK Pod Checks, the release guard, GPR-dev / npm-release publishing and the changelog tooling now cover it like @qvac/rag and @qvac/logging. Renames the package from @qvac/qvac-test-suite to @qvac/test-suite, dropping the duplicated scope word (GPR: @tetherto/test-suite-mono). The directory name now equals the release slug, so package-paths.cjs resolves it with no override. All four names stay recognised at runtime, so a consumer pinned to a released 0.10.x keeps resolving. Publishing follows the prebuilt-dist pattern used by rag/logging/error: the package ships only compiled output and deliberately has no `prepare` script, so dist is compiled once in a dedicated build job and every publish job downloads it and publishes with NPM_CONFIG_IGNORE_SCRIPTS=true. This matches how the standalone repo published before the fold. Nothing consumes the package yet — packages/sdk/e2e keeps its published @qvac/qvac-test-suite dependency. Migrating that consumer, and the test-sdk.yml source selector that goes with it, is a follow-up. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Victor-Rodzko
force-pushed
the
feature-test-suite-fold
branch
from
August 26, 2026 12:05
680aecf to
89bb470
Compare
arun-mani-j
approved these changes
Aug 26, 2026
opaninakuffo
approved these changes
Aug 26, 2026
Proletter
approved these changes
Aug 26, 2026
lauripiisang
approved these changes
Aug 26, 2026
Victor-Rodzko
had a problem deploying
to
release
August 26, 2026 14:27 — with
GitHub Actions
Failure
Victor-Rodzko
had a problem deploying
to
release
August 26, 2026 14:27 — with
GitHub Actions
Failure
This was referenced Aug 26, 2026
Victor-Rodzko
added a commit
that referenced
this pull request
Aug 28, 2026
Switches packages/sdk/e2e from @qvac/qvac-test-suite to @qvac/test-suite ^0.11.0 — the same framework, published from this monorepo since the fold in #4082 — and renames the import specifier across the e2e suite. Adds a test-suite-source input (manifest | branch | npm) plus test-suite-version to test-sdk.yml, mirroring the existing inference-source selector. A new prepare-test-suite job resolves the framework once per run and .github/actions/sdk-e2e-prepare-test-suite applies it before each consumer install, so an SDK change can be tested against an unreleased framework change without publishing. PRs touching packages/test-suite run their e2e suite in branch mode. The new action is added to all five sparse-checkout blocks across test-node-sdk.yml, test-android-sdk.yml and test-ios-sdk.yml; packages/test-suite itself is only checked out by the prepare-test-suite job, which is the sole place that packs it. The report actions gain a test-suite-provenance input so run summaries state which framework build was used. Callers that invoke the platform workflows directly without the new inputs — coload-smoke-mobile.yml calls test-android-sdk.yml — resolve as `manifest`, which now installs the published range as-is. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Victor-Rodzko
added a commit
that referenced
this pull request
Aug 28, 2026
Switches packages/sdk/e2e from @qvac/qvac-test-suite to @qvac/test-suite ^0.11.0 — the same framework, published from this monorepo since the fold in #4082 — and renames the import specifier across the e2e suite. Adds a test-suite-source input (manifest | branch | npm) plus test-suite-version to test-sdk.yml, mirroring the existing inference-source selector. A new prepare-test-suite job resolves the framework once per run and .github/actions/sdk-e2e-prepare-test-suite applies it before each consumer install, so an SDK change can be tested against an unreleased framework change without publishing. PRs touching packages/test-suite run their e2e suite in branch mode. The new action is added to all five sparse-checkout blocks across test-node-sdk.yml, test-android-sdk.yml and test-ios-sdk.yml; packages/test-suite itself is only checked out by the prepare-test-suite job, which is the sole place that packs it. The report actions gain a test-suite-provenance input so run summaries state which framework build was used. Callers that invoke the platform workflows directly without the new inputs — coload-smoke-mobile.yml calls test-android-sdk.yml — resolve as `manifest`, which now installs the published range as-is. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎯 What problem does this solve?
@qvac/qvac-test-suitelived in a separate repository (tetherto/qvac-test-suite) while its only consumer ispackages/sdk/e2ehere. Every framework change needed a publish → bump → install round-trip, and CI had no way to test an SDK change against an unreleased framework change.Part 1 of 2 for QVAC-23575. This PR only adds the package; migrating the SDK e2e consumer onto it is #4083, which is stacked on this branch.
📝 How is it solved?
Folded in as a normal SDK-pod package.
framework/is flattened intopackages/test-suite/and registered insdk-pod-checks.json, the release-guard pod list,pr-validation-sdk-podpaths,teams/sdk.json, the SDK-pod Cursor rules andpr-test-sdk.mjs. It now publishes exactly like@qvac/ragand@qvac/logging.Renamed to
@qvac/test-suite, dropping the duplicated scope word (GPR:@tetherto/test-suite-mono). The directory name now equals the release slug, soscripts/sdk/package-paths.cjsresolves it with no override.Publishing uses the prebuilt-dist pattern introduced for rag/logging/error in #4055. This package ships only compiled output and deliberately has no
preparescript, sodistis built once in a dedicatedbuildjob and every publish job downloads it and publishes withNPM_CONFIG_IGNORE_SCRIPTS=true. This also matches how the standalone repo published before the fold.Nothing consumes the package yet.
packages/sdk/e2ekeeps its published@qvac/qvac-test-suitedependency, so this PR is additive and cannot affect the SDK e2e suite.🧪 How was this verified?
npm run check/typecheck/buildclean inpackages/test-suite.npm pack --dry-runshipsdist/+templates/+LICENSE+NOTICE+README.md— 104 entries, no stale build output.file://into a clean consumer, andqvac-test --versionworks from it.actionlintstructural gate clean; 97/97 CI policy tests pass.Because the gate reads its package config from the base commit, the new package's own
SDK Pod Checksdo not run on this PR (documented first-add exemption). They were run locally instead. Once this lands, every later PR touching the package is gated.💥 Breaking Changes
The npm package is renamed
@qvac/qvac-test-suite→@qvac/test-suite; the GPR dev build is renamed@tetherto/qvac-test-suite→@tetherto/test-suite-mono.BEFORE:
{ "dependencies": { "@qvac/qvac-test-suite": "^0.10.3" } }AFTER:
{ "dependencies": { "@qvac/test-suite": "^0.11.0" } }No consumer moves in this PR —
packages/sdk/e2ekeeps its published@qvac/qvac-test-suitedependency, and the migration above lands in #4083.The old package stays installable and will be deprecated, not unpublished, so SDK release branches pinned to a released
0.10.xkeep resolving. The framework still recognises all four names when resolving the installed package for mobile scaffolding and when externalising consumer test definitions, so a mixed setup during migration resolves correctly.📦 Package Surface Changes
New package
@qvac/test-suite(bin: qvac-test, exports.and./mobile). The runtime API is unchanged from@qvac/qvac-test-suite@0.10.2— only the package name moved.publishConfig.access: publicis set because the new name is a brand-new scoped package and would otherwise default to restricted on first publish.🚀 Workflow / Publish Changes
New
.github/workflows/trigger-reusable-lib-test-suite.yml: release-merge-guard, GPR dev/feature/tmp publishing, npm release publishing and the release tag. Copied fromtrigger-reusable-lib-rag.ymlpost-#4055, with npm instead of bun for the build job.Merging this to
mainpublishes a GPR dev build. Pushes to thisfeature-*branch publish a GPRfeaturebuild, which is a useful early smoke test of the new publish pipeline before the real release.🔄 Migration Notes
Before cutting
release-test-suite-0.11.0: an npm Trusted Publisher must exist for@qvac/test-suiteontetherto/qvac, workflowtrigger-reusable-lib-test-suite.yml, environmentnpm. No code can do this, and the first publish fails without it.📚 Docs Changes
packages/test-suite/README.md,CHANGELOG.md,docs/repository-layout.md,docs/architecture/ARCHITECTURE.md,docs/ci/TEAMS.md..cursor/rules/framework/*.mdcare ported to.cursor/rules/sdk/test-suite/*.mdc, rewritten for monorepo context, with two documented inaccuracies corrected:api-exportsomittedtestReloadSchema/startNodeMemoryPoller/startDesktopMemoryPoller, andarchitecturedescribed a{repo}-{branch}-{commit}-{timestamp}runId the code never implements (therunIdStrategyconfig field is declared but never read — flagged in the rule, tracked as a separate task).The
qts-*skills are dropped in favour of the existingqv-sdk-pr-create/qv-pr-review/qv-skill-list.🤖 Generated with Claude Code