[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HX6GTWXPVCKSWFXH1X3KPY":3,"skill-same:01M6HX6GTWXPVCKSWFXH1X3KPY":69},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6HX6GTWXPVCKSWFXH1X3KPY","codebase-pattern-analyzer",null,"Analyze a reference codebase to discover and extract reusable architectural patterns. Produces structured pattern descriptions that can be turned into standalone skills. This is a meta-skill that bootstraps the skill evolution chain.","HKUDS\u002FAgentPilot","HKUDS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118165258?v=4","01M6HW8VRNZP64G0P4MVJW2KKQ","✨Data Intelligence Lab@HKU✨","01M6HW8VWZVHBRHYH3T330PFWV",7993,"MIT","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fexamples\u002Fmy-daily-monitor\u002Fskills\u002Fcodebase-pattern-analyzer\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"pattern","codebase pattern analyzer","codebase","analyzer","reference","reusable","patterns","meta-skill","Meta","structured","discover","chain","extract","can","standalone","evolution","analyze","2026-11-10 10:12:30",false,"---\nname: codebase-pattern-analyzer\ndescription: Analyze a reference codebase to discover and extract reusable architectural patterns. Produces structured pattern descriptions that can be turned into standalone skills. This is a meta-skill that bootstraps the skill evolution chain.\n---\n\n# Codebase Pattern Analyzer\n\nSystematically analyze a reference codebase and extract reusable architectural patterns into structured descriptions. These descriptions become the raw material for new skills (via the `skill-template-generator` skill).\n\n## When to Use\n\n- You need to understand how a large codebase is structured before replicating it\n- You want to extract a specific pattern (component architecture, service layer, API proxy, etc.) from a reference project\n- You are bootstrapping a new project that should follow the conventions of an existing one\n\n## Step 1: Map the Directory Structure\n\nRead the top-level directory and identify the major code zones:\n\n```\nlist_dir \u003Cproject_root>\nlist_dir \u003Cproject_root>\u002Fsrc\n```\n\nClassify each directory into one of these roles:\n\n| Role | Typical Dirs | What to Look For |\n|------|-------------|------------------|\n| **Components** | `src\u002Fcomponents\u002F` | UI classes, base class inheritance, DOM manipulation |\n| **Services** | `src\u002Fservices\u002F` | Data fetching, API calls, circuit breakers, caching |\n| **Config** | `src\u002Fconfig\u002F` | Constants, panel definitions, API endpoints, feature flags |\n| **Styles** | `src\u002Fstyles\u002F` | CSS custom properties, theme variables, grid layout |\n| **Utils** | `src\u002Futils\u002F` | Helper functions, formatting, DOM utilities |\n| **API Layer** | `api\u002F`, `server\u002F` | Serverless functions, route handlers, CORS, proxy logic |\n| **Entry Point** | `src\u002Fmain.ts` | Bootstrap, panel instantiation, scheduler setup |\n\n## Step 2: Identify the Component Pattern\n\nFind the base component class (usually the most imported file in `components\u002F`):\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fcomponents\u002FPanel.ts\n```\n\nExtract these structural elements:\n\n1. **Constructor options interface** — what config each component accepts (id, title, className, etc.)\n2. **DOM structure** — how the element tree is built (header, content area, resize handles)\n3. **Lifecycle methods** — constructor, destroy, show\u002Fhide, refresh\n4. **State management** — loading\u002Ferror\u002Fcontent states, fetching guards\n5. **Data binding** — how data flows from service → render → DOM\n\nRecord the pattern as:\n```\nCOMPONENT PATTERN:\n  Base class: [name]\n  Options: [list of constructor params]\n  DOM tree: [element hierarchy]\n  States: [loading, error, content]\n  Lifecycle: [init → fetch → render → destroy]\n  Key methods: [getElement, showLoading, showError, setContent, refresh, destroy]\n```\n\n## Step 3: Identify the Service Layer Pattern\n\nExamine 2-3 service files to find the common structure:\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fservices\u002Fnews.ts\nread_file \u003Cproject_root>\u002Fsrc\u002Fservices\u002Fstock-market.ts\n```\n\nLook for:\n\n1. **Circuit breaker \u002F resilience** — retry logic, cooldown, cached fallback\n2. **Interface definitions** — typed data shapes returned by each service\n3. **Fetch pattern** — how HTTP calls are made (direct fetch, proxy, batching)\n4. **Caching strategy** — TTLs, stale-while-revalidate, in-memory cache\n5. **Error handling** — what happens on failure, default return values\n\nRecord as:\n```\nSERVICE PATTERN:\n  Resilience: [circuit breaker with N failures → cooldown]\n  Cache: [in-memory, TTL=Xms]\n  Fetch: [browser fetch → \u002Fapi\u002F... proxy → external API]\n  Error: [catch → recordFailure → return default]\n  Exports: [async functions, not class instances]\n```\n\n## Step 4: Identify the API Proxy Pattern\n\nRead the server-side proxy layer:\n\n```\nlist_dir \u003Cproject_root>\u002Fapi\u002F\nread_file \u003Cproject_root>\u002Fapi\u002F_cors.js\nread_file \u003Cproject_root>\u002Fapi\u002Fstocks.ts    # or similar endpoint\n```\n\nExtract:\n\n1. **File-per-endpoint structure** — one file per API domain\n2. **CORS handling** — origin allowlist, preflight response\n3. **API key isolation** — `process.env.*` usage, never exposed to frontend\n4. **Cache headers** — `Cache-Control`, `s-maxage`, `stale-while-revalidate`\n5. **Error wrapping** — structured JSON errors, never raw upstream responses\n6. **Input validation** — query parameter checks before upstream call\n\n## Step 5: Identify the Styling System\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fstyles\u002Fmain.css   # first 100 lines for CSS variables\n```\n\nExtract:\n\n1. **CSS custom properties** — color tokens, font stacks, spacing\n2. **Theme structure** — dark\u002Flight mode switch mechanism\n3. **Grid layout** — `grid-template-columns`, `auto-fill`, `minmax()` values\n4. **Component styles** — panel base styles, header, content, scrollbar\n5. **Semantic colors** — positive\u002Fnegative, severity levels, status indicators\n6. **Typography** — font family, sizes, letter-spacing, text-transform\n\n## Step 6: Identify the Scheduling \u002F Refresh Pattern\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fapp\u002Frefresh-scheduler.ts\n```\n\nExtract:\n\n1. **Registration API** — how panels register their refresh functions\n2. **Interval management** — per-panel configurable intervals\n3. **Visibility awareness** — pause when tab hidden, flush stale on return\n4. **In-flight guards** — prevent duplicate concurrent refreshes\n5. **Stagger logic** — avoid API burst when resuming\n\n## Step 7: Synthesize Into Pattern Descriptions\n\nFor each pattern discovered, produce a structured description:\n\n```markdown\n## Pattern: [Name]\n\n**Source file(s)**: [paths in reference codebase]\n**Category**: component | service | api | style | scheduler | utility\n\n### Structure\n[Key structural elements — interfaces, classes, functions]\n\n### Key Code\n[Minimal representative code snippet, 20-40 lines]\n\n### Conventions\n[Naming, file organization, import paths]\n\n### Dependencies\n[Other patterns this depends on]\n\n### Adaptation Notes\n[What must change when applying to a different project]\n```\n\n## Output\n\nThe final output should be a list of pattern descriptions, one per architectural concern. These become the input to the `skill-template-generator` skill, which turns each pattern into a standalone SKILL.md.\n\n## Tips\n\n- **Read broadly first, deeply second** — scan directory listings before reading individual files\n- **Follow imports** — if a component imports from `..\u002Fservices\u002F`, read that service next\n- **Count instances** — if 10+ components extend the same base class, that's a core pattern\n- **Note what's NOT used** — no framework (React, Vue) means vanilla DOM; no ORM means raw fetch\n- **Compare 2-3 examples** of the same pattern to distinguish the template from the instance-specific parts\n\n","# Codebase Pattern Analyzer\n\nSystematically analyze a reference codebase and extract reusable architectural patterns into structured descriptions. These descriptions become the raw material for new skills (via the `skill-template-generator` skill).\n\n## When to Use\n\n- You need to understand how a large codebase is structured before replicating it\n- You want to extract a specific pattern (component architecture, service layer, API proxy, etc.) from a reference project\n- You are bootstrapping a new project that should follow the conventions of an existing one\n\n## Step 1: Map the Directory Structure\n\nRead the top-level directory and identify the major code zones:\n\n```\nlist_dir \u003Cproject_root>\nlist_dir \u003Cproject_root>\u002Fsrc\n```\n\nClassify each directory into one of these roles:\n\n| Role | Typical Dirs | What to Look For |\n|------|-------------|------------------|\n| **Components** | `src\u002Fcomponents\u002F` | UI classes, base class inheritance, DOM manipulation |\n| **Services** | `src\u002Fservices\u002F` | Data fetching, API calls, circuit breakers, caching |\n| **Config** | `src\u002Fconfig\u002F` | Constants, panel definitions, API endpoints, feature flags |\n| **Styles** | `src\u002Fstyles\u002F` | CSS custom properties, theme variables, grid layout |\n| **Utils** | `src\u002Futils\u002F` | Helper functions, formatting, DOM utilities |\n| **API Layer** | `api\u002F`, `server\u002F` | Serverless functions, route handlers, CORS, proxy logic |\n| **Entry Point** | `src\u002Fmain.ts` | Bootstrap, panel instantiation, scheduler setup |\n\n## Step 2: Identify the Component Pattern\n\nFind the base component class (usually the most imported file in `components\u002F`):\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fcomponents\u002FPanel.ts\n```\n\nExtract these structural elements:\n\n1. **Constructor options interface** — what config each component accepts (id, title, className, etc.)\n2. **DOM structure** — how the element tree is built (header, content area, resize handles)\n3. **Lifecycle methods** — constructor, destroy, show\u002Fhide, refresh\n4. **State management** — loading\u002Ferror\u002Fcontent states, fetching guards\n5. **Data binding** — how data flows from service → render → DOM\n\nRecord the pattern as:\n```\nCOMPONENT PATTERN:\n  Base class: [name]\n  Options: [list of constructor params]\n  DOM tree: [element hierarchy]\n  States: [loading, error, content]\n  Lifecycle: [init → fetch → render → destroy]\n  Key methods: [getElement, showLoading, showError, setContent, refresh, destroy]\n```\n\n## Step 3: Identify the Service Layer Pattern\n\nExamine 2-3 service files to find the common structure:\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fservices\u002Fnews.ts\nread_file \u003Cproject_root>\u002Fsrc\u002Fservices\u002Fstock-market.ts\n```\n\nLook for:\n\n1. **Circuit breaker \u002F resilience** — retry logic, cooldown, cached fallback\n2. **Interface definitions** — typed data shapes returned by each service\n3. **Fetch pattern** — how HTTP calls are made (direct fetch, proxy, batching)\n4. **Caching strategy** — TTLs, stale-while-revalidate, in-memory cache\n5. **Error handling** — what happens on failure, default return values\n\nRecord as:\n```\nSERVICE PATTERN:\n  Resilience: [circuit breaker with N failures → cooldown]\n  Cache: [in-memory, TTL=Xms]\n  Fetch: [browser fetch → \u002Fapi\u002F... proxy → external API]\n  Error: [catch → recordFailure → return default]\n  Exports: [async functions, not class instances]\n```\n\n## Step 4: Identify the API Proxy Pattern\n\nRead the server-side proxy layer:\n\n```\nlist_dir \u003Cproject_root>\u002Fapi\u002F\nread_file \u003Cproject_root>\u002Fapi\u002F_cors.js\nread_file \u003Cproject_root>\u002Fapi\u002Fstocks.ts    # or similar endpoint\n```\n\nExtract:\n\n1. **File-per-endpoint structure** — one file per API domain\n2. **CORS handling** — origin allowlist, preflight response\n3. **API key isolation** — `process.env.*` usage, never exposed to frontend\n4. **Cache headers** — `Cache-Control`, `s-maxage`, `stale-while-revalidate`\n5. **Error wrapping** — structured JSON errors, never raw upstream responses\n6. **Input validation** — query parameter checks before upstream call\n\n## Step 5: Identify the Styling System\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fstyles\u002Fmain.css   # first 100 lines for CSS variables\n```\n\nExtract:\n\n1. **CSS custom properties** — color tokens, font stacks, spacing\n2. **Theme structure** — dark\u002Flight mode switch mechanism\n3. **Grid layout** — `grid-template-columns`, `auto-fill`, `minmax()` values\n4. **Component styles** — panel base styles, header, content, scrollbar\n5. **Semantic colors** — positive\u002Fnegative, severity levels, status indicators\n6. **Typography** — font family, sizes, letter-spacing, text-transform\n\n## Step 6: Identify the Scheduling \u002F Refresh Pattern\n\n```\nread_file \u003Cproject_root>\u002Fsrc\u002Fapp\u002Frefresh-scheduler.ts\n```\n\nExtract:\n\n1. **Registration API** — how panels register their refresh functions\n2. **Interval management** — per-panel configurable intervals\n3. **Visibility awareness** — pause when tab hidden, flush stale on return\n4. **In-flight guards** — prevent duplicate concurrent refreshes\n5. **Stagger logic** — avoid API burst when resuming\n\n## Step 7: Synthesize Into Pattern Descriptions\n\nFor each pattern discovered, produce a structured description:\n\n```markdown\n## Pattern: [Name]\n\n**Source file(s)**: [paths in reference codebase]\n**Category**: component | service | api | style | scheduler | utility\n\n### Structure\n[Key structural elements — interfaces, classes, functions]\n\n### Key Code\n[Minimal representative code snippet, 20-40 lines]\n\n### Conventions\n[Naming, file organization, import paths]\n\n### Dependencies\n[Other patterns this depends on]\n\n### Adaptation Notes\n[What must change when applying to a different project]\n```\n\n## Output\n\nThe final output should be a list of pattern descriptions, one per architectural concern. These become the input to the `skill-template-generator` skill, which turns each pattern into a standalone SKILL.md.\n\n## Tips\n\n- **Read broadly first, deeply second** — scan directory listings before reading individual files\n- **Follow imports** — if a component imports from `..\u002Fservices\u002F`, read that service next\n- **Count instances** — if 10+ components extend the same base class, that's a core pattern\n- **Note what's NOT used** — no framework (React, Vue) means vanilla DOM; no ORM means raw fetch\n- **Compare 2-3 examples** of the same pattern to distinguish the template from the instance-specific parts\n\n",{"name":5,"description":7},"main","6b84b0689ca0d9e7b1e4061188ff6b60758e0f8a","openspace\u002Fexamples\u002Fmy-daily-monitor\u002Fskills\u002Fcodebase-pattern-analyzer",940,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot","https:\u002F\u002Fgithub.com\u002FHKUDS","https:\u002F\u002Fsites.google.com\u002Fview\u002Fchaoh","2026-11-06 23:04:01",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add HKUDS\u002FAgentPilot --skill codebase-pattern-analyzer",{"tool":55,"command":56},"bunx","bunx skills add HKUDS\u002FAgentPilot --skill codebase-pattern-analyzer",{"tool":58,"command":59},"pnpm","pnpm dlx skills add HKUDS\u002FAgentPilot --skill codebase-pattern-analyzer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fexamples\u002Fmy-daily-monitor\u002Fskills\u002Fcodebase-pattern-analyzer\u002FSKILL.md",true,[63],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},".skill_id","OTHER","其他",39,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fexamples\u002Fmy-daily-monitor\u002Fskills\u002Fcodebase-pattern-analyzer\u002F.skill_id",[70,90,109,133,157,180],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":36},"01M6HYB297NDABRERJRVG0K8R0","agentpilot","Set up AgentPilot and use its single entry to prepare missing inputs and run configured RSI experiments. Use when the user requests AgentPilot installation or work with AgentPilot.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fplugins\u002Fagentpilot\u002Fskills\u002Fagentpilot\u002FSKILL.md",[],[72,77,78,79,80,81,82,83,84,85,86,87,88,89],"prepare","requests","with","missing","installation","rsi","up","use","user","work","SET","run","experiments",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":36},"01M6HYAYWXTTE1J7DJM0MFNQ4H","remember","Review auto-memory entries and propose promotions to OPENSPACE.md, OPENSPACE.local.md, or retained auto-memory topics; detect duplicates, stale facts, conflicts, and ambiguous entries before making changes.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fskills\u002Fremember\u002FSKILL.md",[],[92,97,98,99,100,101,102,103,104,105,106,107,108],"memory","review","auto","openspace","changes","facts","detect","entries","local","conflicts","stale","duplicates",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":120,"publishedAt":36},"01M6HYAVMPM4SBDV60R2B5HPV8","skill-discovery","Search reusable OpenSpace skills locally, and browse cloud packages step by step when a cloud skill may help. Reusing proven skills saves tokens, improves reliability, and extends your capabilities beyond built-in tools.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fskill-discovery\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[121,122,24,100,123,124,125,126,127,128,129,130,131,132],"skill discovery","discovery","step by step","tokens","packages","help","cloud","reliability","capabilities","browse","search","Tools",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":140,"publishedAt":36},"01M6HYAR811B3RB0M50RBEDGN6","delegate-task","Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fdelegate-task\u002FSKILL.md",[139],{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},[141,142,143,100,144,145,146,147,148,24,99,84,149,150,151,152,153,154,155,156],"delegate","task","delegate task","time","improve","desktop automation","worker","community","autonomous","tool","stack","for","share","tasks","automation","MCP",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":36},"01M6HYAM9FSGV6E52AYENDQXYH","write-special-chars-ts-check","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[164,165,166,167,168,169,170,171,172,173,174,175,176,177,152,178,179],"write special chars ts check","write","check","type","files","filters","only","template","file","python","typescript","output","Existing","type-checking","errors","script",{"skillNo":181,"name":182,"nameZh":6,"description":183,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":36},"01M6HYAH05HGV7SVWSVR8PJRQD","write-special-chars-readback","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[187,188,165,79,152,179,189,190,191,192,193,171,172,194,195,173],"write special chars readback","readback","helper","post","via","scripts","read","verification","cleanup"]