Testing

рдкрд░реАрдХреНрд╖рдг

OpenClaw рдореЗрдВ рддреАрди Vitest рд╕реВрдЯ (рдпреВрдирд┐рдЯ/рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди, e2e, рд▓рд╛рдЗрд╡) рдФрд░ Docker рд░рдирд░реЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕реЗрдЯ рд╣реИред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ "рд╣рдо рдХреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ" рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣реИ:

  • рд╣рд░ рд╕реВрдЯ рдХреНрдпрд╛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд╡рд░ рдХрд░рддрд╛)ред
  • рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ (рд▓реЛрдХрд▓, pre-push, рдбреАрдмрдЧрд┐рдВрдЧ) рдХреЗ рд▓рд┐рдП рдХреМрди-рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рд╣реИрдВред
  • рд▓рд╛рдЗрд╡ рдкрд░реАрдХреНрд╖рдг рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреИрд╕реЗ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдФрд░ рдореЙрдбрд▓/рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреИрд╕реЗ рдЪреБрдирддреЗ рд╣реИрдВред
  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдореЙрдбрд▓/рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░рд┐рдЧреНрд░реЗрд╢рди рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВред

рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░реЗрдВ

рдЕрдзрд┐рдХрддрд░ рджрд┐рдиреЛрдВ рдореЗрдВ:

  • рдкреВрд░рд╛ рдЧреЗрдЯ (push рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд): pnpm build && pnpm check && pnpm check:test-types && pnpm test
  • рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╡рд╛рд▓реА рдорд╢реАрди рдкрд░ рддреЗрдЬрд╝ рд▓реЛрдХрд▓ рдкреВрд░рд╛-рд╕реВрдЯ рд░рди: pnpm test:max
  • рдкреНрд░рддреНрдпрдХреНрд╖ Vitest рд╡реЙрдЪ рд▓реВрдк: pnpm test:watch
  • рдкреНрд░рддреНрдпрдХреНрд╖ рдлрд╝рд╛рдЗрд▓ рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдЕрдм extension/channel рдкрд╛рде рднреА рд░реВрдЯ рдХрд░рддрд╛ рд╣реИ: pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts
  • рдЬрдм рдЖрдк рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдкрд╣рд▓реЗ рд▓рдХреНрд╖рд┐рдд рд░рди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред
  • Docker-backed QA рд╕рд╛рдЗрдЯ: pnpm qa:lab:up
  • Linux VM-backed QA рд▓реЗрди: pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline

рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЫреВрддреЗ рд╣реИрдВ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд░реЛрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рдХрд╡рд░реЗрдЬ рдЧреЗрдЯ: pnpm test:coverage
  • E2E рд╕реВрдЯ: pnpm test:e2e

рдкрд░реАрдХреНрд╖рдг рдЕрд╕реНрдерд╛рдпреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░рд┐рдпрд╛рдБ

рдкрд░реАрдХреНрд╖рдг-рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА рдЕрд╕реНрдерд╛рдпреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП test/helpers/temp-dir.ts рдореЗрдВ рд╕рд╛рдЭрд╛ рд╣реЗрд▓реНрдкрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред рд╡реЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдлрд╝рд╛рдИ рдХреЛ рдЙрд╕реА рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЗрдлрд╝рд╕рд╛рдЗрдХрд▓ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ:

