For Florida law firms
Firm playbook: the firm's own clause text, approved version by version — never over the client's instructions
firm lane · Deterministic — no model call
Current availability
ShippedConfigured and enabled: a firm's administrators, attorneys and paralegals propose; only the firm's attorneys approve and retire.
- Where it lives
- /firms/manage/playbook · /api/firm/playbook · the firm's estate-plan generation (/api/estate-plan/full, the firm's lane)
- What unlocks it
- the firm's staff propose the firm's own text for the clauses a document template lets a firm vary; one of the firm's attorneys approves each version; the firm's documents are drafted with the current approved versions
Status is evaluated against this deployment's configuration by the capability-status service at build time; the catalogue's facts were last reviewed on the date shown.
Capabilities
- ShippedEach version is proposed with its reason; its text, its SHA-256 and the tokens it uses are fixed by the database for good — a change is a new version.
- ShippedOne of the firm's attorneys approves a version by naming the hash of the text they read. Approving a newer version supersedes the older without touching it; retiring the current version reinstates the one before (or, with none, the clause library's own text).
- ShippedA variant replaces a clause only where the template lets a firm change it: a clause of fixed text, or one written in the template's own tokens that keeps every token carrying the client's instructions — names, fiduciaries, dispositions, elections, dates. Checked when it is proposed, again at approval, and again whenever it compiles; a variant that fails is not applied and the section says why.
- ShippedNo relational or gendered term about an identified person: pronouns only through the template's own tokens, filled from each client's own answers.
- ShippedEach section a variant shaped carries the version and the hash of its text; each document records every version its drafting was given, and a sealed plan pins them.
- ShippedA version newly approved or retired reaches every matter whose sealed plan used that clause's variant through the firm's source-change review — kept or updated, item by item.
Limits
- Never a clause composed from the client's answers, an execution block, an exhibit, a statutory certificate or form (the whole HIPAA release, Lady Bird deed and pre-need guardian designation), the Schedule A or the General Assignment — they take no variant.
- A model engine may reword a variant within its bounds: the document then records that the version was given to a model draft, not that its exact text was kept.
- The playbook decides the firm's wording; whether a variant is sound law stays the approving attorney's judgment.
- The clause library's reference clauses (the asset-protection lens) are kept as before and never compile.
What EstateDraftFL refuses
| Reason code | HTTP | What it means |
|---|---|---|
| unauthorized | 401 | The playbook needs a signed-in member of the firm's staff. |
| forbidden | 403 | The firm's administrators, attorneys and paralegals keep the playbook. |
| not-attorney | 403 | Only one of the firm's attorneys approves or retires a version. |
| invalid | 400 | A field could not be read — the document, the clause, the name, the text, the reason, the version or its hash — nothing was recorded. |
| variant-refused | 400 | The text cannot be proposed as written — each check it fails is named (a load-bearing or answer-built clause, a token the template does not have, a client instruction dropped, a person's terms hardcoded). |
| unknown-version | 404 | That version is not in the firm's playbook. |
| already-open | 409 | A proposal for this clause already waits for an attorney — approve or retire it first. |
| already-approved | 409 | That version is already approved. |
| stale | 409 | The text approved is not the version's — read it again. |
| closed | 409 | That version is retired — it takes nothing more. |
| template-changed | 409 | The clause library changed since the version was proposed and it no longer passes its checks — retire it and propose again. |
| unavailable | 503 | The playbook could not be read — or the step could not be written — just now; nothing was recorded. |
Evidence
- supabase/migrations/20261001180000_phase13_playbook_versions.sql
- src/lib/clauses/variant.ts
- src/lib/clauses/variant.test.ts
- src/lib/clauses/firm-playbook.test.ts
- src/lib/firm/playbook.ts
- src/lib/playbook/request.ts
- src/app/api/firm/playbook/route.ts
- src/app/firms/manage/playbook/page.tsx
- src/components/playbook/FirmPlaybook.tsx
- src/lib/impact/core.ts
Last reviewed 2026-10-01