[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CRA3PQ6RKXR17784Y82BE0":3,"skill-same:01M6CRA3PQ6RKXR17784Y82BE0":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":33,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":68,"install":69,"resources":81},"01M6CRA3PQ6RKXR17784Y82BE0","fo-fix",null,"Apply approved finding clusters from the last fo-review (or a failed gate's report — verify, visual, e2e, contract, seo) to a generated screen through the fo-fix-run workflow, one review-fixer per cluster in sequence, then re-run fo-verify. Use after fo-review approves clusters or when a gate reports failures.","ohmyhotelco\u002Fhare-cc-plugins","ohmyhotelco","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F258133233?v=4","01M6CR4HP2N9F9ZWNX1KRHQ2W1","01M6CR4HSJC5J80RVQMD5K9QRN",2,"MIT","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Ffrontend-ohmyhotel-plugin\u002Fskills\u002Ffo-fix\u002FSKILL.md",[17,22,25,30],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",{"categoryNo":31,"categoryName":32,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000037","律师与法务",[34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"fix","fo fix","last","visual","-app","apply","run workflow","contract","true","re","cluster","app","review","Bash","workflow","use","generated","e2e","seo","reports","2026-11-10 10:12:30",false,"---\nname: fo-fix\ndescription: Apply approved finding clusters from the last fo-review (or a failed gate's report — verify, visual, e2e, contract, seo) to a generated screen through the fo-fix-run workflow, one review-fixer per cluster in sequence, then re-run fo-verify. Use after fo-review approves clusters or when a gate reports failures.\nargument-hint: \"--app \u003Cname> --screen \u003Cid> [--from review|verify|visual|e2e|contract|seo] [--cluster \u003Cid>]...\"\nuser-invocable: true\nallowed-tools: Read, Write, Glob, Grep, Bash, Workflow, AskUserQuestion\n---\n\n# fo-fix — fix approved findings\n\nFixers run one at a time (same screen, same files); each fixes one cluster with TDD for behavioral\nchanges and reports evidence. The skill decides the cluster list, waits, re-verifies and reports.\n\nConventions: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ffo-shared\u002FSKILL.md`.\n\n## Step 0 — Clusters\n\nConfig, `--app`\u002F`--screen`, plan. Source of clusters by `--from` (default `review`):\n\n| `--from` | Clusters from | Approval |\n|---|---|---|\n| `review` | `\u003CevidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Freview.json` `clusters[]` (each carries `source: \"review\"`) filtered by `progress.json` `review.clustersApproved` (or `--cluster` ids) | already given in `fo-review` |\n\nClusters built here from a gate report get `source: \"\u003Cgate>\"`, `id`, `title`, `files[]`, `findings[]`\n(the fixer branches on `source`).\n| `verify` | one cluster per failed check in `verify.json` (`tail` as the finding; for `e2e-layout` the full `misplaced[]` and `trackedRunOutput[]` lists — one finding per path, fix = move to the tree's location or `git rm --cached`) | ask once: fix now? |\n| `visual` | one cluster per capture with breakage, plus one per compared frame with `critical` findings | ask once |\n| `e2e` | one cluster per failed scenario in `e2e\u002Fe2e-report.json` (with its `trace`) | ask once |\n| `contract` \u002F `seo` | one cluster per failed check\u002Faspect with its findings | ask once |\n\nAn evidence file older than the screen's current tree hash (`stale` in `fo-progress-report`)\ndescribes code that has changed since: say so and point at the gate to re-run; do not fix against\nstale findings. No clusters → nothing to do. Lock `fix.lock`.\n\n## Step 1 — Run and wait\n\n`Workflow` with `name: \"frontend-ohmyhotel-plugin:fo-fix-run\"` and\n`args: { app, screen, config, planFile, specDir, clusters }`. Wait for the task notification.\n\n## Step 2 — Re-verify\n\nWhen at least one cluster is `done`: run `fo-verify-run --app \u003Capp> --screen \u003Cscreen>` and register\nit (`fo-evidence --app \u003Capp> --screen \u003Cscreen> --gate verify --register \u003Cgates.evidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Fverify.json`). The fix is not finished until the technical gate has seen it.\n\nUpdate the tracker through `fo-progress-set` (never by editing the file):\n`--set fix --json '{\"recordedAt\":…,\"from\":\"\u003Csource>\",\"clustersDone\":[…],\"clustersFailed\":[…],\"remaining\":[…]}'`\nand, **only for `--from review`**, `--pull review.clustersApproved --json '[\u003CclustersDone ids>]'` — the\nfixed clusters leave the approved set; failed, partial and unselected clusters keep their approval.\nFixes from other gates never touch `review.*`. A fixed review cluster set is only closed by a new\n`fo-review` pass — the review gate record itself stays as it was. Release the lock.\n\n## Step 3 — Report and next\n\nPer cluster: status, findings applied (behavioral with red\u002Fgreen\u002Fmutation evidence, mechanical),\ndeclined with reasons, `outOfCluster` items (these need a decision — a new cluster, or a plan\nchange), the re-verify result, the suggested commit (`fix(\u003Cscreen>): \u003Ccluster titles>`). Next:\n\n- re-verify pass and no remaining clusters → the gate that was failing (`fo-visual`, `fo-e2e`,\n  `fo-contract`, `fo-seo`) or `fo-review` again when the fix was large\n- a cluster failed → its evidence names where it stopped; `fo-fix … --cluster \u003Cid>` after a look, or\n  a manual fix then `fo-verify`\n- `outOfCluster` items → `fo-review` again (new clusters) or `fo-plan` when the plan is what is wrong\n\nDone when the workflow has returned, re-verify has run, the tracker is updated, the lock is released\nand the next command is named.\n","# fo-fix — fix approved findings\n\nFixers run one at a time (same screen, same files); each fixes one cluster with TDD for behavioral\nchanges and reports evidence. The skill decides the cluster list, waits, re-verifies and reports.\n\nConventions: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Ffo-shared\u002FSKILL.md`.\n\n## Step 0 — Clusters\n\nConfig, `--app`\u002F`--screen`, plan. Source of clusters by `--from` (default `review`):\n\n| `--from` | Clusters from | Approval |\n|---|---|---|\n| `review` | `\u003CevidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Freview.json` `clusters[]` (each carries `source: \"review\"`) filtered by `progress.json` `review.clustersApproved` (or `--cluster` ids) | already given in `fo-review` |\n\nClusters built here from a gate report get `source: \"\u003Cgate>\"`, `id`, `title`, `files[]`, `findings[]`\n(the fixer branches on `source`).\n| `verify` | one cluster per failed check in `verify.json` (`tail` as the finding; for `e2e-layout` the full `misplaced[]` and `trackedRunOutput[]` lists — one finding per path, fix = move to the tree's location or `git rm --cached`) | ask once: fix now? |\n| `visual` | one cluster per capture with breakage, plus one per compared frame with `critical` findings | ask once |\n| `e2e` | one cluster per failed scenario in `e2e\u002Fe2e-report.json` (with its `trace`) | ask once |\n| `contract` \u002F `seo` | one cluster per failed check\u002Faspect with its findings | ask once |\n\nAn evidence file older than the screen's current tree hash (`stale` in `fo-progress-report`)\ndescribes code that has changed since: say so and point at the gate to re-run; do not fix against\nstale findings. No clusters → nothing to do. Lock `fix.lock`.\n\n## Step 1 — Run and wait\n\n`Workflow` with `name: \"frontend-ohmyhotel-plugin:fo-fix-run\"` and\n`args: { app, screen, config, planFile, specDir, clusters }`. Wait for the task notification.\n\n## Step 2 — Re-verify\n\nWhen at least one cluster is `done`: run `fo-verify-run --app \u003Capp> --screen \u003Cscreen>` and register\nit (`fo-evidence --app \u003Capp> --screen \u003Cscreen> --gate verify --register \u003Cgates.evidenceDir>\u002F\u003Capp>\u002F\u003Cscreen>\u002Fverify.json`). The fix is not finished until the technical gate has seen it.\n\nUpdate the tracker through `fo-progress-set` (never by editing the file):\n`--set fix --json '{\"recordedAt\":…,\"from\":\"\u003Csource>\",\"clustersDone\":[…],\"clustersFailed\":[…],\"remaining\":[…]}'`\nand, **only for `--from review`**, `--pull review.clustersApproved --json '[\u003CclustersDone ids>]'` — the\nfixed clusters leave the approved set; failed, partial and unselected clusters keep their approval.\nFixes from other gates never touch `review.*`. A fixed review cluster set is only closed by a new\n`fo-review` pass — the review gate record itself stays as it was. Release the lock.\n\n## Step 3 — Report and next\n\nPer cluster: status, findings applied (behavioral with red\u002Fgreen\u002Fmutation evidence, mechanical),\ndeclined with reasons, `outOfCluster` items (these need a decision — a new cluster, or a plan\nchange), the re-verify result, the suggested commit (`fix(\u003Cscreen>): \u003Ccluster titles>`). Next:\n\n- re-verify pass and no remaining clusters → the gate that was failing (`fo-visual`, `fo-e2e`,\n  `fo-contract`, `fo-seo`) or `fo-review` again when the fix was large\n- a cluster failed → its evidence names where it stopped; `fo-fix … --cluster \u003Cid>` after a look, or\n  a manual fix then `fo-verify`\n- `outOfCluster` items → `fo-review` again (new clusters) or `fo-plan` when the plan is what is wrong\n\nDone when the workflow has returned, re-verify has run, the tracker is updated, the lock is released\nand the next command is named.\n",{"name":5,"description":7,"allowed-tools":59,"argument-hint":60,"user-invocable":61},"Read, Write, Glob, Grep, Bash, Workflow, AskUserQuestion","--app \u003Cname> --screen \u003Cid> [--from review|verify|visual|e2e|contract|seo] [--cluster \u003Cid>]...",true,"main","64e41a7f9c83f3469e662235cfcba152764ceb92","frontend-ohmyhotel-plugin\u002Fskills\u002Ffo-fix",0,"https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins","https:\u002F\u002Fgithub.com\u002Fohmyhotelco","2026-11-13 16:34:32",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":61},[71,74,77],{"tool":72,"command":73},"npx","npx skills add ohmyhotelco\u002Fhare-cc-plugins --skill fo-fix",{"tool":75,"command":76},"bunx","bunx skills add ohmyhotelco\u002Fhare-cc-plugins --skill fo-fix",{"tool":78,"command":79},"pnpm","pnpm dlx skills add ohmyhotelco\u002Fhare-cc-plugins --skill fo-fix","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Ffrontend-ohmyhotel-plugin\u002Fskills\u002Ffo-fix\u002FSKILL.md",[],[83,108,132,156,176,195],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":54},"01M6M5QVXQNQMJBP1JZP9T440T","hp-shared","Shared conventions for every homepage-plugin agent and skill — stack, code conventions, state-file writes, check commands and how to report them. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fhomepage-plugin\u002Fskills\u002Fhp-shared\u002FSKILL.md",[],[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107],"shared","hp shared","state","stack","plugin","how","for","report","code conventions","commands","how to","conventions","false","frontmatter","file","code","hand","check",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":120,"publishedAt":54},"01M6M5PZTN1M0G4AHJV08VF1HV","fe-shared","Shared conventions for every frontend-react-plugin agent and skill — code conventions, state files and locks, accepted deviations, design principles, build working directory, router-mode command matrix, TypeScript check. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Ffrontend-react-plugin\u002Fskills\u002Ffe-shared\u002FSKILL.md",[114,117],{"categoryNo":115,"categoryName":116,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":118,"categoryName":119,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",[90,121,96,122,98,123,124,125,126,102,105,106,127,107,128,92,94,129,130,131],"fe shared","mode","frontend","design","design principles","files","react","router","principles","command","build",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":144,"publishedAt":54},"01M6M5GAW7ZZ3580DVCMH51SFQ","be-spring-shared","Shared conventions for every backend-springboot-plugin agent and skill — tech stack, CQRS architecture, naming, coding standards, TDD, commit and build rules, state files. Preloaded into agents through their `skills:` frontmatter; not meant to be invoked by hand.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fbackend-springboot-plugin\u002Fskills\u002Fbe-spring-shared\u002FSKILL.md",[138,141],{"categoryNo":139,"categoryName":140,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":142,"categoryName":143,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[90,145,146,126,102,147,148,106,93,149,103,150,151,152,96,153,154,92,94,155],"spring","be spring shared","commit","architecture","coding standards","coding","standards","tech","Rules","cqrs","naming",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":54},"01M6FNV58QMW8K71SA9FGTXMF4","pp-translate","Use after directly editing the working language spec to sync changes to other supported languages.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-translate\u002FSKILL.md",[],[163,164,165,166,167,168,169,170,171,172,173,49,104,174,42,175],"pp","pp translate","translate","feature","name","editing","read","spec","write","edit","sync","language","changes",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":183,"publishedAt":54},"01M6FNV0PGRKR2MW0AEPS6XP0Q","pp-sync-stitch","Use when wireframes were manually edited on the Stitch website and need to be re-fetched to the local project.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-sync-stitch\u002FSKILL.md",[182],{"categoryNo":142,"categoryName":143,"taxonomyType":20,"taxonomyTypeDesc":21},[184,163,185,173,186,187,166,188,43,189,190,49,47,191,192,193,194,167,169,42],"pp sync stitch","stitch","projects","get","project","local","MCP","id","wireframes","website","screen",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":202,"publishedAt":54},"01M6FNTWW2KHS9XRAR72X33G0B","pp-sync-notion","Use when a specification needs to be published or re-synced to Notion after finalization or manual edits.","https:\u002F\u002Fgithub.com\u002Fohmyhotelco\u002Fhare-cc-plugins\u002Fblob\u002Fmain\u002Fplanning-plugin\u002Fskills\u002Fpp-sync-notion\u002FSKILL.md",[201],{"categoryNo":142,"categoryName":143,"taxonomyType":20,"taxonomyTypeDesc":21},[163,203,173,204,166,43,205,206,190,49,207,167,169,171,172,208,42],"notion","pp sync notion","search","manual","specification","grep"]