flowchart TB
U["Developer"] --> C1["Claude Code"]
U --> C2["Codex"]
U --> C3["VS Code: @casan"]
C1 --> E1["Project hook events"]
C2 --> E1
C3 --> E2["CASAN-owned VSIX route"]
E1 --> B[".casan/casan-hook.py"]
E2 --> B
B --> V{"Global harness
matches version.lock?"}
V -- "No" --> D["Deny or degrade
according to mode"]
V -- "Yes" --> A["Client adapter"]
A --> G["Agentic bridge"]
subgraph TURN["Per-turn lifecycle"]
direction LR
L1["Admission
H1 + H4"] --> L2["Pre-tool gate
H2 + H4"]
L2 --> L3["Post-tool evidence
H5"]
L3 --> L4["Finalize
H3 + H5 + H6 + H7"]
end
G --> L1
L4 --> S["Project runtime state
.specify/logs + state"]
L4 --> R["Native client result"]