chore: add PROJECT_STATE.md action protocol to CLAUDE.md
Formalizes the read → lock → act → release cycle for any project that has a PROJECT_STATE.md. Every Claude instance must: - Re-read state before any action (not just at session start) - Claim a lock row before touching any component - Release lock + log result on completion or failure - Clear stale locks (>2h) before proceeding Applies to code edits, git ops, SSH/deploy, DB migrations, builds. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -213,6 +213,74 @@ At session start:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## PROJECT_STATE.md Action Protocol (MANDATORY for any project that has this file)
|
||||||
|
|
||||||
|
This protocol prevents conflicts between concurrent Claude sessions working on the same project. It is **not optional** — follow it for every significant action.
|
||||||
|
|
||||||
|
### What counts as an action
|
||||||
|
|
||||||
|
Any of the following requires the full read → lock → update → release cycle:
|
||||||
|
- Editing or creating source code files
|
||||||
|
- Git commit or push
|
||||||
|
- SSH command that modifies a server (deploy, install, config change, service restart)
|
||||||
|
- Database schema change or data migration
|
||||||
|
- Build pipeline modification
|
||||||
|
- Any operation listed in the project's Component Ownership Map
|
||||||
|
|
||||||
|
Reading files, planning, and answering questions do NOT require a lock.
|
||||||
|
|
||||||
|
### The protocol
|
||||||
|
|
||||||
|
**Step 1 — Read before acting**
|
||||||
|
Before starting any action, re-read PROJECT_STATE.md:
|
||||||
|
- Check Active Session Locks: is anything locked that you need to touch?
|
||||||
|
- If there is a conflicting lock that is NOT stale (< 2 hours old): stop, report the conflict to the user, ask how to proceed.
|
||||||
|
- If locks are stale (> 2 hours, last updated timestamp): note it to the user, clear the stale row, proceed.
|
||||||
|
|
||||||
|
**Step 2 — Claim your lock**
|
||||||
|
Immediately before performing the action, add a row to the Active Session Locks table:
|
||||||
|
|
||||||
|
| Session | Working On | Status | Blocks | Started |
|
||||||
|
|---------|-----------|--------|--------|---------|
|
||||||
|
| DESKTOP-0O8A1RL/Claude | Brief description | IN_PROGRESS | What others must avoid | HH:MM UTC |
|
||||||
|
|
||||||
|
Use `{machine}/{Claude or agent description}` as Session identifier.
|
||||||
|
Use the machine name from identity.json.
|
||||||
|
|
||||||
|
**Step 3 — Perform the action**
|
||||||
|
|
||||||
|
**Step 4 — Update on completion OR failure**
|
||||||
|
Immediately after the action finishes (regardless of outcome):
|
||||||
|
1. Remove your lock row from Active Session Locks
|
||||||
|
2. Add an entry to Recent Changes:
|
||||||
|
- Status: `COMPLETE`, `FAILED`, `PARTIAL`, or `ROLLED_BACK`
|
||||||
|
- If FAILED or PARTIAL: describe what state things were left in
|
||||||
|
3. Update the Current Project State table if any component status changed
|
||||||
|
4. Check off completed items in Pending / Next Up if applicable
|
||||||
|
|
||||||
|
### Anti-patterns (never do these)
|
||||||
|
|
||||||
|
❌ Starting work without reading PROJECT_STATE.md first
|
||||||
|
❌ Forgetting to claim a lock before touching a component
|
||||||
|
❌ Leaving a lock row in place after finishing (even on failure)
|
||||||
|
❌ Skipping the Recent Changes entry when work completes
|
||||||
|
❌ Letting a lock go stale — update the timestamp if a task takes longer than expected
|
||||||
|
|
||||||
|
### Stale lock rule
|
||||||
|
|
||||||
|
A lock older than 2 hours with no timestamp update is considered abandoned. Any session may clear it and claim the component, but must note in Recent Changes: `[Cleared stale lock from {session}]` before proceeding.
|
||||||
|
|
||||||
|
### Example — correct flow
|
||||||
|
|
||||||
|
```
|
||||||
|
[Reading PROJECT_STATE.md — no active locks on server/src/]
|
||||||
|
[Updating PROJECT_STATE.md — adding lock: "DESKTOP-0O8A1RL/Claude | POST /api/enroll endpoint | IN_PROGRESS | server/src/, migrations/ | 14:32 UTC"]
|
||||||
|
[... writing code, running migration ...]
|
||||||
|
[Updating PROJECT_STATE.md — removing lock, adding Recent Changes: "POST /api/enroll implemented | COMPLETE", updating component status: "Enrollment endpoint | IMPLEMENTED"]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
|
|
||||||
**ClaudeTools** -- MSP Work Tracking System (Production-Ready)
|
**ClaudeTools** -- MSP Work Tracking System (Production-Ready)
|
||||||
|
|||||||
Reference in New Issue
Block a user