Second CI run put the spec at 2 passing / 5 failing, and the five failures were one more stale assumption: cy.select() matches an option's text against the whole label, and the labels carry a suffix - the option for the Excel writer is "Excel (.xlsx)", not "Excel". Every format is now chosen by the option's value (EXCEL, SAS, SAS_DDL, TSQL_DDL, PGSQL_DDL), which the template sets and which does not change when a label gains or loses a qualifier. Also the review points on this PR: - attachExcelFile starts from label[for="file-upload"] instead of .buttonBar button:last-child, and submitExcel no longer takes a callback that nothing passed. - test 1 asserts on the download button whose id is the table it submitted: the stage URL carries the id, so the assertion names its own row and asserts one match, instead of indexing into every match on the screen. - the comment in cypress-specs.sh no longer claims the spec depends on approvals left by earlier specs - it seeds its own - and says why it is appended.