ts
  const tempDirs = useAutoCleanupTempDirTracker(afterEach); it("uses a temp workspace", () => {  const workspace = tempDirs.make("openclaw-example-");  // use workspace});

useAutoCleanupTempDirTracker(afterEach) рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреЛрдИ рдореИрдиреБрдЕрд▓ рд╕рдлрд╝рд╛рдИ рдореЗрдердб рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛; Vitest рд╣рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рд╕рдлрд╝рд╛рдИ рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реИред рдореМрдЬреВрджрд╛ рдирд┐рдЪрд▓реЗ-рд╕реНрддрд░ рдХреЗ рд╣реЗрд▓реНрдкрд░ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рдорд╛рдЗрдЧреНрд░реЗрдЯ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдСрдЯреЛ-рдХреНрд▓реАрдирд┐рдВрдЧ рдЯреНрд░реИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирдП рдореИрдиреБрдЕрд▓ makeTempDir, cleanupTempDirs, рдпрд╛ createTempDirTracker рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪреЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирдП рд╕реАрдзреЗ fs.mkdtemp* рдХреЙрд▓ рд╕реЗ рдмрдЪреЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдорд╛рдорд▓рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдЪреНрдЪреЗ temp-dir рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рди рдХрд░ рд░рд╣рд╛ рд╣реЛред рдЬрдм рдХрд┐рд╕реА рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕реАрдзреЗ temp рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЪрд╛рд╣рд┐рдП, рддреЛ рдареЛрд╕ рдХрд╛рд░рдг рдХреЗ рд╕рд╛рде рдСрдбрд┐рдЯ рдпреЛрдЧреНрдп allow рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ:

ts
// openclaw-temp-dir: allow verifies raw fs cleanup behaviorconst workspace = fs.mkdtempSync(prefix);

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП, node scripts/report-test-temp-creations.mjs рдЬреЛрдбрд╝реА рдЧрдИ diff рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдирдИ рд╕реАрдзреА temp-dir рд░рдЪрдирд╛ рдФрд░ рдирдП рдореИрдиреБрдЕрд▓ рд╕рд╛рдЭрд╛-рд╣реЗрд▓реНрдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдореМрдЬреВрджрд╛ рд╕рдлрд╝рд╛рдИ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдПред рдЗрд╕рдХрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реНрдХреЛрдк рдЬрд╛рдирдмреВрдЭрдХрд░ scripts/changed-lanes.mjs рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЙрд╕реА test-path рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдЕрд▓рдЧ test-helper рдлрд╝рд╛рдЗрд▓рдирд╛рдо рд╣реАрдпреВрд░рд┐рд╕реНрдЯрд┐рдХ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдФрд░ рд╕рд╛рдЭрд╛ рд╣реЗрд▓реНрдкрд░ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝рддрд╛ рд╣реИред check:changed рдмрджрд▓реЗ рд╣реБрдП test рдкрд╛рде рдХреЗ рд▓рд┐рдП рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ warning-only CI рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИ; рдирд┐рд╖реНрдХрд░реНрд╖ GitHub warning annotations рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд┐рдлрд▓рддрд╛рдПрдБ рдирд╣реАрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░/рдореЙрдбрд▓ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЪрд╛рд╣рд┐рдП):

  • рд▓рд╛рдЗрд╡ рд╕реВрдЯ (рдореЙрдбрд▓ + Gateway рдЯреВрд▓/рдЗрдореЗрдЬ probes): pnpm test:live
  • рдПрдХ рд▓рд╛рдЗрд╡ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдВрддрд┐рдкреВрд░реНрд╡рдХ рд▓рдХреНрд╖реНрдп рдХрд░реЗрдВ: pnpm test:live -- src/agents/models.profiles.live.test.ts
  • рд░рдирдЯрд╛рдЗрдо рдкреНрд░рджрд░реНрд╢рди рд░рд┐рдкреЛрд░реНрдЯ: рд╡рд╛рд╕реНрддрд╡рд┐рдХ openai/gpt-5.5 agent turn рдХреЗ рд▓рд┐рдП live_openai_candidate=true рдХреЗ рд╕рд╛рде рдпрд╛ Kova CPU/heap/trace artifacts рдХреЗ рд▓рд┐рдП deep_profile=true рдХреЗ рд╕рд╛рде OpenClaw Performance dispatch рдХрд░реЗрдВред рдЬрдм CLAWGRIT_REPORTS_TOKEN рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛ, рддреЛ рджреИрдирд┐рдХ scheduled рд░рди mock-provider, deep-profile, рдФрд░ GPT 5.5 рд▓реЗрди artifacts рдХреЛ openclaw/clawgrit-reports рдкрд░ publish рдХрд░рддреЗ рд╣реИрдВред mock-provider рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ source-level Gateway boot, memory, plugin-pressure, repeated fake-model hello-loop, рдФрд░ CLI startup numbers рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • Docker рд▓рд╛рдЗрд╡ рдореЙрдбрд▓ sweep: pnpm test:docker:live-models
    • рд╣рд░ рдЪреБрдирд╛ рдЧрдпрд╛ рдореЙрдбрд▓ рдЕрдм рдПрдХ text turn рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ file-read-style probe рдЪрд▓рд╛рддрд╛ рд╣реИред рдЬрд┐рди рдореЙрдбрд▓реЛрдВ рдХрд╛ metadata image input рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рдПрдХ рдЫреЛрдЯрд╛ image turn рднреА рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд probes рдХреЛ OPENCLAW_LIVE_MODEL_FILE_PROBE=0 рдпрд╛ OPENCLAW_LIVE_MODEL_IMAGE_PROBE=0 рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред
    • CI рдХрд╡рд░реЗрдЬ: рджреИрдирд┐рдХ OpenClaw Scheduled Live And E2E Checks рдФрд░ рдореИрдиреБрдЕрд▓ OpenClaw Release Checks рджреЛрдиреЛрдВ reusable live/E2E workflow рдХреЛ include_live_suites: true рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ provider рджреНрд╡рд╛рд░рд╛ sharded рдЕрд▓рдЧ Docker live model matrix jobs рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
    • рдХреЗрдВрджреНрд░рд┐рдд CI reruns рдХреЗ рд▓рд┐рдП, OpenClaw Live And E2E Checks (Reusable) рдХреЛ include_live_suites: true рдФрд░ live_models_only: true рдХреЗ рд╕рд╛рде dispatch рдХрд░реЗрдВред
    • рдирдП high-signal provider secrets рдХреЛ scripts/ci-hydrate-live-auth.sh рдФрд░ .github/workflows/openclaw-live-and-e2e-checks-reusable.yml рддрдерд╛ рдЙрд╕рдХреЗ scheduled/release callers рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
  • Native Codex bound-chat smoke: pnpm test:docker:live-codex-bind
    • Codex app-server path рдХреЗ рд╡рд┐рд░реБрджреНрдз Docker live lane рдЪрд▓рд╛рддрд╛ рд╣реИ, /codex bind рдХреЗ рд╕рд╛рде synthetic Slack DM bind рдХрд░рддрд╛ рд╣реИ, /codex fast рдФрд░ /codex permissions exercise рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ ACP рдХреЗ рдмрдЬрд╛рдп native Plugin binding рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ plain reply рдФрд░ image attachment route рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • Codex app-server harness smoke: pnpm test:docker:live-codex-harness
    • plugin-owned Codex app-server harness рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Gateway agent turns рдЪрд▓рд╛рддрд╛ рд╣реИ, /codex status рдФрд░ /codex models рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ image, Cron MCP, sub-agent, рдФрд░ Guardian probes exercise рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп Codex app-server рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╕рдордп sub-agent probe рдХреЛ OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0 рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред рдХреЗрдВрджреНрд░рд┐рдд sub-agent рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп probes рдЕрдХреНрд╖рдо рдХрд░реЗрдВ: OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 pnpm test:docker:live-codex-harness. рдпрд╣ sub-agent probe рдХреЗ рдмрд╛рдж рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0 рд╕реЗрдЯ рди рд╣реЛред
  • Codex on-demand install smoke: pnpm test:docker:codex-on-demand
    • packaged OpenClaw tarball рдХреЛ Docker рдореЗрдВ install рдХрд░рддрд╛ рд╣реИ, OpenAI API-key рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрдЕрдк рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ Codex Plugin рддрдерд╛ @openai/codex dependency рдорд╛рдВрдЧ рдкрд░ managed npm project root рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдИрдВред
  • Live Plugin tool dependency smoke: pnpm test:docker:live-plugin-tool
    • рд╡рд╛рд╕реНрддрд╡рд┐рдХ slugify dependency рдХреЗ рд╕рд╛рде fixture Plugin pack рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ npm-pack: рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ install рдХрд░рддрд╛ рд╣реИ, managed npm project root рдХреЗ рддрд╣рдд dependency рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ live OpenAI model рд╕реЗ Plugin tool call рдХрд░рдиреЗ рдФрд░ hidden slug рд▓реМрдЯрд╛рдиреЗ рдХреЛ рдХрд╣рддрд╛ рд╣реИред
  • Crestodian rescue command smoke: pnpm test:live:crestodian-rescue-channel
    • message-channel rescue command рд╕рддрд╣ рдХреЗ рд▓рд┐рдП opt-in belt-and-suspenders рдЬрд╛рдВрдЪред рдпрд╣ /crestodian status exercise рдХрд░рддрд╛ рд╣реИ, persistent model change queue рдХрд░рддрд╛ рд╣реИ, /crestodian yes reply рдХрд░рддрд╛ рд╣реИ, рдФрд░ audit/config write path рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • Crestodian planner Docker smoke: pnpm test:docker:crestodian-planner
    • configless container рдореЗрдВ Crestodian рдХреЛ PATH рдкрд░ fake Claude CLI рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ fuzzy planner fallback audited typed config write рдореЗрдВ translate рд╣реЛрддрд╛ рд╣реИред
  • Crestodian first-run Docker smoke: pnpm test:docker:crestodian-first-run
    • рдЦрд╛рд▓реА OpenClaw state dir рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, modern onboard Crestodian entrypoint рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, setup/model/agent/Discord Plugin + SecretRef writes рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, config validate рдХрд░рддрд╛ рд╣реИ, рдФрд░ audit entries рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╣реА Ring 0 setup path QA Lab рдореЗрдВ рднреА pnpm openclaw qa suite --scenario crestodian-ring-zero-setup рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рд╣реИред
  • Moonshot/Kimi cost smoke: MOONSHOT_API_KEY рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░, openclaw models list --provider moonshot --json рдЪрд▓рд╛рдПрдБ, рдлрд┐рд░ moonshot/kimi-k2.6 рдХреЗ рд╡рд┐рд░реБрджреНрдз isolated openclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --json рдЪрд▓рд╛рдПрдБред рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ JSON Moonshot/K2.6 рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ assistant transcript normalized usage.cost рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

QA-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдирд░

рдЬрдм рдЖрдкрдХреЛ QA-lab рдпрдерд╛рд░реНрдерд╡рд╛рдж рдЪрд╛рд╣рд┐рдП, рдпреЗ рдХрдорд╛рдВрдб рдореБрдЦреНрдп рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд╕рд╛рде рдмреИрдарддреЗ рд╣реИрдВ:

CI QA Lab рдХреЛ dedicated workflows рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред Agentic parity QA-Lab - All Lanes рдФрд░ release validation рдХреЗ рддрд╣рдд nested рд╣реИ, standalone PR workflow рдирд╣реАрдВред рд╡реНрдпрд╛рдкрдХ validation рдХреЛ rerun_group=qa-parity рдпрд╛ release-checks QA group рдХреЗ рд╕рд╛рде Full Release Validation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред Stable/default release checks exhaustive live/Docker soak рдХреЛ run_release_soak=true рдХреЗ рдкреАрдЫреЗ рд░рдЦрддреЗ рд╣реИрдВ; full profile soak рдХреЛ force рдХрд░рддрд╛ рд╣реИред QA-Lab - All Lanes main рдкрд░ nightly рдФрд░ manual dispatch рд╕реЗ mock parity lane, live Matrix lane, Convex-managed live Telegram lane, рдФрд░ Convex-managed live Discord lane рдХреЛ parallel jobs рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред Scheduled QA рдФрд░ release checks Matrix --profile fast рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ pass рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ Matrix CLI рдФрд░ manual workflow input default all рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ; manual dispatch all рдХреЛ transport, media, e2ee-smoke, e2ee-deep, рдФрд░ e2ee-cli jobs рдореЗрдВ shard рдХрд░ рд╕рдХрддрд╛ рд╣реИред OpenClaw Release Checks release approval рд╕реЗ рдкрд╣рд▓реЗ parity plus fast Matrix рдФрд░ Telegram lanes рдЪрд▓рд╛рддрд╛ рд╣реИ, release transport checks рдХреЗ рд▓рд┐рдП mock-openai/gpt-5.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрд╛рдХрд┐ рд╡реЗ deterministic рд░рд╣реЗрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп provider-plugin startup рд╕реЗ рдмрдЪреЗрдВред рдпреЗ live transport gateways memory search рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ; memory behavior QA parity suites рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рд░рд╣рддрд╛ рд╣реИред

Full release live media shards ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ ffmpeg рдФрд░ ffprobe рд╣реИрдВред Docker live model/backend shards рдЪрдпрдирд┐рдд commit рдкрд░ рдПрдХ рдмрд╛рд░ built shared ghcr.io/openclaw/openclaw-live-test:<sha> image рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рд░ shard рдореЗрдВ rebuild рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕реЗ OPENCLAW_SKIP_DOCKER_BUILD=1 рдХреЗ рд╕рд╛рде pull рдХрд░рддреЗ рд╣реИрдВред

  • pnpm openclaw qa suite
    • рд░реЗрдкреЛ-рд╕рдорд░реНрдерд┐рдд QA рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓рд╛рддрд╛ рд╣реИред
    • рдЪреБрдиреЗ рдЧрдП рдкрд░рд┐рджреГрд╢реНрдп рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп qa-evidence.json, qa-suite-summary.json, рдФрд░ qa-suite-report.md рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд flow, Vitest, рдФрд░ Playwright рдкрд░рд┐рджреГрд╢реНрдп рдЪрдпрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
    • рдЬрдм pnpm openclaw qa run --qa-profile <profile> рджреНрд╡рд╛рд░рд╛ рдбрд┐рд╕реНрдкреИрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪреБрдиреЗ рдЧрдП taxonomy profile scorecard рдХреЛ рдЙрд╕реА qa-evidence.json рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИред smoke-ci рдкрддрд▓рд╛ evidence рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ evidenceMode: "slim" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐-рдПрдВрдЯреНрд░реА execution рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред release curated release-readiness slice рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ; all рд╣рд░ рд╕рдХреНрд░рд┐рдп maturity category рдЪреБрдирддрд╛ рд╣реИ рдФрд░ explicit QA Profile Evidence workflow dispatches рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм full scorecard artifact рдХреА рдЬрд░реВрд░рдд рд╣реЛред
    • рдЕрд▓рдЧ-рдерд▓рдЧ gateway workers рдХреЗ рд╕рд╛рде default рд░реВрдк рд╕реЗ рдХрдИ рдЪреБрдиреЗ рдЧрдП рдкрд░рд┐рджреГрд╢реНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдЪрд▓рд╛рддрд╛ рд╣реИред qa-channel concurrency 4 рдкрд░ default рд╣реЛрддрд╛ рд╣реИ (рдЪреБрдиреЗ рдЧрдП scenario count рд╕реЗ рд╕реАрдорд┐рдд)ред worker count рдХреЛ tune рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП --concurrency <count> рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдкреБрд░рд╛рдиреЗ serial lane рдХреЗ рд▓рд┐рдП --concurrency 1ред
    • рдХрд┐рд╕реА рднреА рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ fail рд╣реЛрдиреЗ рдкрд░ non-zero exit рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк failing exit code рдХреЗ рдмрд┐рдирд╛ artifacts рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рддреЛ --allow-failures рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    • provider modes live-frontier, mock-openai, рдФрд░ aimock рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред aimock experimental fixture рдФрд░ protocol-mock coverage рдХреЗ рд▓рд┐рдП local AIMock-backed provider server рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ scenario-aware mock-openai lane рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдПред
  • pnpm openclaw qa coverage --match <query>
    • scenario IDs, titles, surfaces, coverage IDs, docs refs, code refs, plugins, рдФрд░ provider requirements рдЦреЛрдЬрддрд╛ рд╣реИ, рдлрд┐рд░ matching suite targets рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
    • QA Lab run рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХреЛ touched behavior рдпрд╛ file path рдкрддрд╛ рд╣реЛ рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ scenario рдирд╣реАрдВред рдпрд╣ рдХреЗрд╡рд▓ рд╕рд▓рд╛рд╣рдХрд╛рд░реА рд╣реИ; рдлрд┐рд░ рднреА рдмрджрд▓реЗ рдЬрд╛ рд░рд╣реЗ behavior рд╕реЗ mock, live, Multipass, Matrix, рдпрд╛ transport proof рдЪреБрдиреЗрдВред
  • pnpm test:plugins:kitchen-sink-live
    • QA Lab рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ live OpenAI Kitchen Sink plugin gauntlet рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ external Kitchen Sink package install рдХрд░рддрд╛ рд╣реИ, plugin SDK surface inventory рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, /healthz рдФрд░ /readyz probe рдХрд░рддрд╛ рд╣реИ, gateway CPU/RSS evidence рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, live OpenAI turn рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ adversarial diagnostics рдЬрд╛рдВрдЪрддрд╛ рд╣реИред OPENAI_API_KEY рдЬреИрд╕реЗ live OpenAI auth рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред hydrated Testbox sessions рдореЗрдВ, рдЬрдм openclaw-testbox-env helper рдореМрдЬреВрдж рд╣реЛ рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк Testbox live-auth profile source рдХрд░рддрд╛ рд╣реИред
  • pnpm test:gateway:cpu-scenarios
    • gateway startup bench рдФрд░ рдЫреЛрдЯрд╛ mock QA Lab scenario pack (channel-chat-baseline, memory-failure-fallback, gateway-restart-inflight-run) рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ combined CPU observation summary .artifacts/gateway-cpu-scenarios/ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред
    • default рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ sustained hot CPU observations flag рдХрд░рддрд╛ рд╣реИ (--cpu-core-warn plus --hot-wall-warn-ms), рдЗрд╕рд▓рд┐рдП рдЫреЛрдЯреЗ startup bursts metrics рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ minutes-long gateway peg regression рдЬреИрд╕реЗ рджрд┐рдЦреЗред
    • built dist artifacts рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдЬрдм checkout рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ fresh runtime output рди рд╣реЛ рддреЛ рдкрд╣рд▓реЗ build рдЪрд▓рд╛рдПрдВред
  • pnpm openclaw qa suite --runner multipass
    • рд╡рд╣реА QA suite disposable Multipass Linux VM рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рддрд╛ рд╣реИред
    • host рдкрд░ qa suite рдЬреИрд╕реА рд╣реА scenario-selection behavior рд░рдЦрддрд╛ рд╣реИред
    • qa suite рдЬреИрд╕реЗ рд╣реА provider/model selection flags рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
    • Live runs guest рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ supported QA auth inputs forward рдХрд░рддреЗ рд╣реИрдВ: env-based provider keys, QA live provider config path, рдФрд░ CODEX_HOME рдЬрдм рдореМрдЬреВрдж рд╣реЛред
    • Output dirs repo root рдХреЗ рдЕрдВрджрд░ рд╣реА рд░рд╣рдиреЗ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ guest mounted workspace рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рд▓рд┐рдЦ рд╕рдХреЗред
    • normal QA report + summary рдФрд░ Multipass logs .artifacts/qa-e2e/... рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред
  • pnpm qa:lab:up
    • operator-style QA work рдХреЗ рд▓рд┐рдП Docker-backed QA site рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
  • pnpm test:docker:npm-onboard-channel-agent
    • current checkout рд╕реЗ npm tarball рдмрдирд╛рддрд╛ рд╣реИ, Docker рдореЗрдВ globally install рдХрд░рддрд╛ рд╣реИ, non-interactive OpenAI API-key onboarding рдЪрд▓рд╛рддрд╛ рд╣реИ, default рд░реВрдк рд╕реЗ Telegram configure рдХрд░рддрд╛ рд╣реИ, startup dependency repair рдХреЗ рдмрд┐рдирд╛ packaged plugin runtime load рд╣реЛрдирд╛ verify рдХрд░рддрд╛ рд╣реИ, doctor рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ mocked OpenAI endpoint рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ local agent turn рдЪрд▓рд╛рддрд╛ рд╣реИред
    • Discord рдХреЗ рд╕рд╛рде рд╡рд╣реА packaged-install lane рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_NPM_ONBOARD_CHANNEL=discord рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • pnpm test:docker:session-runtime-context
    • embedded runtime context transcripts рдХреЗ рд▓рд┐рдП deterministic built-app Docker smoke рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ hidden OpenClaw runtime context visible user turn рдореЗрдВ leak рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп non-display custom message рдХреЗ рд░реВрдк рдореЗрдВ persisted рд╣реИ, рдлрд┐рд░ affected broken session JSONL seed рдХрд░рддрд╛ рд╣реИ рдФрд░ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ openclaw doctor --fix рдЙрд╕реЗ backup рдХреЗ рд╕рд╛рде active branch рдореЗрдВ rewrite рдХрд░рддрд╛ рд╣реИред
  • pnpm test:docker:npm-telegram-live
    • Docker рдореЗрдВ OpenClaw package candidate install рдХрд░рддрд╛ рд╣реИ, installed-package onboarding рдЪрд▓рд╛рддрд╛ рд╣реИ, installed CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Telegram configure рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕ installed package рдХреЛ SUT Gateway рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП live Telegram QA lane рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
    • wrapper checkout рд╕реЗ рдХреЗрд╡рд▓ qa-lab harness source mount рдХрд░рддрд╛ рд╣реИ; installed package dist, openclaw/plugin-sdk, рдФрд░ bundled plugin runtime рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ lane current checkout plugins рдХреЛ test рдХреЗ рдЕрдВрддрд░реНрдЧрдд package рдореЗрдВ mix рди рдХрд░реЗред
    • default OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@beta рд╣реЛрддрд╛ рд╣реИ; registry рд╕реЗ install рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп resolved local tarball test рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgz рдпрд╛ OPENCLAW_CURRENT_PACKAGE_TGZ рд╕реЗрдЯ рдХрд░реЗрдВред
    • default рд░реВрдк рд╕реЗ qa-evidence.json рдореЗрдВ repeated RTT timing emit рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES=20 рд╣реЛрддрд╛ рд╣реИред RTT run tune рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_NPM_TELEGRAM_RTT_SAMPLES, OPENCLAW_NPM_TELEGRAM_RTT_TIMEOUT_MS, рдпрд╛ OPENCLAW_NPM_TELEGRAM_RTT_MAX_FAILURES override рдХрд░реЗрдВред OPENCLAW_NPM_TELEGRAM_RTT_CHECKS sample рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Telegram QA check IDs рдХреА comma-separated list рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ; unset рд╣реЛрдиреЗ рдкрд░ default RTT-capable check telegram-mentioned-message-reply рд╣реИред
    • pnpm openclaw qa telegram рдЬреИрд╕реЗ рд╣реА Telegram env credentials рдпрд╛ Convex credential source рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред CI/release automation рдХреЗ рд▓рд┐рдП, OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex plus OPENCLAW_QA_CONVEX_SITE_URL рдФрд░ role secret рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ OPENCLAW_QA_CONVEX_SITE_URL рдФрд░ Convex role secret CI рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ Docker wrapper Convex рдЕрдкрдиреЗ рдЖрдк рдЪреБрдирддрд╛ рд╣реИред
    • Docker build/install work рд╕реЗ рдкрд╣рд▓реЗ wrapper host рдкрд░ Telegram рдпрд╛ Convex credential env validate рдХрд░рддрд╛ рд╣реИред OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1 рдХреЗрд╡рд▓ рддрдм рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрдм рдЬрд╛рдирдмреВрдЭрдХрд░ pre-credential setup debug рдХрд░ рд░рд╣реЗ рд╣реЛрдВред
    • OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer рдЗрд╕ lane рдХреЗ рд▓рд┐рдП рд╣реА shared OPENCLAW_QA_CREDENTIAL_ROLE override рдХрд░рддрд╛ рд╣реИред рдЬрдм Convex credentials рдЪреБрдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ role set рдирд╣реАрдВ рд╣реЛрддрд╛, wrapper CI рдореЗрдВ ci рдФрд░ CI рдХреЗ рдмрд╛рд╣рд░ maintainer рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
    • GitHub Actions рдЗрд╕ lane рдХреЛ manual maintainer workflow NPM Telegram Beta E2E рдХреЗ рд░реВрдк рдореЗрдВ expose рдХрд░рддрд╛ рд╣реИред рдпрд╣ merge рдкрд░ рдирд╣реАрдВ рдЪрд▓рддрд╛ред workflow qa-live-shared environment рдФрд░ Convex CI credential leases рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • GitHub Actions side-run product proof рдХреЗ рд▓рд┐рдП Package Acceptance рднреА expose рдХрд░рддрд╛ рд╣реИ рдПрдХ candidate package рдХреЗ рд╡рд┐рд░реБрджреНрдзред рдпрд╣ trusted ref, published npm spec, HTTPS tarball URL plus SHA-256, рдпрд╛ рджреВрд╕рд░реЗ run рд╕реЗ tarball artifact рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, normalized openclaw-current.tgz рдХреЛ package-under-test рдХреЗ рд░реВрдк рдореЗрдВ upload рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ smoke, package, product, full, рдпрд╛ custom lane profiles рдХреЗ рд╕рд╛рде existing Docker E2E scheduler рдЪрд▓рд╛рддрд╛ рд╣реИред рдЙрд╕реА package-under-test artifact рдХреЗ рд╡рд┐рд░реБрджреНрдз Telegram QA workflow рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП telegram_mode=mock-openai рдпрд╛ live-frontier рд╕реЗрдЯ рдХрд░реЗрдВред
    • Latest beta product proof:
bash
gh workflow run package-acceptance.yml --ref main \  -f source=npm \  -f package_spec=openclaw@beta \  -f suite_profile=product \  -f telegram_mode=mock-openai
  • Exact tarball URL proof рдХреЛ digest рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ public URL safety policy рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
bash
gh workflow run package-acceptance.yml --ref main \  -f source=url \  -f package_url=https://registry.npmjs.org/openclaw/-/openclaw-VERSION.tgz \  -f package_sha256=<sha256> \  -f suite_profile=package
  • Enterprise/private tarball mirrors explicit trusted-source policy рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
bash
gh workflow run package-acceptance.yml --ref main \  -f source=trusted-url \  -f trusted_source_id=enterprise-artifactory \  -f package_url=https://packages.example.internal:8443/artifactory/openclaw/openclaw-VERSION.tgz \  -f package_sha256=<sha256> \  -f suite_profile=package

source=trusted-url trusted workflow ref рд╕реЗ .github/package-trusted-sources.json рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ URL credentials рдпрд╛ workflow-input private-network bypass рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрджрд┐ named policy bearer auth declare рдХрд░рддреА рд╣реИ, рддреЛ fixed OPENCLAW_TRUSTED_PACKAGE_TOKEN secret configure рдХрд░реЗрдВред

  • Artifact proof рджреВрд╕рд░реЗ Actions run рд╕реЗ tarball artifact download рдХрд░рддрд╛ рд╣реИ:
bash
gh workflow run package-acceptance.yml --ref main \  -f source=artifact \  -f artifact_run_id=<run-id> \  -f artifact_name=<artifact-name> \  -f suite_profile=smoke
  • pnpm test:docker:plugins

    • Docker рдореЗрдВ current OpenClaw build pack рдФрд░ install рдХрд░рддрд╛ рд╣реИ, OpenAI configured рдХреЗ рд╕рд╛рде Gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ config edits рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ bundled channel/plugins enable рдХрд░рддрд╛ рд╣реИред
    • verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ setup discovery unconfigured downloadable plugins рдХреЛ absent рдЫреЛрдбрд╝рддреА рд╣реИ, рдкрд╣рд▓рд╛ configured doctor repair рд╣рд░ missing downloadable plugin рдХреЛ explicitly install рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ restart hidden dependency repair рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ред
    • рд╕рд╛рде рд╣реА known older npm baseline install рдХрд░рддрд╛ рд╣реИ, openclaw update --tag <candidate> рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Telegram enable рдХрд░рддрд╛ рд╣реИ, рдФрд░ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ candidate рдХрд╛ post-update doctor legacy plugin dependency debris рдХреЛ рдмрд┐рдирд╛ harness-side postinstall repair рдХреЗ clean рдХрд░рддрд╛ рд╣реИред
  • pnpm test:parallels:npm-update

    • Parallels guests рдХреЗ across native packaged-install update smoke рдЪрд▓рд╛рддрд╛ рд╣реИред рд╣рд░ рдЪреБрдирд╛ рдЧрдпрд╛ platform рдкрд╣рд▓реЗ requested baseline package install рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕реА guest рдореЗрдВ installed openclaw update command рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ installed version, update status, gateway readiness, рдФрд░ рдПрдХ local agent turn verify рдХрд░рддрд╛ рд╣реИред

    • рдПрдХ guest рдкрд░ iterate рдХрд░рддреЗ рд╕рдордп --platform macos, --platform windows, рдпрд╛ --platform linux рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред summary artifact path рдФрд░ per-lane status рдХреЗ рд▓рд┐рдП --json рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

    • OpenAI lane default рд░реВрдк рд╕реЗ live agent-turn proof рдХреЗ рд▓рд┐рдП openai/gpt-5.5 рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рджреВрд╕рд░реЗ OpenAI model рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ validate рдХрд░рддреЗ рд╕рдордп --model <provider/model> рдкрд╛рд╕ рдХрд░реЗрдВ рдпрд╛ OPENCLAW_PARALLELS_OPENAI_MODEL рд╕реЗрдЯ рдХрд░реЗрдВред

    • рд▓рдВрдмреЗ local runs рдХреЛ host timeout рдореЗрдВ wrap рдХрд░реЗрдВ рддрд╛рдХрд┐ Parallels transport stalls testing window рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛ consume рди рдХрд░ рд╕рдХреЗрдВ:

      bash
      timeout --foreground 150m pnpm test:parallels:npm-update -- --jsontimeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json
    • script nested lane logs /tmp/openclaw-parallels-npm-update.* рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред outer wrapper рдХреЗ hung рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ windows-update.log, macos-update.log, рдпрд╛ linux-update.log inspect рдХрд░реЗрдВред

    • Windows update cold guest рдкрд░ post-update doctor рдФрд░ package update work рдореЗрдВ 10 рд╕реЗ 15 рдорд┐рдирдЯ рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ; nested npm debug log advance рд╣реЛ рд░рд╣рд╛ рд╣реЛ рддреЛ рдпрд╣ рдЕрднреА рднреА healthy рд╣реИред

    • рдЗрд╕ aggregate wrapper рдХреЛ individual Parallels macOS, Windows, рдпрд╛ Linux smoke lanes рдХреЗ рд╕рд╛рде parallel рдореЗрдВ рди рдЪрд▓рд╛рдПрдВред рд╡реЗ VM state share рдХрд░рддреЗ рд╣реИрдВ рдФрд░ snapshot restore, package serving, рдпрд╛ guest gateway state рдкрд░ collide рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • post-update proof normal bundled plugin surface рдЪрд▓рд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ speech, image generation, рдФрд░ media understanding рдЬреИрд╕реА capability facades bundled runtime APIs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ loaded рд╣реЛрддреА рд╣реИрдВ, рднрд▓реЗ рд╣реА agent turn рд╕реНрд╡рдпрдВ рдХреЗрд╡рд▓ simple text response check рдХрд░реЗред

  • pnpm openclaw qa aimock

    • рд╕реАрдзреЗ protocol smoke рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ local AIMock provider server рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ.
  • pnpm openclaw qa matrix

    • Disposable Docker-backed Tuwunel homeserver рдХреЗ рд╡рд┐рд░реБрджреНрдз Matrix live QA lane рдЪрд▓рд╛рддрд╛ рд╣реИ. рдХреЗрд╡рд▓ source-checkout - packaged installs рдореЗрдВ qa-lab ship рдирд╣реАрдВ рд╣реЛрддрд╛.
    • рдкреВрд░рд╛ CLI, profile/scenario catalog, env vars, рдФрд░ artifact layout: Matrix QA.
  • pnpm openclaw qa telegram

    • env рд╕реЗ driver рдФрд░ SUT bot tokens рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ private group рдХреЗ рд╡рд┐рд░реБрджреНрдз Telegram live QA lane рдЪрд▓рд╛рддрд╛ рд╣реИ.
    • OPENCLAW_QA_TELEGRAM_GROUP_ID, OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN, рдФрд░ OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ. group id numeric Telegram chat id рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП.
    • Shared pooled credentials рдХреЗ рд▓рд┐рдП --credential-source convex рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ. default рд░реВрдк рд╕реЗ env mode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ pooled leases рдореЗрдВ opt in рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_QA_CREDENTIAL_SOURCE=convex рд╕реЗрдЯ рдХрд░реЗрдВ.
    • Defaults рдореЗрдВ canary, mention gating, command addressing, /status, bot-to-bot mentioned replies, рдФрд░ core native command replies рд╢рд╛рдорд┐рд▓ рд╣реИрдВ. mock-openai defaults deterministic reply-chain рдФрд░ Telegram final-message streaming regressions рдХреЛ рднреА cover рдХрд░рддреЗ рд╣реИрдВ. session_status рдЬреИрд╕реЗ optional probes рдХреЗ рд▓рд┐рдП --list-scenarios рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.
    • рдХреЛрдИ рднреА scenario fail рд╣реЛрдиреЗ рдкрд░ non-zero exit рдХрд░рддрд╛ рд╣реИ. рдЬрдм рдЖрдк failing exit code рдХреЗ рдмрд┐рдирд╛ artifacts рдЪрд╛рд╣рддреЗ рд╣реЛрдВ, рддреЛ --allow-failures рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.
    • рдПрдХ рд╣реА private group рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ bots рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ SUT bot Telegram username expose рдХрд░рддрд╛ рд╣реЛ.
    • Stable bot-to-bot observation рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ bots рдХреЗ рд▓рд┐рдП @BotFather рдореЗрдВ Bot-to-Bot Communication Mode enable рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ driver bot group bot traffic observe рдХрд░ рд╕рдХрддрд╛ рд╣реИ.
    • .artifacts/qa-e2e/... рдХреЗ рдЕрдВрддрд░реНрдЧрдд Telegram QA report, summary, рдФрд░ qa-evidence.json рд▓рд┐рдЦрддрд╛ рд╣реИ. Replying scenarios рдореЗрдВ driver send request рд╕реЗ observed SUT reply рддрдХ RTT рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ.

Mantis Telegram Live рдЗрд╕ lane рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ PR-evidence wrapper рд╣реИ. рдпрд╣ candidate ref рдХреЛ Convex-leased Telegram credentials рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддрд╛ рд╣реИ, redacted QA report/evidence bundle рдХреЛ Crabbox desktop browser рдореЗрдВ render рдХрд░рддрд╛ рд╣реИ, MP4 evidence record рдХрд░рддрд╛ рд╣реИ, motion-trimmed GIF generate рдХрд░рддрд╛ рд╣реИ, artifact bundle upload рдХрд░рддрд╛ рд╣реИ, рдФрд░ pr_number рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ Mantis GitHub App рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ inline PR evidence post рдХрд░рддрд╛ рд╣реИ. Maintainers рдЗрд╕реЗ Actions UI рд╕реЗ Mantis Scenario (scenario_id: telegram-live) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рд╕реАрдзреЗ pull request comment рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

text
@openclaw-mantis telegram@openclaw-mantis telegram scenario=telegram-status-command@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply

Mantis Telegram Desktop Proof PR visual proof рдХреЗ рд▓рд┐рдП agentic native Telegram Desktop before/after wrapper рд╣реИ. рдЗрд╕реЗ Actions UI рд╕реЗ freeform instructions рдХреЗ рд╕рд╛рде, Mantis Scenario (scenario_id: telegram-desktop-proof) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ PR comment рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

text
@openclaw-mantis telegram desktop proof

Mantis agent PR рдкрдврд╝рддрд╛ рд╣реИ, рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ Telegram-visible behavior рдмрджрд▓рд╛рд╡ рдХреЛ prove рдХрд░рддрд╛ рд╣реИ, baseline рдФрд░ candidate refs рдкрд░ real-user Crabbox Telegram Desktop proof lane рдЪрд▓рд╛рддрд╛ рд╣реИ, native GIFs рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рддрдХ iterate рдХрд░рддрд╛ рд╣реИ, paired motionPreview manifest рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ pr_number рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ Mantis GitHub App рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╣реА 2-column GIF table post рдХрд░рддрд╛ рд╣реИ.

  • pnpm openclaw qa mantis telegram-desktop-builder
    • Crabbox Linux desktop lease рдпрд╛ reuse рдХрд░рддрд╛ рд╣реИ, native Telegram Desktop install рдХрд░рддрд╛ рд╣реИ, leased Telegram SUT bot token рдХреЗ рд╕рд╛рде OpenClaw configure рдХрд░рддрд╛ рд╣реИ, gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ visible VNC desktop рд╕реЗ screenshot/MP4 evidence record рдХрд░рддрд╛ рд╣реИ.
    • Default --credential-source convex рд╣реИ рддрд╛рдХрд┐ workflows рдХреЛ рдХреЗрд╡рд▓ Convex broker secret рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ. pnpm openclaw qa telegram рдЬреИрд╕реЗ рд╣реА OPENCLAW_QA_TELEGRAM_* variables рдХреЗ рд╕рд╛рде --credential-source env рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.
    • Telegram Desktop рдХреЛ рдЕрднреА рднреА user login/profile рдЪрд╛рд╣рд┐рдП. bot token рдХреЗрд╡рд▓ OpenClaw configure рдХрд░рддрд╛ рд╣реИ. base64 .tgz profile archive рдХреЗ рд▓рд┐рдП --telegram-profile-archive-env <name> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ --keep-lease рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ VNC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмрд╛рд░ manually log in рдХрд░реЗрдВ.
    • Output directory рдХреЗ рдЕрдВрддрд░реНрдЧрдд mantis-telegram-desktop-builder-report.md, mantis-telegram-desktop-builder-summary.json, telegram-desktop-builder.png, рдФрд░ telegram-desktop-builder.mp4 рд▓рд┐рдЦрддрд╛ рд╣реИ.

Live transport lanes рдПрдХ standard contract рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВ рддрд╛рдХрд┐ рдирдП transports drift рди рдХрд░реЗрдВ; per-lane coverage matrix QA overview тЖТ Live transport coverage рдореЗрдВ рд╣реИ. qa-channel broad synthetic suite рд╣реИ рдФрд░ рдЙрд╕ matrix рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ.

Convex рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЭрд╛ Telegram credentials (v1)

рдЬрдм live transport QA рдХреЗ рд▓рд┐рдП --credential-source convex (рдпрд╛ OPENCLAW_QA_CREDENTIAL_SOURCE=convex) enabled рд╣реЛрддрд╛ рд╣реИ, QA lab Convex-backed pool рд╕реЗ exclusive lease acquire рдХрд░рддрд╛ рд╣реИ, lane рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЙрд╕ lease рдХреЛ heartbeat рдХрд░рддрд╛ рд╣реИ, рдФрд░ shutdown рдкрд░ lease release рдХрд░рддрд╛ рд╣реИ. Section name Discord, Slack, рдФрд░ WhatsApp support рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╣реИ; lease contract рд╕рднреА kinds рдореЗрдВ shared рд╣реИ.

Reference Convex project scaffold:

  • qa/convex-credential-broker/

Required env vars:

  • OPENCLAW_QA_CONVEX_SITE_URL (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://your-deployment.convex.site)
  • Selected role рдХреЗ рд▓рд┐рдП рдПрдХ secret:
    • OPENCLAW_QA_CONVEX_SECRET_MAINTAINER maintainer рдХреЗ рд▓рд┐рдП
    • OPENCLAW_QA_CONVEX_SECRET_CI ci рдХреЗ рд▓рд┐рдП
  • Credential role selection:
    • CLI: --credential-role maintainer|ci
    • Env default: OPENCLAW_QA_CREDENTIAL_ROLE (CI рдореЗрдВ default ci, рдЕрдиреНрдпрдерд╛ maintainer)

Optional env vars:

  • OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS (default 1200000)
  • OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS (default 30000)
  • OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS (default 90000)
  • OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS (default 15000)
  • OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX (default /qa-credentials/v1)
  • OPENCLAW_QA_CREDENTIAL_OWNER_ID (optional trace id)
  • OPENCLAW_QA_ALLOW_INSECURE_HTTP=1 local-only development рдХреЗ рд▓рд┐рдП loopback http:// Convex URLs allow рдХрд░рддрд╛ рд╣реИ.

рд╕рд╛рдорд╛рдиреНрдп operation рдореЗрдВ OPENCLAW_QA_CONVEX_SITE_URL рдХреЛ https:// рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП.

Maintainer admin commands (pool add/remove/list) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ OPENCLAW_QA_CONVEX_SECRET_MAINTAINER рдЖрд╡рд╢реНрдпрдХ рд╣реИ.

Maintainers рдХреЗ рд▓рд┐рдП CLI helpers:

bash
pnpm openclaw qa credentials doctorpnpm openclaw qa credentials add --kind telegram --payload-file qa/telegram-credential.jsonpnpm openclaw qa credentials list --kind telegrampnpm openclaw qa credentials remove --credential-id <credential-id>

Live runs рд╕реЗ рдкрд╣рд▓реЗ Convex site URL, broker secrets, endpoint prefix, HTTP timeout, рдФрд░ admin/list reachability рдХреЛ secret values print рдХрд┐рдП рдмрд┐рдирд╛ check рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП doctor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ. Scripts рдФрд░ CI utilities рдореЗрдВ machine-readable output рдХреЗ рд▓рд┐рдП --json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.

Default endpoint contract (OPENCLAW_QA_CONVEX_SITE_URL + /qa-credentials/v1):

  • POST /acquire
    • Request: { kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs }
    • Success: { status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? }
    • Exhausted/retryable: { status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }
  • POST /payload-chunk
    • Request: { kind, ownerId, actorRole, credentialId, leaseToken, index }
    • Success: { status: "ok", index, data }
  • POST /heartbeat
    • Request: { kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs }
    • Success: { status: "ok" } (рдпрд╛ empty 2xx)
  • POST /release
    • Request: { kind, ownerId, actorRole, credentialId, leaseToken }
    • Success: { status: "ok" } (рдпрд╛ empty 2xx)
  • POST /admin/add (рдХреЗрд╡рд▓ maintainer secret)
    • Request: { kind, actorId, payload, note?, status? }
    • Success: { status: "ok", credential }
  • POST /admin/remove (рдХреЗрд╡рд▓ maintainer secret)
    • Request: { credentialId, actorId }
    • Success: { status: "ok", changed, credential }
    • Active lease guard: { status: "error", code: "LEASE_ACTIVE", ... }
  • POST /admin/list (рдХреЗрд╡рд▓ maintainer secret)
    • Request: { kind?, status?, includePayload?, limit? }
    • Success: { status: "ok", credentials, count }

Telegram kind рдХреЗ рд▓рд┐рдП payload shape:

  • { groupId: string, driverToken: string, sutToken: string }
  • groupId numeric Telegram chat id string рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП.
  • admin/add kind: "telegram" рдХреЗ рд▓рд┐рдП рдЗрд╕ shape рдХреЛ validate рдХрд░рддрд╛ рд╣реИ рдФрд░ malformed payloads reject рдХрд░рддрд╛ рд╣реИ.

Telegram real-user kind рдХреЗ рд▓рд┐рдП payload shape:

  • { groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string }
  • groupId, testerUserId, рдФрд░ telegramApiId numeric strings рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП.
  • tdlibArchiveSha256 рдФрд░ desktopTdataArchiveSha256 SHA-256 hex strings рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП.
  • kind: "telegram-user" Mantis Telegram Desktop proof workflow рдХреЗ рд▓рд┐рдП reserved рд╣реИ. Generic QA Lab lanes рдХреЛ рдЗрд╕реЗ acquire рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП.

Broker-validated multi-channel payloads:

  • Discord: { guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string, voiceChannelId?: string }
  • WhatsApp: { driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string }

Slack lanes рднреА pool рд╕реЗ lease рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди Slack payload validation рдЕрднреА broker рдХреЗ рдмрдЬрд╛рдп Slack QA runner рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ. Slack rows рдХреЗ рд▓рд┐рдП { channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string } рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ.

QA рдореЗрдВ channel рдЬреЛрдбрд╝рдирд╛

рдирдП channel adapters рдХреЗ рд▓рд┐рдП architecture рдФрд░ scenario-helper names QA overview тЖТ Adding a channel рдореЗрдВ рд╣реИрдВ. Minimum bar: shared qa-lab host seam рдкрд░ transport runner implement рдХрд░реЗрдВ, plugin manifest рдореЗрдВ qaRunners declare рдХрд░реЗрдВ, openclaw qa <runner> рдХреЗ рд░реВрдк рдореЗрдВ mount рдХрд░реЗрдВ, рдФрд░ qa/scenarios/ рдХреЗ рдЕрдВрддрд░реНрдЧрдд scenarios author рдХрд░реЗрдВ.

Test suites (рдХрд╣рд╛рдБ рдХреНрдпрд╛ рдЪрд▓рддрд╛ рд╣реИ)

Suites рдХреЛ "рдмрдврд╝рддрд╛ realism" (рдФрд░ рдмрдврд╝рддреА flakiness/cost) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВ:

Unit / integration (default)

  • Command: pnpm test
  • Config: untargeted runs vitest.full-*.config.ts shard set рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ parallel scheduling рдХреЗ рд▓рд┐рдП multi-project shards рдХреЛ per-project configs рдореЗрдВ expand рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • Files: src/**/*.test.ts, packages/**/*.test.ts, рдФрд░ test/**/*.test.ts рдХреЗ рдЕрдВрддрд░реНрдЧрдд core/unit inventories; UI unit tests dedicated unit-ui shard рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ
  • Scope:
    • Pure unit tests
    • In-process integration tests (gateway auth, routing, tooling, parsing, config)
    • Known bugs рдХреЗ рд▓рд┐рдП deterministic regressions
  • Expectations:
    • CI рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ
    • Real keys рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ
    • Fast рдФрд░ stable рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
    • Resolver рдФрд░ public-surface loader tests рдХреЛ generated tiny plugin fixtures рдХреЗ рд╕рд╛рде broad api.js рдФрд░ runtime-api.js fallback behavior prove рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, real bundled plugin source APIs рдХреЗ рд╕рд╛рде рдирд╣реАрдВ. Real plugin API loads plugin-owned contract/integration suites рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП.

Native dependency policy:

  • Default test installs optional native Discord opus builds skip рдХрд░рддреЗ рд╣реИрдВ. Discord voice bundled libopus-wasm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ @discordjs/opus allowBuilds рдореЗрдВ disabled рд░рд╣рддрд╛ рд╣реИ рддрд╛рдХрд┐ local tests рдФрд░ Testbox lanes native addon compile рди рдХрд░реЗрдВ.
  • Native opus performance рдХреА рддреБрд▓рдирд╛ libopus-wasm benchmark repo рдореЗрдВ рдХрд░реЗрдВ, default OpenClaw install/test loops рдореЗрдВ рдирд╣реАрдВ. Default allowBuilds рдореЗрдВ @discordjs/opus рдХреЛ true рдкрд░ set рди рдХрд░реЗрдВ; рдЗрд╕рд╕реЗ unrelated install/test loops native code compile рдХрд░рддреЗ рд╣реИрдВ.
Projects, shards, and scoped lanes
  • рдмрд┐рдирд╛ рд▓рдХреНрд╖реНрдп рд╡рд╛рд▓рд╛ pnpm test рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдиреЗрдЯрд┐рд╡ рд░реВрдЯ-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд░рд╣ рдЫреЛрдЯреЗ shard configs (core-unit-fast, core-unit-src, core-unit-security, core-unit-ui, core-unit-support, core-support-boundary, core-contracts, core-bundled, core-runtime, agentic, auto-reply, extensions) рдЪрд▓рд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд▓реЛрдбреЗрдб рдорд╢реАрдиреЛрдВ рдкрд░ рдкреАрдХ RSS рдШрдЯрддрд╛ рд╣реИ рдФрд░ auto-reply/extension рдХрд╛рд░реНрдп рдЕрд╕рдВрдмрдВрдзрд┐рдд suites рдХреЛ рднреВрдЦрд╛ рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред
  • pnpm test --watch рдЕрдм рднреА рдиреЗрдЯрд┐рд╡ рд░реВрдЯ vitest.config.ts рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ multi-shard watch loop рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИред
  • pnpm test, pnpm test:watch, рдФрд░ pnpm test:perf:imports рд╕реНрдкрд╖реНрдЯ рдлрд╝рд╛рдЗрд▓/рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ scoped lanes рд╕реЗ рд░реВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts рдХреЛ рдкреВрд░реЗ рд░реВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ startup tax рдХреА рдХреАрдордд рдирд╣реАрдВ рдЪреБрдХрд╛рдиреА рдкрдбрд╝рддреАред
  • pnpm test:changed рдмрджрд▓реЗ рд╣реБрдП git paths рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╕реНрддреЗ scoped lanes рдореЗрдВ рдлреИрд▓рд╛рддрд╛ рд╣реИ: direct test edits, sibling *.test.ts рдлрд╝рд╛рдЗрд▓реЗрдВ, рд╕реНрдкрд╖реНрдЯ source mappings, рдФрд░ local import-graph dependentsред Config/setup/package edits рд╡реНрдпрд╛рдкрдХ tests рдирд╣реАрдВ рдЪрд▓рд╛рддреЗ, рдЬрдм рддрдХ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
  • pnpm check:changed рд╕рдВрдХрд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп smart local check gate рд╣реИред рдпрд╣ diff рдХреЛ core, core tests, extensions, extension tests, apps, docs, release metadata, live Docker tooling, рдФрд░ tooling рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдореЗрд▓ рдЦрд╛рддреЗ typecheck, lint, рдФрд░ guard commands рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ Vitest tests рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛; test proof рдХреЗ рд▓рд┐рдП pnpm test:changed рдпрд╛ рд╕реНрдкрд╖реНрдЯ pnpm test <target> рдЪрд▓рд╛рдПрдБред рдХреЗрд╡рд▓ release metadata рд╡рд╛рд▓реЗ version bumps targeted version/config/root-dependency checks рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдПрдХ guard рдХреЗ рд╕рд╛рде рдЬреЛ top-level version field рдХреЗ рдмрд╛рд╣рд░ package changes рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
  • Live Docker ACP harness edits focused checks рдЪрд▓рд╛рддреЗ рд╣реИрдВ: live Docker auth scripts рдХреЗ рд▓рд┐рдП shell syntax рдФрд░ live Docker scheduler dry-runред package.json changes рдХреЗрд╡рд▓ рддрдм рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм diff scripts["test:docker:live-*"] рддрдХ рд╕реАрдорд┐рдд рд╣реЛ; dependency, export, version, рдФрд░ рдЕрдиреНрдп package-surface edits рдЕрдм рднреА рд╡реНрдпрд╛рдкрдХ guards рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • agents, commands, plugins, auto-reply helpers, plugin-sdk, рдФрд░ рд╕рдорд╛рди pure utility areas рд╕реЗ import-light unit tests unit-fast lane рд╕реЗ рд░реВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ test/setup-openclaw-runtime.ts рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ; stateful/runtime-heavy рдлрд╝рд╛рдЗрд▓реЗрдВ рдореМрдЬреВрджрд╛ lanes рдкрд░ рд░рд╣рддреА рд╣реИрдВред
  • рдЪреБрдиреА рд╣реБрдИ plugin-sdk рдФрд░ commands helper source files рднреА changed-mode runs рдХреЛ рдЙрди light lanes рдореЗрдВ рд╕реНрдкрд╖реНрдЯ sibling tests рд╕реЗ map рдХрд░рддреА рд╣реИрдВ, рддрд╛рдХрд┐ helper edits рдЙрд╕ directory рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ heavy suite рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВред
  • auto-reply рдореЗрдВ top-level core helpers, top-level reply.* integration tests, рдФрд░ src/auto-reply/reply/** subtree рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд buckets рд╣реИрдВред CI reply subtree рдХреЛ agent-runner, dispatch, рдФрд░ commands/state-routing shards рдореЗрдВ рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ import-heavy bucket рдкреВрд░реЗ Node tail рдХрд╛ рдорд╛рд▓рд┐рдХ рди рдмрдиреЗред
  • рд╕рд╛рдорд╛рдиреНрдп PR/main CI рдЬрд╛рдирдмреВрдЭрдХрд░ extension batch sweep рдФрд░ release-only agentic-plugins shard рдХреЛ рдЫреЛрдбрд╝рддрд╛ рд╣реИред Full Release Validation release candidates рдкрд░ рдЙрди plugin/extension-heavy suites рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ Plugin Prerelease child workflow dispatch рдХрд░рддрд╛ рд╣реИред
Embedded runner coverage
  • рдЬрдм рдЖрдк message-tool discovery inputs рдпрд╛ compaction runtime context рдмрджрд▓реЗрдВ, coverage рдХреЗ рджреЛрдиреЛрдВ рд╕реНрддрд░ рдмрдирд╛рдП рд░рдЦреЗрдВред
  • pure routing рдФрд░ normalization boundaries рдХреЗ рд▓рд┐рдП focused helper regressions рдЬреЛрдбрд╝реЗрдВред
  • embedded runner integration suites рдХреЛ рд╕реНрд╡рд╕реНрде рд░рдЦреЗрдВ: src/agents/embedded-agent-runner/compact.hooks.test.ts, src/agents/embedded-agent-runner/run.overflow-compaction.test.ts, рдФрд░ src/agents/embedded-agent-runner/run.overflow-compaction.loop.test.tsред
  • рдпреЗ suites рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ scoped ids рдФрд░ compaction behavior рдЕрдм рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ run.ts / compact.ts paths рд╕реЗ рд╣реЛрдХрд░ рдмрд╣рддреЗ рд╣реИрдВ; рдХреЗрд╡рд▓ helper tests рдЙрди integration paths рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВред
Vitest pool and isolation defaults
  • Base Vitest config рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ threads рдкрд░ рд╕реЗрдЯ рд╣реИред
  • shared Vitest config isolate: false рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ root projects, e2e, рдФрд░ live configs рдореЗрдВ non-isolated runner рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • root UI lane рдЕрдкрдирд╛ jsdom setup рдФрд░ optimizer рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рднреА shared non-isolated runner рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
  • рд╣рд░ pnpm test shard shared Vitest config рд╕реЗ рд╡рд╣реА threads + isolate: false defaults рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред
  • scripts/run-vitest.mjs рдмрдбрд╝реЗ local runs рдХреЗ рджреМрд░рд╛рди V8 compile churn рдШрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Vitest child Node processes рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ --no-maglev рдЬреЛрдбрд╝рддрд╛ рд╣реИред stock V8 behavior рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_VITEST_ENABLE_MAGLEV=1 рд╕реЗрдЯ рдХрд░реЗрдВред
  • scripts/run-vitest.mjs рд╕реНрдкрд╖реНрдЯ non-watch Vitest runs рдХреЛ 5 рдорд┐рдирдЯ рддрдХ stdout рдпрд╛ stderr output рди рдЖрдиреЗ рдкрд░ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдЬрд╛рдирдмреВрдЭрдХрд░ silent investigation рдХреЗ рд▓рд┐рдП watchdog рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╣реЗрддреБ OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=0 рд╕реЗрдЯ рдХрд░реЗрдВред
Fast local iteration
  • pnpm changed:lanes рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ diff рдХрд┐рди architectural lanes рдХреЛ trigger рдХрд░рддрд╛ рд╣реИред
  • pre-commit hook рдХреЗрд╡рд▓ formatting рдХрд░рддрд╛ рд╣реИред рдпрд╣ formatted files рдХреЛ рдлрд┐рд░ рд╕реЗ stage рдХрд░рддрд╛ рд╣реИ рдФрд░ lint, typecheck, рдпрд╛ tests рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ред
  • handoff рдпрд╛ push рд╕реЗ рдкрд╣рд▓реЗ, рдЬрдм smart local check gate рдЪрд╛рд╣рд┐рдП, рддреЛ pnpm check:changed рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдПрдБред
  • pnpm test:changed рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╕реНрддреЗ scoped lanes рд╕реЗ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИред OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed рдХреЗрд╡рд▓ рддрдм рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм agent рдирд┐рд░реНрдгрдп рдХрд░реЗ рдХрд┐ рдХрд┐рд╕реА harness, config, package, рдпрд╛ contract edit рдХреЛ рд╕рдЪ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ Vitest coverage рдЪрд╛рд╣рд┐рдПред
  • pnpm test:max рдФрд░ pnpm test:changed:max рд╡рд╣реА routing behavior рд░рдЦрддреЗ рд╣реИрдВ, рдмрд╕ worker cap рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред
  • Local worker auto-scaling рдЬрд╛рдирдмреВрдЭрдХрд░ conservative рд╣реИ рдФрд░ host load average рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдкреАрдЫреЗ рд╣рдЯрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ concurrent Vitest runs рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рдиреБрдХрд╕рд╛рди рдХрд░рддреЗ рд╣реИрдВред
  • base Vitest config projects/config files рдХреЛ forceRerunTriggers рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ test wiring рдмрджрд▓рдиреЗ рдкрд░ changed-mode reruns рд╕рд╣реА рд░рд╣реЗрдВред
  • config рд╕рдорд░реНрдерд┐рдд hosts рдкрд░ OPENCLAW_VITEST_FS_MODULE_CACHE enabled рд░рдЦрддрд╛ рд╣реИ; рдпрджрд┐ direct profiling рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ cache location рдЪрд╛рд╣рд┐рдП, рддреЛ OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path рд╕реЗрдЯ рдХрд░реЗрдВред
Perf debugging
  • pnpm test:perf:imports Vitest import-duration reporting рдФрд░ import-breakdown output enabled рдХрд░рддрд╛ рд╣реИред
  • pnpm test:perf:imports:changed рд╡рд╣реА profiling view origin/main рдХреЗ рдмрд╛рдж рдмрджрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ scoped рдХрд░рддрд╛ рд╣реИред
  • Shard timing data .artifacts/vitest-shard-timings.json рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред Whole-config runs key рдХреЗ рд░реВрдк рдореЗрдВ config path рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; include-pattern CI shards shard name рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ filtered shards рдХреЛ рдЕрд▓рдЧ рд╕реЗ track рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  • рдЬрдм рдПрдХ hot test рдЕрдм рднреА рдЕрдкрдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп startup imports рдореЗрдВ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ, heavy dependencies рдХреЛ рд╕рдВрдХрд░реЗ local *.runtime.ts seam рдХреЗ рдкреАрдЫреЗ рд░рдЦреЗрдВ рдФрд░ рдЙрд╕ seam рдХреЛ рд╕реАрдзреЗ mock рдХрд░реЗрдВ, runtime helpers рдХреЛ рдХреЗрд╡рд▓ vi.mock(...) рд╕реЗ pass рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП deep-import рди рдХрд░реЗрдВред
  • pnpm test:perf:changed:bench -- --ref <git-ref> рдЙрд╕ committed diff рдХреЗ рд▓рд┐рдП routed test:changed рдХреА рддреБрд▓рдирд╛ native root-project path рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ wall time рддрдерд╛ macOS max RSS рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
  • pnpm test:perf:changed:bench -- --worktree current dirty tree рдХреЛ benchmark рдХрд░рддрд╛ рд╣реИ, changed file list рдХреЛ scripts/test-projects.mjs рдФрд░ root Vitest config рд╕реЗ рд░реВрдЯ рдХрд░рдХреЗред
  • pnpm test:perf:profile:main Vitest/Vite startup рдФрд░ transform overhead рдХреЗ рд▓рд┐рдП main-thread CPU profile рд▓рд┐рдЦрддрд╛ рд╣реИред
  • pnpm test:perf:profile:runner file parallelism disabled рдХреЗ рд╕рд╛рде unit suite рдХреЗ рд▓рд┐рдП runner CPU+heap profiles рд▓рд┐рдЦрддрд╛ рд╣реИред

Stability (gateway)

  • Command: pnpm test:stability:gateway
  • Config: vitest.gateway.config.ts, рдПрдХ worker рдкрд░ forced
  • Scope:
    • diagnostics рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ enabled рд░рдЦрддреЗ рд╣реБрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ loopback Gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
    • diagnostic event path рд╕реЗ synthetic gateway message, memory, рдФрд░ large-payload churn рдЪрд▓рд╛рддрд╛ рд╣реИ
    • Gateway WS RPC рдкрд░ diagnostics.stability query рдХрд░рддрд╛ рд╣реИ
    • diagnostic stability bundle persistence helpers cover рдХрд░рддрд╛ рд╣реИ
    • Assert рдХрд░рддрд╛ рд╣реИ рдХрд┐ recorder bounded рд░рд╣рддрд╛ рд╣реИ, synthetic RSS samples pressure budget рдХреЗ рдиреАрдЪреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ per-session queue depths рд╡рд╛рдкрд╕ zero рддрдХ drain рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
  • Expectations:
    • CI-safe рдФрд░ keyless
    • stability-regression follow-up рдХреЗ рд▓рд┐рдП narrow lane, рдкреВрд░реЗ Gateway suite рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ

E2E (repo aggregate)

  • Command: pnpm test:e2e
  • Scope:
    • gateway smoke E2E lane рдЪрд▓рд╛рддрд╛ рд╣реИ
    • mocked Control UI browser E2E lane рдЪрд▓рд╛рддрд╛ рд╣реИ
  • Expectations:
    • CI-safe рдФрд░ keyless
    • Playwright Chromium installed рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ

E2E (gateway smoke)

  • Command: pnpm test:e2e:gateway
  • Config: vitest.e2e.config.ts
  • Files: src/**/*.e2e.test.ts, test/**/*.e2e.test.ts, рдФрд░ bundled-plugin E2E tests extensions/ рдХреЗ рдЕрдВрддрд░реНрдЧрдд
  • Runtime defaults:
    • Vitest threads рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, isolate: false рдХреЗ рд╕рд╛рде, repo рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реБрдПред
    • adaptive workers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (CI: 2 рддрдХ, local: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 1)ред
    • console I/O overhead рдШрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ silent mode рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред
  • Useful overrides:
    • worker count force рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_WORKERS=<n> (16 рдкрд░ capped)ред
    • verbose console output рдлрд┐рд░ рд╕реЗ enabled рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_VERBOSE=1ред
  • Scope:
    • Multi-instance gateway end-to-end behavior
    • WebSocket/HTTP surfaces, node pairing, рдФрд░ heavier networking
  • Expectations:
    • CI рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ (рдЬрдм pipeline рдореЗрдВ enabled рд╣реЛ)
    • рд╡рд╛рд╕реНрддрд╡рд┐рдХ keys рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ
    • unit tests рд╕реЗ рдЕрдзрд┐рдХ moving parts (рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

E2E (Control UI mocked browser)

  • Command: pnpm test:ui:e2e
  • Config: test/vitest/vitest.ui-e2e.config.ts
  • Files: ui/src/**/*.e2e.test.ts
  • Scope:
    • Vite Control UI рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
    • Playwright рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Chromium page рдЪрд▓рд╛рддрд╛ рд╣реИ
    • Gateway WebSocket рдХреЛ deterministic in-browser mocks рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ
  • Expectations:
    • pnpm test:e2e рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ CI рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ
    • рд╡рд╛рд╕реНрддрд╡рд┐рдХ Gateway, agents, рдпрд╛ provider keys рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ
    • Browser dependency рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (pnpm --dir ui exec playwright install chromium)

E2E: OpenShell backend smoke

  • Command: pnpm test:e2e:openshell
  • File: extensions/openshell/src/backend.e2e.test.ts
  • Scope:
    • рд╕рдХреНрд░рд┐рдп local OpenShell gateway рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
    • temporary local Dockerfile рд╕реЗ sandbox рдмрдирд╛рддрд╛ рд╣реИ
    • рд╡рд╛рд╕реНрддрд╡рд┐рдХ sandbox ssh-config + SSH exec рдкрд░ OpenClaw рдХреЗ OpenShell backend рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
    • sandbox fs bridge рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ remote-canonical filesystem behavior рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ
  • Expectations:
    • рдХреЗрд╡рд▓ opt-in; default pnpm test:e2e run рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ
    • local openshell CLI рдФрд░ working Docker daemon рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ
    • рд╕рдХреНрд░рд┐рдп local OpenShell gateway рдФрд░ рдЙрд╕рдХрд╛ config source рдЖрд╡рд╢реНрдпрдХ рд╣реИ
    • isolated HOME / XDG_CONFIG_HOME рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ test sandbox рдХреЛ рдирд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ
  • Useful overrides:
    • broader e2e suite manually рдЪрд▓рд╛рддреЗ рд╕рдордп test enabled рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_OPENSHELL=1
    • non-default CLI binary рдпрд╛ wrapper script рдХреА рдУрд░ point рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell
    • registered gateway config рдХреЛ isolated test рдореЗрдВ expose рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_OPENSHELL_CONFIG_HOME=/path/to/config
    • host policy fixture рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ Docker gateway IP рдХреЛ override рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_E2E_OPENSHELL_HOST_IP=172.18.0.1

Live (real providers + real models)

  • рдХрдорд╛рдВрдб: pnpm test:live
  • рдХреЙрдиреНрдлрд╝рд┐рдЧ: vitest.live.config.ts
  • рдлрд╝рд╛рдЗрд▓реЗрдВ: src/**/*.live.test.ts, test/**/*.live.test.ts, рдФрд░ extensions/ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдмрдВрдбрд▓ рдХрд┐рдП рдЧрдП Plugin рд▓рд╛рдЗрд╡ рдЯреЗрд╕реНрдЯ
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ: pnpm test:live рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо (OPENCLAW_LIVE_TEST=1 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ)
  • рджрд╛рдпрд░рд╛:
    • "рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рджрд╛рддрд╛/рдореЙрдбрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЖрдЬ рд╕рдЪ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?"
    • рдкреНрд░рджрд╛рддрд╛ рдлрд╝реЙрд░реНрдореИрдЯ рдмрджрд▓рд╛рд╡, рдЯреВрд▓-рдХреЙрд▓рд┐рдВрдЧ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ, рдСрде рд╕рдорд╕реНрдпрд╛рдПрдВ, рдФрд░ рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрдХрдбрд╝рдирд╛
  • рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ:
    • рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ CI-рд╕реНрдерд┐рд░ рдирд╣реАрдВ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд╛рддрд╛ рдиреАрддрд┐рдпрд╛рдВ, рдХреЛрдЯрд╛, рдЖрдЙрдЯреЗрдЬ)
    • рдкреИрд╕реЗ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ / рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
    • "рд╕рдм рдХреБрдЫ" рдХреЗ рдмрдЬрд╛рдп рд╕реАрдорд┐рдд рдЙрдкрд╕рдореБрдЪреНрдЪрдп рдЪрд▓рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
  • рд▓рд╛рдЗрд╡ рд░рди рдкрд╣рд▓реЗ рд╕реЗ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреА рдЧрдИ API рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рд╕реНрдЯреЗрдЬ рдХрд┐рдП рдЧрдП рдСрде рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд▓рд╛рдЗрд╡ рд░рди рдлрд┐рд░ рднреА HOME рдХреЛ рдЕрд▓рдЧ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧ/рдСрде рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЯреЗрд╕реНрдЯ рд╣реЛрдо рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпреВрдирд┐рдЯ рдлрд╝рд┐рдХреНрд╕реНрдЪрд░ рдЖрдкрдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ ~/.openclaw рдХреЛ рдмрджрд▓ рди рд╕рдХреЗрдВред
  • OPENCLAW_LIVE_USE_REAL_HOME=1 рдХреЗрд╡рд▓ рддрдм рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрдм рдЖрдк рдЬрд╛рдирдмреВрдЭрдХрд░ рдЪрд╛рд╣рддреЗ рд╣реЛрдВ рдХрд┐ рд▓рд╛рдЗрд╡ рдЯреЗрд╕реНрдЯ рдЖрдкрдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • pnpm test:live рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╢рд╛рдВрдд рдореЛрдб рдкрд░ рд░рд╣рддрд╛ рд╣реИ: рдпрд╣ [live] ... рдкреНрд░рдЧрддрд┐ рдЖрдЙрдЯрдкреБрдЯ рд░рдЦрддрд╛ рд╣реИ рдФрд░ Gateway рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд▓реЙрдЧ/Bonjour рд╢реЛрд░ рдХреЛ рдореНрдпреВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд▓реЙрдЧ рд╡рд╛рдкрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ OPENCLAW_LIVE_TEST_QUIET=0 рд╕реЗрдЯ рдХрд░реЗрдВред
  • API рдХреБрдВрдЬреА рд░реЛрдЯреЗрд╢рди (рдкреНрд░рджрд╛рддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ): рдХреЙрдорд╛/рд╕реЗрдореАрдХреЛрд▓рди рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ *_API_KEYS рдпрд╛ *_API_KEY_1, *_API_KEY_2 рд╕реЗрдЯ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП OPENAI_API_KEYS, ANTHROPIC_API_KEYS, GEMINI_API_KEYS) рдпрд╛ OPENCLAW_LIVE_*_KEY рдХреЗ рдЬрд╝рд░рд┐рдП рдкреНрд░рддрд┐-рд▓рд╛рдЗрд╡ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ; рдЯреЗрд╕реНрдЯ рд░реЗрдЯ рд▓рд┐рдорд┐рдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
  • рдкреНрд░рдЧрддрд┐/Heartbeat рдЖрдЙрдЯрдкреБрдЯ:
    • рд▓рд╛рдЗрд╡ рд╕реВрдЯ рдЕрдм stderr рдкрд░ рдкреНрд░рдЧрддрд┐ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд▓рдВрдмреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЙрд▓ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд░рд┐рдп рджрд┐рдЦреЗрдВ, рднрд▓реЗ рд╣реА Vitest рдХрдВрд╕реЛрд▓ рдХреИрдкреНрдЪрд░ рд╢рд╛рдВрдд рд╣реЛред
    • vitest.live.config.ts Vitest рдХрдВрд╕реЛрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓рд╛рдЗрд╡ рд░рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рджрд╛рддрд╛/Gateway рдкреНрд░рдЧрддрд┐ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рддреБрд░рдВрдд рд╕реНрдЯреНрд░реАрдо рд╣реЛрдВред
    • рдбрд╛рдпрд░реЗрдХреНрдЯ-рдореЙрдбрд▓ Heartbeat рдХреЛ OPENCLAW_LIVE_HEARTBEAT_MS рд╕реЗ рдЯреНрдпреВрди рдХрд░реЗрдВред
    • Gateway/рдкреНрд░реЛрдм Heartbeat рдХреЛ OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS рд╕реЗ рдЯреНрдпреВрди рдХрд░реЗрдВред

рдореБрдЭреЗ рдХреМрди-рд╕рд╛ рд╕реВрдЯ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рдирд┐рд░реНрдгрдп рддрд╛рд▓рд┐рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

  • рд▓реЙрдЬрд┐рдХ/рдЯреЗрд╕реНрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛: pnpm test рдЪрд▓рд╛рдПрдВ (рдФрд░ рдпрджрд┐ рдЖрдкрдиреЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓рд╛ рд╣реИ рддреЛ pnpm test:coverage)
  • Gateway рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ / WS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ / рдкреЗрдпрд░рд┐рдВрдЧ рдХреЛ рдЫреВрдирд╛: pnpm test:e2e рдЬреЛрдбрд╝реЗрдВ
  • "рдореЗрд░рд╛ рдмреЙрдЯ рдбрд╛рдЙрди рд╣реИ" / рдкреНрд░рджрд╛рддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдлрд▓рддрд╛рдУрдВ / рдЯреВрд▓ рдХреЙрд▓рд┐рдВрдЧ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ: рд╕реАрдорд┐рдд pnpm test:live рдЪрд▓рд╛рдПрдВ

рд▓рд╛рдЗрд╡ (рдиреЗрдЯрд╡рд░реНрдХ-рдЫреВрдиреЗ рд╡рд╛рд▓реЗ) рдЯреЗрд╕реНрдЯ

рд▓рд╛рдЗрд╡ рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕, CLI рдмреИрдХрдПрдВрдб рд╕реНрдореЛрдХреНрд╕, ACP рд╕реНрдореЛрдХреНрд╕, Codex рдРрдк-рд╕рд░реНрд╡рд░ рд╣рд╛рд░реНрдиреЗрд╕, рдФрд░ рд╕рднреА рдореАрдбрд┐рдпрд╛-рдкреНрд░рджрд╛рддрд╛ рд▓рд╛рдЗрд╡ рдЯреЗрд╕реНрдЯ (Deepgram, BytePlus, ComfyUI, рдЗрдореЗрдЬ, рдореНрдпреВрдЬрд╝рд┐рдХ, рд╡реАрдбрд┐рдпреЛ, рдореАрдбрд┐рдпрд╛ рд╣рд╛рд░реНрдиреЗрд╕) - рд╕рд╛рде рд╣реА рд▓рд╛рдЗрд╡ рд░рди рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧ - рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╡ рд╕реВрдЯ рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рджреЗрдЦреЗрдВред рд╕рдорд░реНрдкрд┐рдд рдЕрдкрдбреЗрдЯ рдФрд░ Plugin рд╡реИрд▓рд┐рдбреЗрд╢рди рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдФрд░ Plugin рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рджреЗрдЦреЗрдВред

Docker рд░рдирд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ "Linux рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" рдЪреЗрдХ)

