plan-change
Use when planning a DevPulse feature, bug fix or refactor, clarifying ownership and edge cases, or deciding the implementation and acceptance checks.
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-04
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- plan-change
- description
- Use when planning a DevPulse feature, bug fix or refactor, clarifying ownership and edge cases, or deciding the implementation and acceptance checks.
03 SKILL.md 正文
Plan a DevPulse change
Use before changing behavior. For a small fix, keep the plan in the conversation; do not create a planning document just to follow this skill. Planning must lead into implementation and testing when the user requested implementation.
Inspect and decide
- Read AGENTS.md, CONTEXT.md, applicable scoped instructions and the current worktree status. Preserve unrelated edits. Read an existing task/spec if supplied; an absent spec is a gap, not permission to invent its contents.
- If .codegraph exists, use codegraph_explore with exact paths or symbols before scoped text searches. Trace the affected entry point, consumers, data boundary and tests. Exclude generated output and caches.
- Separate existing behavior, intended domain behavior and the requested change. CONTEXT.md describes feed ownership and processing intent; it is not proof that every behavior is implemented. Read active plans only when the requested work touches them.
- Describe the user action and expected outcome, exact classes/functions that will change, state/data ownership, lifetime and failure behavior. Prefer extending the current path over adding a second refresh, paging or processing path. Inspect a neighboring action before proposing new machinery. Reuse its event, intent and use-case pattern; place behavior shared by multiple ViewModels in the existing feature interactor. Name the concrete requirement before adding an action processor, command hierarchy, pending-operation registry or synchronization.
- Identify schema, serialized-state, background-work and platform compatibility implications. Route to specialist skills below. Ask only for decisions the task and available evidence cannot resolve; continue independent authorized work.
- Define acceptance cases before implementation. Include relevant success, invalid input, failure, cancellation, stale/concurrent work, empty data, restoration and offline/reopen cases. Do not mechanically require every category for every change.
Ownership references
- Modules and settings.gradle.kts identify actual modules. Presentation depends on domain use cases; current repository interfaces live in data modules. Feature-local interactors map domain streams into UI models. Do not relocate interfaces to fit generic Clean Architecture examples.
- SetSyncInBackgroundUseCase calls FeedSettingsRepositoryImpl and DatastoreDevPulsePreferences. This is a useful settings persistence path; it is not evidence for a new database table or a second preference store.
- FeedListViewModel shows the state -> interactor -> cached paging stream relationship. Its ignored pin-write result is a limitation, not error-handling guidance.
- FeedDiscoveryDatabaseTest checks literal results through real storage. Use that kind of acceptance evidence for database behavior, with the current baseline policy.
Error-contract acceptance
Plan the error boundary explicitly: repositories, DAOs, clients, parsers, mappers and other operations below use cases return plain T, Unit or Flow<T> and let failures throw. Only use cases convert ordinary exceptions to Result<T>/Flow<Result<T>> with the injected DispatcherProvider helpers. Identify whether work is I/O, CPU work or Flow collection, and how callers above the use case handle the Result. Treat existing lower-layer Result/catch implementations as violations to correct within the requested scope, not alternative conventions. Acceptance cases distinguish lower-layer thrown failure, use-case failure conversion, upstream Flow failure and propagated cancellation.
Route by the actual change
- Existing behavior: implement-change; new screen/module: add-screen or add-feature.
- Routes, tab stacks or panes: navigation-3; database/query/persistence: change-database.
- HTTP, decoding or catalog reconciliation: change-network; startup, DI or native/background work: change-platform.
- Behavioral assertions: test-change; execution scope and final evidence: verify-change.
Plan output and completion
State the observable change, exact owners, cohesive file set, edge cases, smallest useful tests and platform/runtime checks. Name any baseline failure or unresolved decision. Respect an explicit preview-only request. Once authorized, continue with implement-change instead of stopping after a plan.
Preview verification using bash scripts/verify.sh --base <reviewed-integration-ref> --plan. This command plans checks; it does not validate the feature. Reuse existing canonical guidance on refresh instead of adding duplicate skills.
04 同仓库更多 Skills
verify-change
Use when verifying DevPulse changes, choosing scoped Gradle checks, reviewing database or feed changes, or reporting platform verification gaps.
test-change
Use when adding or reviewing behavioral tests for DevPulse features, state/effects, use cases, network boundaries, paging, persistence or coroutine lifetimes.
plan-change
Use when planning a DevPulse feature, bug fix or refactor, clarifying ownership and edge cases, or deciding the implementation and acceptance checks.
navigation-3
Use when changing DevPulse Navigation3 routes, tab stacks, adaptive list/detail metadata or back behavior.
ktlint-fix
Use when explicitly asked to run the legacy ktlint workflow; first check whether formatting tasks actually exist.
implement-change
Use when implementing or refactoring existing DevPulse behavior across screens, state, use cases, repositories or shared utilities after establishing acceptance checks.