[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71H8RC4SXA7J4MJB1C4VH42":3,"skill-same:01M71H8RC4SXA7J4MJB1C4VH42":55},{"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":17,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":13,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M71H8RC4SXA7J4MJB1C4VH42","01-validation",null,"Effect-TS 4 Schema validation — Schema.decode, struct\u002Funion schemas, brand types, and export patterns","lambda-solver\u002Flambdabench-pro","lambda-solver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F279071046?v=4","01M71H55W2WK3PM6RRAY9JZWAJ","01M71H55WRT9XAFDAVACTCC2XP",0,"MIT","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Feffect-ts\u002Fschema\u002F01-validation\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29],"validation","01 validation","effect","brand","opencode","decode","types","union","schema validation","schema","export","patterns","2026-11-10 10:12:30",false,"---\nname: 01-validation\ndescription: Effect-TS 4 Schema validation — Schema.decode, struct\u002Funion schemas, brand types, and export patterns\nlicense: MIT\ncompatibility: opencode\n---\n\n# Schema Validation\n\n**Version**: `effect@4.0.0-beta.41`\n**Import**: `import { Schema } from \"effect\"` — never from `\"@effect\u002Fschema\"`.\n\n## Primitives\n\n```typescript\nSchema.String;\nSchema.Number;\nSchema.Boolean;\nSchema.BigInt;\nSchema.Date;\nSchema.Unknown;\nSchema.Void;\nSchema.Never;\n```\n\n## Struct\n\n```typescript\nconst User = Schema.Struct({\n  id: Schema.String,\n  age: Schema.Number,\n  active: Schema.Boolean,\n});\ntype User = Schema.Schema.Type\u003Ctypeof User>;\n```\n\n## Array \u002F Record\n\n```typescript\nSchema.Array(Schema.String);\n\n\u002F\u002F Record — positional args (NOT object syntax)\nSchema.Record(Schema.String, Schema.Number); \u002F\u002F ✅ Effect 4\n\u002F\u002F Schema.Record({ key: ..., value: ... })     \u002F\u002F ❌ Effect 3 — compile error\n```\n\n## Optional \u002F nullable fields\n\n```typescript\nSchema.optional(Schema.String); \u002F\u002F field may be missing from input\nSchema.NullOr(Schema.String); \u002F\u002F string | null\nSchema.UndefinedOr(Schema.String); \u002F\u002F string | undefined\nSchema.NullishOr(Schema.String); \u002F\u002F string | null | undefined\n```\n\n## Literal \u002F union\n\n```typescript\nSchema.Literal(\"online\", \"away\", \"busy\");\nSchema.Literals([\"info\", \"warn\", \"error\"]); \u002F\u002F array form\n\n\u002F\u002F Discriminated union (by _tag)\nSchema.Union([\n  Schema.TaggedStruct(\"left\", { value: Schema.Number }),\n  Schema.TaggedStruct(\"right\", { value: Schema.String }),\n]);\n```\n\n## Branded types\n\n```typescript\nconst UserId = Schema.String.pipe(Schema.brand(\"UserId\"));\ntype UserId = Schema.Schema.Type\u003Ctypeof UserId>;\n```\n\n## Class-based schema\n\n```typescript\nclass Todo extends Schema.Class\u003CTodo>(\"Todo\")({\n  id: Schema.Number,\n  title: Schema.String,\n  completed: Schema.Boolean,\n}) {}\n```\n\n## Errors with Schema\n\n```typescript\n\u002F\u002F TaggedErrorClass — serializable, primary pattern\nexport class UserNotFound extends Schema.TaggedErrorClass\u003CUserNotFound>()(\"UserNotFound\", { id: Schema.String }) {}\n\n\u002F\u002F ErrorClass — without auto-generated _tag field\nexport class SmtpError extends Schema.ErrorClass\u003CSmtpError>(\"SmtpError\")({\n  cause: Schema.Defect,\n}) {}\n```\n\n## Decoding \u002F encoding\n\n```typescript\n\u002F\u002F Decode (parse unknown → typed)\nconst user = yield * Schema.decode(User)(unknownInput);\nconst user = yield * Schema.decode(User)(input, { errors: \"all\" }); \u002F\u002F all errors\n\n\u002F\u002F Encode (typed → wire format)\nconst json = yield * Schema.encode(User)(user);\n\n\u002F\u002F Synchronous variants\nconst user = Schema.decodeSync(User)(input);\nconst json = Schema.encodeSync(User)(user);\n```\n\n## Export pattern — always export schema + type together\n\n```typescript\nexport const Ranking = Schema.Struct({\n  model: Schema.String,\n  right: Schema.Number,\n  pct: Schema.String,\n  tasks: Schema.Record(Schema.String, Schema.Boolean),\n});\nexport type Ranking = Schema.Schema.Type\u003Ctypeof Ranking>;\n\nexport const BenchmarkData = Schema.Struct({\n  rankings: Schema.Array(Ranking),\n  generatedAt: Schema.String,\n});\nexport type BenchmarkData = Schema.Schema.Type\u003Ctypeof BenchmarkData>;\n```\n","# Schema Validation\n\n**Version**: `effect@4.0.0-beta.41`\n**Import**: `import { Schema } from \"effect\"` — never from `\"@effect\u002Fschema\"`.\n\n## Primitives\n\n```typescript\nSchema.String;\nSchema.Number;\nSchema.Boolean;\nSchema.BigInt;\nSchema.Date;\nSchema.Unknown;\nSchema.Void;\nSchema.Never;\n```\n\n## Struct\n\n```typescript\nconst User = Schema.Struct({\n  id: Schema.String,\n  age: Schema.Number,\n  active: Schema.Boolean,\n});\ntype User = Schema.Schema.Type\u003Ctypeof User>;\n```\n\n## Array \u002F Record\n\n```typescript\nSchema.Array(Schema.String);\n\n\u002F\u002F Record — positional args (NOT object syntax)\nSchema.Record(Schema.String, Schema.Number); \u002F\u002F ✅ Effect 4\n\u002F\u002F Schema.Record({ key: ..., value: ... })     \u002F\u002F ❌ Effect 3 — compile error\n```\n\n## Optional \u002F nullable fields\n\n```typescript\nSchema.optional(Schema.String); \u002F\u002F field may be missing from input\nSchema.NullOr(Schema.String); \u002F\u002F string | null\nSchema.UndefinedOr(Schema.String); \u002F\u002F string | undefined\nSchema.NullishOr(Schema.String); \u002F\u002F string | null | undefined\n```\n\n## Literal \u002F union\n\n```typescript\nSchema.Literal(\"online\", \"away\", \"busy\");\nSchema.Literals([\"info\", \"warn\", \"error\"]); \u002F\u002F array form\n\n\u002F\u002F Discriminated union (by _tag)\nSchema.Union([\n  Schema.TaggedStruct(\"left\", { value: Schema.Number }),\n  Schema.TaggedStruct(\"right\", { value: Schema.String }),\n]);\n```\n\n## Branded types\n\n```typescript\nconst UserId = Schema.String.pipe(Schema.brand(\"UserId\"));\ntype UserId = Schema.Schema.Type\u003Ctypeof UserId>;\n```\n\n## Class-based schema\n\n```typescript\nclass Todo extends Schema.Class\u003CTodo>(\"Todo\")({\n  id: Schema.Number,\n  title: Schema.String,\n  completed: Schema.Boolean,\n}) {}\n```\n\n## Errors with Schema\n\n```typescript\n\u002F\u002F TaggedErrorClass — serializable, primary pattern\nexport class UserNotFound extends Schema.TaggedErrorClass\u003CUserNotFound>()(\"UserNotFound\", { id: Schema.String }) {}\n\n\u002F\u002F ErrorClass — without auto-generated _tag field\nexport class SmtpError extends Schema.ErrorClass\u003CSmtpError>(\"SmtpError\")({\n  cause: Schema.Defect,\n}) {}\n```\n\n## Decoding \u002F encoding\n\n```typescript\n\u002F\u002F Decode (parse unknown → typed)\nconst user = yield * Schema.decode(User)(unknownInput);\nconst user = yield * Schema.decode(User)(input, { errors: \"all\" }); \u002F\u002F all errors\n\n\u002F\u002F Encode (typed → wire format)\nconst json = yield * Schema.encode(User)(user);\n\n\u002F\u002F Synchronous variants\nconst user = Schema.decodeSync(User)(input);\nconst json = Schema.encodeSync(User)(user);\n```\n\n## Export pattern — always export schema + type together\n\n```typescript\nexport const Ranking = Schema.Struct({\n  model: Schema.String,\n  right: Schema.Number,\n  pct: Schema.String,\n  tasks: Schema.Record(Schema.String, Schema.Boolean),\n});\nexport type Ranking = Schema.Schema.Type\u003Ctypeof Ranking>;\n\nexport const BenchmarkData = Schema.Struct({\n  rankings: Schema.Array(Ranking),\n  generatedAt: Schema.String,\n});\nexport type BenchmarkData = Schema.Schema.Type\u003Ctypeof BenchmarkData>;\n```\n",{"name":5,"license":14,"description":7,"compatibility":22},"main","816c073aaf171300af3605b06f7ec5aa7370ef0b","reference\u002Fghui\u002F.opencode\u002Fskills\u002Feffect-ts\u002Fschema\u002F01-validation","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro","https:\u002F\u002Fgithub.com\u002Flambda-solver","2026-05-31 17:08:46",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add lambda-solver\u002Flambdabench-pro --skill 01-validation",{"tool":47,"command":48},"bunx","bunx skills add lambda-solver\u002Flambdabench-pro --skill 01-validation",{"tool":50,"command":51},"pnpm","pnpm dlx skills add lambda-solver\u002Flambdabench-pro --skill 01-validation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Feffect-ts\u002Fschema\u002F01-validation\u002FSKILL.md",true,[],[56,87,108,127,148,166],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":67,"publishedAt":30},"01M71H9FNA5D6Y4ANXD18Z1Z3X","tmux-workflow","Development workflow with tmux — run dev servers, Storybook, and background processes in persistent sessions with live logs, while keeping OpenCode free for chat","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Ftmux\u002FSKILL.md",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[68,69,70,71,72,73,74,75,76,77,78,22,79,80,81,82,83,84,85,86],"tmux","workflow","tmux workflow","chat","dev servers","background","processes","storybook","live","servers","run","with","logs","development workflow","free","dev","sessions","for","development",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":96,"publishedAt":30},"01M71H9DQJDAJVZX37NDN99D3P","04-anti-patterns","React anti-patterns to avoid — manual JSX repetition, useEffect misuse, reference instability, prop drilling, conditional hooks, and common performance traps","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Freact\u002Fpatterns\u002F04-anti-patterns\u002FSKILL.md",[93],{"categoryNo":94,"categoryName":95,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000009","前端开发",[29,97,98,99,100,101,102,103,104,105,106,22,107],"anti patterns","04 anti patterns","common","jsx","reference","conditional","hooks","manual","performance","anti-patterns","react",{"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":115,"publishedAt":30},"01M71H9BXF511W2R3B73S5P9ZN","03-state-management","React state management patterns — lifting state, colocation, URL state, server state with TanStack Query, local state with useState\u002FuseReducer","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Freact\u002Fpatterns\u002F03-state-management\u002FSKILL.md",[114],{"categoryNo":94,"categoryName":95,"taxonomyType":65,"taxonomyTypeDesc":66},[116,117,118,119,107,120,29,121,122,123,124,22,125,79,126],"management","state management","state","03 state management","query","URL","tanstack","react state management","local","server","tanstack query",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":134,"publishedAt":30},"01M71H9AAGVWMYQ4NG82QPYCTE","02-component-composition","React component composition patterns — render props, compound components, list rendering with map, slot patterns, and layout primitives","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Freact\u002Fpatterns\u002F02-component-composition\u002FSKILL.md",[133],{"categoryNo":94,"categoryName":95,"taxonomyType":65,"taxonomyTypeDesc":66},[135,136,137,22,79,138,139,107,140,29,141,142,143,144,145,146,147],"02 component composition","component","Composition","compound","components","primitives","composition patterns","list","map","rendering","render","react component","layout",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":30},"01M71H98RDXRQZDR496SRD906M","01-fp-style","React functional programming style — pure components, hooks conventions, Effect Atom integration, and Tailwind patterns","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Freact\u002Fpatterns\u002F01-fp-style\u002FSKILL.md",[154],{"categoryNo":94,"categoryName":95,"taxonomyType":65,"taxonomyTypeDesc":66},[156,157,158,29,159,160,22,161,107,162,139,103,163,164,165,20],"01 fp style","style","atom","conventions","integration","functional","programming","Tailwind","tailwind patterns","functional programming",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":173,"publishedAt":30},"01M71H95PYGAWBS5C8KN0C4WGT","react-animation","React animation with react\u002Fmotion (Framer Motion) — declarative animations, gestures, layout animations, and performance best practices","https:\u002F\u002Fgithub.com\u002Flambda-solver\u002Flambdabench-pro\u002Fblob\u002Fmain\u002Freference\u002Fghui\u002F.opencode\u002Fskills\u002Freact\u002Fanimation\u002FSKILL.md",[172],{"categoryNo":94,"categoryName":95,"taxonomyType":65,"taxonomyTypeDesc":66},[107,174,175,105,176,22,147,177,178,79,179,180,181,182],"react animation","Animation","framer motion","motion","best practices","framer","gestures","animations","declarative"]