Public: anyone can read this; the crew can change it.
A contingency the buyer waives is marked Waived, not done or removed, so its reminders stop and the record shows it was given up on purpose #96
Reviewed pull #99 at its head: ticked An open Inspection, Appraisal or Financing date (any date but Closing) has a Waive button on its sheet beside Mark done and Move this date; it asks once (as removing does, src/pages/confirm.ts) and records the day it was waived and who waived it.; A waived date stays on its deal: on the clock and the deal page its marker is grey with the word Waived (not a check), on the client timeline and its printout it reads "Waived", and the progress line (src/progress.ts) counts it as settled, so "4 of 7 dates done" still adds up.; A waived date drafts no more reminders, no overdue follow-up, no non-business-day flag and no after-closing conflict; any of its reminders waiting for approval leave Reminders for today and the header count.; A waived date can be un-waived from its sheet, coming back open with its date unchanged.; The same over every door: POST /api/deals/:id/deadlines/:did/waive (and its undo) in the OpenAPI document, a waive_date MCP tool, and a key in the terminal; each obeys permit for deal update exactly as Mark done does, and the Activity page records who waived what.; One sample deal shows a waived date (e.g. Juniper Court's appraisal waived), and the README's walk-through mentions it in one sentence.; Tests: waiving stops the reminders and follow-up, un-waiving brings them back, progress counts it, a user who may not update the deal is refused, the page sheet and API agree. bun test and bun scripts/design-lint.ts pass..
Intent: buyers routinely waive the inspection or financing contingency to win an offer; today the agent can only mark it done (which says it happened) or remove it (which loses it), and neither is true.
Done looks like:
src/pages/confirm.ts) and records the day it was waived and who waived it.src/progress.ts) counts it as settled, so "4 of 7 dates done" still adds up.POST /api/deals/:id/deadlines/:did/waive(and its undo) in the OpenAPI document, awaive_dateMCP tool, and a key in the terminal; each obeyspermitfor deal update exactly as Mark done does, and the Activity page records who waived what.bun testandbun scripts/design-lint.tspass.Files I expect:
src/db.ts(awaived_atcolumn, as a migration),src/deals.ts,src/reminders.ts,src/progress.ts,src/order.ts,src/pages/sheet.ts,src/pages/clock.ts,src/pages/timeline.ts,src/routes.ts,src/openapi.ts,src/mcp.ts,src/terminal.ts,src/sample.ts, README.md.Risks: every place that reads
done_atas "no longer open" must also treat waived as not open; grep for it. Closing itself is never waivable. No cell of contract.json changes.