skillsUpdate
Local-only maintenance of observable Store guidance across Svelte Readable, React ReadonlySignal, and Streaming/Kefir Observable families. Use for cross-family behavior, docs, install routing, or veri
SKILL.md.agents/skillsUpdate/SKILL.md
GitHubskillsUpdate — local observable skill maintenance
This is a repository-local maintenance skill. Keep it under .agents/skillsUpdate/SKILL.md only. Do not copy it into skills/, do not add .agents/ to package.json files, and do not add .agents/ or skillsUpdate to package exports or packaged skill install bundles.
Use this skill before changing observable Store guidance that affects direct selector outputs: Svelte Readable, React ReadonlySignal, or Streaming/Kefir Observable. The goal is to update every family consistently without mixing their runtime patterns.
Observable family matrix
| Family | Root router | Selectors | Lifecycle / scheduling | Store / integration | Package install routing | Docs, tests, verification |
|---|---|---|---|---|---|---|
| Svelte readable | skills/SKILL.md, skills/svelte/SKILL.md | skills/svelte/selectors/SKILL.md | skills/svelte/selector-lifecycle/SKILL.md, skills/svelte/selector-scheduling/SKILL.md | skills/svelte/store/SKILL.md, skills/svelte/component-integration/SKILL.md | scripts/postinstall.mjs svelte bundle and scripts/cli.mjs / docs/INSTALLATION.md install-skills:svelte help | docs/SELECTORS.md, docs/ARCHITECTURE.md, docs/TESTING.md, npm run validate:architecture, npm run validate:release when dependencies/build outputs are available |
| React ReadonlySignal | skills/SKILL.md, skills/react/SKILL.md | skills/react/selectors/SKILL.md, skills/react/signals/SKILL.md | skills/react/selector-lifecycle/SKILL.md, skills/react/selector-scheduling/SKILL.md | skills/react/store/SKILL.md, skills/react/component-integration/SKILL.md | scripts/postinstall.mjs react bundle and scripts/cli.mjs / docs/INSTALLATION.md install-skills:react help | docs/SELECTORS.md, docs/ARCHITECTURE.md, React ESLint guidance under eslint-plugins/react/, npm run validate:architecture, npm run validate:release when available |
| Streaming/Kefir Observable | skills/SKILL.md, skills/streaming/SKILL.md | skills/streaming/selectors/SKILL.md | skills/streaming/selector-lifecycle/SKILL.md; scheduling guidance lives in streaming selector/lifecycle docs and shared selector docs unless a streaming scheduling leaf is added | skills/streaming/store/SKILL.md; no component-integration leaf exists for this no-UI/default family | scripts/postinstall.mjs streaming bundle and scripts/cli.mjs / docs/INSTALLATION.md install-skills:streaming help | docs/SELECTORS.md, docs/ARCHITECTURE.md, docs/TESTING.md, Streaming/no-UI import guidance, npm run validate:architecture, npm run validate:release when available |
Cross-family update rule
When one observable behavior changes, update the root router and every affected family leaf in the same review pass. Do not let one family describe behavior as unique when the implementation applies to all three families.
For selector-output caching, every observable family must say the direct output is reused for the same Store object, Store-created selector, and selector arguments while the cache entry is retained. Never-observed outputs are cached too; concurrent consumers share an output, removing only one retains it, and final-consumer cleanup evicts that output. A retained JavaScript reference does not prevent eviction. Whole-Store disposal evicts its entries; cache counts are not active-subscription counts.
- Svelte: direct calls return cached Store-bound readables, not context-helper reads; keep component-init placement policy, subscription ownership, and
.select()/.effect()escape hatches. Fresh Svelteinit()requires component initialization; it does not provide the context needed byuseRunSaga. Teach explicit ownerinit/onMount/runSagastartup, not an invented provider. - React: direct calls return cached
ReadonlySignalvalues; direct signal consumption stays preferred, with.useValue(...args)only for necessary hook/plain-value fallbacks. - Streaming: direct calls return cached Kefir Observables;
.withStore(streamStore)accepts an initialized StreamingStore. The Store object is the source/cache key and supplies the internal Kefir state stream for computation; the raw observable is not the public binding argument. Distinct Store objects remain distinct cache sources even if they expose the same stream.
Keep scheduling qualifications consistent: initial snapshots are prompt when all
inputs are available; Store-state writes coalesce on the Store cadence, while
reactive-argument changes may emit immediately downstream. A cold Streaming
argument with no value delays initial output. No public fast-selector API exists;
one-shot .select/.effect and Redux selector-channel reads are distinct paths.
Also update any anti-pattern language so agents do not add manual memoization, debounce/throttle wrappers, extra cache maps, props drilling, signal proxies, or stream passing solely to avoid valid repeated selector calls.
Consistency checklist for behavior changes
- Read
skills/SKILL.mdfirst and verify routing does not imply the behavior is Svelte-only, React-only, or Streaming-only unless the code truly is family-specific. - For each affected family, update its root
SKILL.mdrouting table and the exact selector/lifecycle/scheduling/store leaves from the matrix. - Update
docs/SELECTORS.mdwhen conceptual API behavior, lifecycle tables, proxy memoization, output caching, or anti-pattern guidance changes. - Update
docs/ARCHITECTURE.md,docs/TESTING.md, ordocs/INSTALLATION.mdonly when the behavior changes architecture policy, verification expectations, or install routing. - Check package install routing in
scripts/postinstall.mjsand CLI/help text inscripts/cli.mjswhen a skill directory, bundle, or install target changes. - Check ESLint/architecture guidance if the change affects selector call modes, direct selector preference, component lifecycle boundaries, import boundaries, or no-extra-selector-caching rules.
- Run or document the smallest valid checks: path inspection,
npm run validate:architecturefor skills/docs that govern Redux/selector policy, andnpm run validate:releasewhen dependencies and build prerequisites are available.
New observable family checklist
Use this checklist before adding a fourth observable-style Store output family.
- Define the public package entrypoint, Store class, direct selector output type, state source identity, lifecycle model, and scheduling/caching behavior.
- Add package exports and release-validation import/type checks for the new public entrypoint only if the runtime API is approved.
- Add a new packaged family router under
skills/<family>/SKILL.mdplus leaves for selectors, lifecycle/scheduling, store/integration, migration/setup if needed, and family-specific pitfalls. - Update
skills/SKILL.mdrouting decision order, route matrix, selector-output cache routing, and consumer install routing without weakening the exclusive-one-family-per-app rule. - Update
skills/setup/SKILL.mdand relevantskills/core/**references when setup, import boundaries, testing, selector channels, or verifier guidance must mention the new family. - Add a package install target and bundle in
scripts/postinstall.mjs, CLI command/help inscripts/cli.mjs, and docs table entries indocs/INSTALLATION.md. - Update
docs/SELECTORS.md,docs/ARCHITECTURE.md, README examples, and tests/verification docs for the new output type and call modes. - Add or update ESLint architecture guidance/rules if the family introduces component lifecycle, import boundary, direct selector preference, or no-extra-caching concerns.
- Update
scripts/validate-release.mjsso package contents, exports, imports, blocked paths, and type declarations match the new approved API. - Verify with static path review, focused tests for the new family,
npm run validate:architecture, andnpm run validate:releasewhen prerequisites are available.
Local packaging guardrail
This local skill is intentionally excluded from npm packaging. Current package validation allows package.json, repo metadata, configured runtime files, dist/, docs/, and packaged skills/; .agents/ is not allowed. If .agents/skillsUpdate/SKILL.md appears in an npm pack dry run, treat it as a release-blocking packaging regression.