рдпреЗ Docker рд░рдирд░ рджреЛ рдмрдХреЗрдЯ рдореЗрдВ рдмрдВрдЯрддреЗ рд╣реИрдВ:

  • рд▓рд╛рдЗрд╡-рдореЙрдбрд▓ рд░рдирд░: test:docker:live-models рдФрд░ test:docker:live-gateway repo Docker рдЗрдореЗрдЬ рдХреЗ рдЕрдВрджрд░ рдХреЗрд╡рд▓ рдЕрдкрдиреА рдореЗрд▓ рдЦрд╛рддреА profile-key рд▓рд╛рдЗрд╡ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рддреЗ рд╣реИрдВ (src/agents/models.profiles.live.test.ts рдФрд░ src/gateway/gateway-models.profiles.live.test.ts), рдЖрдкрдХреА рд╕реНрдерд╛рдиреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА, рд╡рд░реНрдХрд╕реНрдкреЗрд╕, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ env рдлрд╝рд╛рдЗрд▓ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реБрдПред рдореЗрд▓ рдЦрд╛рддреЗ рд╕реНрдерд╛рдиреАрдп рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ test:live:models-profiles рдФрд░ test:live:gateway-profiles рд╣реИрдВред
  • Docker рд▓рд╛рдЗрд╡ рд░рдирд░ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЕрдкрдиреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреИрдк рд░рдЦрддреЗ рд╣реИрдВ: test:docker:live-models рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪреБрдиреЗ рд╣реБрдП рд╕рдорд░реНрдерд┐рдд рд╣рд╛рдИ-рд╕рд┐рдЧреНрдирд▓ рд╕реЗрдЯ рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ test:docker:live-gateway рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ OPENCLAW_LIVE_GATEWAY_SMOKE=1, OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8, OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000, рдФрд░ OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000 рдкрд░ рд░рд╣рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдЯрд╛ рдХреИрдк рдпрд╛ рдмрдбрд╝рд╛ рд╕реНрдХреИрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ OPENCLAW_LIVE_MAX_MODELS рдпрд╛ Gateway env vars рд╕реЗрдЯ рдХрд░реЗрдВред
  • test:docker:all test:docker:live-build рдХреЗ рдЬрд╝рд░рд┐рдП рд▓рд╛рдЗрд╡ Docker рдЗрдореЗрдЬ рдХреЛ рдПрдХ рдмрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ, scripts/package-openclaw-for-docker.mjs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ OpenClaw рдХреЛ npm tarball рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд░ рдкреИрдХ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рджреЛ scripts/e2e/Dockerfile рдЗрдореЗрдЬ рдмрдирд╛рддрд╛/рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмреЗрдпрд░ рдЗрдореЗрдЬ рдХреЗрд╡рд▓ install/update/plugin-dependency рд▓реЗрди рдХреЗ рд▓рд┐рдП Node/Git рд░рдирд░ рд╣реИ; рд╡реЗ рд▓реЗрди рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреЗ tarball рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рдирд▓ рдЗрдореЗрдЬ built-app рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓реЗрди рдХреЗ рд▓рд┐рдП рдЙрд╕реА tarball рдХреЛ /app рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреА рд╣реИред Docker рд▓реЗрди рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ scripts/lib/docker-e2e-scenarios.mjs рдореЗрдВ рд░рд╣рддреА рд╣реИрдВ; рдкреНрд▓рд╛рдирд░ рд▓реЙрдЬрд┐рдХ scripts/lib/docker-e2e-plan.mjs рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ; scripts/test-docker-all.mjs рдЪрдпрдирд┐рдд рдкреНрд▓рд╛рди рдЪрд▓рд╛рддрд╛ рд╣реИред рдПрдЧреНрд░реАрдЧреЗрдЯ weighted рд╕реНрдерд╛рдиреАрдп scheduler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: OPENCLAW_DOCKER_ALL_PARALLELISM process slots рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ resource caps heavy live, npm-install, рдФрд░ multi-service lanes рдХреЛ рдПрдХ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдПрдХрд▓ lane active caps рд╕реЗ рднрд╛рд░реА рд╣реИ, рддреЛ scheduler pool empty рд╣реЛрдиреЗ рдкрд░ рдлрд┐рд░ рднреА рдЙрд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ capacity рдлрд┐рд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рддрдХ рдЙрд╕реЗ рдЕрдХреЗрд▓реЗ running рд░рдЦрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 10 slots, OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9, OPENCLAW_DOCKER_ALL_NPM_LIMIT=5, рдФрд░ OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7 рд╣реИрдВ; OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT рдпрд╛ OPENCLAW_DOCKER_ALL_DOCKER_LIMIT рдХреЗрд╡рд▓ рддрдм рдЯреНрдпреВрди рдХрд░реЗрдВ рдЬрдм Docker host рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ headroom рд╣реЛред runner default рд░реВрдк рд╕реЗ Docker preflight рдХрд░рддрд╛ рд╣реИ, stale OpenClaw E2E containers рд╣рдЯрд╛рддрд╛ рд╣реИ, рд╣рд░ 30 seconds рдореЗрдВ status print рдХрд░рддрд╛ рд╣реИ, successful lane timings рдХреЛ .artifacts/docker-tests/lane-timings.json рдореЗрдВ stores рдХрд░рддрд╛ рд╣реИ, рдФрд░ later runs рдкрд░ longer lanes рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди timings рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Docker build рдпрд╛ run рдХрд┐рдП рдмрд┐рдирд╛ weighted lane manifest print рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_DOCKER_ALL_DRY_RUN=1 рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ selected lanes, package/image needs, рдФрд░ credentials рдХреЗ рд▓рд┐рдП CI plan print рдХрд░рдиреЗ рд╣реЗрддреБ node scripts/test-docker-all.mjs --plan-json рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • Package Acceptance "рдХреНрдпрд╛ рдпрд╣ installable tarball product рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?" рдХреЗ рд▓рд┐рдП GitHub-native package gate рд╣реИред рдпрд╣ source=npm, source=ref, source=url, рдпрд╛ source=artifact рд╕реЗ рдПрдХ candidate package resolve рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ package-under-test рдХреЗ рд░реВрдк рдореЗрдВ upload рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ selected ref рдХреЛ repack рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕реА exact tarball рдХреЗ рдЦрд┐рд▓рд╛рдл reusable Docker E2E lanes рдЪрд▓рд╛рддрд╛ рд╣реИред Profiles breadth рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ ordered рд╣реИрдВ: smoke, package, product, рдФрд░ fullред package/update/plugin contract, published-upgrade survivor matrix, release defaults, рдФрд░ failure triage рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдФрд░ Plugin рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рджреЗрдЦреЗрдВред
  • Build рдФрд░ release checks tsdown рдХреЗ рдмрд╛рдж scripts/check-cli-bootstrap-imports.mjs рдЪрд▓рд╛рддреЗ рд╣реИрдВред guard dist/entry.js рдФрд░ dist/cli/run-main.js рд╕реЗ static built graph walk рдХрд░рддрд╛ рд╣реИ рдФрд░ fail рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ pre-dispatch startup command dispatch рд╕реЗ рдкрд╣рд▓реЗ Commander, prompt UI, undici, рдпрд╛ logging рдЬреИрд╕реЗ package dependencies import рдХрд░рддрд╛ рд╣реИ; рдпрд╣ bundled Gateway run chunk рдХреЛ budget рдХреЗ рднреАрддрд░ рднреА рд░рдЦрддрд╛ рд╣реИ рдФрд░ known cold Gateway paths рдХреЗ static imports reject рдХрд░рддрд╛ рд╣реИред Packaged CLI smoke root help, onboard help, doctor help, status, config schema, рдФрд░ model-list command рднреА cover рдХрд░рддрд╛ рд╣реИред
  • Package Acceptance legacy compatibility 2026.4.25 (2026.4.25-beta.* рд╢рд╛рдорд┐рд▓) рдкрд░ capped рд╣реИред рдЙрд╕ cutoff рддрдХ, harness рдХреЗрд╡рд▓ shipped-package metadata gaps tolerate рдХрд░рддрд╛ рд╣реИ: omitted private QA inventory entries, missing gateway install --wrapper, tarball-derived git fixture рдореЗрдВ missing patch files, missing persisted update.channel, legacy plugin install-record locations, missing marketplace install-record persistence, рдФрд░ plugins update рдХреЗ рджреМрд░рд╛рди config metadata migrationред 2026.4.25 рдХреЗ рдмрд╛рдж рдХреЗ packages рдХреЗ рд▓рд┐рдП, рдпреЗ paths strict failures рд╣реИрдВред
  • Container smoke runners: test:docker:openwebui, test:docker:onboard, test:docker:npm-onboard-channel-agent, test:docker:release-user-journey, test:docker:release-typed-onboarding, test:docker:release-media-memory, test:docker:release-upgrade-user-journey, test:docker:release-plugin-marketplace, test:docker:skill-install, test:docker:update-channel-switch, test:docker:upgrade-survivor, test:docker:published-upgrade-survivor, test:docker:session-runtime-context, test:docker:agents-delete-shared-workspace, test:docker:gateway-network, test:docker:browser-cdp-snapshot, test:docker:mcp-channels, test:docker:agent-bundle-mcp-tools, test:docker:cron-mcp-cleanup, test:docker:plugins, test:docker:plugin-update, test:docker:plugin-lifecycle-matrix, рдФрд░ test:docker:config-reload рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ containers boot рдХрд░рддреЗ рд╣реИрдВ рдФрд░ higher-level integration paths verify рдХрд░рддреЗ рд╣реИрдВред
  • Docker/Bash E2E lanes рдЬреЛ packed OpenClaw tarball рдХреЛ scripts/lib/openclaw-e2e-instance.sh рдХреЗ рдЬрд╝рд░рд┐рдП install рдХрд░рддреЗ рд╣реИрдВ, npm install рдХреЛ OPENCLAW_E2E_NPM_INSTALL_TIMEOUT рдкрд░ cap рдХрд░рддреЗ рд╣реИрдВ (default 600s; debugging рдХреЗ рд▓рд┐рдП wrapper disable рдХрд░рдиреЗ рд╣реЗрддреБ 0 set рдХрд░реЗрдВ)ред

рд▓рд╛рдЗрд╡-рдореЙрдбрд▓ Docker рд░рдирд░ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ CLI auth homes (рдпрд╛ run narrowed рди рд╣реЛрдиреЗ рдкрд░ рд╕рднреА supported ones) рдХреЛ bind-mount рднреА рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ run рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ container home рдореЗрдВ copy рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ external-CLI OAuth host auth store рдХреЛ mutate рдХрд┐рдП рдмрд┐рдирд╛ tokens refresh рдХрд░ рд╕рдХреЗ:

  • рдбрд╛рдпрд░реЗрдХреНрдЯ рдореЙрдбрд▓: pnpm test:docker:live-models (script: scripts/test-live-models-docker.sh)

  • ACP bind smoke: pnpm test:docker:live-acp-bind (script: scripts/test-live-acp-bind-docker.sh; default рд░реВрдк рд╕реЗ Claude, Codex, рдФрд░ Gemini cover рдХрд░рддрд╛ рд╣реИ, strict Droid/OpenCode coverage pnpm test:docker:live-acp-bind:droid рдФрд░ pnpm test:docker:live-acp-bind:opencode рдХреЗ рдЬрд╝рд░рд┐рдП)

  • CLI backend smoke: pnpm test:docker:live-cli-backend (script: scripts/test-live-cli-backend-docker.sh)

  • Codex app-server harness smoke: pnpm test:docker:live-codex-harness (script: scripts/test-live-codex-harness-docker.sh)

  • Gateway + dev agent: pnpm test:docker:live-gateway (script: scripts/test-live-gateway-models-docker.sh)

  • Observability smokes: pnpm qa:otel:smoke, pnpm qa:prometheus:smoke, рдФрд░ pnpm qa:observability:smoke private QA source-checkout lanes рд╣реИрдВред рд╡реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ package Docker release lanes рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ npm tarball QA Lab рдХреЛ omit рдХрд░рддрд╛ рд╣реИред

  • Open WebUI live smoke: pnpm test:docker:openwebui (script: scripts/e2e/openwebui-docker.sh)

  • Onboarding wizard (TTY, full scaffolding): pnpm test:docker:onboard (script: scripts/e2e/onboard-docker.sh)

  • Npm tarball onboarding/channel/agent smoke: pnpm test:docker:npm-onboard-channel-agent packed OpenClaw tarball рдХреЛ Docker рдореЗрдВ globally install рдХрд░рддрд╛ рд╣реИ, env-ref onboarding рдХреЗ рдЬрд╝рд░рд┐рдП OpenAI рдФрд░ default рд░реВрдк рд╕реЗ Telegram configure рдХрд░рддрд╛ рд╣реИ, doctor рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ mocked OpenAI agent turn рдЪрд▓рд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рдмрдиреЗ tarball рдХреЛ OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz рд╕реЗ reuse рдХрд░реЗрдВ, host rebuild рдХреЛ OPENCLAW_NPM_ONBOARD_HOST_BUILD=0 рд╕реЗ skip рдХрд░реЗрдВ, рдпрд╛ channel рдХреЛ OPENCLAW_NPM_ONBOARD_CHANNEL=discord рдпрд╛ OPENCLAW_NPM_ONBOARD_CHANNEL=slack рд╕реЗ switch рдХрд░реЗрдВред

  • рд░рд┐рд▓реАрдЬрд╝ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛рддреНрд░рд╛ рд╕реНрдореЛрдХ: pnpm test:docker:release-user-journey рдкреИрдХ рдХрд┐рдП рдЧрдП OpenClaw tarball рдХреЛ рд╕рд╛рдл Docker home рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, onboarding рдЪрд▓рд╛рддрд╛ рд╣реИ, mocked OpenAI provider рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, agent turn рдЪрд▓рд╛рддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА plugins рдЗрдВрд╕реНрдЯреЙрд▓/рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, ClickClack рдХреЛ local fixture рдХреЗ рд╡рд┐рд░реБрджреНрдз рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, outbound/inbound messaging рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, Gateway рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ doctor рдЪрд▓рд╛рддрд╛ рд╣реИред

  • рд░рд┐рд▓реАрдЬрд╝ typed onboarding рд╕реНрдореЛрдХ: pnpm test:docker:release-typed-onboarding рдкреИрдХ рдХрд┐рдП рдЧрдП tarball рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, openclaw onboard рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ TTY рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИ, OpenAI рдХреЛ env-ref provider рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ raw key persistence рдирд╣реАрдВ рд╣реИ, рдФрд░ mocked agent turn рдЪрд▓рд╛рддрд╛ рд╣реИред

  • рд░рд┐рд▓реАрдЬрд╝ media/memory рд╕реНрдореЛрдХ: pnpm test:docker:release-media-memory рдкреИрдХ рдХрд┐рдП рдЧрдП tarball рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, PNG attachment рд╕реЗ image understanding, OpenAI-compatible image generation output, memory search recall, рдФрд░ Gateway restart рдХреЗ рдмрд╛рдж recall survival рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рд░рд┐рд▓реАрдЬрд╝ upgrade user journey рд╕реНрдореЛрдХ: pnpm test:docker:release-upgrade-user-journey рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ candidate tarball рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╕рдмрд╕реЗ рдирдпрд╛ published baseline рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, published package рдкрд░ provider/plugin/ClickClack state рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, candidate tarball рдореЗрдВ upgrade рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ core agent/plugin/channel journey рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдкреБрд░рд╛рдирд╛ published baseline рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ candidate version рдХрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Baseline рдХреЛ OPENCLAW_RELEASE_UPGRADE_BASELINE_SPEC=openclaw@<version> рд╕реЗ override рдХрд░реЗрдВред

  • рд░рд┐рд▓реАрдЬрд╝ Plugin marketplace рд╕реНрдореЛрдХ: pnpm test:docker:release-plugin-marketplace local fixture marketplace рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ, installed plugin рдХреЛ update рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ uninstall рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ install metadata prune рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде plugin CLI рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

  • Skill install рд╕реНрдореЛрдХ: pnpm test:docker:skill-install packed OpenClaw tarball рдХреЛ Docker рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ install рдХрд░рддрд╛ рд╣реИ, config рдореЗрдВ uploaded archive installs disable рдХрд░рддрд╛ рд╣реИ, search рд╕реЗ current live ClawHub skill slug resolve рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ openclaw skills install рд╕реЗ install рдХрд░рддрд╛ рд╣реИ, рдФрд░ installed skill рддрдерд╛ .clawhub origin/lock metadata рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

  • Update channel switch рд╕реНрдореЛрдХ: pnpm test:docker:update-channel-switch packed OpenClaw tarball рдХреЛ Docker рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ install рдХрд░рддрд╛ рд╣реИ, package stable рд╕реЗ git dev рдкрд░ switch рдХрд░рддрд╛ рд╣реИ, persisted channel рдФрд░ plugin post-update work рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ package stable рдкрд░ рд╡рд╛рдкрд╕ switch рдХрд░рддрд╛ рд╣реИ рдФрд░ update status рдЬрд╛рдВрдЪрддрд╛ рд╣реИред

  • Upgrade survivor рд╕реНрдореЛрдХ: pnpm test:docker:upgrade-survivor packed OpenClaw tarball рдХреЛ agents, channel config, plugin allowlists, stale plugin dependency state, рдФрд░ рдореМрдЬреВрджрд╛ workspace/session files рд╡рд╛рд▓реЗ dirty old-user fixture рдкрд░ install рдХрд░рддрд╛ рд╣реИред рдпрд╣ live provider рдпрд╛ channel keys рдХреЗ рдмрд┐рдирд╛ package update рдФрд░ non-interactive doctor рдЪрд▓рд╛рддрд╛ рд╣реИ, рдлрд┐рд░ loopback Gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ startup/status budgets рдХреЗ рд╕рд╛рде config/state preservation рдЬрд╛рдВрдЪрддрд╛ рд╣реИред

  • Published upgrade survivor рд╕реНрдореЛрдХ: pnpm test:docker:published-upgrade-survivor рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ openclaw@latest install рдХрд░рддрд╛ рд╣реИ, realistic existing-user files seed рдХрд░рддрд╛ рд╣реИ, baked command recipe рдХреЗ рд╕рд╛рде рдЙрд╕ baseline рдХреЛ configure рдХрд░рддрд╛ рд╣реИ, resulting config validate рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ published install рдХреЛ candidate tarball рдореЗрдВ update рдХрд░рддрд╛ рд╣реИ, non-interactive doctor рдЪрд▓рд╛рддрд╛ рд╣реИ, .artifacts/upgrade-survivor/summary.json рд▓рд┐рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ loopback Gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ configured intents, state preservation, startup, /healthz, /readyz, рдФрд░ RPC status budgets рдЬрд╛рдВрдЪрддрд╛ рд╣реИред рдПрдХ baseline рдХреЛ OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC рд╕реЗ override рдХрд░реЗрдВ, aggregate scheduler рд╕реЗ exact local baselines expand рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS рдЬреИрд╕реЗ openclaw@2026.5.2 openclaw@2026.4.23 openclaw@2026.4.15 рджреЗрдВ, рдФрд░ issue-shaped fixtures рдХреЛ OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS рдЬреИрд╕реЗ reported-issues рд╕реЗ expand рдХрд░реЗрдВ; reported-issues set рдореЗрдВ automatic external OpenClaw plugin install repair рдХреЗ рд▓рд┐рдП configured-plugin-installs рд╢рд╛рдорд┐рд▓ рд╣реИред Package Acceptance рдЗрдиреНрд╣реЗрдВ published_upgrade_survivor_baseline, published_upgrade_survivor_baselines, рдФрд░ published_upgrade_survivor_scenarios рдХреЗ рд░реВрдк рдореЗрдВ expose рдХрд░рддрд╛ рд╣реИ, last-stable-4 рдпрд╛ all-since-2026.4.23 рдЬреИрд╕реЗ meta baseline tokens resolve рдХрд░рддрд╛ рд╣реИ, рдФрд░ Full Release Validation release-soak package gate рдХреЛ last-stable-4 2026.4.23 2026.5.2 2026.4.15 plus reported-issues рддрдХ expand рдХрд░рддрд╛ рд╣реИред

  • Session runtime context рд╕реНрдореЛрдХ: pnpm test:docker:session-runtime-context hidden runtime context transcript persistence рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд duplicated prompt-rewrite branches рдХреА doctor repair рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

  • Bun global install рд╕реНрдореЛрдХ: bash scripts/e2e/bun-global-install-smoke.sh current tree рдХреЛ pack рдХрд░рддрд╛ рд╣реИ, isolated home рдореЗрдВ bun install -g рд╕реЗ install рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ openclaw infer image providers --json hang рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп bundled image providers рд▓реМрдЯрд╛рддрд╛ рд╣реИред Prebuilt tarball рдХреЛ OPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz рд╕реЗ reuse рдХрд░реЗрдВ, host build рдХреЛ OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0 рд╕реЗ skip рдХрд░реЗрдВ, рдпрд╛ built Docker image рд╕реЗ dist/ рдХреЛ OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local рд╕реЗ copy рдХрд░реЗрдВред

  • Installer Docker рд╕реНрдореЛрдХ: bash scripts/test-install-sh-docker.sh рдЕрдкрдиреЗ root, update, рдФрд░ direct-npm containers рдореЗрдВ рдПрдХ npm cache share рдХрд░рддрд╛ рд╣реИред Update smoke candidate tarball рдореЗрдВ upgrade рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ stable baseline рдХреЗ рд░реВрдк рдореЗрдВ npm latest рдкрд░ default рдХрд░рддрд╛ рд╣реИред Locally OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22 рд╕реЗ override рдХрд░реЗрдВ, рдпрд╛ GitHub рдкрд░ Install Smoke workflow рдХреЗ update_baseline_version input рд╕реЗред Non-root installer checks isolated npm cache рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ root-owned cache entries user-local install behavior рдХреЛ mask рди рдХрд░реЗрдВред Local reruns рдореЗрдВ root/update/direct-npm cache reuse рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache рд╕реЗрдЯ рдХрд░реЗрдВред

  • Install Smoke CI duplicate direct-npm global update рдХреЛ OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1 рд╕реЗ skip рдХрд░рддрд╛ рд╣реИ; рдЬрдм direct npm install -g coverage рдЪрд╛рд╣рд┐рдП рд╣реЛ, script рдХреЛ рдЙрд╕ env рдХреЗ рдмрд┐рдирд╛ locally рдЪрд▓рд╛рдПрдВред

  • Agents delete shared workspace CLI рд╕реНрдореЛрдХ: pnpm test:docker:agents-delete-shared-workspace (script: scripts/e2e/agents-delete-shared-workspace-docker.sh) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ root Dockerfile image build рдХрд░рддрд╛ рд╣реИ, isolated container home рдореЗрдВ рдПрдХ workspace рд╡рд╛рд▓реЗ рджреЛ agents seed рдХрд░рддрд╛ рд╣реИ, agents delete --json рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ valid JSON plus retained workspace behavior рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред Install-smoke image рдХреЛ OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1 рд╕реЗ reuse рдХрд░реЗрдВред

  • Gateway networking (рджреЛ containers, WS auth + health): pnpm test:docker:gateway-network (script: scripts/e2e/gateway-network-docker.sh)

  • Browser CDP snapshot рд╕реНрдореЛрдХ: pnpm test:docker:browser-cdp-snapshot (script: scripts/e2e/browser-cdp-snapshot-docker.sh) source E2E image plus Chromium layer build рдХрд░рддрд╛ рд╣реИ, raw CDP рдХреЗ рд╕рд╛рде Chromium рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, browser doctor --deep рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ CDP role snapshots link URLs, cursor-promoted clickables, iframe refs, рдФрд░ frame metadata cover рдХрд░рддреЗ рд╣реИрдВред

  • OpenAI Responses web_search minimal reasoning regression: pnpm test:docker:openai-web-search-minimal (script: scripts/e2e/openai-web-search-minimal-docker.sh) Gateway рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ mocked OpenAI server рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ web_search reasoning.effort рдХреЛ minimal рд╕реЗ low рддрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдлрд┐рд░ provider schema reject force рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ raw detail Gateway logs рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

  • MCP channel bridge (seeded Gateway + stdio bridge + raw Claude notification-frame рд╕реНрдореЛрдХ): pnpm test:docker:mcp-channels (script: scripts/e2e/mcp-channels-docker.sh)

  • OpenClaw bundle MCP tools (real stdio MCP server + embedded OpenClaw profile allow/deny рд╕реНрдореЛрдХ): pnpm test:docker:agent-bundle-mcp-tools (script: scripts/e2e/agent-bundle-mcp-tools-docker.sh)

  • Cron/subagent MCP cleanup (real Gateway + stdio MCP child teardown after isolated Cron and one-shot subagent runs): pnpm test:docker:cron-mcp-cleanup (script: scripts/e2e/cron-mcp-cleanup-docker.sh)

  • Plugins (local path, file:, hoisted dependencies рд╡рд╛рд▓реА npm registry, malformed npm package metadata, git moving refs, ClawHub kitchen-sink, marketplace updates, рдФрд░ Claude-bundle enable/inspect рдХреЗ рд▓рд┐рдП install/update smoke): pnpm test:docker:plugins (script: scripts/e2e/plugins-docker.sh) ClawHub block skip рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_PLUGINS_E2E_CLAWHUB=0 рд╕реЗрдЯ рдХрд░реЗрдВ, рдпрд╛ default kitchen-sink package/runtime pair рдХреЛ OPENCLAW_PLUGINS_E2E_CLAWHUB_SPEC рдФрд░ OPENCLAW_PLUGINS_E2E_CLAWHUB_ID рд╕реЗ override рдХрд░реЗрдВред OPENCLAW_CLAWHUB_URL/CLAWHUB_URL рдХреЗ рдмрд┐рдирд╛, test hermetic local ClawHub fixture server рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

  • Plugin update unchanged рд╕реНрдореЛрдХ: pnpm test:docker:plugin-update (script: scripts/e2e/plugin-update-unchanged-docker.sh)

  • Plugin lifecycle matrix рд╕реНрдореЛрдХ: pnpm test:docker:plugin-lifecycle-matrix bare container рдореЗрдВ packed OpenClaw tarball install рдХрд░рддрд╛ рд╣реИ, npm plugin install рдХрд░рддрд╛ рд╣реИ, enable/disable toggle рдХрд░рддрд╛ рд╣реИ, local npm registry рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕реЗ upgrade рдФрд░ downgrade рдХрд░рддрд╛ рд╣реИ, installed code delete рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ uninstall рдЕрднреА рднреА stale state рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╣рд░ lifecycle phase рдХреЗ рд▓рд┐рдП RSS/CPU metrics log рдХрд░рддрд╛ рд╣реИред

  • Config reload metadata рд╕реНрдореЛрдХ: pnpm test:docker:config-reload (script: scripts/e2e/config-reload-source-docker.sh)

  • Plugins: pnpm test:docker:plugins local path, file:, hoisted dependencies рд╡рд╛рд▓реА npm registry, git moving refs, ClawHub fixtures, marketplace updates, рдФрд░ Claude-bundle enable/inspect рдХреЗ рд▓рд┐рдП install/update smoke cover рдХрд░рддрд╛ рд╣реИред pnpm test:docker:plugin-update installed plugins рдХреЗ рд▓рд┐рдП unchanged update behavior cover рдХрд░рддрд╛ рд╣реИред pnpm test:docker:plugin-lifecycle-matrix resource-tracked npm plugin install, enable, disable, upgrade, downgrade, рдФрд░ missing-code uninstall cover рдХрд░рддрд╛ рд╣реИред

