# Qstack Separate Before Serializing Shared State

> Redesign concurrent work that shares a mutable file, branch, key, or state object by separating ownership before adding serialization. Use when actors may race, a lock is proposed, or coordination relies on taking turns.

- Skill: `hani-q/qstack-separate-before-serializing-shared-state` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add hani-q/qstack-separate-before-serializing-shared-state`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hani-q/qstack-separate-before-serializing-shared-state/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: hani-q (https://skillmd.com/u/hani-q)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/hani-q/qstack-separate-before-serializing-shared-state

---


# Separate before serializing shared state

Instructions and conventions are not concurrency control. Start by removing
the shared write target. Add serialization only when one canonical writer is a
real domain invariant.

## Decide from ownership

1. Inventory every mutable object and every actor that can write it. Include
   files, branches, database rows, keys, caches, queues, and in-memory state.
2. Ask whether the actors publish independent facts. If they do, give each
   actor its own file, key, branch, or state directory and merge only at a
   read-only reporting boundary.
3. Confirm that the split removes shared mutation. Two workers writing separate
   fields of one JSON document still share a write target; separate documents
   with one owner each do not.
4. If one shared object is required, choose structural serialization: a
   single-writer actor, sequential phases, a lockfile with defined stale-lock
   behavior, an atomic transaction, or compare-and-swap.
5. Prove the design under overlap, retry, crash, and stale-state scenarios.

Report the ownership map, the sharing that can be removed, any invariant that
requires serialization, and the concrete mechanism enforcing it. A request for
analysis does not authorize changing the system. Assess compatibility and
migration before changing a persisted format, public interface, or branch
workflow. It also does not authorize commits, pushes, publishing, deployment,
or external messages.

Adapted from Lauren Tan's PStack
[`principle-separate-before-serializing-shared-state`](https://github.com/cursor/plugins/blob/60c641e4fad674784b30abcf9f8915dea39df38d/pstack/skills/principle-separate-before-serializing-shared-state/SKILL.md)
at commit `60c641e4fad674784b30abcf9f8915dea39df38d` under the MIT License.
See [third-party notices](../../THIRD_PARTY_NOTICES.md).

