Production already has a DIFFERENT, earlier module installed as `activeblue_familylaw` (models fl.*, real data). Renamed this build's technical name to `activeblue_familylaw_v2` so it installs ALONGSIDE the legacy app instead of replacing it. Models (familylaw.*) and test tags (familylaw_step<N>) are unchanged — only the module name and its group XML IDs change. Changes: - Folder activeblue_familylaw -> activeblue_familylaw_v2 (git mv) - All 44 dotted refs activeblue_familylaw. -> activeblue_familylaw_v2. (security group XML IDs in views/python; test patch targets odoo.addons.*) - Manifest display name -> "Active Blue Family Law v2"; root menu -> "Family Law (v2)" - scripts/validate_module.py ROOT path; BUILD_STATUS.md run commands + coexistence note; START_HERE.md pointer Verified in live Odoo 18: - Fresh install + full suite: 200 tests, 0 failed, 0 errors. - COEXISTENCE on a clone of prod db1: installing _v2 alongside the installed legacy activeblue_familylaw left the legacy untouched (still installed 18.0.1.0.0, fl.* models registered, fl_caselaw 25 rows intact) while adding the 30 familylaw.* models. Exit 0, no errors. Clone dropped; prod DBs untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
78 lines
4.6 KiB
Markdown
78 lines
4.6 KiB
Markdown
# Build Status — Active Blue Family Law (`activeblue_familylaw_v2`)
|
|
|
|
**All 14 roadmap steps are implemented, validated, and committed.**
|
|
Module version `18.0.14.0.0`. Built on Odoo 18 Community.
|
|
|
|
> ⚠️ **Technical name is `activeblue_familylaw_v2`** (folder
|
|
> `activeblue_familylaw_handoff/activeblue_familylaw_build/activeblue_familylaw_v2`).
|
|
> It was renamed from `activeblue_familylaw` because production already has a
|
|
> **different, earlier** module installed under that name (models `fl.*`, real data) —
|
|
> see "Production coexistence" below. The `_v2` module uses `familylaw.*` models and
|
|
> its own security groups, so it installs **alongside** the legacy app without
|
|
> collision. Models/tags are unchanged (`familylaw.case`, `familylaw_step<N>`).
|
|
|
|
> ✅ **Tests run green in a live Odoo 18:** `0 failed, 0 error(s) of 200 tests`
|
|
> (installed clean into a throwaway DB on the local `odoo:18.0` image against
|
|
> Postgres 16, then dropped — production DBs untouched). Also validated statically
|
|
> via `scripts/validate_module.py` (Python compile, XML well-formed, no Odoo-18
|
|
> forbidden constructs, button→method mapping, manifest/ACL integrity, view-field
|
|
> resolution, duplicate-id + action-ref + load-order checks).
|
|
>
|
|
> Reproduce: see "Run the tests" below.
|
|
|
|
## Run the tests
|
|
```bash
|
|
# whole module (install + all tests)
|
|
odoo -d <db> -i activeblue_familylaw_v2 --test-enable --stop-after-init
|
|
|
|
# one step
|
|
odoo -d <db> -u activeblue_familylaw_v2 --test-enable --test-tags familylaw_step7 --stop-after-init
|
|
|
|
# all family-law tests
|
|
odoo -d <db> -u activeblue_familylaw_v2 --test-enable --test-tags familylaw --stop-after-init
|
|
```
|
|
Re-run static checks any time: `python3 scripts/validate_module.py`
|
|
|
|
## Production coexistence
|
|
Prod `db1` has a **separate legacy** `activeblue_familylaw` installed (different
|
|
lineage: `fl.*` models incl. `fl.caselaw`, `fl.statute`, `fl.support.schedule.entry`,
|
|
with real rows). This module is `activeblue_familylaw_v2` with `familylaw.*` models and
|
|
distinct group XML IDs, so it **coexists** — installing it will NOT touch or remove the
|
|
legacy app or its data. Verified by cloning `db1` and installing `_v2` into the clone.
|
|
|
|
## Steps
|
|
| Step | Slice | Tag |
|
|
|---|---|---|
|
|
| 1 | Case spine + lifecycle + attorney gates | `familylaw_step1` |
|
|
| 2 | Parties/children/issues + proceeding + conflict screening + intake | `familylaw_step2` |
|
|
| 3 | Documents + **review gate (Gate 1)** | `familylaw_step3` |
|
|
| 4 | Deadline engine (per-proceeding, weekend roll, overdue cron, calendar mirror) | `familylaw_step4` |
|
|
| 5 | Mandatory disclosure (12.285) — checklist + financial affidavit | `familylaw_step5` |
|
|
| 6 | Claude client + `ai.task` ledger + drafting agent + citation ledger (Tier 3) | `familylaw_step6` |
|
|
| 7 | **Citation gate (Gate 2)** — fail-closed verify + filing block + research loop | `familylaw_step7` |
|
|
| 8 | Discovery + Rule 12.351 subpoena (objection window + routing) | `familylaw_step8` |
|
|
| 9 | Child-support modification (new proceeding, 15%/$50, 20-day, DOR, prior-judgment) | `familylaw_step9` |
|
|
| 10 | Emergency workflow (12.941) — fork + attachment block + fast-path | `familylaw_step10` |
|
|
| 11 | DocuSeal e-signature (approved-only, webhook) | `familylaw_step11` |
|
|
| 12 | File archive (SHA-256) + retention lifecycle + calendar layers | `familylaw_step12` |
|
|
| 13 | Miami-Dade auto-seed (AO 14-13) + course-before-judgment guard | `familylaw_step13` |
|
|
| 14 | Comms (never auto-send) + AI-assist billing flag + matter-scoped access | `familylaw_step14` |
|
|
|
|
## The two sacred gates (verify these first)
|
|
- **Gate 1 (review):** AI/draft documents are born `ai_draft`; only an attorney can
|
|
approve; nothing files/sends unapproved. `familylaw.document._ensure_approved`.
|
|
- **Gate 2 (citation):** every citation is born `unverified`; verification is
|
|
fail-closed (down/no-record → stays blocked); filing is blocked on any unverified
|
|
cite. `familylaw.document._ensure_citations_verified` + `familylaw.citation.verifier`.
|
|
|
|
## Tier 3 caveat (unchanged from design)
|
|
Steps 6/7/9 build the **structure**; the legal **content** they produce is born
|
|
unapproved/unverified and is **not authoritative** until a licensed Florida attorney
|
|
validates the legal logic and approves the output. All external APIs (Claude,
|
|
CourtListener, DocuSeal) are mocked in tests and isolated behind single methods.
|
|
|
|
## Volatile legal values to confirm before production (search `VERIFY`)
|
|
Deadline day-counts (20/45/30/10), disclosure income threshold ($50k → 12.902(b)/(c)),
|
|
15%/$50 support-modification presumption, Rule 12.410 subpoena amendment (eff. Oct 1
|
|
2025), AO 14-13 obligations, retention periods. None are baked in as permanent.
|