Changelog
What's new
A running log of improvements, new features, and fixes shipped to Pactora.
- Fixed
localStorage quota exceeded errors are now caught gracefully. If storage quota is exceeded, the in-memory state still works for the session — it just won't persist across page reloads. Previously this threw an unhandled error.
- Fixed
restoreState now normalizes loaded deal snapshots the same way as localStorage hydration, backfilling any new schema fields that didn't exist when the deal was saved. Older saved deals can no longer load with undefined fields.
- Fixed
Clause agents no longer frame all contracts as SaaS — contract side context (buyer vs supplier) is now properly enforced throughout analysis.
- Fixed
Integrity engine false positives fixed: single-quote definition parsing and cross-document reference deferrals now work correctly.
- Fixed
Jurisdiction auto-detection no longer false-matches "New South Wales" to Wales.
- Fixed
Termination Rights redline playbook now correctly activates.
- Improved
Market-standard reference coverage expanded to Auto-Renewal, Fee Increases, Governing Law, and Employment clauses (employer side).
- New
Agent resilience: each of the eight clause agents now retries automatically on a Haiku fallback if the primary model times out or errors. A clear service-unavailable message is shown if all agents fail — no more silent empty results.
- Improved
Scotland jurisdiction is now fully supported end-to-end. Previously, contracts analysed under Scots law were silently processed without jurisdiction context — this is fixed.
- Improved
Jurisdiction is now shown as a read-only pill on every review page so you can always see which legal context your analysis used.
- Improved
API cost reductions: vision extraction for scanned PDFs now uses Haiku instead of Sonnet (same quality, 20× cheaper); redline thinking budget halved from 4,000 to 1,500 tokens; chunk threshold raised from 100k to 120k characters.
- New
Light mode: a full light palette is now available, toggled from the header. Uses crisp white cards on a slate-50 background with cool-grey text. Risk labels are automatically boosted to full-saturation colours for legibility.
- Improved
Upload flow step labels fixed. The four steps (contract side → upload → commercial context → acknowledgment) now display consistent 1-of-4 through 4-of-4 numbering.
- Improved
Summary page: risk score now has a label above the number. The "Prepare for negotiation" email section moved to after the clause flags, where it belongs logically.
- Fixed
Removed a dead "Open in PDF" button on the summary page that logged to the console instead of doing anything.
- New
Landing page now includes a "What you get" feature grid explaining the six main outputs (risk verdict, clause checks, negotiation ladder, redlines, cross-clause risks, negotiation email).
- New
Accepted redlines are now exported as a real Word tracked-changes DOCX using docx.js DeletedText and InsertedText revision nodes — ready to send to the other side.
- New
Redline accept and dismiss controls wired on all five clause review pages (Liability Cap, Indemnities, IP, Data Protection, Termination). Previously only available on the summary page.
- New
"Clause not detected" guidance added — when a clause type is absent, the review page now explains what the absence means and whether it is a risk.
- New
Light/dark mode toggle added to the main navigation, with localStorage persistence across sessions and a flash-prevention script to avoid the wrong theme flickering on load.
- New
Beta banner added across all pages with an updated legal disclaimer.
- Fixed
Logout was blocked by CSRF middleware on some sessions — fixed with a resilient session-parse fallback.
- New
Email notifications sent to the team on feedback form submissions.
- New
Redline suggestion feature: click "Suggest redline" on any flagged clause to generate alternative contract language. IP Ownership and Indemnities use Sonnet with extended thinking for higher-quality output; other clauses use Haiku.
- New
Word-level diff viewer: side-by-side original vs proposed clause text with word-level highlights using LCS diffing.
- New
Negotiation email generator: one click to produce a ready-to-send email covering all flagged issues in priority order.
- New
Cross-clause risk engine: deterministic detection of interactions between clauses — for example, an indemnity carve-out that bypasses the liability cap creates a combined exposure not visible when reviewing each clause in isolation.
- New
Risk verdict (0–100 score): a weighted composite score across all flagged clauses with a plain-English verdict — ready to sign, sign with conditions, or not ready.
- Improved
Pre-classification step added: a single cheap Haiku call detects which clause types are present before running specialist agents. Absent clause types are skipped, saving significant cost on contracts that only cover a subset of the eight types.
- New
Parallel agent architecture: eight specialist clause agents now run concurrently instead of sequentially, reducing analysis time from ~2 minutes to under 30 seconds.
- New
Prompt caching: the contract text is cached across all eight parallel agent calls. Agents 2–8 pay 10% of normal input token pricing.
- New
Extended thinking enabled for IP Ownership and Indemnities — the two clause types that require multi-step legal chain reasoning.
- Improved
Anti-hallucination check: every extracted clause text is verified against the original document before being flagged. Unverified findings are marked and logged.
- New
Initial launch. Contract upload (PDF, DOCX, DOC), text extraction, and AI analysis across eight clause types: Liability Cap, Indemnities, IP Ownership, Data Protection, Termination Rights, Auto-Renewal, Fee Increases, and Governing Law.
- New
Jurisdiction support for England & Wales, India, Germany, and France, with jurisdiction-specific legal thresholds and risk calibration.
- New
Three-position negotiation ladder for every flagged clause, with ready-to-use scripts.
- New
Commercial context extraction: ACV, contract term, liability cap, insurance cover, and data type detected automatically from the contract text.