{
  "id": "SR-QUOTE-1.2.1",
  "title": "Quote calculator pilot",
  "testedOn": "2026-11-07",
  "timezone": "America/Los_Angeles",
  "timezoneLabel": "Pacific Time (PST, UTC-8)",
  "kind": "manual-correctness-pilot",
  "source": "Manual observations of each hosted preview on Nov 7, 2026. Not an API export and not a public screenshot release.",
  "summary": "Bolt.new and Lovable both passed 12 of 12 manual checks. This is a correctness tie on this task only. There is no overall winner, and it does not change any ranking.",
  "listedIn": "test order, not rank order",
  "changesRanking": false,
  "overallWinner": null,
  "samePrompt": true,
  "promptPublished": false,
  "separateFrom": {
    "rankingSlug": "best-ui-generator",
    "rankingTitle": "Best AI UI / landing page generator",
    "oldTask": "Oct 2026 UI generator task (A1 Tip Splitter)",
    "rankingReviewed": "2026-10-30"
  },
  "unchangedOctoberRanking": {
    "note": "Context only. These Oct 2026 UI generator scores are not results of SR-QUOTE-1.2.1.",
    "reviewed": "2026-10-30",
    "bolt": "30/30 hidden checks passed (3 runs)",
    "lovable": "29/30 hidden checks passed (3 runs)",
    "v0": "17/30 hidden checks passed (3 runs)",
    "v0InThisPilot": false,
    "screenshotToCodeInThisPilot": false
  },
  "evidence": {
    "method": "manual-ui-observation",
    "automatedHarness": false,
    "screenshotsPublished": false,
    "note": "Private original screenshots and raw project files stay archived. They are not linked from this record."
  },
  "run": [
    "One generation per tool. Same task and the same prompt. No repairs, and no source edits in the tested apps.",
    "The prompt text is not in this public record.",
    "Each app was tested in its hosted preview. Preview addresses are not listed. Access and environment blocks before the app was open were not scored as app failures."
  ],
  "usageNote": "Bolt's figure is a rounded Free-token allowance from the product UI, not an exact meter. Lovable's figure is what its message reported. The account balance and the debit were not verified. Tokens and credits are different units and are not converted to a dollar cost.",
  "usageComparable": false,
  "timingNote": "Times are observed Pacific clock times. They are not a speed score. Lovable's manual checks were finished at 5:58 AM, after a project-owner sign-in. The preview had been observed ready by 4:58:43 AM. That gap was access, not another generation.",
  "fixtures": [
    {"id": "A", "name": "Synthetic A", "hours": "2.5", "rate": "85", "parts": "40 and 15.50", "taxPercent": "8.25"},
    {"id": "B", "name": "Synthetic B", "hours": "0", "rate": "100", "parts": "none", "taxPercent": "8.25"},
    {"id": "C", "name": "Synthetic C", "hours": "1", "rate": "0.50", "parts": "none", "taxPercent": "1"}
  ],
  "unscored": [
    {"id": "A-descriptions", "note": "Quote A's part descriptions started blank. Synthetic descriptions were entered so the quote could be saved. Part amounts were not changed. This was not a scored check."}
  ],
  "checks": [
    {"id": "1", "label": "A labor", "expected": "Quote A labor shows 212.50."},
    {"id": "2", "label": "A parts", "expected": "Quote A parts show 55.50."},
    {"id": "3", "label": "A subtotal", "expected": "Quote A subtotal shows 268."},
    {"id": "4", "label": "A tax and total", "expected": "Quote A tax shows 22.11 and the total shows 290.11."},
    {"id": "5", "label": "C small amounts", "expected": "Quote C subtotal shows 0.50, tax shows 0.01, and the total shows 0.51."},
    {"id": "6", "label": "Save B", "expected": "Quote B (Synthetic B) is saved once under its name, with hours 0, rate 100, tax 8.25%, no parts, and labor, parts, subtotal, tax, and total all 0."},
    {"id": "7", "label": "Negative values", "expected": "Negative hours, rate, part amount, and tax are each tried on their own. Each one is visibly invalid, no valid total is shown, Save is actually blocked, and saved quote B is unchanged."},
    {"id": "8", "label": "Non-numeric values", "expected": "A non-numeric value in hours, rate, part amount, and tax is each tried on its own. Each one is invalid, no total is shown, Save is actually blocked, and saved quote B is unchanged."},
    {"id": "9", "label": "Save A beside B", "expected": "Quote A is saved once beside B. The saved count is 2. A totals 290.11 and B totals 0."},
    {"id": "10", "label": "Refresh A", "expected": "After a refresh and reopening, quote A still totals 290.11."},
    {"id": "11", "label": "Edit A hours", "expected": "Editing quote A to 3 hours shows labor 255, parts 55.50, subtotal 310.50, tax 25.62, and total 336.12. Those figures persist after refresh, with exactly one A and one B."},
    {"id": "12", "label": "Delete A", "expected": "Deleting A and refreshing removes A. B remains with its original fields and totals of 0, and the saved count is 1."}
  ],
  "differences": [
    {
      "checkId": "8",
      "title": "Non-numeric input",
      "both": "Both passed. The field was invalid, no total was shown, Save was blocked, and quote B was unchanged.",
      "bolt": "The number input rejected abc. The field was then empty, and that empty value was invalid.",
      "lovable": "abc was accepted in the field, and the app showed a valid-number error."
    }
  ],
  "sequenceLimits": [
    "The 12 checks and the fixtures were the same for both tools. A few Save checks were confirmed in a different order, so this record does not claim an identical click-by-click sequence.",
    "Bolt: invalid-Save checks 7 and 8 were confirmed after check 12. A provisional score from before that confirmation was replaced. No repair and no second generation.",
    "Lovable: check 7b, one negative-value Save block, was repeated once only to capture screenshot evidence. That repeat was not a repair and not another generation."
  ],
  "caveats": [
    "These 12 checks were done by hand in each hosted preview. This record is not from an API or an automated checker.",
    "Screenshots were not published. Private originals stay archived and are not linked here.",
    "Each tool had one generation and no repairs. A pass on these checks is not a full StackRank score.",
    "Correctness tie only. No overall winner, and no ranking change. The Oct 2026 UI generator scores and review dates stay as published.",
    "Bolt's token figure and Lovable's credit figure use different units. Neither is a dollar cost. Bolt's figure is rounded from an allowance UI, not an exact meter. Lovable's figure is what the message reported; the balance and the debit were not verified.",
    "Clock times were observed. They are not a speed score.",
    "The checks and fixtures matched. The order of a few Save confirmations did not.",
    "Quote A's blank part descriptions were filled with synthetic text so the quote could be saved. Amounts were not changed, and that step was not scored."
  ],
  "tools": [
    {
      "slug": "bolt",
      "name": "Bolt.new",
      "passed": 12,
      "checks": 12,
      "generations": 1,
      "repairs": 0,
      "usage": {
        "reported": "about 101,000 Free tokens",
        "exactMeter": false,
        "balanceOrDebitVerified": false,
        "note": "Rounded from the Free-token allowance shown in the product UI. Not an exact usage meter."
      },
      "timing": {
        "submitted": "4:53:29 AM",
        "readyObserved": "4:55:34 AM",
        "finalPass": null
      },
      "checkNotes": {
        "7": "Invalid Save was confirmed after check 12. A provisional score from before that confirmation was replaced. No repair and no second generation.",
        "8": "The number input rejected abc. The field was then empty, and that empty value was invalid. Invalid Save was confirmed after check 12. No repair and no second generation."
      }
    },
    {
      "slug": "lovable",
      "name": "Lovable",
      "passed": 12,
      "checks": 12,
      "generations": 1,
      "repairs": 0,
      "usage": {
        "reported": "1.9 credits reported in the tool message",
        "exactMeter": false,
        "balanceOrDebitVerified": false,
        "note": "Figure reported in the tool message. The account balance and the debit were not verified."
      },
      "timing": {
        "submitted": "4:57:02 to 4:57:19 AM",
        "readyObserved": "by 4:58:43 AM",
        "finalPass": "5:58 AM, after a project-owner sign-in"
      },
      "checkNotes": {
        "7": "Check 7b, one negative-value Save block, was repeated once only to capture screenshot evidence. That repeat was not a repair and not another generation.",
        "8": "abc was accepted in the field, and the app showed a valid-number error."
      }
    }
  ]
}