Shared functional image рдХреЛ manually prebuild рдФрд░ reuse рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

bash
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local pnpm test:docker:e2e-buildOPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channels

Suite-specific image overrides рдЬреИрд╕реЗ OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдЕрднреА рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдЬрдм OPENCLAW_SKIP_DOCKER_BUILD=1 рдХрд┐рд╕реА remote shared image рдХреА рдУрд░ point рдХрд░рддрд╛ рд╣реИ, рддреЛ scripts рдЙрд╕реЗ pull рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ local рдирд╣реАрдВ рд╣реИред QR рдФрд░ installer Docker tests рдЕрдкрдиреЗ Dockerfiles рд░рдЦрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ shared built-app runtime рдХреЗ рдмрдЬрд╛рдп package/install behavior validate рдХрд░рддреЗ рд╣реИрдВред

рд▓рд╛рдЗрд╡-рдореЙрдбрд▓ Docker runners рдореМрдЬреВрджрд╛ checkout рдХреЛ read-only рд░реВрдк рдореЗрдВ bind-mount рднреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ container рдХреЗ рдЕрдВрджрд░ рдПрдХ temporary workdir рдореЗрдВ stage рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ runtime image рд╣рд▓реНрдХреА рд░рд╣рддреА рд╣реИ, рдЬрдмрдХрд┐ Vitest рдлрд┐рд░ рднреА рдЖрдкрдХреЗ рдареАрдХ рд╕реНрдерд╛рдиреАрдп source/config рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЪрд▓рддрд╛ рд╣реИред staging рдЪрд░рдг рдмрдбрд╝реЗ local-only caches рдФрд░ app build outputs рдЬреИрд╕реЗ .pnpm-store, .worktrees, __openclaw_vitest__, рдФрд░ app-local .build рдпрд╛ Gradle output directories рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ Docker live runs рдХреЛ machine-specific artifacts рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдорд┐рдирдЯ рди рд▓рдЧреЗрдВред рд╡реЗ OPENCLAW_SKIP_CHANNELS=1 рднреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ gateway live probes container рдХреЗ рдЕрдВрджрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Telegram/Discord/рдЖрджрд┐ channel workers рд╢реБрд░реВ рди рдХрд░реЗрдВред test:docker:live-models рдлрд┐рд░ рднреА pnpm test:live рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЛ рдЙрд╕ Docker lane рд╕реЗ gateway live coverage рдХреЛ рд╕реАрдорд┐рдд рдпрд╛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реЛ, рддреЛ OPENCLAW_LIVE_GATEWAY_* рднреА pass through рдХрд░реЗрдВред test:docker:openwebui рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп compatibility smoke рд╣реИ: рдпрд╣ OpenAI-compatible HTTP endpoints enabled рдХреЗ рд╕рд╛рде рдПрдХ OpenClaw gateway container рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ gateway рдХреЗ рд╡рд┐рд░реБрджреНрдз рдПрдХ pinned Open WebUI container рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, Open WebUI рдХреЗ рдЬрд╝рд░рд┐рдП sign in рдХрд░рддрд╛ рд╣реИ, рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ /api/models openclaw/default expose рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ Open WebUI рдХреЗ /api/chat/completions proxy рдХреЗ рдЬрд╝рд░рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ chat request рднреЗрдЬрддрд╛ рд╣реИред release-path CI checks рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЗрдВ Open WebUI sign-in рдФрд░ model discovery рдХреЗ рдмрд╛рдж рдмрд┐рдирд╛ live model completion рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рд░реБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, OPENWEBUI_SMOKE_MODE=models рд╕реЗрдЯ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ run рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Docker рдХреЛ Open WebUI image pull рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ рдФрд░ Open WebUI рдХреЛ рдЕрдкрдирд╛ cold-start setup рдкреВрд░рд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ lane рдПрдХ рдЙрдкрдпреЛрдЧреА live model key рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИред рдЗрд╕реЗ process environment, staged auth profiles, рдпрд╛ explicit OPENCLAW_PROFILE_FILE рдХреЗ рдЬрд╝рд░рд┐рдП рджреЗрдВред рд╕рдлрд▓ runs { "ok": true, "model": "openclaw/default", ... } рдЬреИрд╕рд╛ рдПрдХ рдЫреЛрдЯрд╛ JSON payload print рдХрд░рддреЗ рд╣реИрдВред test:docker:mcp-channels рдЬрд╛рдирдмреВрдЭрдХрд░ deterministic рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Telegram, Discord, рдпрд╛ iMessage account рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣ seeded Gateway container boot рдХрд░рддрд╛ рд╣реИ, рдПрдХ рджреВрд╕рд░рд╛ container рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ openclaw mcp serve spawn рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ routed conversation discovery, transcript reads, attachment metadata, live event queue behavior, outbound send routing, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ stdio MCP bridge рдкрд░ Claude-style channel + permission notifications verify рдХрд░рддрд╛ рд╣реИред notification check raw stdio MCP frames рдХреЛ рд╕реАрдзреЗ inspect рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ smoke validate рдХрд░реЗ рдХрд┐ bridge рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ emit рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдХреЛрдИ specific client SDK рдХреНрдпрд╛ surface рдХрд░рддрд╛ рд╣реИред test:docker:agent-bundle-mcp-tools deterministic рд╣реИ рдФрд░ рдЗрд╕реЗ live model key рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣ repo Docker image build рдХрд░рддрд╛ рд╣реИ, container рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ stdio MCP probe server рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ server рдХреЛ embedded OpenClaw bundle MCP runtime рдХреЗ рдЬрд╝рд░рд┐рдП materialize рдХрд░рддрд╛ рд╣реИ, tool execute рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ coding рдФрд░ messaging bundle-mcp tools рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ minimal рдФрд░ tools.deny: ["bundle-mcp"] рдЙрдиреНрд╣реЗрдВ filter рдХрд░рддреЗ рд╣реИрдВред test:docker:cron-mcp-cleanup deterministic рд╣реИ рдФрд░ рдЗрд╕реЗ live model key рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреАред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ stdio MCP probe server рдХреЗ рд╕рд╛рде рдПрдХ seeded Gateway рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ isolated cron turn рдФрд░ рдПрдХ sessions_spawn one-shot child turn рдЪрд▓рд╛рддрд╛ рд╣реИ, рдлрд┐рд░ verify рдХрд░рддрд╛ рд╣реИ рдХрд┐ MCP child process рд╣рд░ run рдХреЗ рдмрд╛рдж exit рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

