run-tests
GitHub用于执行测试套件,包括本地或Daytona环境下的E2E测试、核心旅程验证及跳过用例排查。
Trigger Scenarios
Install
npx skills add different-ai/openwork --skill run-tests -g -y
SKILL.md
Frontmatter
{
"name": "run-tests",
"description": "Run the tests, run one spec, run e2e locally or on Daytona, investigate a skipped spec. Use for executing @openwork\/testkit agent-first verification."
}
Skill: Run Tests
Run the landable tree
- Check out the exact PR head that will land. After any rebase or cherry-pick, discard the old verdict and run again.
- Run one test at a time so each failure and ambient test evidence has one owner.
Choose the execution environment
pnpm evals:e2e <slug>
The CLI prints the placement and reason; copy that line into the report. Use
--local only when the user asks for local. --daytona requires Daytona. Never
switch lanes to turn a red Daytona run green.
Know what each placement runs before reading a verdict:
- Daytona (the default when the
daytonaCLI is logged in) buildsOPENWORK_EVAL_REF, which defaults todev, not your working tree. To test a branch, push it and exportOPENWORK_EVAL_REF=$(git rev-parse HEAD); add--strict-refso a mismatch fails instead of warning. --localruns your working tree. A spec whose world usesappWebstays in headless Chrome. A spec whose world usesdesktop(seed.desktop,app()) opens an Electron window that takes focus on this computer; run those on Daytona unless the user asks for a local window.
Run the core journey
The test every PR runs. Its world is a Freestyle VM, so this needs only the evals install and the Freestyle key:
FREESTYLE_API_KEY="$(infisical secrets get FREESTYLE_API_KEY --env dev --path /openwork-ops --plain --silent)" \
node evals/bin/evals.mjs core/core-chat.e2e.test.ts --local --engine v1 --surface web
It runs against the pushed HEAD commit; push first. After changing the world
itself, run node evals/scripts/check-freestyle-world.ts --base <sha> instead.
Prepare local fallback
pnpm --filter @openwork/types build
pnpm --filter @openwork-ee/den-db build
pnpm --filter @openwork/email build
pnpm dev:den:mysql
- Local
server()requires MySQL at127.0.0.1:3306. - Build those workspace dependencies before local Den; otherwise den-api imports can fail.
- If the checkout path contains spaces, set
OPENWORK_EVAL_SURFACES_DIRto a space-free path before E2E tests. node-gyp and electron-rebuild require it. - Local Electron profiles, and the
electron.loginside them, are removed when a journey ends. SetOPENWORK_EVAL_SURFACE_LOGS_DIRto a directory outside the surfaces directory to keep a copy of each log; the packaged smoke does.
Choose one lane
- Run one app/Den-driving E2E test:
pnpm evals:e2e <name>
- The CLI owns placement and prints
placement: <daytona|local> (<reason>).
Match the runtime
Check what runtime the changed code ships on before trusting a green run.
apps/server runs on Bun in evals; Desktop runs that same code on Electron's
Node (undici). If the change touches fetch, streams, signals, GC, or timers,
run it on the shipping runtime too:
ELECTRON_RUN_AS_NODE=1 apps/desktop/node_modules/electron/dist/Electron.app/Contents/MacOS/Electron --expose-gc <script>
A green run on the wrong runtime is not evidence.
Read the verdict
- Record the exact command, exit code, and passed/failed/skipped counts.
- Report each skip as
skipped — needs: X; never call it passed. A green command containing skips makes the overall verdictIncomplete. - Use
Passed,Incomplete, orFailedfor the overall result.
Iterate, then cold-boot
- While iterating, reuse a warm Den with
OPENWORK_EVAL_DEN_API_URL. - Before declaring
Passed, remove the reuse override and cold-boot throughserver()on the same commit. - Inject secrets with
infisical run --silent --; never print or echo values.
Version History
-
b73f6c6
Current 2026-10-19 21:57
精简E2E至九个核心旅程,将安全规则迁移为API测试,重构测试目录结构并引入新的验证技能。
-
c26be48
2026-09-23 01:45
新增“匹配运行时”步骤,强调在Bun和Electron Node环境下分别验证,防止因运行时差异导致的误判。
- ff5d298 2026-08-20 11:36


