[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DYAFSR0V3AAVC0DP7JZ7KP":3,"skill-same:01M6DYAFSR0V3AAVC0DP7JZ7KP":72},{"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":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M6DYAFSR0V3AAVC0DP7JZ7KP","test-audit",null,"Use whenever writing, changing, reviewing, or auditing tests. Gates new and changed tests and guides focused audits of low-value, implementation-coupled, or duplicative coverage and the test-only production seams it demands.","knacklabs\u002Fsymphony-forge","knacklabs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F304408816?v=4","01M6DY9T9G3AQ6DM846DVTBD2Y","KnackLabs","01M6DY9TDZY6RJMQD6ZM773ZD3",10,"MIT","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftest-audit\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"test","test audit","audit","coverage","tests","only","implementation","Production","writing","use","gates","guides","value","it","new","2026-11-10 10:12:30",false,"---\nname: test-audit\ndescription: \"Use whenever writing, changing, reviewing, or auditing tests. Gates new and changed tests and guides focused audits of low-value, implementation-coupled, or duplicative coverage and the test-only production seams it demands.\"\n---\n\u003C!-- Generated by forge sync. -->\n\n# Test Audit\n\nTwo modes, one value bar. Authoring mode gates every new or changed test at\nwrite time. Audit mode runs focused sweeps of tests that re-assert source,\nduplicate stronger proof, couple behavior to implementation, or keep test-only\nproduction seams alive. Continue broad audits as separate coherent Forge tasks\nor fixes; optimize for confidence, not deletion count.\n\nA Forge task names the tests it adds or changes in its story doc's Tests\ncolumn, and forge.toml's `test` command runs the whole suite. For Forge's own\nrepo, tests live under `tests\u002F`; a client repo uses the paths its story doc\nnames. `forge close \u003Citem>` owns the review and the checks.\n\n## Authoring gate\n\nBefore adding or changing any test, answer four questions; a missing answer\nmeans do not add it yet:\n\n1. What observable behavior, invariant, or independent contract does it\n   protect?\n2. What credible regression makes it fail?\n3. Why does existing coverage not already catch that failure? Each contract has\n   one primary test owner at the strongest boundary; another layer needs its\n   own distinct risk, such as a transport or lifecycle failure the owner cannot\n   reach. Prefer extending a table-driven case or shared fixture over a\n   near-duplicate test; consolidate duplicated setup in the same change.\n4. Does it need a production seam (export, flag, wrapper, injection hook) that\n   no production caller needs? If yes, move the test to the real boundary\n   instead.\n\nThen check the test against every [junk pattern](#junk-patterns); a match fails\nthe gate unless the [retention bar](#retention-bar) names the contract it\nindependently guards. A test that would break under behavior-preserving\nrefactoring is asserting implementation, not behavior; rewrite it at the\nowning boundary before landing it.\n\nBug regression tests must fail on the pre-fix code for the intended reason and\npass after the owner-boundary repair. A regression test that never demonstrably\nfailed proves the mock, not the fix. One regression at the owner boundary\ncovers the bug; do not replay the same scenario at every layer it crosses.\n\n## Junk patterns\n\nThe shared checklist for authoring and audit: the gate rejects a new or changed\ntest that matches one, and audits hunt for existing tests that do.\n\n- assertion-free coverage probes;\n- self-comparisons and identity copiers;\n- copied fixtures, inventories, manifests, or export lists;\n- exact source, import, or string greps;\n- private predicate or call-shape tests duplicated at real boundaries;\n- duplicate invocations of the same contract;\n- provider-local replays of shared helpers;\n- tests whose only purpose is preserving test-only exports, globals, or\n  wrappers;\n- dead production code whose only callers are tests;\n- expected values produced by the helper or renderer under test;\n- mocks that implement the asserted behavior, or one identical mock standing in\n  for different APIs;\n- fixtures that supply the receipt, admission, or callback ordering the owner\n  should produce, or persistence asserted against a store the path never\n  writes;\n- capability tests that restate declared flags instead of exercising the\n  delivery or acknowledgement the flag promises;\n- negative controls that pass for an unrelated reason, such as a denial from a\n  different guard or a rejection the production path never reaches;\n- names or fixtures that promise more than the input exercises, such as a\n  \"retires the window\" test asserting the window was not cleared.\n\n## Retention bar\n\nTests justify their maintenance cost by protecting behavior, a credible\nregression, or an independently meaningful contract. In an audit, an existing\ntest that must change for behavior-preserving source reorganization is suspect,\nnot automatically deletable; the authoring gate still rejects new ones.\n\nBefore judging a candidate, read the complete test and production owner, its\nentry point, callers, callees, sibling implementations, overlapping tests, CI\nrouting, and relevant history. Read root and scoped `AGENTS.md` files first.\nWhen the test claims dependency-backed behavior, inspect the dependency source\nor types directly.\n\nKeep a test when it independently enforces a public API, SDK, protocol, config,\nmigration, storage, security, platform, default, prompt-byte, generated\ncross-language, package, release, or architecture contract. Also keep:\n\n- call ordering when order is observable behavior;\n- regressions with a credible failure mode;\n- source inspection when it is the cheapest independent guard: it fails when\n  the contract changes (the user-facing key, byte, or path) and survives an\n  identifier-only refactor;\n- a retained test that fails on the baseline: treat it as a possible product\n  bug, reproduce it, and repair the owner rather than deleting it.\n\nStatic or slow is not a deletion reason. A test that resembles implementation\nmay still be the independent contract; prove otherwise before removing it.\n\n## Discovery\n\nKeep discovery read-only and report evidence before editing. For broad scope,\norganize discovery around production owner boundaries where the story's tasks\nand Scopes permit parallel work. Include relevant tests at shared core\nboundaries and QA or live-proof harness tests. For Forge itself, inspect\n`tests\u002F`; for client work, use the test paths the story doc names. Prefer a\nfew high-confidence candidates over a large speculative inventory. Hunt for the\n[junk patterns](#junk-patterns).\n\n## Candidate evidence\n\nRecord every field below before editing. A missing field means the candidate\nis not ready for deletion:\n\n- exact test name and location;\n- what failure it can actually detect;\n- non-test callers of the covered production or support seam;\n- stronger remaining owner-boundary proof, or why no proof is needed;\n- relevant history and the reason the test or seam exists;\n- production or test-support deletion unlocked;\n- risk and the focused validation command.\n\nKeep the evidence in the task's notes or the commit message; never hand-write\nanything under `.factory\u002F`, which only `forge` commands write.\n\n## Edit shape\n\nChoose one coherent owner-boundary batch. Delete obsolete test-only exports,\nglobals, wrappers, and dead production paths instead of preserving aliases.\nMove retained regressions to their canonical owners. Consolidate repeated\npackage or dependency assertions into one generic contract.\n\nPrefer net-negative production LOC. Do not add replacement tests that restate\nthe same implementation, and do not convert uncertain candidates into cleanup\nto increase deletion counts.\n\n## Validation\n\nNever edit source or tests while a test suite is running in the checkout.\n\nFollow `forge.toml`'s `test_place`. In local mode, use `forge test` for validation.\nIn CI mode, wider related tests, lint and type checks stay in pull request CI.\n\n1. Identify the smallest owner and sibling tests the task names in its Tests\n   column; include the relevant `tests\u002F` files when changing Forge itself.\n2. For source greps or plan assertions, name the executable contract owner;\n   source inspection alone is not test evidence.\n3. In local mode, before you stop, commit your work first, then run the change's related\n   tests through `forge test` in the foreground and wait for it to finish. Run tests\n   only through `forge test`: it runs forge.toml's `fast_test`, or `test` when none\n   is set, in the machine's one test lane, with `{base}` as the merge base with\n   `origin\u002F\u003Cdefault branch>`. It always runs, including uncommitted changes. In CI\n   mode, wider related tests, lint and type checks stay in pull request CI.\n   Then commit any fixes from the local run. CI runs the full suite.\n4. `forge close \u003Citem>` owns the review and the checks. Do not reconstruct its\n   review or check wait with ad hoc commands.\n5. After an audit batch, inspect the diff and report production\u002Ftooling changes\n   separately from tests and test support.\n\n## Landing and continuation\n\nComplete work only within the task's Scope. Each Forge task or fix owns its\nworktree, review, and pull request; a human merges. Keep one coherent\nowner-boundary batch per task. Continue broader audits through separate tasks\nor fixes, refreshing discovery against the current default branch before each\nbatch.\n\n## Handoff\n\nReport:\n\n- root cause and removed low-value categories;\n- production owner simplifications;\n- retained false positives and why they remain valuable;\n- focused and full proof actually run;\n- production versus test LOC;\n- task and pull request state;\n- named follow-ups.\n","\u003C!-- Generated by forge sync. -->\n\n# Test Audit\n\nTwo modes, one value bar. Authoring mode gates every new or changed test at\nwrite time. Audit mode runs focused sweeps of tests that re-assert source,\nduplicate stronger proof, couple behavior to implementation, or keep test-only\nproduction seams alive. Continue broad audits as separate coherent Forge tasks\nor fixes; optimize for confidence, not deletion count.\n\nA Forge task names the tests it adds or changes in its story doc's Tests\ncolumn, and forge.toml's `test` command runs the whole suite. For Forge's own\nrepo, tests live under `tests\u002F`; a client repo uses the paths its story doc\nnames. `forge close \u003Citem>` owns the review and the checks.\n\n## Authoring gate\n\nBefore adding or changing any test, answer four questions; a missing answer\nmeans do not add it yet:\n\n1. What observable behavior, invariant, or independent contract does it\n   protect?\n2. What credible regression makes it fail?\n3. Why does existing coverage not already catch that failure? Each contract has\n   one primary test owner at the strongest boundary; another layer needs its\n   own distinct risk, such as a transport or lifecycle failure the owner cannot\n   reach. Prefer extending a table-driven case or shared fixture over a\n   near-duplicate test; consolidate duplicated setup in the same change.\n4. Does it need a production seam (export, flag, wrapper, injection hook) that\n   no production caller needs? If yes, move the test to the real boundary\n   instead.\n\nThen check the test against every [junk pattern](#junk-patterns); a match fails\nthe gate unless the [retention bar](#retention-bar) names the contract it\nindependently guards. A test that would break under behavior-preserving\nrefactoring is asserting implementation, not behavior; rewrite it at the\nowning boundary before landing it.\n\nBug regression tests must fail on the pre-fix code for the intended reason and\npass after the owner-boundary repair. A regression test that never demonstrably\nfailed proves the mock, not the fix. One regression at the owner boundary\ncovers the bug; do not replay the same scenario at every layer it crosses.\n\n## Junk patterns\n\nThe shared checklist for authoring and audit: the gate rejects a new or changed\ntest that matches one, and audits hunt for existing tests that do.\n\n- assertion-free coverage probes;\n- self-comparisons and identity copiers;\n- copied fixtures, inventories, manifests, or export lists;\n- exact source, import, or string greps;\n- private predicate or call-shape tests duplicated at real boundaries;\n- duplicate invocations of the same contract;\n- provider-local replays of shared helpers;\n- tests whose only purpose is preserving test-only exports, globals, or\n  wrappers;\n- dead production code whose only callers are tests;\n- expected values produced by the helper or renderer under test;\n- mocks that implement the asserted behavior, or one identical mock standing in\n  for different APIs;\n- fixtures that supply the receipt, admission, or callback ordering the owner\n  should produce, or persistence asserted against a store the path never\n  writes;\n- capability tests that restate declared flags instead of exercising the\n  delivery or acknowledgement the flag promises;\n- negative controls that pass for an unrelated reason, such as a denial from a\n  different guard or a rejection the production path never reaches;\n- names or fixtures that promise more than the input exercises, such as a\n  \"retires the window\" test asserting the window was not cleared.\n\n## Retention bar\n\nTests justify their maintenance cost by protecting behavior, a credible\nregression, or an independently meaningful contract. In an audit, an existing\ntest that must change for behavior-preserving source reorganization is suspect,\nnot automatically deletable; the authoring gate still rejects new ones.\n\nBefore judging a candidate, read the complete test and production owner, its\nentry point, callers, callees, sibling implementations, overlapping tests, CI\nrouting, and relevant history. Read root and scoped `AGENTS.md` files first.\nWhen the test claims dependency-backed behavior, inspect the dependency source\nor types directly.\n\nKeep a test when it independently enforces a public API, SDK, protocol, config,\nmigration, storage, security, platform, default, prompt-byte, generated\ncross-language, package, release, or architecture contract. Also keep:\n\n- call ordering when order is observable behavior;\n- regressions with a credible failure mode;\n- source inspection when it is the cheapest independent guard: it fails when\n  the contract changes (the user-facing key, byte, or path) and survives an\n  identifier-only refactor;\n- a retained test that fails on the baseline: treat it as a possible product\n  bug, reproduce it, and repair the owner rather than deleting it.\n\nStatic or slow is not a deletion reason. A test that resembles implementation\nmay still be the independent contract; prove otherwise before removing it.\n\n## Discovery\n\nKeep discovery read-only and report evidence before editing. For broad scope,\norganize discovery around production owner boundaries where the story's tasks\nand Scopes permit parallel work. Include relevant tests at shared core\nboundaries and QA or live-proof harness tests. For Forge itself, inspect\n`tests\u002F`; for client work, use the test paths the story doc names. Prefer a\nfew high-confidence candidates over a large speculative inventory. Hunt for the\n[junk patterns](#junk-patterns).\n\n## Candidate evidence\n\nRecord every field below before editing. A missing field means the candidate\nis not ready for deletion:\n\n- exact test name and location;\n- what failure it can actually detect;\n- non-test callers of the covered production or support seam;\n- stronger remaining owner-boundary proof, or why no proof is needed;\n- relevant history and the reason the test or seam exists;\n- production or test-support deletion unlocked;\n- risk and the focused validation command.\n\nKeep the evidence in the task's notes or the commit message; never hand-write\nanything under `.factory\u002F`, which only `forge` commands write.\n\n## Edit shape\n\nChoose one coherent owner-boundary batch. Delete obsolete test-only exports,\nglobals, wrappers, and dead production paths instead of preserving aliases.\nMove retained regressions to their canonical owners. Consolidate repeated\npackage or dependency assertions into one generic contract.\n\nPrefer net-negative production LOC. Do not add replacement tests that restate\nthe same implementation, and do not convert uncertain candidates into cleanup\nto increase deletion counts.\n\n## Validation\n\nNever edit source or tests while a test suite is running in the checkout.\n\nFollow `forge.toml`'s `test_place`. In local mode, use `forge test` for validation.\nIn CI mode, wider related tests, lint and type checks stay in pull request CI.\n\n1. Identify the smallest owner and sibling tests the task names in its Tests\n   column; include the relevant `tests\u002F` files when changing Forge itself.\n2. For source greps or plan assertions, name the executable contract owner;\n   source inspection alone is not test evidence.\n3. In local mode, before you stop, commit your work first, then run the change's related\n   tests through `forge test` in the foreground and wait for it to finish. Run tests\n   only through `forge test`: it runs forge.toml's `fast_test`, or `test` when none\n   is set, in the machine's one test lane, with `{base}` as the merge base with\n   `origin\u002F\u003Cdefault branch>`. It always runs, including uncommitted changes. In CI\n   mode, wider related tests, lint and type checks stay in pull request CI.\n   Then commit any fixes from the local run. CI runs the full suite.\n4. `forge close \u003Citem>` owns the review and the checks. Do not reconstruct its\n   review or check wait with ad hoc commands.\n5. After an audit batch, inspect the diff and report production\u002Ftooling changes\n   separately from tests and test support.\n\n## Landing and continuation\n\nComplete work only within the task's Scope. Each Forge task or fix owns its\nworktree, review, and pull request; a human merges. Keep one coherent\nowner-boundary batch per task. Continue broader audits through separate tasks\nor fixes, refreshing discovery against the current default branch before each\nbatch.\n\n## Handoff\n\nReport:\n\n- root cause and removed low-value categories;\n- production owner simplifications;\n- retained false positives and why they remain valuable;\n- focused and full proof actually run;\n- production versus test LOC;\n- task and pull request state;\n- named follow-ups.\n",{"name":5,"description":7},"main","6d155ec7acfd4396fb21484b49052e6b38c21163",".claude\u002Fskills\u002Ftest-audit",9,"https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge","https:\u002F\u002Fgithub.com\u002Fknacklabs","https:\u002F\u002Fknacklabs.ai","2026-11-12 03:29:30",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add knacklabs\u002Fsymphony-forge --skill test-audit",{"tool":58,"command":59},"bunx","bunx skills add knacklabs\u002Fsymphony-forge --skill test-audit",{"tool":61,"command":62},"pnpm","pnpm dlx skills add knacklabs\u002Fsymphony-forge --skill test-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftest-audit\u002FSKILL.md",true,[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"NOTICE.md","REFERENCE","参考文档",1198,"https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftest-audit\u002FNOTICE.md",[73,105,112,119,148,154],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":77,"sourceHtmlUrl":78,"categories":79,"keywords":83,"publishedAt":39},"01M6DYCB6Y89E5K32Y68B69PYS","simplified-technical-english","Writes and rewrites text in Simplified Technical English (ASD-STE100), a controlled language for clear technical documentation. Use when the user asks for STE, Simplified Technical English, controlled language, or plain technical writing, and when the user asks to write, rewrite, review, or check technical documentation, procedures, manuals, instructions, warnings, or reports.","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002Fsrc\u002Fforge\u002Ftemplates\u002Fskills\u002Fsimplified-technical-english\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002Fsrc\u002Fforge\u002Ftemplates\u002Fskills\u002Fsimplified-technical-english\u002FSKILL.md",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",[84,85,86,32,87,88,89,90,91,92,93,94,95,96,33,97,98,99,100,101,102,103,104],"technical","english","simplified technical english","technical documentation","review","technical writing","documentation","ste","text","check","write","instructions","user","reports","issue","language","clear","rewrite","manuals","for","when",{"skillNo":106,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":107,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":39},"01M6DYB15X4C4A4025B0ZVCP6Q","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fsimplified-technical-english\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.codex\u002Fskills\u002Fsimplified-technical-english\u002FSKILL.md",[110],{"categoryNo":81,"categoryName":82,"taxonomyType":21,"taxonomyTypeDesc":22},[84,85,86,32,87,88,89,90,91,92,93,94,95,96,33,97,98,99,100,101,102,103,104],{"skillNo":113,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":114,"sourceHtmlUrl":115,"categories":116,"keywords":118,"publishedAt":39},"01M6DYACDT517J69KRMM97BRG7","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsimplified-technical-english\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsimplified-technical-english\u002FSKILL.md",[117],{"categoryNo":81,"categoryName":82,"taxonomyType":21,"taxonomyTypeDesc":22},[84,85,86,32,87,88,89,90,91,92,93,94,95,96,33,97,98,99,100,101,102,103,104],{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":39},"01M6DYDAWZVG23SR4B8ETHDQAF","forge","Run Forge, which takes a story from approval to a merged pull request. Use when the human asks what to do next, wants to plan a story, start a task or fix, build, close, save a spec or decision, add to the roadmap, check the setup, or see the board.","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fforge-v1.2.2\u002Fsrc\u002Fforge\u002Ftemplates\u002Fskill.md",[],[121,126,127,128,129,130,131,132,133,134,93,135,136,33,137,138,139,140,141,142,143,144,145,146,147,104],"spec","setup","pull request","run","pull","start","save","plan","decision","board","fix","roadmap","Story","build","do","task","next","human","add","close","which","request",{"skillNo":149,"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":150,"categories":151,"keywords":153,"publishedAt":39},"01M6DYD7G88G0Q478GTNAY7Y46","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fforge-v1.2.2\u002F.codex\u002Fskills\u002Ftest-audit\u002FSKILL.md",[152],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[25,24,26,32,31,27,33,29,30,34,28,35,37,36,38],{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":163,"publishedAt":39},"01M6DYD45AQMFJJ7C57078QY6K","app-baseline","The baseline every Forge client app gets without anyone asking. Use for any frontend or UI work in a Forge client repo, including screens, layout, navigation, forms, tables and prototype demos, before building or changing it.","https:\u002F\u002Fgithub.com\u002Fknacklabs\u002Fsymphony-forge\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fforge-v1.2.2\u002F.codex\u002Fskills\u002Fapp-baseline\u002FSKILL.md",[160],{"categoryNo":161,"categoryName":162,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[164,165,166,167,168,169,121,170,171,172,33,173,174,175,176,177,37,178,103],"baseline","app","app baseline","frontend","prototype","ui","work","repo","before building","navigation","forms","layout","client","demos","tables"]