Manual ACP plain-language thread smoke (CI рдирд╣реАрдВ):

  • bun scripts/dev/discord-acp-plain-language-smoke.ts --channel <discord-channel-id> ...
  • рдЗрд╕ script рдХреЛ regression/debug workflows рдХреЗ рд▓рд┐рдП рд░рдЦреЗрдВред ACP thread routing validation рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдлрд┐рд░ рдЬрд╝рд░реВрд░рдд рдкрдбрд╝ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ delete рди рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧреА env vars:

  • OPENCLAW_CONFIG_DIR=... (default: ~/.openclaw) /home/node/.openclaw рдкрд░ mounted
  • OPENCLAW_WORKSPACE_DIR=... (default: ~/.openclaw/workspace) /home/node/.openclaw/workspace рдкрд░ mounted
  • OPENCLAW_PROFILE_FILE=... tests рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mounted рдФрд░ sourced
  • OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1 рддрд╛рдХрд┐ рдХреЗрд╡рд▓ OPENCLAW_PROFILE_FILE рд╕реЗ sourced env vars verify рд╣реЛрдВ, temporary config/workspace dirs рдФрд░ рдмрд┐рдирд╛ external CLI auth mounts рдХреЗ
  • OPENCLAW_DOCKER_CLI_TOOLS_DIR=... (default: ~/.cache/openclaw/docker-cli-tools) Docker рдХреЗ рдЕрдВрджрд░ cached CLI installs рдХреЗ рд▓рд┐рдП /home/node/.npm-global рдкрд░ mounted
  • $HOME рдХреЗ рдЕрдВрддрд░реНрдЧрдд external CLI auth dirs/files /host-auth... рдХреЗ рддрд╣рдд read-only mounted рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ tests рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ /home/node/... рдореЗрдВ copied рд╣реЛрддреЗ рд╣реИрдВ
    • Default dirs: .minimax
    • Default files: ~/.codex/auth.json, ~/.codex/config.toml, .claude.json, ~/.claude/.credentials.json, ~/.claude/settings.json, ~/.claude/settings.local.json
    • Narrowed provider runs рдХреЗрд╡рд▓ OPENCLAW_LIVE_PROVIDERS / OPENCLAW_LIVE_GATEWAY_PROVIDERS рд╕реЗ inferred рдЬрд╝рд░реВрд░реА dirs/files mount рдХрд░рддреЗ рд╣реИрдВ
    • OPENCLAW_DOCKER_AUTH_DIRS=all, OPENCLAW_DOCKER_AUTH_DIRS=none, рдпрд╛ OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex рдЬреИрд╕реА comma list рд╕реЗ manually override рдХрд░реЗрдВ
  • run рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_LIVE_GATEWAY_MODELS=... / OPENCLAW_LIVE_MODELS=...
  • in-container providers filter рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП OPENCLAW_LIVE_GATEWAY_PROVIDERS=... / OPENCLAW_LIVE_PROVIDERS=...
  • rebuild рдХреА рдЬрд╝рд░реВрд░рдд рди рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ reruns рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ openclaw:local-live image reuse рдХрд░рдиреЗ рд╣реЗрддреБ OPENCLAW_SKIP_DOCKER_BUILD=1
  • рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ creds profile store рд╕реЗ рдЖрдПрдВ (env рд╕реЗ рдирд╣реАрдВ), OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1
  • Open WebUI smoke рдХреЗ рд▓рд┐рдП gateway рджреНрд╡рд╛рд░рд╛ expose рдХрд┐рдпрд╛ рдЧрдпрд╛ model рдЪреБрдирдиреЗ рд╣реЗрддреБ OPENCLAW_OPENWEBUI_MODEL=...
  • Open WebUI smoke рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП nonce-check prompt рдХреЛ override рдХрд░рдиреЗ рд╣реЗрддреБ OPENCLAW_OPENWEBUI_PROMPT=...
  • pinned Open WebUI image tag override рдХрд░рдиреЗ рд╣реЗрддреБ OPENWEBUI_IMAGE=...

