Skip to content

Large projects

  • Search in cases is full-text (SQLite FTS5): title, preconditions, steps, expected results and tags; each word matches by its beginning (“pay” finds “payment”, “payments”), case and ё/е do not matter. The best matches come first, matches are highlighted, and for matches in steps a piece of the text is shown. A key (SHOP-12) or a number puts its case first.
  • Lists of cases and runs come in pages (?limit=&offset=, the total in the X-Total-Count header; without limit — the whole list, as before). A long case list loads more while scrolling, and only the visible rows are drawn.
  • Load test set: pnpm --filter @tsmc/server bench creates (once, in data/bench.db, about 30 s) a project with 20,000 cases and 500 runs (86,000 results) and measures key pages and operations; in CI it is a separate check. Median after warm-up on an ordinary laptop:
Page or operation Time
case list (a page), search, filters 1–36 ms
a run of 300 cases, run report, run list 3–42 ms
six-month dashboard, hygiene, pick by changes 190–230 ms
CSV export, tsmc pull of the whole project 0.7 s
tsmc push --dry-run of the whole project 2.3 s
import preview of 1,000 rows 0.4 s

The duplicate search of “Hygiene” compares the texts of all cases (about a second for 20,000); the result is kept in memory until cases change and is computed right after the server starts.