Produce amendment-aware field diffs from change_log plus an optional reverse diff preview from a draft amendment. Emits a markdown diff report and a JSON manifest with OL -> A1 -> A2 progression, citation pairs, and overwrite impact. TRIGGER when: user asks for "diff", "redline from JSON", "amendment delta", "what changed", "change log report", or asks what a draft amendment would overwrite. DO NOT TRIGGER when: user asks for extraction, abstract, PDF render, CSV/Excel export, schema conformance, calendar generation, risk scan, or portfolio rollup.
Guide shortcut.ai_cre when converting change_log history into a first-class, amendment-attributed diff deliverable. The skill must preserve chronological supersession and evidence for every change while avoiding synthetic historical reconstructions.
Hard constraints (single-tenant rule, sequential supersession, per-field traceability): per CLAUDE.md.
Confidence scale, validation status enum, citation format, date conventions: per config/shared_constants.md.
Detailed normalization and grouping policy: references/diff_rules.md.
CANDIDATE_JSON (required): extraction object containing lease_state, change_log, and traceability.DRAFT_AMENDMENT (optional): structured object of proposed field updates for reverse diff preview.diff_report_markdown: sectioned markdown report grouped by field prefix (for stakeholder review).diff_manifest_json: machine-readable JSON with per-path timeline, citations, normalized values, and reverse-diff overwrite preview.CANDIDATE_JSON and locate lease_state, change_log, and traceability.change_log is missing, null, or empty, emit an empty diff report with reason no_change_log_entries.references/diff_rules.md before comparing values (trimmed strings, numeric epsilon, lexical date comparison).change_log in listed order only. Do not create a synthetic “state at date T” view.field_path, initialize the timeline origin as the earliest observed old_value.from_value, to_valueeffective_datesource_documentcitationimpact_notesOL -> A1 -> A2 using unique source documents encountered on that path.field_path prefix according to references/diff_rules.md.change_log.For each grouped section, emit a table with canonical columns from diff_rules.md:
Field PathProgressionOriginalCurrentAmendment EventsCitation Pair(s)NotesDisplay rules:
null -> 50000).string("60") -> number(60)).If DRAFT_AMENDMENT is provided:
lease_state value.overwrite_preview entries with:
field_pathcurrent_valuedraft_valuewould_overwrite (true/false)comparison_reason (equal_after_normalization, value_change, type_change, current_missing)lease_state; preview only.Emit one fenced json block with:
schema_versionchange_entry_countgroupsfield_timelinesoverwrite_preview (optional)warningsBefore emission, verify:
change_log.field_path resolves in lease_state or is a valid append path for arrays.old_value per path.lease_state value for that path.source_document also has citation (and vice versa).references/diff_rules.md.change_log: return empty deliverable with warning missing_change_log.path_resolution_warning, do not guess replacements.skipped_ambiguous_or_null_input.lease-eval when available.change_log chronology and does not infer amendment deltas from prose.golden_ol_a1)Expected grouped sections from 6 entries:
Dates (ExpirationDate, TermMonths)Financials.BaseRent.Schedule[5]Financials.BaseRent.Schedule[6]Financials.TIAllowance (Amount + RatePerSF grouped together)The TI allowance fields are presented as one section because they share the Financials.TIAllowance prefix and same amendment attribution.