Skip to content

CC-39844 Track the Robot test migrations with generated matrices - #1092

Draft
stereomon wants to merge 12 commits into
masterfrom
feature/cc-39844-migration-matrices
Draft

CC-39844 Track the Robot test migrations with generated matrices#1092
stereomon wants to merge 12 commits into
masterfrom
feature/cc-39844-migration-matrices

Conversation

@stereomon

Copy link
Copy Markdown
Collaborator

Adds test-inventory/migrations/ — the tracking layer for retiring Robot Framework. Test-only, no
production or CI code touched.

Two matrices, one row per canonical scenario (variant clones collapse onto their leader):

Matrix Target repo Scenarios Verdicts
robot-api-to-codeception spryker/suite 1,721 MIGRATE 1,285 · REVIEW 418 · undecided 18
robot-ui-to-cypress spryker/cypress-tests 105 MIGRATE 74 · REVIEW 23 · DROP 4 · RESHAPE 3 · OBSOLETE 1

decisions.jsonl and domains.yaml are the only hand-edited files; the matrices, the per-domain
checklists and PROGRESS.md regenerate. Migration status is observed by scan.py from both
working trees — no one ticks a box by hand.

Read test-inventory/migrations/README.md for how to execute a batch, and PROGRESS.md for the
current state.

Jira: CC-39844 (sub-task of
CC-39273) — design rationale and the canonical
domain taxonomy are documented there.

Test plan

cd test-inventory/migrations
python3 -m pip install -r requirements.txt
python3 build.py --check && python3 render.py --check && python3 gate.py

gate.py prints gates clean on this branch. G1 (every inventory leader appears in exactly one
matrix), G3 (a recorded CI run implies a present target) and G4 (a skipped target never counts as
ported) all pass. Wiring the gates into CI is follow-up work, not part of this PR.

stereomon added 11 commits May 29, 2026 13:09
Deterministic extract + thin AI canonical-helper map + enrich pipeline.
Schema v2: type/subsystems/auth/variant, dup_of for variant clones,
mutation for negative API tests, cross-framework migration-helper-map.
Generated per-scenario matrices with verdicts, per-domain PR checklists, a
progress rollup and the drift gates that keep them honest.

- 1721 API scenarios: 1285 MIGRATE, 418 REVIEW (contract already asserted in a
  Glue Cest, needs confirmation), 18 undecided (no parseable contract).
- 105 UI scenarios: 74 MIGRATE, 23 REVIEW, 4 DROP, 3 RESHAPE, 1 OBSOLETE.
- Canonical 35-domain taxonomy shared with the suite and cypress-tests matrices.
The rollup led with a verdict total that never moves, so a finished matrix still read as work outstanding. Lead with the remaining count instead, and keep Prettier off the matrix tree: it is shared verbatim across three repos whose configs disagree.
The matrices were built against a tree 76 commits behind master, so the
classifier scored the UI rows against a Cypress checkout 41 specs stale.
Re-running extract.py and enrich.py brings the inventory back in step:
5587 records, 653 Robot UI cases across the same 105 canonical scenarios.

Scanned against cypress-tests master rather than the matrix branch, so
target state reflects the specs that actually exist today.
The AI pass read a stale Cypress tree and produced MIGRATE 74 / REVIEW 23
/ DROP 4 / RESHAPE 3 / OBSOLETE 1 — effectively "nothing can be ignored".
Three corrections move work off the port list:

- 41 specs landed on cypress-tests master since the classifier ran, so
  eight rows shrink from "author a spec" to "extend a spec".
- Nine REVIEW rows overlap a sibling Robot leader rather than a Cypress
  spec, so the sibling's port retires them; they carry covered_by.
- Lane reality decides what a deletion costs: nothing runs tests/ui/**,
  and five scenarios are reachable only by manual dispatch.

Settles all 105 rows as decided_by human: 66 need a new spec, 22 are a
delta into an existing one, 9 fold into a sibling, 5 delete outright and
3 reshape with their API half moving to Codeception. customer/Reorder
stays REVIEW on purpose — the gated Cypress spec early-returns on the
repositories the Robot copies run in, so the deletion needs a look first.

Delta rows whose target spec already exists carry a planned test name.
Without one the scanner proves only that the file exists and the row
reads as already ported.
G2 was the one gate with no implementation: it needs a view of the diff, so
it could not live in gate.py, and until now it was a rule honoured by hand.
Both matrices retire Robot tests, so without it the tree grows faster than
the batches shrink it.

The check compares the test-case names in every changed .robot file against
the same file at the merge base and fails on any name that is new, reusing
extract.py's heading rule so the gate and the inventory agree on what counts
as a test. A pull request that genuinely needs one carries the
allow-new-source-test label, and the job then passes without running the
check rather than being skipped, so the status stays reportable.

This is the repository's first pull_request workflow -- every existing one is
workflow_dispatch only.
This was the last unsettled row and it blocked the customer batch. The
concern was that yves/reorder/reorder-product-offers.cy.ts early-returns on
repository b2c and b2b while the Robot copies run in b2c-mp and the plain
b2c shop. Reading both sides dissolves it.

The mp_b2c copy asserts merchant preservation, and that spec skips only b2c
and b2b, so it still runs in b2c-mp. The b2c copy asserts no merchant at
all despite its documentation line claiming otherwise -- it swaps that
assertion for a plain product-presence check -- and that is covered by
yves/reorder/reorder-concrete-products.cy.ts, which carries no repository
gate and whose isB2c() helper explicitly handles b2c and b2c-mp.

Both halves are covered in the repositories the copies run in, so the row
needs no port and no ungating. The UI matrix now has no unresolved verdict:
90 in scope, 15 needing no port.
This reverts commit 80a7d7f.

Robot is being retired, not maintained, so policing new Robot tests with a
new CI workflow is ceremony on a framework that is going away. The lane is
being removed from suite CI instead, which stops the tests running at all.

G2 stays documented in the migrations README as a rule honoured by hand.
@stereomon
stereomon force-pushed the feature/cc-39844-migration-matrices branch from a36e3ed to 1270425 Compare August 21, 2026 17:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant