[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71SSBT25F8WTDJ4V8KV6CBA":3,"skill-same:01M71SSBT25F8WTDJ4V8KV6CBA":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M71SSBT25F8WTDJ4V8KV6CBA","qa-targets",null,"Resolve WHERE browser QA runs — named targets in .orc\u002Ftargets.json (local, staging, preview), the Target gate, credential references (literal | op:\u002F\u002F | env:), guard rule","HigorAlves\u002Forc","HigorAlves","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F11262976?v=4","01M71S79EZEMHZ8PQSV0XQJHYY","Higor Alves","01M71S79FKKTCHCN1EDR8DSTWQ",7,"MIT","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fqa-targets\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"qa targets","targets","qa","credential","gate","json","guard","env","browser qa","use","Literal","evidence","target","flow","references","browser","phase","preview","local","env provisioning","2026-11-10 13:02:02",false,"---\nname: qa-targets\ndescription: Resolve WHERE browser QA runs — named targets in .orc\u002Ftargets.json (local, staging, preview), the Target gate, credential references (literal | op:\u002F\u002F | env:), guard rule\nwhen_to_use: Use before env provisioning in \u002Forc:qa, \u002Forc:flow Phase 6, \u002Forc:evidence.\n---\n\n# QA targets\n\nBrowser QA runs against a **target**: `local` (the Docker env `orc-env-provisioner` boots) or a remote URL such as staging or a preview deploy. Targets live in `\u003Crepo>\u002F.orc\u002Ftargets.json` (gitignored, repo-level — not per branch), managed by `orc-targets` (plugin `bin\u002F`, on PATH while orc is enabled).\n\n**Announce at start:** \"I'm using the qa-targets skill to resolve where browser QA runs.\"\n\n## Registry shape\n\n```json\n{ \"schema\": 1, \"targets\": {\n  \"local\":   { \"kind\": \"local\",  \"baseUrl\": null, \"healthPath\": \"\u002F\", \"guard\": false, \"users\": {}, \"login\": null },\n  \"staging\": { \"kind\": \"remote\", \"baseUrl\": \"https:\u002F\u002Fstaging.example.com\", \"healthPath\": \"\u002Fhealthz\", \"guard\": true,\n               \"users\": { \"admin\": { \"username\": \"env:STAGING_ADMIN_USER\", \"password\": \"op:\u002F\u002FEng\u002Fstaging-admin\u002Fpassword\" } },\n               \"login\": { \"path\": \"\u002Flogin\", \"usernameField\": \"Email\", \"passwordField\": \"Password\", \"submit\": \"Sign in\", \"successPath\": \"\u002Fdashboard\" } } } }\n```\n\n- `kind` — `local` is provisioned by `orc:browser-qa` Step 0 (today's path, unchanged); `remote` is probed, never provisioned.\n- `guard: true` — a shared environment. The planner is told to tag mutating scenarios `@mutating`; on a guarded target those run as `skipped` with note `guarded target` — never silently dropped, never executed.\n- `users.\u003Cname>.{username,password}` — **references, not values**: a literal, `op:\u002F\u002Fvault\u002Fitem\u002Ffield` (1Password CLI, `op read`), or `env:VAR`. `orc-targets resolve \u003Cname>` substitutes them at run time and prints JSON for `ORC_TARGET_JSON`; the resolved JSON is **never written to disk**. Unresolvable ⇒ exit 3 ⇒ an escalation, not a skip.\n- `login` — the recipe `tests\u002Fauth.setup.ts` follows once per run in the video-off `setup` project; the session is saved as `storageState` and reused by every scenario. Field hints match by label or placeholder text.\n\n## Resolution order (every caller, same order)\n\n1. `--target \u003Cname>` flag → use it silently (`orc-state decision set target \u003Cname> --provenance flag`).\n2. `--web \u003Curl>` flag (kept for compatibility) → an ad-hoc remote target: `orc-targets resolve local --base-url \u003Curl>`; recorded as `target=adhoc:\u003Curl>`.\n3. A settled `target` decision in the session → reuse silently; re-runs keep it.\n4. Otherwise the **Target gate** below. `guided`\u002F`full` autopilot: `local` (policy decision, printed one-liner) — a remote target is a judgment call and is never auto-picked.\n\n## The Target gate (soft-inward, header chip `Target`)\n\nRun `orc-targets init && orc-targets list`, then:\n\n```markdown\n> **⛔ Gate — QA target**\n>\n> Where should browser QA run? `local` boots the Docker env; remote targets are probed first and never provisioned.\n```\n\n`AskUserQuestion` (header `Target`), options in this order — `local` first, each remote row as `\u003Cname> — \u003CbaseUrl>` with `(read-only)` appended when `guard` is true, and last **New remote URL** (follow-up free text: URL, optional name to save, guard yes\u002Fno, optional user as `env:`\u002F`op:\u002F\u002F` references — then `orc-targets set|user|login` and `resolve`). Record the answer: `orc-state decision set target \u003Cname> --provenance asked`.\n\n## After the gate\n\n- `kind: local` → continue to `orc:browser-qa` Step 1 (env attach\u002Fprovision). `appUrl` from `docker-env-state.json` becomes the `--base-url` override the engine passes to `orc-targets resolve local` inline.\n- `--web \u003Curl>` \u002F **New remote URL** without a saved name → an **unauthenticated** ad-hoc run: `resolve local --base-url \u003Curl>` drops `users` and `login` whenever the URL leaves localhost, so local credentials never reach an arbitrary origin. Authenticated remote QA requires a named target.\n- `kind: remote` → `orc-targets probe \u003Cname>`; failure is an **environment escalation** (`🛑 Escalation — target unreachable`: name, URL, curl exit) — stop, never fall back to local silently.\n- Hand the engine the **target name** (plus the `--base-url` override when one applies) and `guard` — never the resolved JSON. Resolution happens **inline, inside the same shell command that consumes it**: `ORC_TARGET_JSON=\"$(orc-targets resolve \u003Cname> [--base-url …])\" npx playwright test …`. Every tool call is a fresh shell, so an exported variable from an earlier call is gone; and a standalone `orc-targets resolve` prints plaintext passwords into the conversation transcript, which is written to disk.\n\n**Iron rule — never run `orc-targets resolve` as its own command.** It is only ever the `$(…)` inside the command that needs the JSON. If a step seems to need the resolved values to reason about (which user, which URL), use `orc-targets get \u003Cname>` — it returns the references, not the secrets.\n\n## Redaction rules (iron)\n\n- Resolved credentials appear in no packet file: not `steps.md`, not `qa-manifest.json`, not the PR comment, not the explainer script. Reference the user by its registry name (`as admin`).\n- The `setup` project records no video and no trace (config template, Slice 2) so the password is never typed on camera; scenario traces contain the session cookie only — acceptable for test environments, noted in `steps.md` as `Auth: storageState from setup project (user: admin)`.\n- `op:\u002F\u002F` reads go through `op read` only; orc never caches the value.\n","# QA targets\n\nBrowser QA runs against a **target**: `local` (the Docker env `orc-env-provisioner` boots) or a remote URL such as staging or a preview deploy. Targets live in `\u003Crepo>\u002F.orc\u002Ftargets.json` (gitignored, repo-level — not per branch), managed by `orc-targets` (plugin `bin\u002F`, on PATH while orc is enabled).\n\n**Announce at start:** \"I'm using the qa-targets skill to resolve where browser QA runs.\"\n\n## Registry shape\n\n```json\n{ \"schema\": 1, \"targets\": {\n  \"local\":   { \"kind\": \"local\",  \"baseUrl\": null, \"healthPath\": \"\u002F\", \"guard\": false, \"users\": {}, \"login\": null },\n  \"staging\": { \"kind\": \"remote\", \"baseUrl\": \"https:\u002F\u002Fstaging.example.com\", \"healthPath\": \"\u002Fhealthz\", \"guard\": true,\n               \"users\": { \"admin\": { \"username\": \"env:STAGING_ADMIN_USER\", \"password\": \"op:\u002F\u002FEng\u002Fstaging-admin\u002Fpassword\" } },\n               \"login\": { \"path\": \"\u002Flogin\", \"usernameField\": \"Email\", \"passwordField\": \"Password\", \"submit\": \"Sign in\", \"successPath\": \"\u002Fdashboard\" } } } }\n```\n\n- `kind` — `local` is provisioned by `orc:browser-qa` Step 0 (today's path, unchanged); `remote` is probed, never provisioned.\n- `guard: true` — a shared environment. The planner is told to tag mutating scenarios `@mutating`; on a guarded target those run as `skipped` with note `guarded target` — never silently dropped, never executed.\n- `users.\u003Cname>.{username,password}` — **references, not values**: a literal, `op:\u002F\u002Fvault\u002Fitem\u002Ffield` (1Password CLI, `op read`), or `env:VAR`. `orc-targets resolve \u003Cname>` substitutes them at run time and prints JSON for `ORC_TARGET_JSON`; the resolved JSON is **never written to disk**. Unresolvable ⇒ exit 3 ⇒ an escalation, not a skip.\n- `login` — the recipe `tests\u002Fauth.setup.ts` follows once per run in the video-off `setup` project; the session is saved as `storageState` and reused by every scenario. Field hints match by label or placeholder text.\n\n## Resolution order (every caller, same order)\n\n1. `--target \u003Cname>` flag → use it silently (`orc-state decision set target \u003Cname> --provenance flag`).\n2. `--web \u003Curl>` flag (kept for compatibility) → an ad-hoc remote target: `orc-targets resolve local --base-url \u003Curl>`; recorded as `target=adhoc:\u003Curl>`.\n3. A settled `target` decision in the session → reuse silently; re-runs keep it.\n4. Otherwise the **Target gate** below. `guided`\u002F`full` autopilot: `local` (policy decision, printed one-liner) — a remote target is a judgment call and is never auto-picked.\n\n## The Target gate (soft-inward, header chip `Target`)\n\nRun `orc-targets init && orc-targets list`, then:\n\n```markdown\n> **⛔ Gate — QA target**\n>\n> Where should browser QA run? `local` boots the Docker env; remote targets are probed first and never provisioned.\n```\n\n`AskUserQuestion` (header `Target`), options in this order — `local` first, each remote row as `\u003Cname> — \u003CbaseUrl>` with `(read-only)` appended when `guard` is true, and last **New remote URL** (follow-up free text: URL, optional name to save, guard yes\u002Fno, optional user as `env:`\u002F`op:\u002F\u002F` references — then `orc-targets set|user|login` and `resolve`). Record the answer: `orc-state decision set target \u003Cname> --provenance asked`.\n\n## After the gate\n\n- `kind: local` → continue to `orc:browser-qa` Step 1 (env attach\u002Fprovision). `appUrl` from `docker-env-state.json` becomes the `--base-url` override the engine passes to `orc-targets resolve local` inline.\n- `--web \u003Curl>` \u002F **New remote URL** without a saved name → an **unauthenticated** ad-hoc run: `resolve local --base-url \u003Curl>` drops `users` and `login` whenever the URL leaves localhost, so local credentials never reach an arbitrary origin. Authenticated remote QA requires a named target.\n- `kind: remote` → `orc-targets probe \u003Cname>`; failure is an **environment escalation** (`🛑 Escalation — target unreachable`: name, URL, curl exit) — stop, never fall back to local silently.\n- Hand the engine the **target name** (plus the `--base-url` override when one applies) and `guard` — never the resolved JSON. Resolution happens **inline, inside the same shell command that consumes it**: `ORC_TARGET_JSON=\"$(orc-targets resolve \u003Cname> [--base-url …])\" npx playwright test …`. Every tool call is a fresh shell, so an exported variable from an earlier call is gone; and a standalone `orc-targets resolve` prints plaintext passwords into the conversation transcript, which is written to disk.\n\n**Iron rule — never run `orc-targets resolve` as its own command.** It is only ever the `$(…)` inside the command that needs the JSON. If a step seems to need the resolved values to reason about (which user, which URL), use `orc-targets get \u003Cname>` — it returns the references, not the secrets.\n\n## Redaction rules (iron)\n\n- Resolved credentials appear in no packet file: not `steps.md`, not `qa-manifest.json`, not the PR comment, not the explainer script. Reference the user by its registry name (`as admin`).\n- The `setup` project records no video and no trace (config template, Slice 2) so the password is never typed on camera; scenario traces contain the session cookie only — acceptable for test environments, noted in `steps.md` as `Auth: storageState from setup project (user: admin)`.\n- `op:\u002F\u002F` reads go through `op read` only; orc never caches the value.\n",{"name":5,"description":7,"when_to_use":44},"Use before env provisioning in \u002Forc:qa, \u002Forc:flow Phase 6, \u002Forc:evidence.","main","7522fd7266944e30052204c2f6df287d8b5516be","orc\u002Fskills\u002Fqa-targets",0,"https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc","https:\u002F\u002Forc.novacstack.com\u002F","https:\u002F\u002Fgithub.com\u002FHigorAlves","higoralves.dev","Software Engineering","2026-11-07 07:26:38",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add HigorAlves\u002Forc --skill qa-targets",{"tool":61,"command":62},"bunx","bunx skills add HigorAlves\u002Forc --skill qa-targets",{"tool":64,"command":65},"pnpm","pnpm dlx skills add HigorAlves\u002Forc --skill qa-targets","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fqa-targets\u002FSKILL.md",true,[],[70,109,135,156,178,198],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":89,"publishedAt":39},"01M71SW40F9TAAEDKBYYBCM814","writing-plans","Write a comprehensive implementation plan of bite-sized TDD tasks that an engineer with zero codebase context could execute — exact files, code, tests, and verification steps","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwriting-plans\u002FSKILL.md",[76,81,86],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":87,"categoryName":88,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000036","内容创作者",[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,28],"writing","writing plans","plans","engineer","superpowers","implementation plan","files","when","you","code","tasks","verification","plan","write","steps","context","ZeRO","for","tests",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":120,"publishedAt":39},"01M71SW15KHE4MHJW9NEXV65X2","writing-for-agents","orc's doctrine layer for writing any document an agent consumes — skills, AGENTS.md\u002FCLAUDE.md, reference docs","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[115,116,119],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},{"categoryNo":117,"categoryName":118,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":87,"categoryName":88,"taxonomyType":84,"taxonomyTypeDesc":85},[121,90,107,122,97,123,124,125,126,127,128,129,28,130,131,132,133,134],"writing for agents","matt pocock","inline","tuning","a skill","layer","doctrine","push","editing","document","github","https","reference","docs",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":39},"01M71SVYQKXT743HHHWGHT3G13","workspace-mode","Use when cwd is a parent dir holding multiple sibling git repos — defines repo auto-detection, --repos\u002F--repo\u002F--all-repos\u002F--this-repo precedence, per-repo dispatch, and linked-PR mechanics.","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fworkspace-mode\u002FSKILL.md",[141],{"categoryNo":117,"categoryName":118,"taxonomyType":79,"taxonomyTypeDesc":80},[143,144,145,146,147,97,148,149,150,151,28,152,153,154,155],"workspace mode","mode","workspace","mechanics","auto","repos","git","pr","repo","dispatch","auto-detection","detection","parent",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":39},"01M71SVVP3BXS06G9395P2K0RH","wizard","Generate an interactive bash wizard walking a human through work only they can perform — credentials, secrets, one-off migrations","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwizard\u002FSKILL.md",[162],{"categoryNo":117,"categoryName":118,"taxonomyType":79,"taxonomyTypeDesc":80},[158,164,165,166,167,122,97,168,169,170,171,172,173,104,174,175,107,28,176,177],"condition","never","provisioning infrastructure","only","Bash","work","credentials","generate","human","secrets","infrastructure","do","one","interactive",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":39},"01M71SVT4AR6NKAM5B077E7QSJ","wait-what","Stop and re-pitch — the last message did not land; say it again simply, in the project's own vocabulary.","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[185,186,187,188,189,122,190,191,192,193,131,132,194,195,196,197],"wait what","wait","project","re","true","pitch","last","say","message","land","it","stop","vocabulary",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":208,"publishedAt":39},"01M71SVQVYRA9QBQ6G8MWR8G6F","vitest","Vitest fast unit testing framework powered by Vite with Jest-compatible API","https:\u002F\u002Fgithub.com\u002FHigorAlves\u002Forc\u002Fblob\u002Fmain\u002Forc\u002Fskills\u002Fvitest\u002FSKILL.md",[204,207],{"categoryNo":205,"categoryName":206,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[200,209,210,211,212,213,90,97,214,215,216,217,218,219,220,221,222,223,108,224],"coverage","unit","testing","testing framework","generated","api","jest","2026","at","scripts","unit testing","antfu","framework","vite","mocking","dev"]