chore(autonomous-session): consolidate uncommitted work from prior session

Bundles the prior autonomous-session output that was sitting unstaged:

- Em-dash sweep across src/ + tests/ (en-dash/em-dash to hyphen, ~2280 instances)
- country-flag-icons rollout (CountryFlag component, replaces emoji glyphs that
  never rendered on Windows; lazy-loads the 3x2 SVG index as a single chunk
  after the per-subpath dynamic-import approach silently failed in webpack)
- Admin IA Phase 1+2: 7-domain regroup, 41 to 38 pages, /admin/berths index,
  redirects (ocr to ai, reports to dashboard, invitations to users),
  docs/admin-ia-proposal.md
- Per-template email tester (registry + endpoint + UI on Email admin page)
- Cancel-document mode picker (delete-from-Documenso vs keep-for-audit)
- Dashboard PDF report: 25 widgets, SVG charts, date-range picker, 11 resolvers
- Customize-widgets per-region sortables at xl+ (charts/rails/feed); single
  flat sortable below xl when the layout stacks; per-viewport saved orders
- Audit doc updates capturing each shipped item
- Lint fixes: react-compiler immutability in DonutChart (reduce instead of
  let-reassign), set-state-in-effect disables in CountryFlag and
  UploadForSigning preview-bytes effect, unused 'confirm' destructures in
  interest contract + reservation tabs, unescaped apostrophe in test-template
  card copy
This commit is contained in:
2026-05-23 00:52:59 +02:00
parent 43719b49e9
commit 221ae5784e
749 changed files with 7440 additions and 3118 deletions

View File

@@ -131,7 +131,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
kind: d.kind,
refId: d.refId,
label: `Berth ${b.mooringNumber}`,
reason: 'still available re-attaching to the restored client',
reason: 'still available - re-attaching to the restored client',
detail: d.detail,
});
} else if (b.status === 'sold') {
@@ -150,7 +150,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
kind: d.kind,
refId: d.refId,
label: `Berth ${b.mooringNumber}`,
reason: 'currently under offer to another client re-attach as a competing interest?',
reason: 'currently under offer to another client - re-attach as a competing interest?',
detail: d.detail,
});
}
@@ -178,7 +178,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
});
break;
}
// Look for active interests on the new owner that USE this yacht
// Look for active interests on the new owner that USE this yacht -
// if any exist, the new owner's deal depends on the yacht and we
// shouldn't yank ownership back without their consent.
const [usage] = await db
@@ -207,7 +207,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
refId: d.refId,
label: `Yacht ${y.name}`,
reason:
'currently owned by another party with no active dependent interests transfer back?',
'currently owned by another party with no active dependent interests - transfer back?',
});
}
break;
@@ -222,7 +222,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
kind: d.kind,
refId: d.refId,
label: 'Yacht status',
reason: 'was marked sold-away during archive restoring to active',
reason: 'was marked sold-away during archive - restoring to active',
});
}
break;
@@ -239,7 +239,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
kind: d.kind,
refId: pu.id,
label: 'Portal user account',
reason: 'was deactivated during archive restoring access',
reason: 'was deactivated during archive - restoring access',
});
}
break;
@@ -252,7 +252,7 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
refId: d.refId,
label: 'Documenso envelope',
reason: 'voided during archive',
lockReason: 'voided envelopes cannot be re-opened regenerate the EOI if needed',
lockReason: 'voided envelopes cannot be re-opened - regenerate the EOI if needed',
});
break;
}
@@ -266,11 +266,11 @@ export async function getRestoreDossier(clientId: string, portId: string): Promi
reason:
d.kind === 'invoice_voided' ? 'voided during archive' : 'written off during archive',
lockReason:
'invoice status changes are not reversed by restore un-cancel manually if needed',
'invoice status changes are not reversed by restore - un-cancel manually if needed',
});
break;
// Berth retained, yacht retained, document left, invoice left,
// reservation_* no action surfaced because nothing changed.
// reservation_* - no action surfaced because nothing changed.
default:
break;
}
@@ -363,7 +363,7 @@ async function applyReversal(tx: Tx, r: RestoreReversal, clientId: string): Prom
// Re-link the berth to whichever interest originally owned it
// (persisted in d.detail.interestId at archive time). We verify
// the interest still belongs to the restored client and isn't
// archived defensive in case the operator deleted the interest
// archived - defensive in case the operator deleted the interest
// separately while the client was archived.
const interestId = (r.detail?.interestId as string | undefined) ?? null;
if (!interestId) break;