[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6E02S969Z8P4318FQVTTP85":3,"skill-same:01M6E02S969Z8P4318FQVTTP85":66},{"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":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M6E02S969Z8P4318FQVTTP85","gstack-openclaw-investigate",null,"Use when asked to debug, fix a bug, investigate an error, or do root cause analysis, and when users report errors, stack traces, unexpected behavior, or say something stopped working.","westn\u002Fgstack-pi-port","westn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F224833?v=4","01M6DZW54VKKV0RAMJWH6EGXZ5","Fredrik Nordell","01M6DZW596W0RYE47PT4SZSDJA",1,"MIT","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fopenclaw\u002Fskills\u002Fgstack-openclaw-investigate\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"openclaw","investigate","gstack","gstack openclaw investigate","debug","root cause analysis","report","analysis","stack","behavior","fix","use","say","bug","do","2026-11-10 10:12:30",false,"---\nname: gstack-openclaw-investigate\ndescription: Use when asked to debug, fix a bug, investigate an error, or do root cause analysis, and when users report errors, stack traces, unexpected behavior, or say something stopped working.\n---\n\n# Systematic Debugging\n\n## Iron Law\n\n**NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.**\n\nFixing symptoms creates whack-a-mole debugging. Every fix that doesn't address root cause makes the next bug harder to find. Find the root cause, then fix it.\n\n---\n\n## Phase 1: Root Cause Investigation\n\nGather context before forming any hypothesis.\n\n1. **Collect symptoms:** Read the error messages, stack traces, and reproduction steps. If the user hasn't provided enough context, ask ONE question at a time. Don't ask five questions at once.\n\n2. **Read the code:** Trace the code path from the symptom back to potential causes. Search for all references, read the logic around the failure point.\n\n3. **Check recent changes:**\n   ```bash\n   git log --oneline -20 -- \u003Caffected-files>\n   ```\n   Was this working before? What changed? A regression means the root cause is in the diff.\n\n4. **Reproduce:** Can you trigger the bug deterministically? If not, gather more evidence before proceeding.\n\n5. **Check memory** for prior debugging sessions on the same area. Recurring bugs in the same files are an architectural smell.\n\nOutput: **\"Root cause hypothesis: ...\"** ... a specific, testable claim about what is wrong and why.\n\n---\n\n## Phase 2: Pattern Analysis\n\nCheck if this bug matches a known pattern:\n\n**Race condition** ... Intermittent, timing-dependent. Look at concurrent access to shared state.\n\n**Nil\u002Fnull propagation** ... NoMethodError, TypeError. Missing guards on optional values.\n\n**State corruption** ... Inconsistent data, partial updates. Check transactions, callbacks, hooks.\n\n**Integration failure** ... Timeout, unexpected response. External API calls, service boundaries.\n\n**Configuration drift** ... Works locally, fails in staging\u002Fprod. Env vars, feature flags, DB state.\n\n**Stale cache** ... Shows old data, fixes on cache clear. Redis, CDN, browser cache.\n\nAlso check:\n- Known issues in the project for related problems\n- Git log for prior fixes in the same area. Recurring bugs in the same files are an architectural smell, not a coincidence.\n\n**External search:** If the bug doesn't match a known pattern, search for the error type online. **Sanitize first:** strip hostnames, IPs, file paths, SQL, customer data. Search the error category, not the raw message.\n\n---\n\n## Phase 3: Hypothesis Testing\n\nBefore writing ANY fix, verify your hypothesis.\n\n1. **Confirm the hypothesis:** Add a temporary log statement, assertion, or debug output at the suspected root cause. Run the reproduction. Does the evidence match?\n\n2. **If the hypothesis is wrong:** Search for the error (sanitize sensitive data first). Return to Phase 1. Gather more evidence. Do not guess.\n\n3. **3-strike rule:** If 3 hypotheses fail, **STOP**. Tell the user:\n\n   \"3 hypotheses tested, none match. This may be an architectural issue rather than a simple bug.\"\n\n   Options:\n   - Continue investigating with a new hypothesis (describe it)\n   - Escalate for human review (needs someone who knows the system)\n   - Add logging and wait (instrument the area and catch it next time)\n\n**Red flags** ... if you see any of these, slow down:\n- \"Quick fix for now\" ... there is no \"for now.\" Fix it right or escalate.\n- Proposing a fix before tracing data flow ... you're guessing.\n- Each fix reveals a new problem elsewhere ... wrong layer, not wrong code.\n\n---\n\n## Phase 4: Implementation\n\nOnce root cause is confirmed:\n\n1. **Fix the root cause, not the symptom.** The smallest change that eliminates the actual problem.\n\n2. **Minimal diff:** Fewest files touched, fewest lines changed. Resist the urge to refactor adjacent code.\n\n3. **Write a regression test** that:\n   - **Fails** without the fix (proves the test is meaningful)\n   - **Passes** with the fix (proves the fix works)\n\n4. **Run the full test suite.** No regressions allowed.\n\n5. **If the fix touches >5 files:** Flag the blast radius to the user before proceeding. That's large for a bug fix.\n\n---\n\n## Phase 5: Verification & Report\n\n**Fresh verification:** Reproduce the original bug scenario and confirm it's fixed. This is not optional.\n\nRun the test suite.\n\nOutput a structured debug report:\n\n**DEBUG REPORT**\n- **Symptom:** what the user observed\n- **Root cause:** what was actually wrong\n- **Fix:** what was changed, with file references\n- **Evidence:** test output, reproduction showing fix works\n- **Regression test:** location of the new test\n- **Related:** prior bugs in same area, architectural notes\n- **Status:** DONE | DONE_WITH_CONCERNS | BLOCKED\n\nSave the report to `memory\u002F` with today's date so future sessions can reference it.\n\n---\n\n## Important Rules\n\n- **3+ failed fix attempts: STOP and question the architecture.** Wrong architecture, not failed hypothesis.\n- **Never apply a fix you cannot verify.** If you can't reproduce and confirm, don't ship it.\n- **Never say \"this should fix it.\"** Verify and prove it. Run the tests.\n- **If fix touches >5 files:** Flag to user before proceeding.\n- **Completion status:**\n  - DONE ... root cause found, fix applied, regression test written, all tests pass\n  - DONE_WITH_CONCERNS ... fixed but cannot fully verify (e.g., intermittent bug, requires staging)\n  - BLOCKED ... root cause unclear after investigation, escalated\n","# Systematic Debugging\n\n## Iron Law\n\n**NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST.**\n\nFixing symptoms creates whack-a-mole debugging. Every fix that doesn't address root cause makes the next bug harder to find. Find the root cause, then fix it.\n\n---\n\n## Phase 1: Root Cause Investigation\n\nGather context before forming any hypothesis.\n\n1. **Collect symptoms:** Read the error messages, stack traces, and reproduction steps. If the user hasn't provided enough context, ask ONE question at a time. Don't ask five questions at once.\n\n2. **Read the code:** Trace the code path from the symptom back to potential causes. Search for all references, read the logic around the failure point.\n\n3. **Check recent changes:**\n   ```bash\n   git log --oneline -20 -- \u003Caffected-files>\n   ```\n   Was this working before? What changed? A regression means the root cause is in the diff.\n\n4. **Reproduce:** Can you trigger the bug deterministically? If not, gather more evidence before proceeding.\n\n5. **Check memory** for prior debugging sessions on the same area. Recurring bugs in the same files are an architectural smell.\n\nOutput: **\"Root cause hypothesis: ...\"** ... a specific, testable claim about what is wrong and why.\n\n---\n\n## Phase 2: Pattern Analysis\n\nCheck if this bug matches a known pattern:\n\n**Race condition** ... Intermittent, timing-dependent. Look at concurrent access to shared state.\n\n**Nil\u002Fnull propagation** ... NoMethodError, TypeError. Missing guards on optional values.\n\n**State corruption** ... Inconsistent data, partial updates. Check transactions, callbacks, hooks.\n\n**Integration failure** ... Timeout, unexpected response. External API calls, service boundaries.\n\n**Configuration drift** ... Works locally, fails in staging\u002Fprod. Env vars, feature flags, DB state.\n\n**Stale cache** ... Shows old data, fixes on cache clear. Redis, CDN, browser cache.\n\nAlso check:\n- Known issues in the project for related problems\n- Git log for prior fixes in the same area. Recurring bugs in the same files are an architectural smell, not a coincidence.\n\n**External search:** If the bug doesn't match a known pattern, search for the error type online. **Sanitize first:** strip hostnames, IPs, file paths, SQL, customer data. Search the error category, not the raw message.\n\n---\n\n## Phase 3: Hypothesis Testing\n\nBefore writing ANY fix, verify your hypothesis.\n\n1. **Confirm the hypothesis:** Add a temporary log statement, assertion, or debug output at the suspected root cause. Run the reproduction. Does the evidence match?\n\n2. **If the hypothesis is wrong:** Search for the error (sanitize sensitive data first). Return to Phase 1. Gather more evidence. Do not guess.\n\n3. **3-strike rule:** If 3 hypotheses fail, **STOP**. Tell the user:\n\n   \"3 hypotheses tested, none match. This may be an architectural issue rather than a simple bug.\"\n\n   Options:\n   - Continue investigating with a new hypothesis (describe it)\n   - Escalate for human review (needs someone who knows the system)\n   - Add logging and wait (instrument the area and catch it next time)\n\n**Red flags** ... if you see any of these, slow down:\n- \"Quick fix for now\" ... there is no \"for now.\" Fix it right or escalate.\n- Proposing a fix before tracing data flow ... you're guessing.\n- Each fix reveals a new problem elsewhere ... wrong layer, not wrong code.\n\n---\n\n## Phase 4: Implementation\n\nOnce root cause is confirmed:\n\n1. **Fix the root cause, not the symptom.** The smallest change that eliminates the actual problem.\n\n2. **Minimal diff:** Fewest files touched, fewest lines changed. Resist the urge to refactor adjacent code.\n\n3. **Write a regression test** that:\n   - **Fails** without the fix (proves the test is meaningful)\n   - **Passes** with the fix (proves the fix works)\n\n4. **Run the full test suite.** No regressions allowed.\n\n5. **If the fix touches >5 files:** Flag the blast radius to the user before proceeding. That's large for a bug fix.\n\n---\n\n## Phase 5: Verification & Report\n\n**Fresh verification:** Reproduce the original bug scenario and confirm it's fixed. This is not optional.\n\nRun the test suite.\n\nOutput a structured debug report:\n\n**DEBUG REPORT**\n- **Symptom:** what the user observed\n- **Root cause:** what was actually wrong\n- **Fix:** what was changed, with file references\n- **Evidence:** test output, reproduction showing fix works\n- **Regression test:** location of the new test\n- **Related:** prior bugs in same area, architectural notes\n- **Status:** DONE | DONE_WITH_CONCERNS | BLOCKED\n\nSave the report to `memory\u002F` with today's date so future sessions can reference it.\n\n---\n\n## Important Rules\n\n- **3+ failed fix attempts: STOP and question the architecture.** Wrong architecture, not failed hypothesis.\n- **Never apply a fix you cannot verify.** If you can't reproduce and confirm, don't ship it.\n- **Never say \"this should fix it.\"** Verify and prove it. Run the tests.\n- **If fix touches >5 files:** Flag to user before proceeding.\n- **Completion status:**\n  - DONE ... root cause found, fix applied, regression test written, all tests pass\n  - DONE_WITH_CONCERNS ... fixed but cannot fully verify (e.g., intermittent bug, requires staging)\n  - BLOCKED ... root cause unclear after investigation, escalated\n",{"name":5,"description":7},"main","30109be4b796544f50f067915edf4d9874dc50d2","port\u002Fgstack\u002Fopenclaw\u002Fskills\u002Fgstack-openclaw-investigate",0,"https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port","https:\u002F\u002Fgithub.com\u002Fwestn","2026-09-04 10:21:48",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add westn\u002Fgstack-pi-port --skill gstack-openclaw-investigate",{"tool":52,"command":53},"bunx","bunx skills add westn\u002Fgstack-pi-port --skill gstack-openclaw-investigate",{"tool":55,"command":56},"pnpm","pnpm dlx skills add westn\u002Fgstack-pi-port --skill gstack-openclaw-investigate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fopenclaw\u002Fskills\u002Fgstack-openclaw-investigate\u002FSKILL.md",true,[60],{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"scripts\u002Fintro.py","SCRIPT","脚本",7003,"https:\u002F\u002Fgithub.com\u002Fopeneuler-mirror\u002FIB_Robot\u002Fblob\u002Fmaster\u002F.agents\u002Fskills\u002Fintro\u002Fscripts\u002Fintro.py",[67,80,91,103,124,140],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":34},"01M6E05W3NMBAPS04BTY5022R0","unfreeze","Clear the freeze boundary set by \u002Fskill:freeze, allowing edits to all directories again. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Funfreeze\u002FSKILL.md",[],[69,74,75,76,77,78,21,79],"SET","boundary","freeze","edit","remove","clear",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":34},"01M6E05TJPTDXG2ARV08KYYWJG","beta","Clean fixture tool skill with no forced reads and no mode table.","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Fbeta\u002FSKILL.md",[],[82,87,88,89,90],"tool","table","clean","fixture",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":34},"01M6E05RERN8G9QBE7WNMZSQ4M","alpha","Fixture dispatcher with a mode table and forced-read references.","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Ftest\u002Ffixtures\u002Fcontext-bill\u002Ftree-a\u002Falpha\u002FSKILL.md",[],[93,98,88,99,100,101,102,90],"dispatcher","read","router","references","upstream",{"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":114,"publishedAt":34},"01M6E05MJ4R9JDPFPZG9RXNKDS","sync-gbrain","Keep gbrain current with this repo's code and refresh agent search guidance in AGENTS.md. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fsync-gbrain\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[115,116,117,118,21,119,120,121,122,123],"gbrain","sync gbrain","sync","refresh","update","code","search","repo","guidance",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":34},"01M6E05FKKHRASN15HCDPRVX1F","spec","Turn vague intent into a precise, executable spec in five phases. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fspec\u002FSKILL.md",[],[126,131,132,133,134,135,136,137,21,138,139],"github issue","github","file","write","up","issue","intent","backlog","ticket",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":34},"01M6E05BF4C4WZXYY4MKX78KQX","skillify","Codify the most recent successful \u002Fskill:scrape flow into a permanent browser-skill on disk. (gstack)","https:\u002F\u002Fgithub.com\u002Fwestn\u002Fgstack-pi-port\u002Fblob\u002Fmain\u002Fport\u002Fgstack\u002Fskillify\u002FSKILL.md",[],[142,147,148,149,150,151,21],"browser","flow","scrape","disk","save"]