{"kind":"Skill","metadata":{"namespace":"community","name":"openclaw-docker-e2e-authoring","version":"0.1.0"},"spec":{"description":"Author OpenClaw Docker E2E and live provider Docker lanes.","files":{"SKILL.md":"---\nname: openclaw-docker-e2e-authoring\ndescription: \"Author OpenClaw Docker E2E and live provider Docker lanes.\"\n---\n\n# OpenClaw Docker E2E Authoring\n\nUse this when adding or changing Docker E2E lanes, release-path Docker tests,\nor live-provider Docker proof.\n\n## Lane Choice\n\n- Deterministic Docker: fake the dependency/server and assert the exact runtime\n  contract crossing the boundary.\n- Live Docker: use real provider credentials/model only when user-visible\n  behavior needs the real service.\n- Prefer both when they prove different risks: deterministic for byte/payload\n  routing, live for actual provider behavior.\n\n## Authoring Rules\n\n- Test-only helpers live in `test/helpers` or `scripts/e2e/lib/\u003clane\u003e/`, not\n  `src/**`, unless production imports them.\n- Package-installed app runs from `/app`; mount only explicit harness/helper\n  paths read-only.\n- Fake servers should log boundary requests as JSONL and clients should assert\n  the real dependency payload, not just process success.\n- Add the package script and `scripts/lib/docker-e2e-scenarios.mjs` lane in the\n  same change.\n- If a lane installs a plugin from npm, default the spec via env so published\n  and local override paths are both testable.\n\n## Media And Vision\n\n- Expected answer must exist only in pixels or provider output being tested.\n- Use neutral filenames, neutral prompts, and no metadata leaks.\n- Random bitmap/OCR tokens reuse the repo OCR-safe alphabet `24567ACEF` unless\n  the test owns a stronger glyph set.\n- Make the expected answer unique per run when proving real image\n  understanding.\n\n## `chat.send` E2E\n\n- Require `chat.send` to return `status: \"started\"` and a string `runId`.\n- Wait for completion with `agent.wait`.\n- Assert final user-visible text via `chat.history` when event ordering is not\n  the behavior under test.\n- Keep originating channel/account metadata only when the bug path needs queued\n  inbound/channel context.\n\n## Verification\n\nRun the smallest proof that covers the touched lane:\n\n```bash\npnpm exec oxfmt --write \u003cchanged files\u003e\nnode --check \u003cnew .mjs files\u003e\nbash -n \u003cnew .sh files\u003e\nnode scripts/run-vitest.mjs test/scripts/docker-e2e-plan.test.ts\nOPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:\u003clane\u003e\n```\n\nFor real-provider lanes, run the matching live Docker script after deterministic\nDocker is green. Finish with `$autoreview` before commit/PR.\n"},"import":{"commit_sha":"424c6d0a5f4665b803ad6768d08b0be7659deaf4","imported_at":"2026-05-18T20:13:36Z","license_text":"MIT License\n\nCopyright (c) 2025 Peter Steinberger\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","owner":"openclaw","repo":"openclaw/openclaw","source_url":"https://github.com/openclaw/openclaw/tree/424c6d0a5f4665b803ad6768d08b0be7659deaf4/.agents/skills/openclaw-docker-e2e-authoring"}},"content_hash":[193,254,126,147,91,188,11,220,242,158,0,90,116,141,145,159,125,57,207,213,184,145,242,164,94,156,214,226,131,66,56,236],"trust_level":"unsigned","yanked":false}
