[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GYT0SCHXPFB14AVNFPRY9P":3,"skill-same:01M6GYT0SCHXPFB14AVNFPRY9P":75},{"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":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":44,"ownerDescription":45,"updatedAt":46,"install":47,"resources":60},"01M6GYT0SCHXPFB14AVNFPRY9P","give-feedback-that-lands",null,"Use when reviewing a junior's work or correcting a repeated mistake. Uses situation-behaviour-impact phrasing pinned to a diff line, one behaviour per pass, so the fix is actionable and not a personality judgement.","jiayaoqijia\u002Fcryptoskill","jiayaoqijia","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1453879?v=4","01M6GMYTX7Q7S504VC6E756ENR","YQ","01M6GMYV1QKJ1CC75MTTGT9PR0",81,"MIT","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-give-feedback-that-lands\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-give-feedback-that-lands\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28,29,30,31,32],"feedback","give feedback","give feedback that lands","work","fix","use","diff","junior","personality","line","impact","actionable","when","2026-11-10 10:12:30",false,"---\nname: give-feedback-that-lands\ndescription: Use when reviewing a junior's work or correcting a repeated mistake. Uses situation-behaviour-impact phrasing pinned to a diff line, one behaviour per pass, so the fix is actionable and not a personality judgement.\n---\n\n# Give Feedback That Lands\n\nFeedback aimed at a person (\"you are careless\") is unactionable and triggers defence. Feedback pinned to a line, a behaviour, and its effect gives the learner one thing they can actually change.\n\n## Procedure\n\n1. Anchor to a concrete line: quote it with a path and range, e.g. `api\u002Fhandler.py:42-47`.\n2. Use situation-behaviour-impact, in order: \"When the request 404s (S), the handler returns 200 with an empty body (B), so the client retries forever (I).\"\n3. Give one behaviour per pass. Two or more competing fixes dilute to none.\n4. Separate blocking from non-blocking explicitly: prefix nits with `nit:` and label the rest `blocking:`.\n5. Describe the effect on the reader or the system, never the author's competence.\n6. Offer the smallest next action, or a question: \"Would a 404 here be truer?\" beats \"this is wrong\".\n7. For a repeated mistake, show the pattern across two diffs rather than re-litigating one instance.\n8. Close by naming what they did well specifically, so the contrast is instructive.\n9. If the fix is faster to show than to explain, show it once, then ask them to apply it elsewhere.\n10. Ask the author to restate the impact in their own words; if they cannot, the feedback did not land.\n11. Ask before asserting: 'what does the client do if this 200s on a 404?' often finds the bug with the author.\n12. Batch cosmetic nits into one comment so they do not crowd the one behavioural point.\n13. For a first-time author, open with the biggest win before the blocking item.\n14. Number your comments so the author can reply to 'comment 3' without pasting.\n15. State the trade-off when a change costs something, so the author can weigh it.\n16. Keep praise and correction in separate comments so neither dilutes the other.\n\n## Pitfalls\n\n- Praising the person in general (\"great coder\") so the specific behaviour never lands.\n- Burying a blocking bug inside five cosmetic nits, so the reader cannot rank the work.\n- Framing impact as a feeling (\"this frustrates me\") instead of an observable effect.\n- Rewriting the whole function in the comment, which teaches dependence on the reviewer.\n- Delivering the same correction a third time without changing the form of the message.\n- Sending feedback weeks after the diff, when the context has gone cold.\n- Combining a correctness bug and a style opinion in the same comment.\n- Using 'we' to mean 'you', so the author cannot tell what to change.\n- Leaving the request open-ended with no smallest next step.\n- Comments numbered nowhere, so a reply thread becomes a guessing game.\n- Presenting a trade-off as a fault.\n- Mixing praise into a blocking comment so the correction reads as softened.\n\n## Verification\n\n    git diff review-branch | grep -nE '^[+-]' | head\n    # passes when every comment you posted cites a file:line and states a consequence, none names a trait\n\nReport to the user: the diff line each comment anchors to and the observable effect claimed in it.\n","# Give Feedback That Lands\n\nFeedback aimed at a person (\"you are careless\") is unactionable and triggers defence. Feedback pinned to a line, a behaviour, and its effect gives the learner one thing they can actually change.\n\n## Procedure\n\n1. Anchor to a concrete line: quote it with a path and range, e.g. `api\u002Fhandler.py:42-47`.\n2. Use situation-behaviour-impact, in order: \"When the request 404s (S), the handler returns 200 with an empty body (B), so the client retries forever (I).\"\n3. Give one behaviour per pass. Two or more competing fixes dilute to none.\n4. Separate blocking from non-blocking explicitly: prefix nits with `nit:` and label the rest `blocking:`.\n5. Describe the effect on the reader or the system, never the author's competence.\n6. Offer the smallest next action, or a question: \"Would a 404 here be truer?\" beats \"this is wrong\".\n7. For a repeated mistake, show the pattern across two diffs rather than re-litigating one instance.\n8. Close by naming what they did well specifically, so the contrast is instructive.\n9. If the fix is faster to show than to explain, show it once, then ask them to apply it elsewhere.\n10. Ask the author to restate the impact in their own words; if they cannot, the feedback did not land.\n11. Ask before asserting: 'what does the client do if this 200s on a 404?' often finds the bug with the author.\n12. Batch cosmetic nits into one comment so they do not crowd the one behavioural point.\n13. For a first-time author, open with the biggest win before the blocking item.\n14. Number your comments so the author can reply to 'comment 3' without pasting.\n15. State the trade-off when a change costs something, so the author can weigh it.\n16. Keep praise and correction in separate comments so neither dilutes the other.\n\n## Pitfalls\n\n- Praising the person in general (\"great coder\") so the specific behaviour never lands.\n- Burying a blocking bug inside five cosmetic nits, so the reader cannot rank the work.\n- Framing impact as a feeling (\"this frustrates me\") instead of an observable effect.\n- Rewriting the whole function in the comment, which teaches dependence on the reviewer.\n- Delivering the same correction a third time without changing the form of the message.\n- Sending feedback weeks after the diff, when the context has gone cold.\n- Combining a correctness bug and a style opinion in the same comment.\n- Using 'we' to mean 'you', so the author cannot tell what to change.\n- Leaving the request open-ended with no smallest next step.\n- Comments numbered nowhere, so a reply thread becomes a guessing game.\n- Presenting a trade-off as a fault.\n- Mixing praise into a blocking comment so the correction reads as softened.\n\n## Verification\n\n    git diff review-branch | grep -nE '^[+-]' | head\n    # passes when every comment you posted cites a file:line and states a consequence, none names a trait\n\nReport to the user: the diff line each comment anchors to and the observable effect claimed in it.\n",{"name":5,"description":7},"main","3df1d0d67b30ff15236561f8c0f9f06d33f42dfd","skills\u002Fpayments\u002F0xklen-give-feedback-that-lands",17,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia","https:\u002F\u002Feth2030.com","Hardcore infra. Building @alt-research and applied cryptography.","2026-11-14 02:27:51",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add jiayaoqijia\u002Fcryptoskill --skill give-feedback-that-lands",{"tool":53,"command":54},"bunx","bunx skills add jiayaoqijia\u002Fcryptoskill --skill give-feedback-that-lands",{"tool":56,"command":57},"pnpm","pnpm dlx skills add jiayaoqijia\u002Fcryptoskill --skill give-feedback-that-lands","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-give-feedback-that-lands\u002FSKILL.md",true,[61,65,71],{"path":62,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":16},"LICENSE","许可证",1063,{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"SOURCE.md","REFERENCE","参考文档",350,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-give-feedback-that-lands\u002FSOURCE.md",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-give-feedback-that-lands\u002FTRUST.auto.yaml",[76,104,127,145,158,168],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":80,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":33},"01M712C436EQYE43342Q4E7GG1","recipe-performance","Diagnose a specific MetaMask user flow's real-app performance and Sentry critical-user-flow telemetry with deterministic mm-harness recipes. Use for CUF boundaries, cold\u002Fwarm\u002Fbackground-resume behavior, latency regressions, lifecycle tags, duplicate or blocking network requests, long tasks, layout\u002Fpaint cost, screen redraws, React rerenders, or browser trace analysis where tests alone cannot prove the real app.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fwallets\u002Fmetamask-official-recipe-performance\u002FSKILL.md",[],[84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"performance","recipe performance","recipe","mm","sentry","harness","app","deterministic","recipes","flow","cold","critical","analysis","tasks","react","browser","layout","screen","network","metamask",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":108,"licenseFileUrl":109,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":33},"01M70XT2F8A5CQZ81JBP98KSW3","mexc-spot-websocket","MEXC Spot WebSocket workflows for public streams, protobuf handling, depth maintenance, listen keys, and private streams without exposing API keys.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-websocket\u002FSKILL.md",[],[113,114,115,116,117,118,119,120,121,122,123,124,125,126],"mexc spot websocket","spot","websocket","api","workflows","public","listen","streams","depth","keys","for","api keys","maintenance","protobuf",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":108,"licenseFileUrl":131,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":33},"01M70XT0MBXN3WZY1BKN0CPNKR","mexc-spot-rest","MEXC Spot REST workflows for public data, signed account requests, orders, wallet\u002Fadmin actions, and secure signing without exposing API keys.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-spot-rest\u002FSKILL.md",[],[135,114,136,137,138,139,140,124,123,122,141,142,143,118,144,117,116],"mexc spot rest","REST","admin","signing","Wallet","requests","actions","secure","data","orders",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":108,"licenseFileUrl":149,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":33},"01M70XSYSVZ2N0N91XCAR2CAK0","mexc-futures-websocket","MEXC Futures WebSocket workflows for public streams, private account\u002Forder\u002Fposition streams, ping\u002Fpong, subscriptions, and depth maintenance.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fexchanges\u002Fmncrftfrcnm-mexc-futures-websocket\u002FSKILL.md",[],[153,154,115,155,156,125,123,157,121,120,118,117],"mexc futures websocket","futures","position","ping","subscriptions",{"skillNo":159,"name":160,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":161,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":33},"01M6H0ZWHVE5W04WG2DKQE2SQC","0xklen-version-and-refresh-sanctions-lists","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-version-and-refresh-sanctions-lists\u002FSKILL.md",[],[165,166,167],"refresh","0xklen version and refresh sanctions lists","version",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":172,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":33},"01M6H0Z28Q3R8J0S799GJQWXM3","verify-tests-cover-changed-lines","Use when a PR adds code that the existing suite may not exercise. Measures patch coverage — the share of newly changed lines hit by tests — before approving.","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-verify-tests-cover-changed-lines\u002FSKILL.md",[],[176,177,178,179,180,181,182,25,183,184,185],"tests","cover","verify tests cover changed lines","verify","coverage","pr","exercise","patch","code","share"]