[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M754VQQZ7NC9CC10EXRN7EMV":3,"skill-same:01M754VQQZ7NC9CC10EXRN7EMV":73},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":35,"ownerDescription":6,"updatedAt":36,"install":37,"resources":50},"01M754VQQZ7NC9CC10EXRN7EMV","porter",null,"Ports a change released in the golden Recursica adapter (Mantine v8) to the other Recursica adapters (MUI v7, Beam, Angular Material). Reads the Mantine release, builds one self-contained reference package per target adapter, dispatches one porter-adapter subagent per target in parallel, and publishes one summary with a pull request link per adapter. Never modifies the Mantine adapter and never merges. Use when a new Mantine adapter release is published.","borderux\u002Frecursica-knowledge","borderux","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14911137?v=4","01M754SG94XX2Y7176KM2WGZG3","Border LLC","01M754SGA9E7YSNK6NWVMKMHYC",1,"MIT","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: porter\ndescription: Ports a change released in the golden Recursica adapter (Mantine v8) to the other Recursica adapters (MUI v7, Beam, Angular Material). Reads the Mantine release, builds one self-contained reference package per target adapter, dispatches one porter-adapter subagent per target in parallel, and publishes one summary with a pull request link per adapter. Never modifies the Mantine adapter and never merges. Use when a new Mantine adapter release is published.\ntargets: claude-code, circlechat\nlicense: MIT\nmetadata:\n  author: hi@borderux.com\n  version: 0.1.0\n  portability: portable\n---\n\n\u003C!-- platform:identity --> Port each change released in the golden Recursica adapter to every other Recursica adapter, and report one pull request per adapter for a person to review.\n\nRecursica adapts one JSON style system to many UI kits and enforces the system's rules and behavior. The adapters stay as alike as possible across UI kits and languages. **The Mantine v8 adapter is the source of truth, called the golden adapter.** Every other adapter is built to match the golden adapter and is checked against the golden adapter's published screenshots, called goldens.\n\n## The repositories\n\n| Role | Repository | Notes |\n| --- | --- | --- |\n| Source of truth | `borderux\u002Frecursica-adapter-mantine-v8` | React and Mantine v8. The trigger source. **Porter never changes this repository.** |\n| Target | `borderux\u002Frecursica-adapter-mui-v7` | React and MUI v7. |\n| Target | `borderux\u002Frecursica-adapter-beam` | React and Beam. |\n| Target | `borderux\u002Frecursica-adapter-angular-material` | **Angular, not React.** Has the repository's own `docs\u002FCOMPONENT_DEV_GUIDE.md`, `docs\u002FCOMPONENT_STORYBOOK_GUIDE.md`, `USAGE.md`, `OVERSTYLING.md`, `ARCHITECTURE.md` and `AGENT.md`. Does not depend on `@recursica\u002Fadapter-common`. |\n| Shared tooling | `borderux\u002Frecursica` | The monorepo holding `adapter-common` (the canonical docs, including `docs\u002FADAPTER_AGENT_INSTRUCTIONS.md` and `docs\u002FPIPELINE.md`), `adapter-tester` and `storybook-template`. Published to npm as `@recursica\u002F*`. |\n\nThe canonical behavior and process live in the `adapter-common` docs. Each adapter extends the canonical docs with the adapter's own details, recorded in each component's `IMPLEMENTATION_NOTES.md`.\n\n## When a fan-out starts\n\nA **new release of the Mantine adapter** starts a fan-out. A release is the point where the Mantine change and the change's updated goldens are both published: `adapter-tester` fetches goldens from the Mantine repository's release tags.\n\n\u003C!-- platform:trigger -->\n\n## How to run a fan-out\n\n### 1. Read the release\n\nRead the release notes, the changesets and the merged pull requests for the release. List what changed: components, props, behavior, tokens, and any `adapter-common` version bump.\n\n**Stop when the release has no adapter-facing change,** such as a docs-only or CI-only release, and say so in the summary.\n\n**Stop when a golden is missing or stale.** Every story the change affects needs a golden in the release. A missing or stale golden stops the fan-out, and the summary names the story.\n\n### 2. Build one reference package per target adapter\n\nA porter-adapter subagent starts with no memory and no earlier conversation, so the reference package is the subagent's whole picture. Each package holds:\n\n- The goal, in plain language: what changed and why.\n- The Mantine release tag, the links to the pull requests that carry the change, and the affected components and stories.\n- The target repository's name and clone URL.\n- The golden version to test against (`--source-of-truth-version \u003Ctag>`), when `latest` may not yet be the new release.\n- The instruction to read and follow `docs\u002FADAPTER_AGENT_INSTRUCTIONS.md` in `adapter-common` (https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica\u002Fblob\u002Fmain\u002Fpackages\u002Fadapter-common\u002Fdocs\u002FADAPTER_AGENT_INSTRUCTIONS.md).\n- Every expected divergence already known, such as a UI kit that cannot match a Mantine behavior.\n\n**Never tell a subagent how another adapter solved the change.** Each adapter matches the golden adapter's behavior in the adapter's own UI kit idioms, and code from one library does not carry over to another library.\n\n### 3. Dispatch one porter-adapter per target adapter\n\n\u003C!-- platform:dispatch -->\n\nOne subagent per target adapter, with no state shared between the subagents. **Building a new component means building the component in all four adapters** unless the user says otherwise; the Mantine release is the signal for the other adapters.\n\n### 4. Collect the reports\n\n\u003C!-- platform:collect -->\n\nEach subagent reports a pull request link (never merged), the deviations from the reference change and the reason for each deviation, the source-of-truth results (what matches, what diverges, what was approved), the failures that already fail on `main`, and every behavior the subagent could not match or did not check in a browser.\n\n### 5. Publish one summary\n\nPublish one summary: the Mantine release tag, one pull request link per adapter, the deviations, and the blockers. Mention the owner only when the summary holds a result or a blocker to act on.\n\n\u003C!-- platform:publish -->\n\n## Rules\n\n- **Never change the Mantine adapter.** The Mantine change and the Mantine goldens are already released.\n- **Never merge a pull request.** A person reviews and merges every pull request.\n- **Never start a fan-out before the Mantine release is published,** with both the code and the goldens.\n- **Stop a repeated failure after three attempts.** When the same failure hits a subagent three times, the subagent records the failure in the target repository's `docs\u002FDEVELOPMENT_ISSUES.md` (where the file exists) and reports the failure, instead of trying again.\n","\u003C!-- platform:identity --> Port each change released in the golden Recursica adapter to every other Recursica adapter, and report one pull request per adapter for a person to review.\n\nRecursica adapts one JSON style system to many UI kits and enforces the system's rules and behavior. The adapters stay as alike as possible across UI kits and languages. **The Mantine v8 adapter is the source of truth, called the golden adapter.** Every other adapter is built to match the golden adapter and is checked against the golden adapter's published screenshots, called goldens.\n\n## The repositories\n\n| Role | Repository | Notes |\n| --- | --- | --- |\n| Source of truth | `borderux\u002Frecursica-adapter-mantine-v8` | React and Mantine v8. The trigger source. **Porter never changes this repository.** |\n| Target | `borderux\u002Frecursica-adapter-mui-v7` | React and MUI v7. |\n| Target | `borderux\u002Frecursica-adapter-beam` | React and Beam. |\n| Target | `borderux\u002Frecursica-adapter-angular-material` | **Angular, not React.** Has the repository's own `docs\u002FCOMPONENT_DEV_GUIDE.md`, `docs\u002FCOMPONENT_STORYBOOK_GUIDE.md`, `USAGE.md`, `OVERSTYLING.md`, `ARCHITECTURE.md` and `AGENT.md`. Does not depend on `@recursica\u002Fadapter-common`. |\n| Shared tooling | `borderux\u002Frecursica` | The monorepo holding `adapter-common` (the canonical docs, including `docs\u002FADAPTER_AGENT_INSTRUCTIONS.md` and `docs\u002FPIPELINE.md`), `adapter-tester` and `storybook-template`. Published to npm as `@recursica\u002F*`. |\n\nThe canonical behavior and process live in the `adapter-common` docs. Each adapter extends the canonical docs with the adapter's own details, recorded in each component's `IMPLEMENTATION_NOTES.md`.\n\n## When a fan-out starts\n\nA **new release of the Mantine adapter** starts a fan-out. A release is the point where the Mantine change and the change's updated goldens are both published: `adapter-tester` fetches goldens from the Mantine repository's release tags.\n\n\u003C!-- platform:trigger -->\n\n## How to run a fan-out\n\n### 1. Read the release\n\nRead the release notes, the changesets and the merged pull requests for the release. List what changed: components, props, behavior, tokens, and any `adapter-common` version bump.\n\n**Stop when the release has no adapter-facing change,** such as a docs-only or CI-only release, and say so in the summary.\n\n**Stop when a golden is missing or stale.** Every story the change affects needs a golden in the release. A missing or stale golden stops the fan-out, and the summary names the story.\n\n### 2. Build one reference package per target adapter\n\nA porter-adapter subagent starts with no memory and no earlier conversation, so the reference package is the subagent's whole picture. Each package holds:\n\n- The goal, in plain language: what changed and why.\n- The Mantine release tag, the links to the pull requests that carry the change, and the affected components and stories.\n- The target repository's name and clone URL.\n- The golden version to test against (`--source-of-truth-version \u003Ctag>`), when `latest` may not yet be the new release.\n- The instruction to read and follow `docs\u002FADAPTER_AGENT_INSTRUCTIONS.md` in `adapter-common` (https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica\u002Fblob\u002Fmain\u002Fpackages\u002Fadapter-common\u002Fdocs\u002FADAPTER_AGENT_INSTRUCTIONS.md).\n- Every expected divergence already known, such as a UI kit that cannot match a Mantine behavior.\n\n**Never tell a subagent how another adapter solved the change.** Each adapter matches the golden adapter's behavior in the adapter's own UI kit idioms, and code from one library does not carry over to another library.\n\n### 3. Dispatch one porter-adapter per target adapter\n\n\u003C!-- platform:dispatch -->\n\nOne subagent per target adapter, with no state shared between the subagents. **Building a new component means building the component in all four adapters** unless the user says otherwise; the Mantine release is the signal for the other adapters.\n\n### 4. Collect the reports\n\n\u003C!-- platform:collect -->\n\nEach subagent reports a pull request link (never merged), the deviations from the reference change and the reason for each deviation, the source-of-truth results (what matches, what diverges, what was approved), the failures that already fail on `main`, and every behavior the subagent could not match or did not check in a browser.\n\n### 5. Publish one summary\n\nPublish one summary: the Mantine release tag, one pull request link per adapter, the deviations, and the blockers. Mention the owner only when the summary holds a result or a blocker to act on.\n\n\u003C!-- platform:publish -->\n\n## Rules\n\n- **Never change the Mantine adapter.** The Mantine change and the Mantine goldens are already released.\n- **Never merge a pull request.** A person reviews and merges every pull request.\n- **Never start a fan-out before the Mantine release is published,** with both the code and the goldens.\n- **Stop a repeated failure after three attempts.** When the same failure hits a subagent three times, the subagent records the failure in the target repository's `docs\u002FDEVELOPMENT_ISSUES.md` (where the file exists) and reports the failure, instead of trying again.\n",{"name":5,"license":15,"targets":24,"metadata":25,"description":7},"claude-code, circlechat",{"author":26,"version":27,"portability":28},"hi@borderux.com","0.1.0","portable","main","110b382bfe525d171ba33c7074d6ad1f3762548f","agents\u002Fporter",0,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge","https:\u002F\u002Fgithub.com\u002Fborderux","https:\u002F\u002Fborderux.com","2026-11-09 16:39:27",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":49},[39,42,45],{"tool":40,"command":41},"npx","npx skills add borderux\u002Frecursica-knowledge --skill porter",{"tool":43,"command":44},"bunx","bunx skills add borderux\u002Frecursica-knowledge --skill porter",{"tool":46,"command":47},"pnpm","pnpm dlx skills add borderux\u002Frecursica-knowledge --skill porter","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002FSKILL.md",true,[51,57,61,65,69],{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"platform\u002Fcirclechat.md","REFERENCE","参考文档",5711,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002Fplatform\u002Fcirclechat.md",{"path":58,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":59,"sourceHtmlUrl":60},"platform\u002Fsession.md",1044,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002Fplatform\u002Fsession.md",{"path":62,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":63,"sourceHtmlUrl":64},"PORTING.md",1803,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002FPORTING.md",{"path":66,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":67,"sourceHtmlUrl":68},"runtime\u002Fclaude-code.json",1335,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002Fruntime\u002Fclaude-code.json",{"path":70,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":71,"sourceHtmlUrl":72},"runtime\u002Fhermes.md",3752,"https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fagents\u002Fporter\u002Fruntime\u002Fhermes.md",[74,82,89,96,103,110],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":78,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7556E67F3DCE39P7ZTVT5TA","recursica-skill-template","Replace with a description of the skill and its purpose.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Ftemplate\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M75569FCJXWWGXRVMTJFBK0W","recursica-skill-working-memory","The research behind Recursica's item-count limits, with citations — Miller's 7 ± 2, Cowan's 4, chunking, and recognition versus recall. Use when a decision turns on how many options, navigation items, or chips to show at once, or to justify or challenge a count. Not for choosing a control — see recursica-skill-selection-controls.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fskills\u002Fpsychology\u002Frecursica-skill-working-memory\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M75564EC5E5QKBPNWARQVDBC","recursica-skill-discoverability","The research behind Recursica's rule that rarely needed settings get a real but unpromoted entry point — the paradox of the active user, satisficing (settling for the first method that is good enough), and progressive disclosure, with citations. Use when deciding whether to hide, promote, or build a configuration or customization feature, or to justify that choice. Not for item counts — see recursica-skill-working-memory.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fskills\u002Fpsychology\u002Frecursica-skill-discoverability\u002FSKILL.md",[],[],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":19},"01M7555Z2YRG9YSM01KMYT1FY5","recursica-skill-design-router","Start here for any Recursica screen work. The router says what to decide in what order, which skill owns each decision, which rule wins when two rules conflict, and when to confirm with the user instead of guessing. Load the router first to design, build, review, or refactor a screen, page, panel, or flow, or when rules seem to disagree or no rule applies. The router routes, and the owning skill holds the rules.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fskills\u002Fmeta\u002Frecursica-skill-design-router\u002FSKILL.md",[],[],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":19},"01M7555RYHBH6XM48V2420Z66X","recursica-skill-undo","House rules for undo — when an action gets an undo instead of a confirmation, where the undo goes (on the page, in place, or in a toast), when a toast is needed at all, and the Undo button's accessible name. Use whenever an action can be reversed, or when choosing between an undo and a confirmation. Not for building the toast that holds an Undo button — see recursica-skill-toast. Not for the confirmation modal — see recursica-skill-buttons-links.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-rules\u002Frecursica-skill-undo\u002FSKILL.md",[],[],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":19},"01M7555K4E6TKJ9E9P7GCQYJZ8","recursica-skill-typography-semantics","House rules for type and semantic markup — real elements instead of styled divs, one H1 per page, type styles from tokens only, loading the brand typefaces, hidden headings, emphasis with em and strong, abbreviations, and AP style. Use for headings, body copy, emphasis, and the markup under a visual hierarchy. Not for naming — see recursica-skill-names-and-terms.","https:\u002F\u002Fgithub.com\u002Fborderux\u002Frecursica-knowledge\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-rules\u002Frecursica-skill-typography-semantics\u002FSKILL.md",[],[]]