Docs sanity

doc edits рдХреЗ рдмрд╛рдж docs checks рдЪрд▓рд╛рдПрдВ: pnpm check:docs. рдЬрдм рдЖрдкрдХреЛ in-page heading checks рднреА рдЪрд╛рд╣рд┐рдП рд╣реЛрдВ, рддреЛ full Mintlify anchor validation рдЪрд▓рд╛рдПрдВ: pnpm docs:check-links:anchors.

Offline regression (CI-safe)

рдпреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ providers рдХреЗ рдмрд┐рдирд╛ "real pipeline" regressions рд╣реИрдВ:

  • Gateway tool calling (mock OpenAI, рд╡рд╛рд╕реНрддрд╡рд┐рдХ gateway + agent loop): src/gateway/gateway.test.ts (case: "runs a mock OpenAI tool call end-to-end via gateway agent loop")
  • Gateway wizard (WS wizard.start/wizard.next, config writes + auth enforced): src/gateway/gateway.test.ts (case: "runs wizard over ws and writes auth token config")

Agent reliability evals (skills)

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдХреБрдЫ CI-safe tests рд╣реИрдВ рдЬреЛ "agent reliability evals" рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ gateway + agent loop рдХреЗ рдЬрд╝рд░рд┐рдП mock tool-calling (src/gateway/gateway.test.ts)ред
  • End-to-end wizard flows рдЬреЛ session wiring рдФрд░ config effects validate рдХрд░рддреЗ рд╣реИрдВ (src/gateway/gateway.test.ts)ред

