The viewer's search box searches every column of a table - character columns by case-sensitive CONTAINS and numeric columns by exact equality - but against the JS mock backend the box did nothing, because the viewdata mock ignored SEARCHTYPE/SEARCHVAL (and FILTER_RK) entirely. Mock changes (sas/mocks/sasjs/services/public/viewdata.js): - apply the stored filter first via mpeFilterMaster, mirroring %mpe_filtermaster(VIEW,...) in viewdata.sas, and return its WHERE text as sasparams.FILTER_TEXT (previously hard-coded blank, so the viewer's info bar never showed a clause and the filter was never applied to the rows) - mirror %mp_searchdata: CHAR = case-sensitive CONTAINS across every character column, NUM = exact equality across every numeric column, only CHAR/NUM trigger a search, search values stripped of % & ; " like the SAS service - cap the rows the way the real service does (MAXROWS 500; NOBS is the uncapped filtered count for a normal view, the capped match count for a search) - a search with no matches now returns no rows, so the client shows its "No data found with given conditions" panel; the single-empty-row fallback stays for the normal-view-empty-table case Mock data (sas/mocks/sasjs/services/admin/makedata.js): - new MPE_X_SEARCH demo table: 1000 deterministic, obviously fictional deep-sea survey rows, registered in MPE_TABLES. Seeded so a partial search hits a value buried in the middle of a long text column, a value spanning two columns, a repeated exact numeric, and rows that deliberately do not match. New spec (client/cypress/e2e/full-table-search.cy.ts): - seven tests covering open/full view, partial character search, case sensitivity, numeric exact match, no match, search within a filter, and clearing the search. No artificial waits - state assertions only. - added to the Cypress spec list in .gitea/workflows/build.yaml Also adds the dc-cypress skill (.agents/skills/dc-cypress) covering the mock backend setup, the spec conventions, the selectors that actually work in the viewer filter modal, and the fixed 1280x720 video capture.