SolidJS reactivity + UI state patterns for OpenWork
Why this skill exists OpenWork’s UI is SolidJS: it updates via signals, not React-style rerenders. Most “UI stuck” bugs are actually state coupling bugs (e.g. one global busy() disabling an unrelated action), not rerender issues. This skill captures the patterns we want to consistently use in OpenWork. Core rules Prefer fine-grained signals over shared global flags. Keep async actions scoped (each action gets its own pending state). Derive UI state via createMemo() instead of duplicating booleans. Avoid mutating arrays/objects stored in signals; always create new values. Scoped async actions (recommended) When an operation can overlap with others (permissions, installs, background refresh), don’t reuse a global busy(). Use a dedicated signal per action:
don't have the plugin yet? install it then click "run inline in claude" again.