skills рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЬреЛ missing рд╣реИ (рджреЗрдЦреЗрдВ Skills):

  • Decisioning: рдЬрдм skills prompt рдореЗрдВ listed рд╣реЛрдВ, рддреЛ рдХреНрдпрд╛ agent рд╕рд╣реА skill рдЪреБрдирддрд╛ рд╣реИ (рдпрд╛ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ ones рд╕реЗ рдмрдЪрддрд╛ рд╣реИ)?
  • Compliance: рдХреНрдпрд╛ agent рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ SKILL.md рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ required steps/args follow рдХрд░рддрд╛ рд╣реИ?
  • Workflow contracts: multi-turn scenarios рдЬреЛ tool order, session history carryover, рдФрд░ sandbox boundaries assert рдХрд░рддреЗ рд╣реИрдВред

Future evals рдХреЛ рдкрд╣рд▓реЗ deterministic рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • mock providers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ scenario runner, рдЬреЛ tool calls + order, skill file reads, рдФрд░ session wiring assert рдХрд░реЗред
  • skill-focused scenarios рдХрд╛ рдЫреЛрдЯрд╛ suite (use vs avoid, gating, prompt injection)ред
  • optional live evals (opt-in, env-gated) рдХреЗрд╡рд▓ CI-safe suite рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рджред

Contract tests (plugin рдФрд░ channel shape)

Contract tests verify рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ registered plugin рдФрд░ channel рдЕрдкрдиреЗ interface contract рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рд╡реЗ рд╕рднреА discovered plugins рдкрд░ iterate рдХрд░рддреЗ рд╣реИрдВ рдФрд░ shape рддрдерд╛ behavior assertions рдХрд╛ suite рдЪрд▓рд╛рддреЗ рд╣реИрдВред default pnpm test unit lane рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрди shared seam рдФрд░ smoke files рдХреЛ skip рдХрд░рддрд╛ рд╣реИ; рдЬрдм рдЖрдк shared channel рдпрд╛ provider surfaces рдЫреБрдПрдВ, рддреЛ contract commands explicit рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдПрдВред

Commands

  • рд╕рднреА contracts: pnpm test:contracts
  • рдХреЗрд╡рд▓ channel contracts: pnpm test:contracts:channels
  • рдХреЗрд╡рд▓ provider contracts: pnpm test:contracts:plugins

Channel contracts

src/channels/plugins/contracts/*.contract.test.ts рдореЗрдВ рд╕реНрдерд┐рдд:

  • plugin - basic plugin shape (id, name, capabilities)
  • setup - setup wizard contract
  • session-binding - session binding behavior
  • outbound-payload - message payload structure
  • inbound - inbound message handling
  • actions - channel action handlers
  • threading - thread ID handling
  • directory - directory/roster API
  • group-policy - group policy enforcement

Provider status contracts

src/plugins/contracts/*.contract.test.ts рдореЗрдВ рд╕реНрдерд┐рддред

  • status - channel status probes
  • registry - Plugin registry shape

Provider contracts

src/plugins/contracts/*.contract.test.ts рдореЗрдВ рд╕реНрдерд┐рдд:

  • auth - auth flow contract
  • auth-choice - auth choice/selection
  • catalog - model catalog API
  • discovery - Plugin discovery
  • loader - Plugin loading
  • runtime - provider runtime
  • shape - Plugin shape/interface
  • wizard - setup wizard

рдХрдм рдЪрд▓рд╛рдПрдВ

  • plugin-sdk exports рдпрд╛ subpaths рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж
  • channel рдпрд╛ provider plugin рдЬреЛрдбрд╝рдиреЗ рдпрд╛ modify рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
  • plugin registration рдпрд╛ discovery refactor рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж

Contract tests CI рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ API keys рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред

Regressions рдЬреЛрдбрд╝рдирд╛ (guidance)

рдЬрдм рдЖрдк live рдореЗрдВ рдорд┐рд▓рд╛ provider/model issue fix рдХрд░рддреЗ рд╣реИрдВ:

  • рд╕рдВрднрд╡ рд╣реЛ рддреЛ CI-safe regression рдЬреЛрдбрд╝реЗрдВ (mock/stub provider, рдпрд╛ exact request-shape transformation capture рдХрд░реЗрдВ)
  • рдЕрдЧрд░ рдпрд╣ inherently live-only рд╣реИ (rate limits, auth policies), рддреЛ live test рдХреЛ narrow рдФрд░ env vars рдХреЗ рдЬрд╝рд░рд┐рдП opt-in рд░рдЦреЗрдВ
  • bug рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдЫреЛрдЯреА layer target рдХрд░рдирд╛ prefer рдХрд░реЗрдВ:
    • provider request conversion/replay bug тЖТ direct models test
    • gateway session/history/tool pipeline bug тЖТ gateway live smoke рдпрд╛ CI-safe gateway mock test
  • SecretRef traversal guardrail:
    • src/secrets/exec-secret-ref-id-parity.test.ts registry metadata (listSecretTargetRegistryEntries()) рд╕реЗ рд╣рд░ SecretRef class рдХреЗ рд▓рд┐рдП рдПрдХ sampled target derive рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ assert рдХрд░рддрд╛ рд╣реИ рдХрд┐ traversal-segment exec ids rejected рд╣реИрдВред
    • рдЕрдЧрд░ рдЖрдк src/secrets/target-registry-data.ts рдореЗрдВ рдирдпрд╛ includeInPlan SecretRef target family рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ test рдореЗрдВ classifyTargetClass update рдХрд░реЗрдВред test рдЬрд╛рдирдмреВрдЭрдХрд░ unclassified target ids рдкрд░ fail рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдирдИ classes silently skip рди рд╣реЛ рд╕рдХреЗрдВред
Was this useful?
On this page

On this page