From a7d8aa84d3a70410c025390f876e35d51aab9b79 Mon Sep 17 00:00:00 2001 From: Matthew Jackson Date: Sat, 7 Mar 2026 09:31:01 -0800 Subject: [PATCH] Make FormFiller.saveAnswer async with S3 storage support saveAnswer now uses saveJSON from the storage layer instead of writeFileSync, and all 4 callers now await it. Co-Authored-By: Claude Opus 4.6 --- lib/form_filler.mjs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/form_filler.mjs b/lib/form_filler.mjs index e01e66e..a2c2a28 100644 --- a/lib/form_filler.mjs +++ b/lib/form_filler.mjs @@ -128,16 +128,15 @@ export class FormFiller { this.jobContext = opts.jobContext || {}; } - saveAnswer(pattern, answer) { + async saveAnswer(pattern, answer) { if (!pattern || !answer) return; const existing = this.answers.findIndex(a => a.pattern === pattern); if (existing >= 0) return; this.answers.push({ pattern, answer }); if (this.answersPath) { try { - const tmp = this.answersPath + '.tmp'; - writeFileSync(tmp, JSON.stringify(this.answers, null, 2)); - renameSync(tmp, this.answersPath); + const { saveJSON } = await import('./storage.mjs'); + await saveJSON(this.answersPath, this.answers); } catch { /* best effort */ } } } @@ -626,7 +625,7 @@ Answer:`; const needsAnswer = field.required || field.type === 'number'; if (answer === null && needsAnswer) { answer = await this.aiAnswerFor(formatHint ? `${lbl} ${formatHint}` : lbl); - if (answer) this.saveAnswer(lbl, answer); + if (answer) await this.saveAnswer(lbl, answer); } // For number fields, extract just the numeric value if (answer && field.type === 'number') { @@ -656,7 +655,7 @@ Answer:`; let answer = this.answerFor(field.label); if (!answer && field.required) { answer = await this.aiAnswerFor(taFormatHint ? `${field.label} ${taFormatHint}` : field.label); - if (answer) this.saveAnswer(field.label, answer); + if (answer) await this.saveAnswer(field.label, answer); } if (answer) { const el = await byTag(field.tag); @@ -683,7 +682,7 @@ Answer:`; } if (!answer) { answer = await this.aiAnswerFor(field.legend, { options: field.options }); - if (answer) this.saveAnswer(field.legend, answer); + if (answer) await this.saveAnswer(field.legend, answer); } if (answer) { const fs = await byTag(field.tag); @@ -763,7 +762,7 @@ Answer:`; if (field.required) { answer = await this.aiAnswerFor(field.label, { options: field.options }); if (answer) { - this.saveAnswer(field.label, answer); + await this.saveAnswer(field.label, answer); } else { unknown.push({ label: field.label, type: 'select', options: field.options }); continue;