name: dl-termsheet description: > Drafts the Wells & Overland Term Sheet (Stage 3 / P8) — the joint co-lender offer externalized to the borrower — from the IC-approved term-sheet input captured at the Pre-Screen IC. Use when the user asks to draft or populate the Wells & Overland Term Sheet from a Pre-Screen IC debrief ("draft the term sheet", "P8 term sheet", "populate the term sheet from the IC debrief"). Populates the bundled .docx template in place: writes deal-specific text into the 17 term rows of the body table plus the leverage-basis footnote; every other paragraph and cell stays unchanged behind a cell-level preservation gate. Classifies each IC condition externalize or internal_only (only externalize entries enter the document body) and runs the outbound-redaction checklist per build. Draft output under a vS filename pending human review.
Wells & Overland Term Sheet Drafting — dl-termsheet
STEP 0 — ORIENTATION
This skill closes the P7→P8 chain: dl-memo-prescreen → Pre-Screen IC → dl-ic-debrief-prescreen → dl-termsheet (here) → externalized to the borrower (jointly authored with co-lender Wells Fargo).
Single deliverable: a populated [Company]_-_Wells_&_Overland_Term_Sheet_<MM-DD-YY>_vS.docx produced in place against the bundled template, plus a structured JSON manifest.
Hard rules that govern everything below:
- Externalized RESTRICTED. The term sheet ships to the borrower and Wells Fargo (co-lender). Pricing, fees, covenant levels, and the leverage-basis footnote are externalized under the term sheet's own confidentiality disclaimer. The outbound-redaction checklist applies to every build (unlike Stage 3's other Pre-Screen-era deliverables, which are internal-only). Per-class exclusions: fund-level economics above the co-lender tranche; IC deliberation content; individual IC votes; firm-internal portfolio context; internal hold-size discussions beyond IC-approved hold; internal hurdle / capital-call discussions.
- No banner in the document body. This is an in-place edit of a production
.docxtemplate; a[DRAFT — HUMAN REVIEW REQUIRED]banner anywhere in the body would corrupt the issued PDF. The draft signal is thevSfilename suffix plus the pending-review flag on the manifest. The reviewer verifies both before sending. - Never fabricate. Never invent pricing levels, covenant cushions, fee amounts, maturity dates, DDTL governors, hold sizes, or commitment dollars. Every populated cell carries a source-field reference traceable to a deal-terms field, an
ic_conditions[<index>],commitment_dollar_approved, adeal_contextfield, or a[BUNDLED_DEFAULT]. The anti-fabrication check refuses any populate without a backing source. Use[INSUFFICIENT DATA — <field>]verbatim in the cell for required source content that is absent; never silently fill in a placeholder. - Precedent-locked covenant boilerplate. Rows 16 (Affirmative Covenants) and 17 (Negative Covenants) take zero writes unless an
ic_conditions[i]classifiedexternalizeAND taggedcovenant_carveout=trueappends a carve-out line under the bundledCustomary for transactions of this typeprefix. The preservation gate enforces this. - Per-IC-condition externalization classification. Each
ic_conditions[i]is classifiedexternalizeorinternal_only. Onlyexternalizeentries land in the document body. Ambiguous cases default tointernal_only(the safer side of the redaction firewall) and the rationale carries the[DEFAULT INTERNAL_ONLY — VERIFY]annotation surfaced for human review. - Declined-deal short-circuit. If the term-sheet input is
None(the upstream IC declined), emit the informative refusal[NO TERM SHEET — IC DECLINED]and exit without writing.
Reference files (load as needed; one level deep):
reference/termsheet-population.md— the populate algorithm, the python-docx cell-of-table mechanics, the cell-and-paragraph-level preservation gate, the normalize-then-compare baseline, the per-IC-condition classification interface. Read before Step 6.reference/section-mechanics.md— row × col coordinates, per-row source-field mapping (rows 1–18), populate-zero designations, leverage-basis footnote handling, covenant carve-out append mechanic, the bracketed-placeholder substitution catalog, 17 worked example renderings. Read before Step 5.reference/outbound-redaction-checklist.md— the canonical checklist text, per-class exclusion list, per-IC-condition externalization classifier heuristics + escalation path, embedded attestation surface. Read before Step 3.
Dependencies
Install required package: pip install python-docx
Workflow checklist (copy into your working response and check off):
Term Sheet Drafting Progress:
- [ ] Step 1: Parse the term-sheet input; verify not None (declined-deal short-circuit)
- [ ] Step 2: Classify each ic_conditions[i] (externalize | internal_only)
- [ ] Step 3: Run the outbound-redaction checklist (7 attestations)
- [ ] Step 4: Resolve deal_context (lender_overrides, use_of_proceeds)
- [ ] Step 5: Build the populate plan (per-row writes; joint-proposal rule)
- [ ] Step 6: Run scripts/populate_term_sheet.py with the plan (preservation gate)
- [ ] Step 7: Verify vS output + emit the JSON manifest
- [ ] Step 8: Stop — flag for human review
Inputs
The skill consumes:
<termsheet_input>(REQUIRED). The term-sheet input block emitted bydl-ic-debrief-prescreen, as JSON. Carries:- The IC-approved eight-field deal-terms bucket (
facility_structure,commitment_maturity,amort_prepay,pricing,fees,ddtl_governor,financial_covenants,ltm_anchor). ic_conditions: list[str]— the IC's free-text conditions (each classified at build time).hold_size_approval: str— IC-approved hold size (per-LP cap; NEVER externalized; informs internal validation only).commitment_dollar_approved: str— IC-approved total commitment dollar (externalized as the Amount & Facility size).
- The IC-approved eight-field deal-terms bucket (
<deal_context>(OPTIONAL). Per-call deal context:lender_overrides(non-default Row 1 Lenders text) anduse_of_proceeds(sourced upstream from the Pre-Screen memo's Transaction Overview section).<term_sheet_template>(OPTIONAL). Path to the bundled template.docx. Defaults toassets/term-sheet-template.docx.<deck_path>(REQUIRED). Path to the working.docx(in the Word Add-in this is the active document; in Claude Desktop this is the cloned-from-template path).Reference-only alignment surfaces (NOT extracted): the form credit agreement and the market deal-terms reference are surfaces the human reviewer consults; the skill does not parse the form CA.
STEP 1 — Parse term-sheet input; declined-deal short-circuit
Parse the <termsheet_input> JSON. Validate: all eight deal-terms fields present (None acceptable per-field; whole-object None triggers the short-circuit); ic_conditions is a list (possibly empty); hold_size_approval and commitment_dollar_approved are non-empty strings.
Declined-deal short-circuit. If the term-sheet input is None on the upstream punchlist, emit [NO TERM SHEET — IC DECLINED] with the one-line explanation "The Pre-Screen IC declined the deal; no term sheet to draft.", set the manifest's escalation field to "declined_deal", write no .docx, and exit.
STEP 2 — Classify each ic_conditions[i]
For each entry in ic_conditions, produce a classification record (see reference/outbound-redaction-checklist.md for the heuristics + escalation path): condition_index; classification (externalize | internal_only); rationale (paraphrase; never an invented quote); covenant_carveout (True only when externalize AND the condition modifies an affirmative/negative covenant carve-out).
Externalize examples: "subject to satisfactory legal DD on the AR sale facility", "conditional on final QoE", "Pricing grid adjusted to S+550/525/500", "subject to a 90-day commitment expiration".
Internal-only examples: "AM team to monitor borrower's customer-concentration quarterly", "revisit hold size in 30 days", "return to IC at term sheet acceptance".
Ambiguous → default internal_only. Record [DEFAULT INTERNAL_ONLY — VERIFY] in rationale and surface for human review. The safer side of the redaction firewall.
STEP 3 — Run the outbound-redaction checklist
Render the canonical checklist text from reference/outbound-redaction-checklist.md and verify all seven attestations are True:
- FINAL-VERSION ATTESTATION — this is a draft (vS); human reviewer verifies before sending.
- CLASS A — no fund-level economics above the co-lender tranche.
- CLASS B — no IC deliberation content.
- CLASS C — no individual IC votes.
- CLASS D — no firm-internal portfolio context.
- CLASS E — no internal hold-size discussions beyond IC-approved hold.
- CLASS F — no internal hurdle / capital-call discussions.
Record per-class booleans on the manifest's redaction-checklist field with the canonical-text SHA-256 (tamper-evidence) and ISO timestamp. Any False attestation refuses the build with [REDACTION CHECKLIST INCOMPLETE — <class>].
STEP 4 — Resolve deal_context
Extract lender_overrides (typically None; the Row 1 default "Wells Fargo & Overland Advantage" stands) and use_of_proceeds (sourced upstream from the Pre-Screen memo's Transaction Overview section if available; otherwise emit [INSUFFICIENT DATA — use_of_proceeds not provided] and surface for human review — Row 5 carries the marker).
STEP 5 — Build the populate plan
For each row 1–18 of the body table, decide whether to write and what to write. Read reference/section-mechanics.md for the per-row source-field mapping and rendered-text examples; key points:
- Rows 1–9, 11–18: the populator writes the SAME text to columns 1 and 2 (joint Wells + Overland proposal). The canonical entry is
col=1; the populator auto-mirrors to col=2. - Row 10 (per-facility Pricing): the SINGLE row where columns 1 and 2 carry different text. Build two write entries: col=1 = Priority Revolver pricing grid, col=2 = Term Loan Facilities pricing grid.
- Rows 16, 17 (Affirmative + Negative Covenants): zero writes unless a condition classification carries
covenant_carveout=True. The append mechanic preserves the bundledCustomary for transactions of this typeprefix (the preservation gate enforces). - Row 18 (Conditions Precedent): assemble the boilerplate prefix + default CP list + leverage CP +
externalize-classifiedic_conditions(internal_onlyentries appear NOWHERE in the cell). - Body paragraph [001] (leverage-basis footnote): populate-rare; substitute the bracketed placeholders from the deal-terms
ltm_anchorfield.
Every write entry carries a source-field reference. A write without a backing source field refuses the build.
Compute the input_signature SHA-256 over the canonical input payload (the term-sheet input JSON + bundled template SHA-256 + deal_context JSON + canonical-checklist-text SHA-256). Required for the idempotence check.
STEP 6 — Run scripts/populate_term_sheet.py
Execute (in Claude Desktop / batch mode):
python scripts/populate_term_sheet.py populate <deck_path> \
--plan term_sheet_population_plan.json \
--template assets/term-sheet-template.docx \
--out <Company>_-_Wells_&_Overland_Term_Sheet_<MM-DD-YY>_vS.docx
In the Claude Word Add-in there is no Python; the skill performs the same writes in-document and the user reviews. The script is the executable specification of the preservation gate — either way, the same populate plan drives both.
The script runs the cell-and-paragraph-level preservation gate in memory before any file write; on any violation it deletes the temp file and emits a structured refusal with the violated check. Exit codes:
0— vS.docxwritten; preservation gate passed.2— refused (preservation violation, declined deal, incomplete checklist, etc.).3— idempotence return (term_sheet_already_built).
The idempotence check is signature-based: a <output>.signature sidecar records the input_signature of the build that produced the deck. Re-running with the same signature returns exit 3 unless --rebuild is passed.
STEP 7 — Verify vS output + emit the manifest
Confirm:
- The output filename has the
_vS.docxsuffix. - The structured manifest is marked pending human review, RESTRICTED, with external distribution limited to borrower + co-lender.
- All seven redaction-checklist attestations are True.
- The manifest records that every preservation check passed.
- The populate plan's writes are recorded for audit.
- The condition classifications are exhaustive over
ic_conditions.
Emit the populated vS.docx path + the JSON manifest.
STEP 8 — Stop. Flag for human review.
The output is the term-sheet draft. Do not externalize, do not finalize, do not strip the vS suffix. The human reviewer:
- Confirms this is the draft they intended.
- Reviews every populated cell against the IC-approved deal-terms bucket.
- Reviews the Conditions Precedent list — every
externalize-classified condition appears verbatim; everyinternal_only-classified condition appears NOWHERE. - Verifies the leverage-basis footnote matches the source
ltm_anchor. - Confirms the redaction checklist attestations are accurate.
- Re-classifies any
[DEFAULT INTERNAL_ONLY — VERIFY]-annotated conditions if needed (and re-runs the skill with--rebuildto regenerate the plan). - Strips the
vSsuffix only on final approval, before externalization.
The eight-field deal-terms bucket matures across three stages with a constant field set: indicative (recorded by dl-memo-prescreen at P7), IC-approved (captured by dl-ic-debrief-prescreen after the Pre-Screen IC), and drafted (consumed here at P8).
Classification & review state
The term sheet is RESTRICTED content externalized to the borrower and Wells Fargo only; the outbound-redaction checklist (Step 3) applies per build, and internal_only material never enters the document. The output is a draft pending human review: the draft signal is the vS filename suffix plus the pending-review flag on the manifest — no banner in the document body, because the file is an in-place-edited production template. A human reviewer approves and externalizes; never approve, finalize, or issue. Use [INSUFFICIENT DATA — <field>] for any required source content that is absent — never fabricate a term.
Runtime
The populate script runs where Python is available: Claude Desktop or claude.ai with code execution enabled. In the Word Add-in, the skill has a documented in-document edit path — perform the same plan-driven writes against the active document and have the user review; the machine-verified preservation gate runs only where the script runs, so flag that the scripted verification was not executed. Term-classification and checklist work happens in conversation and works anywhere.