fix: recommendations run together on one line split into ranked items; old re-check prose falls back to bullets

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Yashas 2026-09-17 13:53:54 +05:30
parent 35d4d97504
commit 400f9ec3a0
2 changed files with 20 additions and 6 deletions

View File

@ -292,11 +292,7 @@ export function Recheck({ row }: { row: Row }) {
{ label: 'Recovered to date', value: recovered == null ? '—' : money(recovered), tone: 'emerald' }, { label: 'Recovered to date', value: recovered == null ? '—' : money(recovered), tone: 'emerald' },
]} ]}
/> />
{workStatement(summary) ? (
<WorkStatement text={summary} heading="" bare /> <WorkStatement text={summary} heading="" bare />
) : (
<p className="text-sm leading-relaxed whitespace-pre-wrap text-muted">{summary}</p>
)}
</div> </div>
</Card> </Card>
); );

View File

@ -95,7 +95,25 @@ export const CARC: Record<string, string> = {
export function recommendations(v: unknown): string[] { export function recommendations(v: unknown): string[] {
const s = str(v).trim(); const s = str(v).trim();
if (!s) return []; if (!s) return [];
const parts = s.split(/\n(?=\s*\d+\.\s)/).map((x) => x.trim()).filter(Boolean); // Ava is asked for one numbered line each, but sometimes runs them together
// ("… recovered. 2. Billing: …"). Split at a line break OR at a sentence end
// followed by the next number in sequence — "2." after "1.", never "$1.5M".
let parts = s.split(/\n(?=\s*\d+\.\s)/).map((x) => x.trim()).filter(Boolean);
if (parts.length === 1) {
const out: string[] = [];
let rest = parts[0];
let n = 2;
for (;;) {
const re = new RegExp(`(?<=[.;:)])\\s+(?=${n}\\.\\s+[A-Z(])`);
const m = re.exec(rest);
if (!m) break;
out.push(rest.slice(0, m.index).trim());
rest = rest.slice(m.index).trim();
n++;
}
out.push(rest);
parts = out.filter(Boolean);
}
return parts.length ? parts : [s]; return parts.length ? parts : [s];
} }