mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-17 16:37:43 +00:00
docs: flag task component (perf) and sync system (correctness) as high-risk areas
This commit is contained in:
parent
3ff0eebf92
commit
e9ceb841d6
1 changed files with 3 additions and 0 deletions
|
|
@ -40,11 +40,14 @@ For SuperSync E2E (docker-compose) and the full E2E reference, see [`e2e/CLAUDE.
|
|||
- **Strict TypeScript:** no `any` (use `unknown` if truly unknown).
|
||||
- **State:** never mutate NgRx state — return new objects in reducers. Prefer Signals to Observables.
|
||||
- **Tests:** add unit tests for new services and state logic.
|
||||
- **Task component is a hot path:** every change to `src/app/features/tasks/task/task.component.*` (rendered once per task in long, scrollable lists) must be double-checked for negative performance impact — avoid function/getter calls in the template, extra change-detection work, and uncleaned subscriptions; verify against a large task list.
|
||||
|
||||
## Sync-correctness rules
|
||||
|
||||
Touched on most state-related PRs. Read the linked source/doc for full reasoning before editing. Rules 1–3 and 6 are one invariant — *one user intent = one op; replayed/remote ops must not re-trigger effects* — fully explained in [`docs/sync-and-op-log/contributor-sync-model.md`](docs/sync-and-op-log/contributor-sync-model.md).
|
||||
|
||||
**Every change to the sync system is high-risk:** a subtle bug can silently corrupt or lose user data across devices and is hard to recover from. Carefully check each change for correctness and possible failure modes (replay determinism, concurrent/remote edits, vector-clock conflicts) and call out the risks before reporting work as done.
|
||||
|
||||
1. **Effects inject `LOCAL_ACTIONS`**, never `Actions` (`ALL_ACTIONS` only for the op-log capture effect; remote archive side effects → `ArchiveOperationHandler`, not `ALL_ACTIONS`). Lint-enforced (`no-actions-in-effects`). → [contributor-sync-model.md](docs/sync-and-op-log/contributor-sync-model.md), `src/app/util/local-actions.token.ts`.
|
||||
2. **Prefer action-based effects**; a selector-based effect needs `skipDuringSyncWindow()`. Lint-enforced (`require-hydration-guard`). → [contributor-sync-model.md](docs/sync-and-op-log/contributor-sync-model.md).
|
||||
3. **Multi-entity change = meta-reducer**, not an effect fan-out (one reducer pass = one op). → [contributor-sync-model.md](docs/sync-and-op-log/contributor-sync-model.md), `src/app/root-store/meta/task-shared-meta-reducers/`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue