← LegalQuants TransactionalCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to LegalQuants Transactional
Snapshot Sep 30, 2026 · 23:15 UTC · version 0.1.1
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Use when a data room, deal folder, or contract portfolio needs review against an issue checklist and the lawyer needs factual results they can inspect: every match pin-cited, every agreement accounted for, scoped negatives shown, and everything the run could not resolve kept visible. Builds a file and contract-family manifest, compiles the lawyer's checklist into fixed review schemas, gates twice before the long run, and delivers a coverage-receipted issue/agreement HTML crosswalk plus a further-enquiries register. Trigger on \"review this data room\", \"run diligence\", \"check these contracts against our list\", or a folder of agreements plus any checklist, even without the word diligence.",
"included_files": [
{
"relative_path": "LICENSE",
"size_in_bytes": 11358
},
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 270
},
{
"relative_path": "references/framework-schema.md",
"size_in_bytes": 6538
},
{
"relative_path": "references/framework.schema.json",
"size_in_bytes": 3987
},
{
"relative_path": "references/inventory-design.md",
"size_in_bytes": 5417
},
{
"relative_path": "references/openai-codex-runtime.md",
"size_in_bytes": 3545
},
{
"relative_path": "references/review-copies.schema.json",
"size_in_bytes": 4090
},
{
"relative_path": "references/review-ui.md",
"size_in_bytes": 6595
},
{
"relative_path": "references/schemas.md",
"size_in_bytes": 5430
},
{
"relative_path": "references/shared/edge-resolver-prompt.md",
"size_in_bytes": 782
},
{
"relative_path": "references/shared/edge-resolver.schema.json",
"size_in_bytes": 858
},
{
"relative_path": "references/shared/execution-modes.md",
"size_in_bytes": 7205
},
{
"relative_path": "references/shared/finding-checker-prompt.md",
"size_in_bytes": 1181
},
{
"relative_path": "references/shared/finding-checker.schema.json",
"size_in_bytes": 1021
},
{
"relative_path": "references/shared/finding-worker-prompt.md",
"size_in_bytes": 2214
},
{
"relative_path": "references/shared/finding-worker.schema.json",
"size_in_bytes": 4840
},
{
"relative_path": "references/shared/framework-schema.md",
"size_in_bytes": 11192
},
{
"relative_path": "references/shared/framework.schema.json",
"size_in_bytes": 5917
},
{
"relative_path": "references/shared/inventory-design.md",
"size_in_bytes": 7769
},
{
"relative_path": "references/shared/metadata-reader-prompt.md",
"size_in_bytes": 1777
},
{
"relative_path": "references/shared/metadata-reader.schema.json",
"size_in_bytes": 2596
},
{
"relative_path": "references/shared/review-copies.schema.json",
"size_in_bytes": 4090
},
{
"relative_path": "references/shared/review-ui.md",
"size_in_bytes": 7392
},
{
"relative_path": "references/shared/schemas.md",
"size_in_bytes": 13649
},
{
"relative_path": "scripts/block_candidates.py",
"size_in_bytes": 5794
},
{
"relative_path": "scripts/build_checker_plan.py",
"size_in_bytes": 4312
},
{
"relative_path": "scripts/build_families.py",
"size_in_bytes": 14436
},
{
"relative_path": "scripts/build_manifest.py",
"size_in_bytes": 420
},
{
"relative_path": "scripts/export_register.py",
"size_in_bytes": 8093
},
{
"relative_path": "scripts/extract_metadata_prep.py",
"size_in_bytes": 1311
},
{
"relative_path": "scripts/merge_checker_results.py",
"size_in_bytes": 6948
},
{
"relative_path": "scripts/reconcile_counts.py",
"size_in_bytes": 12071
},
{
"relative_path": "scripts/reconcile_index.py",
"size_in_bytes": 9214
},
{
"relative_path": "scripts/render_crosswalk.py",
"size_in_bytes": 40725
},
{
"relative_path": "scripts/render_gate1.py",
"size_in_bytes": 37213
},
{
"relative_path": "scripts/render_readback.py",
"size_in_bytes": 4260
},
{
"relative_path": "scripts/render_report.py",
"size_in_bytes": 22191
},
{
"relative_path": "scripts/render_sample.py",
"size_in_bytes": 26689
},
{
"relative_path": "scripts/review_copies.py",
"size_in_bytes": 54377
},
{
"relative_path": "scripts/review_ui.py",
"size_in_bytes": 6748
},
{
"relative_path": "scripts/shared/admit_finding_result.py",
"size_in_bytes": 11618
},
{
"relative_path": "scripts/shared/block_candidates.py",
"size_in_bytes": 6123
},
{
"relative_path": "scripts/shared/build_checker_plan.py",
"size_in_bytes": 6620
},
{
"relative_path": "scripts/shared/build_families.py",
"size_in_bytes": 17253
},
{
"relative_path": "scripts/shared/build_manifest.py",
"size_in_bytes": 14974
},
{
"relative_path": "scripts/shared/build_review_plan.py",
"size_in_bytes": 10183
},
{
"relative_path": "scripts/shared/document_text.py",
"size_in_bytes": 12579
},
{
"relative_path": "scripts/shared/export_register.py",
"size_in_bytes": 9522
},
{
"relative_path": "scripts/shared/extract_metadata_prep.py",
"size_in_bytes": 22543
},
{
"relative_path": "scripts/shared/finding_validation.py",
"size_in_bytes": 11839
},
{
"relative_path": "scripts/shared/merge_checker_results.py",
"size_in_bytes": 11453
},
{
"relative_path": "scripts/shared/merge_edge_results.py",
"size_in_bytes": 6638
},
{
"relative_path": "scripts/shared/merge_finding_results.py",
"size_in_bytes": 21121
},
{
"relative_path": "scripts/shared/merge_metadata_reads.py",
"size_in_bytes": 28694
},
{
"relative_path": "scripts/shared/parse_instruments.py",
"size_in_bytes": 15685
},
{
"relative_path": "scripts/shared/prepare_review_jobs.py",
"size_in_bytes": 4843
},
{
"relative_path": "scripts/shared/reconcile_counts.py",
"size_in_bytes": 18863
},
{
"relative_path": "scripts/shared/reconcile_index.py",
"size_in_bytes": 11453
},
{
"relative_path": "scripts/shared/render_gate1.py",
"size_in_bytes": 20125
},
{
"relative_path": "scripts/shared/render_readback.py",
"size_in_bytes": 6071
},
{
"relative_path": "scripts/shared/render_report.py",
"size_in_bytes": 24035
},
{
"relative_path": "scripts/shared/render_sample.py",
"size_in_bytes": 23901
},
{
"relative_path": "scripts/shared/review_copies.py",
"size_in_bytes": 77410
},
{
"relative_path": "scripts/shared/review_ui.py",
"size_in_bytes": 6747
},
{
"relative_path": "scripts/shared/run_codex_finding_worker.py",
"size_in_bytes": 15135
},
{
"relative_path": "scripts/shared/run_review_jobs.py",
"size_in_bytes": 25042
},
{
"relative_path": "scripts/shared/validate_framework.py",
"size_in_bytes": 21626
},
{
"relative_path": "scripts/shared/verify_quotes.py",
"size_in_bytes": 8174
},
{
"relative_path": "scripts/validate_framework.py",
"size_in_bytes": 11133
},
{
"relative_path": "scripts/verify_finding_quotes.py",
"size_in_bytes": 5015
},
{
"relative_path": "scripts/verify_quotes.py",
"size_in_bytes": 715
}
],
"name": "diligence",
"skill_md_contents": "---\nname: diligence\ndescription: >-\n Use when a data room, deal folder, or contract portfolio needs review\n against an issue checklist and the lawyer needs factual results they can\n inspect: every match pin-cited, every agreement accounted for, scoped\n negatives shown, and everything the run could not resolve kept visible.\n Builds a file and contract-family manifest, compiles the lawyer's checklist\n into fixed review schemas, gates twice before the long run, and delivers a\n coverage-receipted issue/agreement HTML crosswalk plus a further-enquiries\n register. Trigger on \"review this data room\",\n \"run diligence\", \"check these contracts against our list\", or a folder of\n agreements plus any checklist, even without the word diligence.\n---\n\n# Diligence\n\n## When to use\n- A folder of agreements (a data room, a portfolio, a deal file) needs review against the lawyer's issues, with receipts.\n- The gap report alone is wanted: what is missing, unreadable, or duplicated in a room nobody has read yet.\n- The core output is factual: what the supplied agreement text says about each approved issue, where it says it, and what could not be determined. Risk ranking, recommendations, and conclusions about legal effect require a separate instruction.\n- Out of scope: drafting or negotiating documents, litigation document review (that fork is the /docreview sibling), producing or serving anything. The skill prepares; it never sends, files, or publishes.\n\n## Before you start\n- Read `references/schemas.md`, `references/framework-schema.md`, and\n `references/review-copies.schema.json` in full. They are the data contracts;\n every artifact you produce must match them.\n- Before producing any lawyer-facing HTML, read `references/review-ui.md` in\n full. It is the portable brand, accessibility, offline, and source-rendering\n contract for the setup, test-results, and final crosswalk pages.\n- Read your `[diligence]` lines in `lqplaybook.md` if the file exists (default lenses, optional materiality rules, report voice, register format) and apply them. Read nothing else from the profile; it never shapes work product. Write nothing to the profile; the scribe owns it. When the user reveals a durable preference in-session, propose the exact `[diligence]` line and write it only on an explicit yes.\n- Confidentiality: no client-identifying facts in any artifact except the report surfaces themselves. Run artifacts live in one temp master dataset directory for this run; delete it at completion. Never transmit anything anywhere.\n- All scripts live in `scripts/`. Pass `--extractor stdlib` only in evals; real runs use the default so poppler is preferred when installed.\n- Before substantive unit/lens dispatch, read\n `references/shared/execution-modes.md`,\n `references/shared/finding-worker-prompt.md`, and\n `references/shared/finding-worker.schema.json`. When an authorized local\n headless runtime will execute the jobs, also read `references/openai-codex-runtime.md`.\n\n## Execution portability\n\nThe bundled scripts named below are the normal path because they enforce deterministic schemas, receipts, and fail-closed gates. If a host cannot execute local scripts, preserve the same artifact shapes, assignments, validations, and gate conditions with host-native document and data capabilities; process isolated assignments sequentially when parallel workers are unavailable. Do not omit a validation because its helper cannot run. If the host cannot reproduce a required check or receipt, stop at that gate and report the limitation instead of claiming completion.\n\nThe substantive maker lane lives under `scripts/shared/` and is byte-identical\nto the DocReview runtime. `prepare_review_jobs.py` materializes compact\nassignments; `run_review_jobs.py` defaults to five bounded workers, preserves\nimmutable attempts, journals progress, and admits results through\n`admit_finding_result.py`. Before fan-out, surface the runner's concurrency and\nresource disclosure. Do not read or modify a host's global configuration.\nLong runs use `--detach`; parked jobs require a receipted unpark.\n\n## Workflow\n\n1. **Inventory and review copies.** `build_manifest.py --root <room> --out manifest.json --gaps gap-report.json`. If the room ships an index (spreadsheet or numbered folders), `reconcile_index.py --index <file> --manifest manifest.json --out gap-report.json`. Mark a request list, schedule, or other instruction document `review_role: \"runner-control\"` only when the lawyer confirms it governs the run rather than being an agreement to review; everything else defaults to `substantive`. Runner-control files remain in the corpus census and source table but never become sample or full-run units. Then `extract_metadata_prep.py --manifest manifest.json --room-root <room> --outdir <run>`. Build the immutable lawyer-review layer with `review_copies.py build --manifest manifest.json --source-root <room> --sidecar <run>/review-copies.json --bundle-root review-copies --mode auto`. Keep the sidecar and every lawyer-facing HTML file in the same run directory so its relative content-addressed references remain valid. Exit 0 means every source and attachment is review-ready; exit 1 means the hash-bound receipt is valid but at least one item is **Needs rendering**; exit 2 means integrity or containment failed. Report counts to the user: files, control inputs, substantive files, readability split, review-copy status, and gaps so far.\n2. **Metadata model pass.** For each id in `worklist.json`, use one fresh worker per document when the host exposes parallel workers; otherwise process the same worklist sequentially, one document at a time, retaining only that document's schema output before starting the next. Use a small model reading only the opening pages and signature block, returning the metadata JSON shape in `references/schemas.md` exactly. Every model-sourced field carries a verbatim quote. Cap retries at 2 per document; park failures as metadata-incomplete and continue. Then `verify_quotes.py --metadata <run>/metadata --room-root <room> --write`: parked quotes stay parked; never hand-wave one through.\n3. **Relationships.** `block_candidates.py`, then `build_families.py` (pass `--room-root` so model-proposed edges are quote-verified on entry). Model edge resolution, where needed, sends only the two metadata records to the model, never the documents.\n4. **Compile the checklist.** Take the lawyer's checklist in whatever form it arrives. Compile it to `framework.json` per `references/framework-schema.md`: conservative factual hit rules, empty exclusion lists, and the contract's unresolved rule. Omit `materiality` when the lawyer did not supply ranking rules; never invent or default a severity. `validate_framework.py` must pass (capped retries, then ask the lawyer rather than loop), then `render_readback.py`. Every issue must trace to a named runner-control source input.\n5. **Confirm the review setup (internal Gate 1).** Pick five representative\n substantive units, or every unit when the collection has five or fewer, and\n write `sample-scope.json` with `framework_version`, `sample_size`,\n `selection_basis`, and ordered `proposed_units` carrying `doc_id`, a\n plain-language `label`, and `reason`. Run `render_gate1.py --manifest\n --metadata <run>/metadata --families --gaps --readback --sample sample-scope.json --source-prefix\n <relative source folder> --review-copies <run>/review-copies.json\n --document-root <room> --out <run>/review-setup.html`. Show that page, not an\n internal gate receipt. It asks whether the questions, collection, and scope\n are right; implementation terms and stable IDs stay in collapsed technical\n details. The lawyer confirms or regroups families and approves the exact\n setup statement in their reply; record confirmation by writing\n `families.confirmed.json`. A bare \"continue\" does not advance this gate.\n Downstream reads only the confirmed file.\n6. **Review the test results (internal Gate 2).** Run every approved issue\n against each sampled unit, then `render_sample.py --framework --findings\n --manifest --source-prefix <relative source folder> --review-copies\n <run>/review-copies.json --document-root <room> --out\n <run>/review-test-results.html`. Show factual matches, scoped negatives,\n results needing a decision, in-page review copies, and plain-language match definitions.\n Stable IDs, framework versioning, and raw schema field names stay in\n collapsed technical receipts. Lawyer feedback names the review question and\n describes what should count differently; translate that feedback into the\n corresponding framework fields, recompile as version N+1, validate, and\n rerun the sample when the issue test changes. Approval freezes that version.\n7. **Scale.** Build and approve the targeted or full review plan, including the\n higher-capability model class, medium-or-higher reasoning effort,\n request-batch limit, projected model-call count, and cost basis, then run\n `scripts/shared/prepare_review_jobs.py`. Apply the substantive mapping\n quality gate in `references/shared/execution-modes.md`: no model context may\n receive more than 12 issues, and the sample must recover every\n source-verified positive under the same route used for scale. Use\n `scripts/shared/run_review_jobs.py run` for an authorized scripted fan-out;\n otherwise give the same bounded assignments to native workers or process\n them sequentially. A unit is the confirmed family where\n relationships exist, else the single agreement. Each worker returns one\n ordered determination per issue, cites documents by ordinal, and never\n constructs stable document or finding IDs. The admitter constructs those\n IDs, expands compact absent rows, and validates every receipt before writing\n the canonical checkpoint. A present result requires a verbatim quote and\n section locator. `current_position: true` is allowed only when the whole\n family, including later amendments, was read. Retry rejected judgment at\n most twice; keep transport failures on their separate budget; park failures\n visibly. Report `progress.json` and `parked.json`. Resume only validated\n attempts and checkpoints; never rerun admitted or silently unparked units.\n8. **Verify.** Run `verify_finding_quotes.py --findings ... --manifest ... --room-root ... --out findings.quote-checked.json`, then run `build_checker_plan.py --findings findings.quote-checked.json --framework ... --out checker-plan.json`. The first script confirms every present quote or changes the result to unresolved. The checker plan selects every remaining present finding in the approved sample or full ledger, never by severity: a factual finding cannot escape checking merely because materiality was omitted. A separate checker receives the finding, quote, governing framework item, and source text without the maker's reasoning and returns `{checker_plan_id, finding_id, verdict, objection}`. Run `merge_checker_results.py --findings findings.quote-checked.json --checker-plan checker-plan.json --results-dir ... --out findings.checked.json`; missing, stale, or non-confirming checker results fail closed or become unresolved. Keep the mechanical quote receipt and independent checker receipt distinct.\n9. **Gate 3 and delivery.** Run `reconcile_counts.py` first. It must prove the complete issue × substantive-unit cross-product, with parked units visible; if it fails, fix the run, never the numbers. Re-run `review_copies.py verify --manifest ... --source-root <room> --sidecar <run>/review-copies.json`, then run `render_crosswalk.py --framework ... --findings ... --manifest ... --families ... --gaps ... --source-prefix <relative source folder> --review-copies <run>/review-copies.json --document-root <room> --out <run>/crosswalk.html --receipt <run>/crosswalk-receipt.json` and `export_register.py`. The default Issues tab answers “where was this issue found?”; Agreements reverses the same ledger and embeds each source once; Scope & gaps accounts for control inputs, substantive sources, families, parked items, unreadable items, missing materials, and control-input review copies; Audit carries input and sidecar hashes. The lawyer rules on items labeled **Needs a decision** and decides how to use the factual output. A valid receipt with any **Needs rendering** item keeps the crosswalk receipt failed until a verified copy is rebuilt. Do not add recommendations, risk rankings, or a claim that the surface is legal advice unless separately instructed.\n\n## Conventions\n- Deterministic artifacts throughout: sorted keys, no timestamps, no absolute paths. Same inputs, same bytes.\n- Every page shown to the lawyer follows the same review convention: state the\n decision in plain language, use the shared `lq-lawyer-review-v1` brand\n contract, keep amber for discrete items needing attention rather than the\n whole page, support light/dark and 320px screens, expose keyboard focus, and\n place stable IDs and runner mechanics in collapsed technical receipts or the\n Audit tab. Use **Needs a decision** for the visible unresolved state. Internal\n `render_report.py` output is a reconciliation receipt, not a substitute for\n the lawyer-facing setup, test-results, or issue/agreement crosswalk pages.\n- `/legaldesign` is not a runtime dependency of these deterministic review\n pages. It may consume an approved Diligence result later only when the lawyer\n separately asks for a client-facing explainer. Firm branding stored in a\n different playbook namespace does not silently change Diligence output.\n- A source link proves provenance but is not the review experience. Apply the\n renderability gate in `references/review-ui.md`: every reviewed document and\n separately reviewable attachment needs an in-page representation bound to\n the source ID and hash. Use the built-in safe preview, then an available\n open-source renderer, then a firm-selected native or legal-grade renderer.\n A missing or stale render becomes **Needs rendering** and stops approval for\n dependent results; it never changes a model proposal or evidence receipt.\n `review-copies.json` is additive presentation evidence only. Revalidation\n binds its manifest digest, full source hashes, attachment hashes, derivative\n hashes, and exact bundle file set before any embed is emitted. Never copy a\n sidecar between manifests or edit it by hand; rebuild it. It does not mutate\n or replace a model proposal, finding, framework, quote receipt, checker\n receipt, or lawyer ruling.\n- A claim without a verified verbatim quote does not enter any artifact. Parked means visible, never silently dropped.\n- “Not found” is always scoped to the supplied visible text in the reviewed agreement unit. It is not a portfolio-wide absence claim and does not cover missing materials.\n- The framework is the only instruction channel to workers. If a calibration is not a framework field, it does not exist.\n- Model routing: a small model may perform per-document metadata reads. Use a\n higher-capability reasoning model at medium effort or above for substantive\n issue mapping, compilation, edge residue, verification, and synthesis. The\n user may override after seeing the recall, cost, and speed tradeoff; honor\n that choice and record it.\n- Tool cascade for extraction and review copies: built-in stdlib probes and\n safe text/email/image previews, then Poppler or LibreOffice when available,\n then the firm's selected legal-grade renderer. Say which rung ran; never pip\n install inside a run.\n\n## Dependencies\nPython 3 stdlib. Optional and preferred: Poppler (`pdfinfo`, `pdftotext`,\n`pdftoppm`) and LibreOffice. Nothing else; never pip install inside a run. The\ndeterministic stdlib path still renders escaped text/EML, common images,\nbrowser PDFs, and safe visible text from DOCX/XLSX/PPTX; optional tools add\nreceipted page images.\n\n## Final checks\n- `reconcile_counts.py` exits 0: every approved issue has exactly one result for every reviewable substantive unit, or that unit is visibly parked; runner-control files remain separately accounted for.\n- Every present finding carries a quote, section locator, deterministic quote receipt, and the checker coverage required by the approved plan.\n- review-setup.html, review-test-results.html, and crosswalk.html are each rendered and looked at in light and dark before showing the user.\n- Every interaction works at 320px and desktop width, and every in-scope source\n has a verified in-page review representation; otherwise the run remains at\n **Needs rendering** rather than advancing on a raw-file link.\n- The frozen framework version is recorded in `findings.json` and matches what Gate 2 approved.\n- The sample recovered every source-verified positive under the same model\n class, effort, and request-batch limit used for scale; schema validity and\n runtime speed alone are not calibration.\n- The temp master dataset is deleted; the deliverables and the run's JSON artifacts are in the matter folder; nothing was transmitted.\n"
}SHA-256 of public snapshot: e49cf7174a710804c2feb7cec41bf28bfe858401483f7e11452cd0d4a46bd798