[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DEPYK775RETCANKNG5M0NY":3,"skill-same:01M6DEPYK775RETCANKNG5M0NY":96},{"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":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":14,"repositoryHtmlUrl":60,"repositoryHomepageUrl":6,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":6,"updatedAt":63,"install":64,"resources":77},"01M6DEPYK775RETCANKNG5M0NY","code-reviewer",null,"Non-interactive bmad-code-review adapter for conduct. Accepts a single story diff, drives adversarial bug-hunt in report-only mode, normalizes surviving findings to the canonical schema with stakes_class populated, and returns the finding stream to the Conductor. Invoked by the Conductor — do not invoke directly.","iamsteveholmes\u002Fmomentum","iamsteveholmes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F92353?v=4","01M6DENK56DRSF72CJ6FJQ4RT1","Steve Holmes","01M6DENK9KCZRYFFEB0M689F7D",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fcode-reviewer\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"code","code reviewer","reviewer","single","review","invoke","conduct","for","mode","adapter","conductor","false","bmad","do","hunt","Story","bug","only","schema","diff","interactive","read","grep","Bash","code-review","report","2026-11-10 10:12:30",false,"---\nname: spec-decide-tradeoffs\ndescription: Use when a design choice has multiple valid options — produce a dimension-by-dimension trade-off table (fidelity, accuracy, scale, maintainability), justify one recommendation against long-term failure modes, and record it in the spec. Works with structured and design-doc layouts.\n---\n# Decide an Architecture Choice via a Trade-off Table\n\nWhen a clarification or design question has several defensible answers and the user asks \"which is the better long-term\nsolution \u002F most fidelity \u002F most value,\" do not just pick — show the reasoning as a scored comparison, then commit the\ndecision to the artifact. This recurs whenever a spec leaves a storage model, aggregation strategy, scoring formula, or\nfetch cadence open.\n\n1. **Enumerate the real options (2–4).** State each as a concrete mechanism, not a label — e.g. \"daily pre-aggregate,\n   discard raw\" vs \"store raw alerts, aggregate at read time\" vs \"raw event log + materialized summary.\" Include any\n   option the user already leans toward so it gets judged on equal footing.\n2. **Pick the dimensions that actually matter for THIS choice.** Default long-term lenses: performance at scale\n   (estimate the cost — \"500 tickers × 252 days × 2 queries = 252k scans\"), fidelity\u002Finformation loss, audit trail \u002F\n   replayability, future signal extensibility, testability\u002Fisolation, idempotency, and schema\u002Foperational complexity.\n   Drop dimensions that don't discriminate.\n3. **Build the table.** One row per option (or per dimension), one column per dimension, with a terse concrete cell per\n   intersection — not \"good\u002Fbad\" but *why* (\"re-fetch required\", \"O(1) lookup\", \"gone after run\").\n4. **Name the disqualifiers explicitly.** For each rejected option, give the single sentence that kills it for long-term\n   use: a one-way door (discards data you can't re-fetch), a constitution\u002Fprinciple violation (e.g. mutating an\n   append-only audit table breaks replayability), or a known past failure (e.g. \"same class of bug as the memoization\n   emergency patch in 011\").\n5. **Recommend one, with the trade it accepts.** State the winner AND what you're paying for it (\"one extra table\") so\n   the choice is honest, not sold.\n6. **Make it tunable where the right value is uncertain.** If the decision hides a magic number (threshold, weight,\n   window), promote it to a config field with a sensible default rather than hard-coding — note this in the\n   recommendation.\n7. **Record the decision in the artifact immediately** — into whichever artifact set the project uses\n   (`..\u002F..\u002Fruntime\u002Freferences\u002Fspec-artifact-discovery.md`): for the **structured** layout, the spec's Clarifications\u002FDecisions\n   section (or `research.md`); for the **design-doc** layout, the Decisions section of the design doc\n   (`docs\u002Fdesign\u002Fspecs\u002F*-design.md`). Capture the chosen option and the one-line rationale so downstream planning\n   and tasks inherit it. Keep field\u002Fentity names consistent with the rest of the artifact set — a rename here is a\n   future cross-artifact finding.\n","# Decide an Architecture Choice via a Trade-off Table\n\nWhen a clarification or design question has several defensible answers and the user asks \"which is the better long-term\nsolution \u002F most fidelity \u002F most value,\" do not just pick — show the reasoning as a scored comparison, then commit the\ndecision to the artifact. This recurs whenever a spec leaves a storage model, aggregation strategy, scoring formula, or\nfetch cadence open.\n\n1. **Enumerate the real options (2–4).** State each as a concrete mechanism, not a label — e.g. \"daily pre-aggregate,\n   discard raw\" vs \"store raw alerts, aggregate at read time\" vs \"raw event log + materialized summary.\" Include any\n   option the user already leans toward so it gets judged on equal footing.\n2. **Pick the dimensions that actually matter for THIS choice.** Default long-term lenses: performance at scale\n   (estimate the cost — \"500 tickers × 252 days × 2 queries = 252k scans\"), fidelity\u002Finformation loss, audit trail \u002F\n   replayability, future signal extensibility, testability\u002Fisolation, idempotency, and schema\u002Foperational complexity.\n   Drop dimensions that don't discriminate.\n3. **Build the table.** One row per option (or per dimension), one column per dimension, with a terse concrete cell per\n   intersection — not \"good\u002Fbad\" but *why* (\"re-fetch required\", \"O(1) lookup\", \"gone after run\").\n4. **Name the disqualifiers explicitly.** For each rejected option, give the single sentence that kills it for long-term\n   use: a one-way door (discards data you can't re-fetch), a constitution\u002Fprinciple violation (e.g. mutating an\n   append-only audit table breaks replayability), or a known past failure (e.g. \"same class of bug as the memoization\n   emergency patch in 011\").\n5. **Recommend one, with the trade it accepts.** State the winner AND what you're paying for it (\"one extra table\") so\n   the choice is honest, not sold.\n6. **Make it tunable where the right value is uncertain.** If the decision hides a magic number (threshold, weight,\n   window), promote it to a config field with a sensible default rather than hard-coding — note this in the\n   recommendation.\n7. **Record the decision in the artifact immediately** — into whichever artifact set the project uses\n   (`..\u002F..\u002Fruntime\u002Freferences\u002Fspec-artifact-discovery.md`): for the **structured** layout, the spec's Clarifications\u002FDecisions\n   section (or `research.md`); for the **design-doc** layout, the Decisions section of the design doc\n   (`docs\u002Fdesign\u002Fspecs\u002F*-design.md`). Capture the chosen option and the one-line rationale so downstream planning\n   and tasks inherit it. Keep field\u002Fentity names consistent with the rest of the artifact set — a rename here is a\n   future cross-artifact finding.\n",{"name":55,"description":56},"spec-decide-tradeoffs","Use when a design choice has multiple valid options — produce a dimension-by-dimension trade-off table (fidelity, accuracy, scale, maintainability), justify one recommendation against long-term failure modes, and record it in the spec. Works with structured and design-doc layouts.","main","1cb705536db26c557b919c204aeea2cfd0658ac1","skills\u002Fmomentum\u002Fskills\u002Fcode-reviewer","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes","http:\u002F\u002Fcapitalcodemonkey.blogspot.com","2026-11-09 05:58:39",{"source":8,"skillName":55,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add iamsteveholmes\u002Fmomentum --skill spec-decide-tradeoffs",{"tool":70,"command":71},"bunx","bunx skills add iamsteveholmes\u002Fmomentum --skill spec-decide-tradeoffs",{"tool":73,"command":74},"pnpm","pnpm dlx skills add iamsteveholmes\u002Fmomentum --skill spec-decide-tradeoffs","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fcode-reviewer\u002FSKILL.md",true,[78,84,88,92],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"agents\u002Fopenai.yaml","REFERENCE","参考文档",43,"https:\u002F\u002Fgithub.com\u002FRB-chrismandich\u002FManifest\u002Fblob\u002Fmain\u002Fplugins\u002Fmanifest-spec-planning\u002Fskills\u002Fspec-decide-tradeoffs\u002Fagents\u002Fopenai.yaml",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"evals\u002Feval-no-review-output-produced.md",779,"https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fcode-reviewer\u002Fevals\u002Feval-no-review-output-produced.md",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"evals\u002Feval-stub-invocation-response.md",550,"https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fcode-reviewer\u002Fevals\u002Feval-stub-invocation-response.md",{"path":93,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":94,"sourceHtmlUrl":95},"workflow.md",19989,"https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fcode-reviewer\u002Fworkflow.md",[97,118,136,156,173,190],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":50},"01M6DES6J0HGT27SEJJWF316FV","upstream-fix","Traces quality failures upstream to spec, rule, or workflow root cause. Proposes fixes at the right level.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fupstream-fix\u002FSKILL.md",[],[104,105,106,107,108,109,110,111,112,113,114,115,116,117],"upstream","upstream fix","fix","to spec","root cause","traces","fixes","at","high","root","rule","quality","workflow","spec",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":50},"01M6DES4A08NFWQM0AJBR2RRX5","triage","Dedup gate + batch-classify observations into five classes, enrich ARTIFACTs, batch-approve, delegate to intake\u002Fdecision or queue.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Ftriage\u002FSKILL.md",[],[120,125,126,127,128,129,130,131,112,132,133,134,135],"batch","intake","artifacts","decision","queue","delegate","approve","observations","enrich","classify","gate",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":50},"01M6DERYX8W6Z9Z4RM5V6E9HED","sprint-planning","Sprint planning — story selection, team composition, Gherkin specs, and visual companion plan gate for developer sign-off.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fsprint-planning\u002FSKILL.md",[],[143,144,145,112,146,147,31,148,149,150,151,152,39,153,154,155,135],"planning","sprint","sprint planning","visual companion","plan gate","companion","sign","visual","selection","Composition","plan","team","developer",{"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":162,"publishedAt":50},"01M6DERWCP7Y0WDY5KG6109RQB","sprint-manager","Sole writer of stories\u002Findex.json and sprints\u002Findex.json — validates state transitions, activates sprints, manages epic membership.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fsprint-manager\u002FSKILL.md",[],[163,144,164,165,166,167,168,169,170,171,172],"sprint manager","manager","writer","stories","sprints","EPIC","transitions","json","index","state",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":50},"01M6DERS7B4QHAH5GZHHBA4AHB","sprint-dev","Sprint execution — dependency-driven story development, post-merge AVFL, and team review.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fsprint-dev\u002FSKILL.md",[],[180,181,144,154,182,183,184,185,28,186,112,187,188,189,39],"dev","sprint dev","execution","team review","development","merge","dependency","post","avfl","driven",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":50},"01M6DERP0A271FYSAXCV85GF04","retro","Sprint retrospective — transcript audit engine (dynamic Workflow), story verification, findings document, and sprint closure.","https:\u002F\u002Fgithub.com\u002Fiamsteveholmes\u002Fmomentum\u002Fblob\u002Fmain\u002Fskills\u002Fmomentum\u002Fskills\u002Fretro\u002FSKILL.md",[],[192,197,198,112,199,144,200,39,201,202,203,204,205,116],"sprint retrospective","closure","dynamic workflow","document","engine","audit","verification","transcript","retrospective"]