[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RAMHTFQ5KYV24EPP5R2W4S":3,"skill-same:01M6RAMHTFQ5KYV24EPP5R2W4S":57},{"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":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":14,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6RAMHTFQ5KYV24EPP5R2W4S","verify-change",null,"Use when verifying DevPulse changes, choosing scoped Gradle checks, reviewing database or feed changes, or reporting platform verification gaps.","shounakmulay\u002Fdev-pulse","shounakmulay","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42094964?v=4","01M6RAGFC9XZKE4TP55KEREM1B","Shounak Mulay","01M6RAGFJM9FHY8W0D92D9YRF1",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fverify-change\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"change","verify","verify change","verification","database","reporting","use","gradle","platform","changes","scoped","gaps","when","2026-11-10 10:12:30",false,"---\nname: verify-change\ndescription: Use when verifying DevPulse changes, choosing scoped Gradle checks, reviewing database or feed changes, or reporting platform verification gaps.\n---\n\n# Verify a DevPulse change\n\nRead applicable AGENTS.md instructions, CONTEXT.md, changed code, callers and behavioral tests. Preserve existing worktree changes. The root schema baseline policy takes precedence over historical migration examples.\n\n## Plan\n\nState the observable behavior, owner, edge cases and acceptance checks. Distinguish intended domain behavior in CONTEXT.md from implemented behavior. Use Modules.kt constants for dependencies and buildSrc convention plugins. Inspect current source before copying a template.\n\nRun from any directory:\n\n```bash\nbash \u002Fpath\u002Fto\u002FDevPulse\u002Fscripts\u002Fverify.sh --base \u003Creviewed-integration-ref> --plan\n```\n\nChoose the integration ref explicitly. Tracking branches do not prove the PR target. Without an explicit ref or a verified remote default branch, the runner selects all modules. It combines branch, staged, unstaged and untracked changes, then adds dependent consumers using an audited graph. Build configuration drift fails until the graph and task inventory are reviewed and refreshed in scripts\u002Fverification.json.\n\n## Choose the relevant workflow\n\nUse [plan-change](..\u002Fplan-change\u002FSKILL.md), [implement-change](..\u002Fimplement-change\u002FSKILL.md) and [test-change](..\u002Ftest-change\u002FSKILL.md) for requirements, implementation and behavioral assertions. Load the database\u002Fnetwork\u002Fplatform specialists when those boundaries change. This skill owns check selection and completion evidence.\n\n## Review before selecting checks\n\nRead the acceptance cases and specialist workflow for the affected boundary. Confirm whether changes involve controlled input\u002Fstate timing, database\u002Fquery\u002Fschema behavior, HTTP decoding\u002Fcache behavior, native startup\u002Flifecycle, or visual\u002Fnavigation behavior. Select checks that exercise those owners and their consumers. Preserve tests and constraints; never weaken them to obtain a pass.\n\n## Validate\n\nThe runner needs installed Python 3.7+, Bash, Git, a cached Gradle 9.3.1 distribution, a compatible JDK and cached dependencies. It installs nothing. Android needs SDK 37; iOS compilation needs macOS, Xcode and cached Kotlin\u002FNative dependencies. The catalog's JVM target 11 is bytecode compatibility, not a Gradle runtime pin.\n\n```bash\nbash scripts\u002Fverify.sh --base \u003Creviewed-integration-ref>\nbash scripts\u002Fverify.sh --all --plan\nbash scripts\u002Fverify.sh --all --strict\nDEVPULSE_VERIFY_ANDROID=1 DEVPULSE_VERIFY_IOS=1 bash scripts\u002Fverify.sh --all\nbash scripts\u002Fverify.sh --test :core:common dev.shounakmulay.devpulse.core.common.coroutines.SafeRunCatchingTest\n```\n\n`--test MODULE CLASS` checks only that class and does not verify consumers. Gradle supports class patterns via `--tests`; compilation has module scope. No file-level compiler selector or native related-test selector is configured. Do not invent one.\n\nNormal runs perform registry\u002Freference validation, runner fixtures, executable task discovery, task-graph preflight and selected JVM lint\u002Fcompilation\u002Ftests. Android and iOS are explicit opt-ins. Tests and suites run serially. Gradle offline mode prevents dependency resolution downloads; it does not isolate arbitrary test networking. Review newly introduced service-backed tests before running them.\n\nTracked generated outputs must remain unchanged. The runner refuses known artifact-writing task graphs instead of excluding generators silently. Use an isolated checkout to verify those graphs. No device, emulator, signing or release tasks run automatically.\n\nStrict mode fails on omitted applicable checks. Manual UI\u002Fdevice checks remain outside this runner, so a full success is unavailable while those checks apply. Visual or navigation changes need interaction checks, restoration\u002Fback behavior and accessibility review on affected layouts. Preview compilation does not prove canvas rendering or runtime correctness.\n\n## Blueprints\n\nPaths below are relative to the repository root and are checked by scripts\u002Fverification.json.\n\n- `core\u002Fcommon\u002Fsrc\u002FcommonTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fcommon\u002Fcoroutines\u002FSafeRunCatchingTest.kt`, `SafeRunCatchingTest`: observable helper behavior with real blocks and literal expectations. Do not copy test-local mutable counters into production state.\n- `core\u002Fnetwork\u002Fsrc\u002FcommonTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fnetwork\u002FDevPulseNetworkClientTest.kt`, `DevPulseNetworkClientTest`: real response decoding through MockEngine, mixed-case headers and generic bodies. It does not prove live HTTP cache behavior after process restart.\n- `core\u002Fdata\u002Fdb\u002Fsrc\u002FjvmTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fdata\u002Fdb\u002FFeedDiscoveryDatabaseTest.kt`, `FeedDiscoveryDatabaseTest`: real Room paging, invalidation and populated database reopen checks. Its current baseline reopen assertions check version 1; inspect the active schema and do not restore the retired v1\u002Fv2\u002Fv3 migration lineage.\n\n## Completion\n\nReview the final diff and existing dirty files. Report exact commands, passed checks, baseline failures, disabled stages and unavailable platforms. Separate proposed, compiled and runtime-verified behavior. A task listing proves task availability only; whitespace checks prove whitespace only. No CI or hook integration is implied by this runner.\n\n## Error-contract review\n\nBefore completion, inspect changed signatures and call sites: no Kotlin Result, try\u002Fcatch, runCatching, safeRunCatching, Flow.catch or exception-to-default recovery below use cases. Use cases return Result\u003CT>\u002FFlow\u003CResult\u003CT>> through the existing DispatcherProvider helpers, with no nested Result or Result\u003CFlow\u003CT>>. Confirm ordinary failures are converted once, cancellation propagates, and callers above the use case handle failure deliberately. Read named domain outcome types before treating a class whose name ends in Result as Kotlin Result. This is a semantic review requirement, not a claim that the runner mechanically enforces layer boundaries.\n","# Verify a DevPulse change\n\nRead applicable AGENTS.md instructions, CONTEXT.md, changed code, callers and behavioral tests. Preserve existing worktree changes. The root schema baseline policy takes precedence over historical migration examples.\n\n## Plan\n\nState the observable behavior, owner, edge cases and acceptance checks. Distinguish intended domain behavior in CONTEXT.md from implemented behavior. Use Modules.kt constants for dependencies and buildSrc convention plugins. Inspect current source before copying a template.\n\nRun from any directory:\n\n```bash\nbash \u002Fpath\u002Fto\u002FDevPulse\u002Fscripts\u002Fverify.sh --base \u003Creviewed-integration-ref> --plan\n```\n\nChoose the integration ref explicitly. Tracking branches do not prove the PR target. Without an explicit ref or a verified remote default branch, the runner selects all modules. It combines branch, staged, unstaged and untracked changes, then adds dependent consumers using an audited graph. Build configuration drift fails until the graph and task inventory are reviewed and refreshed in scripts\u002Fverification.json.\n\n## Choose the relevant workflow\n\nUse [plan-change](..\u002Fplan-change\u002FSKILL.md), [implement-change](..\u002Fimplement-change\u002FSKILL.md) and [test-change](..\u002Ftest-change\u002FSKILL.md) for requirements, implementation and behavioral assertions. Load the database\u002Fnetwork\u002Fplatform specialists when those boundaries change. This skill owns check selection and completion evidence.\n\n## Review before selecting checks\n\nRead the acceptance cases and specialist workflow for the affected boundary. Confirm whether changes involve controlled input\u002Fstate timing, database\u002Fquery\u002Fschema behavior, HTTP decoding\u002Fcache behavior, native startup\u002Flifecycle, or visual\u002Fnavigation behavior. Select checks that exercise those owners and their consumers. Preserve tests and constraints; never weaken them to obtain a pass.\n\n## Validate\n\nThe runner needs installed Python 3.7+, Bash, Git, a cached Gradle 9.3.1 distribution, a compatible JDK and cached dependencies. It installs nothing. Android needs SDK 37; iOS compilation needs macOS, Xcode and cached Kotlin\u002FNative dependencies. The catalog's JVM target 11 is bytecode compatibility, not a Gradle runtime pin.\n\n```bash\nbash scripts\u002Fverify.sh --base \u003Creviewed-integration-ref>\nbash scripts\u002Fverify.sh --all --plan\nbash scripts\u002Fverify.sh --all --strict\nDEVPULSE_VERIFY_ANDROID=1 DEVPULSE_VERIFY_IOS=1 bash scripts\u002Fverify.sh --all\nbash scripts\u002Fverify.sh --test :core:common dev.shounakmulay.devpulse.core.common.coroutines.SafeRunCatchingTest\n```\n\n`--test MODULE CLASS` checks only that class and does not verify consumers. Gradle supports class patterns via `--tests`; compilation has module scope. No file-level compiler selector or native related-test selector is configured. Do not invent one.\n\nNormal runs perform registry\u002Freference validation, runner fixtures, executable task discovery, task-graph preflight and selected JVM lint\u002Fcompilation\u002Ftests. Android and iOS are explicit opt-ins. Tests and suites run serially. Gradle offline mode prevents dependency resolution downloads; it does not isolate arbitrary test networking. Review newly introduced service-backed tests before running them.\n\nTracked generated outputs must remain unchanged. The runner refuses known artifact-writing task graphs instead of excluding generators silently. Use an isolated checkout to verify those graphs. No device, emulator, signing or release tasks run automatically.\n\nStrict mode fails on omitted applicable checks. Manual UI\u002Fdevice checks remain outside this runner, so a full success is unavailable while those checks apply. Visual or navigation changes need interaction checks, restoration\u002Fback behavior and accessibility review on affected layouts. Preview compilation does not prove canvas rendering or runtime correctness.\n\n## Blueprints\n\nPaths below are relative to the repository root and are checked by scripts\u002Fverification.json.\n\n- `core\u002Fcommon\u002Fsrc\u002FcommonTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fcommon\u002Fcoroutines\u002FSafeRunCatchingTest.kt`, `SafeRunCatchingTest`: observable helper behavior with real blocks and literal expectations. Do not copy test-local mutable counters into production state.\n- `core\u002Fnetwork\u002Fsrc\u002FcommonTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fnetwork\u002FDevPulseNetworkClientTest.kt`, `DevPulseNetworkClientTest`: real response decoding through MockEngine, mixed-case headers and generic bodies. It does not prove live HTTP cache behavior after process restart.\n- `core\u002Fdata\u002Fdb\u002Fsrc\u002FjvmTest\u002Fkotlin\u002Fdev\u002Fshounakmulay\u002Fdevpulse\u002Fcore\u002Fdata\u002Fdb\u002FFeedDiscoveryDatabaseTest.kt`, `FeedDiscoveryDatabaseTest`: real Room paging, invalidation and populated database reopen checks. Its current baseline reopen assertions check version 1; inspect the active schema and do not restore the retired v1\u002Fv2\u002Fv3 migration lineage.\n\n## Completion\n\nReview the final diff and existing dirty files. Report exact commands, passed checks, baseline failures, disabled stages and unavailable platforms. Separate proposed, compiled and runtime-verified behavior. A task listing proves task availability only; whitespace checks prove whitespace only. No CI or hook integration is implied by this runner.\n\n## Error-contract review\n\nBefore completion, inspect changed signatures and call sites: no Kotlin Result, try\u002Fcatch, runCatching, safeRunCatching, Flow.catch or exception-to-default recovery below use cases. Use cases return Result\u003CT>\u002FFlow\u003CResult\u003CT>> through the existing DispatcherProvider helpers, with no nested Result or Result\u003CFlow\u003CT>>. Confirm ordinary failures are converted once, cancellation propagates, and callers above the use case handle failure deliberately. Read named domain outcome types before treating a class whose name ends in Result as Kotlin Result. This is a semantic review requirement, not a claim that the runner mechanically enforces layer boundaries.\n",{"name":5,"description":7},"main","0793a3a80d3c675dc6a6cbba3bf45282f4908ba8",".agents\u002Fskills\u002Fverify-change","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse","https:\u002F\u002Fgithub.com\u002Fshounakmulay","2026-11-04 00:07:33",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add shounakmulay\u002Fdev-pulse --skill verify-change",{"tool":49,"command":50},"bunx","bunx skills add shounakmulay\u002Fdev-pulse --skill verify-change",{"tool":52,"command":53},"pnpm","pnpm dlx skills add shounakmulay\u002Fdev-pulse --skill verify-change","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fverify-change\u002FSKILL.md",true,[],[58,63,86,105,120,135],{"skillNo":59,"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":60,"categories":61,"keywords":62,"publishedAt":32},"01M6RAQ4Q5AT2M8ZMJCJZAR5SE","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fverify-change\u002FSKILL.md",[],[19,20,21,31,30,29,28,27,26,22,25,24,23],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":74,"publishedAt":32},"01M6RAPQ2X544N3R27SE4B05YC","test-change","Use when adding or reviewing behavioral tests for DevPulse features, state\u002Feffects, use cases, network boundaries, paging, persistence or coroutine lifetimes.","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftest-change\u002FSKILL.md",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[75,19,76,77,78,79,25,80,81,82,83,84,85,31],"test","test change","persistence","state","network","behavioral","tests","lifetimes","for","features","effects",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":32},"01M6RAPKGMDSNA3SGHXHCXTC3F","plan-change","Use when planning a DevPulse feature, bug fix or refactor, clarifying ownership and edge cases, or deciding the implementation and acceptance checks.","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fplan-change\u002FSKILL.md",[],[93,19,94,25,95,96,97,98,31,99,100,101,102,103,104],"plan","plan change","bug","implementation","feature","ownership","bug fix","refactor","edge","acceptance","planning","fix",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":32},"01M6RAPCNYVAT630PS59NZ5DET","navigation-3","Use when changing DevPulse Navigation3 routes, tab stacks, adaptive list\u002Fdetail metadata or back behavior.","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fnavigation-3\u002FSKILL.md",[],[112,113,114,31,115,116,25,117,118,119],"navigation 3","navigation","back","adaptive","detail","behavior","list","metadata",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":32},"01M6RAP8GK2PND12M3PEE8GB1Q","ktlint-fix","Use when explicitly asked to run the legacy ktlint workflow; first check whether formatting tasks actually exist.","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fktlint-fix\u002FSKILL.md",[],[127,104,128,129,130,131,132,25,31,133,134],"ktlint fix","check","first","run","tasks","workflow","formatting","Legacy",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":32},"01M6RAP50MQZHW4ZBA344H5TTV","implement-change","Use when implementing or refactoring existing DevPulse behavior across screens, state, use cases, repositories or shared utilities after establishing acceptance checks.","https:\u002F\u002Fgithub.com\u002Fshounakmulay\u002Fdev-pulse\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplement-change\u002FSKILL.md",[],[19,142,143,144,31,145,146,147,148,149,25,117,150,102,78],"implement change","implement","implementing","shared utilities","Existing","Utilities","shared","across","refactoring"]