{
 "about": "Summaries-of-summaries test from memorydecay.com/context-compaction-information-loss, September 2026. Fictional scenario. Licence CC BY 4.0.",
 "model": "Claude Sonnet, run through Claude Code subagents, one fresh agent per round",
 "budget_words": 300,
 "facts": [
  {
   "id": "N1",
   "kind": "number",
   "fact": "About 340 online orders a week"
  },
  {
   "id": "N2",
   "kind": "number",
   "fact": "Roughly 1,100 orders in the fortnight before Christmas"
  },
  {
   "id": "N3",
   "kind": "number",
   "fact": "Next-day collection cut-off is 2pm"
  },
  {
   "id": "N4",
   "kind": "number",
   "fact": "14 allergens on the label"
  },
  {
   "id": "N5",
   "kind": "number",
   "fact": "Delivery radius is 6 miles"
  },
  {
   "id": "N6",
   "kind": "number",
   "fact": "212 unredeemed gift cards"
  },
  {
   "id": "N7",
   "kind": "number",
   "fact": "Gift cards worth £4,380 in total"
  },
  {
   "id": "N8",
   "kind": "number",
   "fact": "New system costs £39 a month"
  },
  {
   "id": "P1",
   "kind": "name",
   "fact": "Owner is Priya Nandakumar"
  },
  {
   "id": "P2",
   "kind": "name",
   "fact": "The bakery is in Frome"
  },
  {
   "id": "P3",
   "kind": "name",
   "fact": "Old host is called Bluefin"
  },
  {
   "id": "P4",
   "kind": "name",
   "fact": "Accountant is Tom Okafor"
  },
  {
   "id": "P5",
   "kind": "name",
   "fact": "Card payments run through Tillwise"
  },
  {
   "id": "P6",
   "kind": "name",
   "fact": "Tillwise account is in Marcus Hale's name"
  },
  {
   "id": "P7",
   "kind": "name",
   "fact": "Counter staff are Jess and Arlo"
  },
  {
   "id": "P8",
   "kind": "name",
   "fact": "Domain is at Namecheap under the nephew Dev's login"
  },
  {
   "id": "D1",
   "kind": "decision",
   "fact": "Chose Postgres over MySQL"
  },
  {
   "id": "D2",
   "kind": "decision",
   "fact": "Keep the old order numbers (HB prefix) rather than a new format"
  },
  {
   "id": "D3",
   "kind": "decision",
   "fact": "Allergen labels generated from the product database, not typed text"
  },
  {
   "id": "D4",
   "kind": "decision",
   "fact": "Dates stored in Europe/London time"
  },
  {
   "id": "D5",
   "kind": "decision",
   "fact": "Delivery radius kept at 6 miles, 10 miles rejected"
  },
  {
   "id": "D6",
   "kind": "decision",
   "fact": "Switch-over date is Wednesday 12 November"
  },
  {
   "id": "D7",
   "kind": "decision",
   "fact": "Gift cards carry over at the same value"
  },
  {
   "id": "D8",
   "kind": "decision",
   "fact": "Dev must transfer the domain login to Priya"
  },
  {
   "id": "R1",
   "kind": "reason",
   "fact": "Postgres because the new host only offers managed Postgres and nobody can patch MySQL"
  },
  {
   "id": "R2",
   "kind": "reason",
   "fact": "Old order numbers kept because customers quote them on the phone"
  },
  {
   "id": "R3",
   "kind": "reason",
   "fact": "Labels from the database because of the March walnut-loaf 'contains no nuts' typo"
  },
  {
   "id": "R4",
   "kind": "reason",
   "fact": "Two test orders failed because discount expiry was compared in UTC"
  },
  {
   "id": "R5",
   "kind": "reason",
   "fact": "6 miles because the electric van only does about 90 miles on a charge in winter"
  },
  {
   "id": "R6",
   "kind": "reason",
   "fact": "12 November because it is the quietest day and leaves six weeks before Christmas"
  },
  {
   "id": "R7",
   "kind": "reason",
   "fact": "The old host's Saturday crashes cost about £600 a time"
  },
  {
   "id": "R8",
   "kind": "reason",
   "fact": "Gift cards not converted because Priya promised customers they would not expire"
  },
  {
   "id": "C1",
   "kind": "constraint",
   "fact": "Do not delete the Bluefin database until Tom has exported the 2025 tax year"
  },
  {
   "id": "C2",
   "kind": "constraint",
   "fact": "Tom needs the export by 31 January"
  },
  {
   "id": "C3",
   "kind": "constraint",
   "fact": "Payment setting changes need Marcus to log in himself"
  },
  {
   "id": "C4",
   "kind": "constraint",
   "fact": "Do not ask Marcus for his password"
  },
  {
   "id": "C5",
   "kind": "constraint",
   "fact": "Do not switch over on a Saturday"
  },
  {
   "id": "C6",
   "kind": "constraint",
   "fact": "Do not convert gift cards to store credit"
  },
  {
   "id": "C7",
   "kind": "constraint",
   "fact": "Never email customers without Priya approving the wording"
  },
  {
   "id": "C8",
   "kind": "constraint",
   "fact": "The domain login must move to Priya before switch-over"
  }
 ],
 "conditions": {
  "plain": {
   "grades": {
    "1": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "2": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": "Borderline: 'new host only offers managed Postgres' kept; 'nobody can patch MySQL' half dropped"
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "3": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "4": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "lost",
      "note": "31 Jan deadline dropped from the blocker line"
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "lost",
      "note": "'never ask for his password' dropped"
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "lost",
      "note": "Borderline: Namecheap transfer still listed as a blocker but 'before switch-over' no longer stated"
     }
    },
    "5": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "lost",
      "note": "31 Jan deadline dropped from the blocker line"
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "lost",
      "note": "'never ask for his password' dropped"
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "lost",
      "note": "Borderline: Namecheap transfer still listed as a blocker but 'before switch-over' no longer stated"
     }
    },
    "6": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "lost",
      "note": "31 Jan deadline dropped from the blocker line"
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "lost",
      "note": "'never ask for his password' dropped"
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "lost",
      "note": "Borderline: Namecheap transfer still listed as a blocker but 'before switch-over' no longer stated"
     }
    },
    "7": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "lost",
      "note": "31 Jan deadline dropped from the blocker line"
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "lost",
      "note": "'never ask for his password' dropped"
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "lost",
      "note": "Borderline: Namecheap transfer still listed as a blocker but 'before switch-over' no longer stated"
     }
    },
    "8": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Weekly rate given for the fortnight: '~1,100/week in fortnight before Christmas' vs 1,100 in the fortnight"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": "Borderline: 'DB: Postgres.' no longer names MySQL as the rejected option"
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": "Borderline: 'stays 6 miles' kept, 10-mile option no longer mentioned"
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "lost",
      "note": "Just 'DB: Postgres.'"
     },
     "R2": {
      "grade": "lost",
      "note": "Just 'Keep old HB-prefixed order numbers.'"
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": "Borderline: '(van winter range)' keeps the reason, the ~90 miles figure is gone"
     },
     "R6": {
      "grade": "lost",
      "note": "Only the date survives; quietest day / six weeks before Christmas gone"
     },
     "R7": {
      "grade": "lost",
      "note": "COST line removed"
     },
     "R8": {
      "grade": "lost",
      "note": "'no expiry' survives as an attribute, but Priya's promise and its role as the reason are gone"
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "lost",
      "note": "31 Jan deadline dropped from the blocker line"
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "lost",
      "note": "'never ask for his password' dropped"
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "lost",
      "note": "'NOT converted to store credit' dropped; only 'carry over at same value'"
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "lost",
      "note": "Borderline: Namecheap transfer still listed as a blocker but 'before switch-over' no longer stated"
     }
    }
   },
   "by_round": {
    "1": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 8,
     "constraint": 8,
     "kept": 39,
     "distorted": 1,
     "lost": 0,
     "words": 379
    },
    "2": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 6,
     "constraint": 7,
     "kept": 36,
     "distorted": 1,
     "lost": 3,
     "words": 435
    },
    "3": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 4,
     "constraint": 7,
     "kept": 34,
     "distorted": 1,
     "lost": 5,
     "words": 413
    },
    "4": {
     "number": 6,
     "name": 8,
     "decision": 8,
     "reason": 3,
     "constraint": 4,
     "kept": 29,
     "distorted": 1,
     "lost": 10,
     "words": 391
    },
    "5": {
     "number": 6,
     "name": 8,
     "decision": 8,
     "reason": 3,
     "constraint": 4,
     "kept": 29,
     "distorted": 1,
     "lost": 10,
     "words": 401
    },
    "6": {
     "number": 6,
     "name": 8,
     "decision": 8,
     "reason": 3,
     "constraint": 4,
     "kept": 29,
     "distorted": 1,
     "lost": 10,
     "words": 396
    },
    "7": {
     "number": 6,
     "name": 8,
     "decision": 8,
     "reason": 3,
     "constraint": 4,
     "kept": 29,
     "distorted": 1,
     "lost": 10,
     "words": 406
    },
    "8": {
     "number": 6,
     "name": 8,
     "decision": 8,
     "reason": 3,
     "constraint": 4,
     "kept": 29,
     "distorted": 1,
     "lost": 10,
     "words": 406
    }
   },
   "notes": {
    "1": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n\nDECISIONS MADE:\n- DB: Postgres (not MySQL) — new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (HB-prefixed) — customers quote them by phone; new format would confuse counter staff.\n- Allergen labels (14 legal allergens) generated from product database, not typed text — March incident: walnut loaf mislabeled \"contains no nuts\"; must never recur.\n- Delivery radius stays 6 miles (not 10) — electric van only ~90 miles winter range.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week, leaves 6 weeks before Christmas.\n- Gift cards: 212 unredeemed, £4,380 total, must carry over at same value on new system — NOT converted to store credit (Priya promised no expiry).\n\nTESTING:\n- 25 fake orders tested; 2 failed (discount code + December collection date combo). Root cause: discount expiry compared in UTC not UK time. Fixed by storing dates in Europe/London timezone.\n\nBLOCKERS / DEPENDENCIES (not yet resolved):\n- Do NOT delete Bluefin DB until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Tillwise payment provider account is in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; do not ask him for his password.\n- Domain hartwellbakery.co.uk on Namecheap, login held by nephew Dev — must transfer login to Priya before switch-over.\n- Do NOT switch on a Saturday — busiest day, only 2 counter staff (Jess, Arlo) untrained on new screens.\n\nCOST: new system £39/mo vs old host £18/mo (but old host costs ~£600/mo in lost Saturday orders from crashes).\n\nSTANDING RULE: Never email customers from new system without Priya approving wording first (past incident: unapproved test email sent to 40 real customers, still causing apologies).\n\nNEXT STEPS OUTSTANDING: Get Dev to transfer Namecheap login to Priya; coordinate Marcus for Tillwise settings; confirm Tom Okafor's export before any Bluefin deletion; train Jess/Arlo before 12 Nov switch.\n",
    "2": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n\nDECISIONS MADE:\n- DB: Postgres (not MySQL) — new host only offers managed Postgres.\n- Keep old order numbers (HB-prefixed) — customers quote them by phone.\n- Allergen labels (14 legal allergens) generated from product database, not typed text — March incident: walnut loaf mislabeled \"contains no nuts\"; must never recur.\n- Delivery radius stays 6 miles (not 10) — electric van only ~90 miles winter range.\n- Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380 total, carry over at same value, no expiry.\n\nTESTING:\n- 25 fake orders tested; 2 failed (discount code + December collection date). Root cause: discount expiry compared UTC not UK time — fixed by storing dates in Europe/London timezone.\n\nPRODUCT CATALOGUE (new work this session):\n- 63 products built in new system, grouped: bread, pastries, cakes, seasonal.\n- Seasonal group must be hidden outside November/December (Priya's requirement) — verify this is implemented/toggle exists before switch-over.\n- Photos imported for 41/63 products; remaining ~22 to be shot by Priya's friend Sanna next week — chase this before 12 Nov.\n- Sourdough loaves: two sizes, price difference 90p.\n- Added \"sold out today\" toggle for counter staff, tablet-operable.\n\nBLOCKERS / DEPENDENCIES (not yet resolved):\n- Do NOT delete Bluefin DB until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Tillwise payment account is in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; never ask for his password.\n- Domain hartwellbakery.co.uk on Namecheap, login held by nephew Dev — must transfer to Priya before switch-over.\n- Do NOT switch on a Saturday — busiest day, only 2 counter staff (Jess, Arlo) untrained on new screens.\n- Seasonal-category visibility toggle and Sanna's remaining 22 photos both need confirming done before 12 Nov.\n\nCOST: new system £39/mo vs old host £18/mo (but old host costs ~£600/mo in lost Saturday orders from crashes).\n\nSTANDING RULE: Never email customers from new system without Priya approving wording first (past incident: unapproved test email sent to 40 real customers).\n\nNEXT STEPS OUTSTANDING: Dev → transfer Namecheap login to Priya; coordinate Marcus for Tillwise settings; confirm Tom Okafor's export before any Bluefin deletion; train Jess/Arlo before 12 Nov; confirm seasonal-category hide/show works; get remaining 22 product photos from Sanna.\n",
    "3": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order (regulars leave messages like \"cut the loaf please\").\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products (bread, pastries, cakes, seasonal). Seasonal group must be hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining ~22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p price gap. \"Sold out today\" toggle added for counter staff, tablet-operable.\n\nHARDWARE RISK: Counter tablet is an old iPad on iOS 15 — new admin screen supports it, but only just. Replacement suggested; Priya deferred to January (after Christmas rush, i.e. after the critical period — worth revisiting if it causes problems).\n\nBLOCKERS / DEPENDENCIES (unresolved):\n- Don't delete Bluefin DB until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Tillwise payment account is Marcus Hale's (Priya's husband) — changes need Marcus logged in himself, never his password.\n- Namecheap domain login held by nephew Dev — must transfer to Priya before switch-over.\n- Don't switch on a Saturday — busiest day, Jess/Arlo untrained on new screens.\n- Seasonal-toggle and Sanna's 22 photos need confirming done before 12 Nov.\n\nCOST: new system £39/mo vs old £18/mo (but old costs ~£600/mo in lost Saturday orders from crashes).\n\nSTANDING RULE: Never email customers from new system without Priya approving wording first (past incident: unapproved test email to 40 real customers).\n\nNEXT STEPS: Dev → transfer Namecheap login to Priya; coordinate Marcus for Tillwise settings; confirm Tom Okafor's export before Bluefin deletion; train Jess/Arlo before 12 Nov; confirm seasonal-category hide/show works; get remaining 22 photos from Sanna; watch iPad iOS 15 compatibility, replacement deferred to January.\n",
    "4": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order.\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products. Seasonal group hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining 22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p gap. \"Sold out today\" tablet toggle added.\n\nHARDWARE RISK: Counter iPad on iOS 15 — new admin screen only just supports it. Replacement deferred to January.\n\nEMAIL RECEIPTS: Built — shows collection slot in bold, shop phone 01373 555 0192 at bottom, sign-off \"Thank you, from all of us at Hartwell\". Three variants (collection/delivery/gift card). Nothing sent yet.\n\nCUSTOMERS: 2,870 imported, 1,944 active in last year, 38 duplicates merged. Mother's account keeps 100% staff discount. Marketing consent carried over as-is.\n\nDELIVERY: Tested to Beckington. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Gate codes for regulars only exist on paper in the till notebook — not in old system.\n\nDRY RUN: Export 11 min, import 4 min. 6 stale open orders (past dates) to be closed. One-page switch-over checklist on office wall.\n\nHANDOVER: Refunds done via Tillwise dashboard, not ordering system. \"Orders have moved\" banner ready on old site. Priya sole admin for first month.\n\nBLOCKERS (unresolved): Tom Okafor's 2025 tax export before Bluefin deletion; Tillwise changes need Marcus Hale logged in himself; Namecheap login transfer from nephew Dev to Priya; no Saturday switch (Jess/Arlo untrained); confirm seasonal toggle + Sanna's 22 photos before 12 Nov.\n\nSTANDING RULE: Never email customers without Priya approving wording first.\n",
    "5": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order.\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products. Seasonal group hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining 22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p gap. \"Sold out today\" tablet toggle added.\n\nHARDWARE RISK: Counter iPad on iOS 15 — new admin screen only just supports it. Replacement deferred to January.\n\nEMAIL RECEIPTS: Built — shows collection slot in bold, shop phone 01373 555 0192 at bottom, sign-off \"Thank you, from all of us at Hartwell\". Three variants (collection/delivery/gift card). Nothing sent yet.\n\nCUSTOMERS: 2,870 imported, 1,944 active in last year, 38 duplicates merged. Mother's account keeps 100% staff discount. Marketing consent carried over as-is — old system recorded consent properly, so no re-consent needed.\n\nDELIVERY: Tested to Beckington. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Gate codes for regulars only exist on paper in the till notebook — not in old system.\n\nDRY RUN: Export 11 min, import 4 min. 6 stale open orders (past dates) to be closed. One-page switch-over checklist on office wall.\n\nHANDOVER: Refunds done via Tillwise dashboard, not ordering system. \"Orders have moved\" banner ready on old site. Priya sole admin for first month.\n\nBLOCKERS (unresolved): Tom Okafor's 2025 tax export before Bluefin deletion; Tillwise changes need Marcus Hale logged in himself; Namecheap login transfer from nephew Dev to Priya; no Saturday switch (Jess/Arlo untrained); confirm seasonal toggle + Sanna's 22 photos before 12 Nov.\n\nSTANDING RULE: Never email customers without Priya approving wording first.\n",
    "6": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order.\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products. Seasonal group hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining 22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p gap. \"Sold out today\" tablet toggle added.\n\nHARDWARE RISK: Counter iPad on iOS 15 — new admin screen only just supports it. Replacement deferred to January.\n\nEMAIL RECEIPTS: Built — shows collection slot in bold, shop phone 01373 555 0192 at bottom, sign-off \"Thank you, from all of us at Hartwell\". Three variants (collection/delivery/gift card). Nothing sent yet.\n\nCUSTOMERS: 2,870 imported, 1,944 active in last year, 38 duplicates merged. Mother's account keeps 100% staff discount. Marketing consent carried over as-is — no re-consent needed.\n\nDELIVERY: End-to-end tested to Beckington. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Old system never stored delivery notes — regulars' gate codes exist only on paper in the till notebook.\n\nDRY RUN: Export 11 min, import 4 min. 6 stale open orders (past dates) to be closed. One-page switch-over checklist on office wall.\n\nHANDOVER: Refunds via Tillwise dashboard, not ordering system. \"Orders have moved\" banner ready on old site. Priya sole admin for first month.\n\nBLOCKERS (unresolved): Tom Okafor's 2025 tax export before Bluefin deletion; Tillwise changes need Marcus Hale logged in himself; Namecheap login transfer from nephew Dev to Priya; no Saturday switch (Jess/Arlo untrained); confirm seasonal toggle + Sanna's 22 photos before 12 Nov.\n\nSTANDING RULE: Never email customers without Priya approving wording first.\n",
    "7": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order.\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products. Seasonal group hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining 22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p gap. \"Sold out today\" tablet toggle added.\n\nHARDWARE RISK: Counter iPad on iOS 15 — new admin screen only just supports it. Replacement deferred to January.\n\nEMAIL RECEIPTS: Built — shows collection slot in bold, shop phone 01373 555 0192 at bottom, sign-off \"Thank you, from all of us at Hartwell\". Three variants (collection/delivery/gift card). Nothing sent yet.\n\nCUSTOMERS: 2,870 imported, 1,944 active in last year, 38 duplicates merged. Mother's account keeps 100% staff discount. Marketing consent carried over as-is — no re-consent needed.\n\nDELIVERY: End-to-end tested to Beckington. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Old system never stored delivery notes — regulars' gate codes exist only on paper in the till notebook.\n\nDRY RUN: Export 11 min, import 4 min. 6 stale open orders (past dates) closed per Priya. One-page switch-over checklist on office wall.\n\nHANDOVER PREP (final checks before handover): Refunds via Tillwise dashboard, not ordering system. \"Orders have moved\" banner added to old site, ready to switch on. Priya confirmed sole admin for first month.\n\nBLOCKERS (unresolved): Tom Okafor's 2025 tax export before Bluefin deletion; Tillwise changes need Marcus Hale logged in himself; Namecheap login transfer from nephew Dev to Priya; no Saturday switch (Jess/Arlo untrained); confirm seasonal toggle + Sanna's 22 photos before 12 Nov.\n\nSTANDING RULE: Never email customers without Priya approving wording first.\n",
    "8": "SESSION NOTES — Hartwell Bakery ordering system migration (compacted)\n\nCLIENT: Priya Nandakumar, owner, Hartwell Bakery, Frome. Goal: move off old PHP/Bluefin ordering system (crashes most Saturdays) to new app before Christmas rush.\n\nVOLUME/TIMING FACTS:\n- ~340 online orders/week normally, ~1,100/week in fortnight before Christmas.\n- Next-day collection cut-off: 2pm; after 2pm rolls to day after.\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, max 12 orders/slot.\n\nDECISIONS MADE:\n- DB: Postgres. Keep old HB-prefixed order numbers.\n- Allergen labels (14 legal allergens) generated from product database, never typed text — March incident: walnut loaf mislabeled \"contains no nuts\", must never recur.\n- Delivery radius stays 6 miles (van winter range). Switch-over date: Wednesday 12 November.\n- Gift cards: 212 unredeemed, £4,380, carry over at same value, no expiry.\n- Note field added to every order.\n\nTESTING: 25 fake orders, 2 failures fixed (discount expiry now stored Europe/London not UTC).\n\nPRODUCT CATALOGUE: 63 products. Seasonal group hidden outside Nov/Dec — verify toggle before switch-over. Photos: 41/63 done, remaining 22 from Sanna, chase before 12 Nov. Sourdough two sizes, 90p gap. \"Sold out today\" tablet toggle added.\n\nHARDWARE RISK: Counter iPad on iOS 15 — new admin screen only just supports it. Replacement deferred to January.\n\nEMAIL RECEIPTS: Built — shows collection slot in bold, shop phone 01373 555 0192 at bottom, sign-off \"Thank you, from all of us at Hartwell\". Three variants (collection/delivery/gift card). Nothing sent yet.\n\nCUSTOMERS: 2,870 imported, 1,944 active in last year, 38 duplicates merged. Mother's account keeps 100% staff discount. Marketing consent carried over as-is — no re-consent needed.\n\nDELIVERY: End-to-end tested to Beckington. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Old system never stored delivery notes — regulars' gate codes exist only on paper in the till notebook.\n\nDRY RUN: Export 11 min, import 4 min. 6 stale open orders (past dates) closed per Priya. One-page switch-over checklist on office wall.\n\nHANDOVER PREP (final checks before handover): Refunds via Tillwise dashboard, not ordering system. \"Orders have moved\" banner added to old site, ready to switch on. Priya confirmed sole admin for first month.\n\nBLOCKERS (unresolved): Tom Okafor's 2025 tax export before Bluefin deletion; Tillwise changes need Marcus Hale logged in himself; Namecheap login transfer from nephew Dev to Priya; no Saturday switch (Jess/Arlo untrained); confirm seasonal toggle + Sanna's 22 photos before 12 Nov.\n\nSTANDING RULE: Never email customers without Priya approving wording first.\n"
   }
  },
  "careful": {
   "grades": {
    "1": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "2": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "3": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "4": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "kept",
      "note": ""
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": ""
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "kept",
      "note": ""
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "kept",
      "note": ""
     }
    },
    "5": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "lost",
      "note": "Borderline: Namecheap no longer named; only 'domain transfer from nephew Dev to Priya' remains, nothing stated wrongly"
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": "Borderline: rounds 5+ say 'discount+Dec date, UTC vs UK time' rather than 'discount expiry', substance kept"
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "lost",
      "note": "'needs Marcus to log in himself' dropped; only 'never ask for his password' remains"
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "distorted",
      "note": "Heading 'OUTSTANDING BEFORE SWITCH-OVER' shortened to 'OUTSTANDING:'; the before-switch-over deadline is gone, constraint weakened"
     }
    },
    "6": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "lost",
      "note": "Borderline: Namecheap no longer named; only 'domain transfer from nephew Dev to Priya' remains, nothing stated wrongly"
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": "Borderline: rounds 5+ say 'discount+Dec date, UTC vs UK time' rather than 'discount expiry', substance kept"
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "lost",
      "note": "'needs Marcus to log in himself' dropped; only 'never ask for his password' remains"
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "distorted",
      "note": "Heading 'OUTSTANDING BEFORE SWITCH-OVER' shortened to 'OUTSTANDING:'; the before-switch-over deadline is gone, constraint weakened"
     }
    },
    "7": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "lost",
      "note": "Borderline: Namecheap no longer named; only 'domain transfer from nephew Dev to Priya' remains, nothing stated wrongly"
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": "Borderline: rounds 5+ say 'discount+Dec date, UTC vs UK time' rather than 'discount expiry', substance kept"
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "lost",
      "note": "'needs Marcus to log in himself' dropped; only 'never ask for his password' remains"
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "distorted",
      "note": "Heading 'OUTSTANDING BEFORE SWITCH-OVER' shortened to 'OUTSTANDING:'; the before-switch-over deadline is gone, constraint weakened"
     }
    },
    "8": {
     "N1": {
      "grade": "kept",
      "note": ""
     },
     "N2": {
      "grade": "distorted",
      "note": "Notes say ~1,100 per week in the fortnight before Christmas; fact is ~1,100 in the fortnight total"
     },
     "N3": {
      "grade": "kept",
      "note": ""
     },
     "N4": {
      "grade": "kept",
      "note": ""
     },
     "N5": {
      "grade": "kept",
      "note": ""
     },
     "N6": {
      "grade": "kept",
      "note": ""
     },
     "N7": {
      "grade": "kept",
      "note": ""
     },
     "N8": {
      "grade": "kept",
      "note": ""
     },
     "P1": {
      "grade": "kept",
      "note": ""
     },
     "P2": {
      "grade": "kept",
      "note": ""
     },
     "P3": {
      "grade": "kept",
      "note": ""
     },
     "P4": {
      "grade": "kept",
      "note": ""
     },
     "P5": {
      "grade": "kept",
      "note": ""
     },
     "P6": {
      "grade": "kept",
      "note": ""
     },
     "P7": {
      "grade": "kept",
      "note": ""
     },
     "P8": {
      "grade": "lost",
      "note": "Borderline: Namecheap no longer named; only 'domain transfer from nephew Dev to Priya' remains, nothing stated wrongly"
     },
     "D1": {
      "grade": "kept",
      "note": ""
     },
     "D2": {
      "grade": "kept",
      "note": ""
     },
     "D3": {
      "grade": "kept",
      "note": ""
     },
     "D4": {
      "grade": "kept",
      "note": ""
     },
     "D5": {
      "grade": "kept",
      "note": ""
     },
     "D6": {
      "grade": "kept",
      "note": ""
     },
     "D7": {
      "grade": "kept",
      "note": ""
     },
     "D8": {
      "grade": "kept",
      "note": ""
     },
     "R1": {
      "grade": "kept",
      "note": ""
     },
     "R2": {
      "grade": "kept",
      "note": ""
     },
     "R3": {
      "grade": "kept",
      "note": ""
     },
     "R4": {
      "grade": "kept",
      "note": "Borderline: rounds 5+ say 'discount+Dec date, UTC vs UK time' rather than 'discount expiry', substance kept"
     },
     "R5": {
      "grade": "kept",
      "note": ""
     },
     "R6": {
      "grade": "kept",
      "note": ""
     },
     "R7": {
      "grade": "kept",
      "note": "regraded: £600/month is consistent with one ~£600 crash a month"
     },
     "R8": {
      "grade": "kept",
      "note": ""
     },
     "C1": {
      "grade": "kept",
      "note": ""
     },
     "C2": {
      "grade": "kept",
      "note": ""
     },
     "C3": {
      "grade": "lost",
      "note": "'needs Marcus to log in himself' dropped; only 'never ask for his password' remains"
     },
     "C4": {
      "grade": "kept",
      "note": ""
     },
     "C5": {
      "grade": "kept",
      "note": ""
     },
     "C6": {
      "grade": "kept",
      "note": ""
     },
     "C7": {
      "grade": "kept",
      "note": ""
     },
     "C8": {
      "grade": "distorted",
      "note": "Heading 'OUTSTANDING BEFORE SWITCH-OVER' shortened to 'OUTSTANDING:'; the before-switch-over deadline is gone, constraint weakened"
     }
    }
   },
   "by_round": {
    "1": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 8,
     "constraint": 8,
     "kept": 39,
     "distorted": 1,
     "lost": 0,
     "words": 353
    },
    "2": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 8,
     "constraint": 8,
     "kept": 39,
     "distorted": 1,
     "lost": 0,
     "words": 413
    },
    "3": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 8,
     "constraint": 8,
     "kept": 39,
     "distorted": 1,
     "lost": 0,
     "words": 473
    },
    "4": {
     "number": 7,
     "name": 8,
     "decision": 8,
     "reason": 8,
     "constraint": 8,
     "kept": 39,
     "distorted": 1,
     "lost": 0,
     "words": 515
    },
    "5": {
     "number": 7,
     "name": 7,
     "decision": 8,
     "reason": 8,
     "constraint": 6,
     "kept": 36,
     "distorted": 2,
     "lost": 2,
     "words": 530
    },
    "6": {
     "number": 7,
     "name": 7,
     "decision": 8,
     "reason": 8,
     "constraint": 6,
     "kept": 36,
     "distorted": 2,
     "lost": 2,
     "words": 556
    },
    "7": {
     "number": 7,
     "name": 7,
     "decision": 8,
     "reason": 8,
     "constraint": 6,
     "kept": 36,
     "distorted": 2,
     "lost": 2,
     "words": 504
    },
    "8": {
     "number": 7,
     "name": 7,
     "decision": 8,
     "reason": 8,
     "constraint": 6,
     "kept": 36,
     "distorted": 2,
     "lost": 2,
     "words": 552
    }
   },
   "notes": {
    "1": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) must be generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, must carry over at same value on new system. Do NOT convert to store credit — Priya promised customers no expiry.\n\nRULES / DO NOT:\n- Do not delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 January).\n- Payments via \"Tillwise\", account in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; never ask for his password.\n- Do not switch on new system on a Saturday — busiest day, only two counter staff (Jess, Arlo) untrained on new screens.\n- Never email customers from new system without Priya approving wording first (a test email to 40 real customers last year still causing apologies).\n\nOUTSTANDING BEFORE SWITCH-OVER:\n- Domain hartwellbakery.co.uk registered at Namecheap; login held by nephew Dev — needs transferring to Priya.\n\nTESTING: 25 fake checkout orders run; 2 failed (discount code + December collection date combo) — cause: discount expiry compared in UTC not UK time; fixed by storing dates in Europe/London.\n\nCOST: New system £39/mo vs old host £18/mo but old host costs ~£600/month in lost Saturday orders from crashes.\n",
    "2": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) must be generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, must carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue built: 63 products total, grouped bread/pastries/cakes/seasonal. Seasonal group must be hidden outside November and December. Photos imported for 41 of 63; remaining will be shot next week by Priya's friend Sanna. Sourdough loaves come in two sizes, price difference 90p. Added a \"sold out today\" toggle for counter staff, usable from a tablet.\n\nRULES / DO NOT:\n- Do not delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 January).\n- Payments via \"Tillwise\", account in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; never ask for his password.\n- Do not switch on new system on a Saturday — busiest day, only two counter staff (Jess, Arlo) untrained on new screens.\n- Never email customers from new system without Priya approving wording first (a test email to 40 real customers last year still causing apologies).\n\nOUTSTANDING BEFORE SWITCH-OVER:\n- Domain hartwellbakery.co.uk registered at Namecheap; login held by nephew Dev — needs transferring to Priya.\n- Remaining 22 product photos pending from Sanna.\n\nTESTING: 25 fake checkout orders run; 2 failed (discount code + December collection date combo) — cause: discount expiry compared in UTC not UK time; fixed by storing dates in Europe/London.\n\nCOST: New system £39/mo vs old host £18/mo but old host costs ~£600/month in lost Saturday orders from crashes.\n",
    "3": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) must be generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, must carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products total, grouped bread/pastries/cakes/seasonal. Seasonal group must be hidden outside November and December. Photos imported for 41 of 63; remaining 22 pending from Sanna (Priya's friend), to be shot \"next week\". Sourdough loaves come in two sizes, price difference 90p. Added \"sold out today\" toggle for counter staff, usable from a tablet.\n- Collection slots: shop opens 7.30am, slots every 30 minutes until 4pm, limit 12 orders/slot.\n- Note field added on every order (Priya's request): regulars leave messages like \"cut the loaf please\".\n\nRULES / DO NOT:\n- Do not delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 January).\n- Payments via \"Tillwise\", account in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; never ask for his password.\n- Do not switch on new system on a Saturday — busiest day, only two counter staff (Jess, Arlo) untrained on new screens.\n- Never email customers from new system without Priya approving wording first (a test email to 40 real customers last year still causing apologies).\n\nOUTSTANDING BEFORE SWITCH-OVER:\n- Domain hartwellbakery.co.uk registered at Namecheap; login held by nephew Dev — needs transferring to Priya.\n- Remaining 22 product photos pending from Sanna.\n- Counter tablet is an old iPad on iOS 15 — new admin screen supports it, but only just. Suggested replacing before Christmas; Priya said maybe in January.\n\nTESTING: 25 fake checkout orders run; 2 failed (discount code + December collection date combo) — cause: discount expiry compared in UTC not UK time; fixed by storing dates in Europe/London.\n\nCOST: New system £39/mo vs old host £18/mo but old host costs ~£600/month in lost Saturday orders from crashes.\n",
    "4": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products (bread/pastries/cakes/seasonal). Seasonal group hidden outside Nov/Dec. Photos imported for 41 of 63; remaining 22 pending from Sanna (Priya's friend). Sourdough loaves: two sizes, 90p price difference. \"Sold out today\" toggle added for counter staff (tablet-usable).\n- Collection slots: shop opens 7.30am, slots every 30 min until 4pm, limit 12 orders/slot.\n- Note field added on every order (Priya's request): regulars leave messages like \"cut the loaf please\".\n- Email receipts: template shows collection slot in bold and shop phone number (01373 555 0192) at bottom. Wording changed to \"Thank you, from all of us at Hartwell\" (was \"Thanks for your order\") at Priya's request. Three variants written: collection, delivery, gift card purchase. Nothing sent to customers yet.\n\nRULES / DO NOT:\n- Do not delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 January).\n- Payments via \"Tillwise\", account in Marcus Hale's (Priya's husband) name — any payment settings change needs Marcus to log in himself; never ask for his password.\n- Do not switch on new system on a Saturday — busiest day, only two counter staff (Jess, Arlo) untrained on new screens.\n- Never email customers from new system without Priya approving wording first (a test email to 40 real customers last year still causing apologies) — applies to the new receipt templates too; nothing sent yet.\n\nOUTSTANDING BEFORE SWITCH-OVER:\n- Domain hartwellbakery.co.uk registered at Namecheap; login held by nephew Dev — needs transferring to Priya.\n- Remaining 22 product photos pending from Sanna.\n- Counter tablet is an old iPad on iOS 15 — new admin screen supports it, but only just. Suggested replacing before Christmas; Priya said maybe in January.\n\nTESTING: 25 fake checkout orders run; 2 failed (discount code + December collection date combo) — cause: discount expiry compared in UTC not UK time; fixed by storing dates in Europe/London.\n\nCOST: New system £39/mo vs old host £18/mo but old host costs ~£600/month in lost Saturday orders from crashes.\n",
    "5": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products. Seasonal group hidden outside Nov/Dec. Photos imported for 41 of 63; remaining 22 pending from Sanna. Sourdough: two sizes, 90p price difference. \"Sold out today\" toggle for counter staff (tablet-usable).\n- Collection slots: shop opens 7.30am, every 30 min until 4pm, limit 12 orders/slot. Note field added on every order (regulars leave messages like \"cut the loaf please\").\n- Email receipts: collection slot in bold, shop phone 01373 555 0192 at bottom. Wording \"Thank you, from all of us at Hartwell\" (was \"Thanks for your order\"). Three variants: collection, delivery, gift card. Nothing sent yet.\n- Customer list imported: 2,870 accounts, 1,944 ordered in last year, 38 duplicates merged. Priya's mother's account has 100% staff discount — must stay. Marketing consent carried over as-is (old system recorded it properly).\n- Delivery flow tested with Beckington address. Driver Owen (Tue/Fri) wants delivery list sorted by postcode; printable delivery sheet added. Gate codes for regulars only exist in a paper notebook behind the till (old system never stored delivery notes).\n- Dry run: export from old system 11 min, import 4 min. Found 6 past-dated orders still open — Priya said close them. One-page switch-over checklist taped to office wall.\n- Refunds done via Tillwise dashboard, not the ordering system. Banner ready on old site saying orders have moved. Priya is sole admin for first month.\n\nRULES / DO NOT:\n- Don't delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Payments via \"Tillwise\", account in Marcus Hale's name — never ask for his password.\n- Don't switch on new system on a Saturday — busiest day, Jess/Arlo untrained.\n- Never email customers without Priya approving wording first (applies to receipt templates too).\n\nOUTSTANDING: domain transfer from nephew Dev to Priya; 22 photos from Sanna; iPad on iOS 15 (works, replacement suggested, Priya said maybe January).\n\nTESTING: 25 fake checkouts, 2 failed (discount+Dec date, UTC vs UK time) — fixed via Europe/London dates.\n\nCOST: New system £39/mo vs old £18/mo, but old host costs ~£600/month in lost Saturday orders.\n",
    "6": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products (bread, pastries, cakes, seasonal). Seasonal group hidden outside Nov/Dec. Photos imported for 41 of 63; remaining 22 pending from Sanna (Priya's friend). Sourdough: two sizes, 90p price difference. \"Sold out today\" toggle for counter staff (tablet-usable).\n- Collection slots: shop opens 7.30am, every 30 min until 4pm, limit 12 orders/slot. Note field added on every order (regulars leave messages like \"cut the loaf please\"). Counter tablet is an old iPad on iOS 15 — supported but only just; Priya said maybe replace in January.\n- Email receipts: collection slot in bold, shop phone 01373 555 0192 at bottom. Wording \"Thank you, from all of us at Hartwell\" (was \"Thanks for your order\"). Three variants: collection, delivery, gift card. Nothing sent yet.\n- Customer list imported: 2,870 accounts, 1,944 ordered in last year, 38 duplicates merged. Priya's mother's account has 100% staff discount — must stay. Marketing consent carried over as-is (old system recorded it properly).\n- Delivery flow tested with Beckington address. Driver Owen (Tue/Fri) wants delivery list sorted by postcode; printable delivery sheet added. Gate codes for regulars only exist in a paper notebook behind the till (old system never stored delivery notes).\n- Dry run: export from old system 11 min, import 4 min. Found 6 past-dated orders still open — Priya said close them. One-page switch-over checklist taped to office wall.\n- Refunds done via Tillwise dashboard, not the ordering system. Banner ready on old site saying orders have moved. Priya is sole admin for first month.\n\nRULES / DO NOT:\n- Don't delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Payments via \"Tillwise\", account in Marcus Hale's name — never ask for his password.\n- Don't switch on new system on a Saturday — busiest day, Jess/Arlo untrained.\n- Never email customers without Priya approving wording first (applies to receipt templates too).\n\nOUTSTANDING: domain transfer from nephew Dev to Priya; 22 photos from Sanna; iPad on iOS 15 (works, replacement suggested, Priya said maybe January).\n\nTESTING: 25 fake checkouts, 2 failed (discount+Dec date, UTC vs UK time) — fixed via Europe/London dates.\n\nCOST: New system £39/mo vs old £18/mo, but old host costs ~£600/month in lost Saturday orders.\n",
    "7": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products. Seasonal group hidden outside Nov/Dec. Photos imported for 41 of 63; 22 pending from Sanna. Sourdough: two sizes, 90p price difference. \"Sold out today\" toggle for counter staff.\n- Collection slots: shop opens 7.30am, every 30 min until 4pm, limit 12/slot. Note field on every order. Counter tablet is old iPad on iOS 15 — works, Priya said maybe replace January.\n- Email receipts: collection slot bold, shop phone 01373 555 0192 at bottom. Wording \"Thank you, from all of us at Hartwell\" (was \"Thanks for your order\"). Three variants: collection, delivery, gift card. Nothing sent yet.\n- Customer list: 2,870 accounts, 1,944 ordered in last year, 38 duplicates merged. Priya's mother's account keeps 100% staff discount. Marketing consent carried over as-is.\n- Delivery: tested with Beckington address. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Gate codes for regulars only in a paper notebook behind the till.\n- Dry run (on a copy): export from old system 11 min, import 4 min. Found 6 past-dated orders still open — Priya said close them. One-page switch-over checklist taped to office wall.\n- Refunds via Tillwise dashboard, not the ordering system. Banner ready on old site. Priya is sole admin for first month.\n\nRULES / DO NOT:\n- Don't delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Payments via \"Tillwise\", account in Marcus Hale's name — never ask for his password.\n- Don't switch on new system on a Saturday — busiest day, Jess/Arlo untrained.\n- Never email customers without Priya approving wording first (applies to receipt templates too).\n\nOUTSTANDING: domain transfer from nephew Dev to Priya; 22 photos from Sanna; iPad on iOS 15.\n\nTESTING: 25 fake checkouts, 2 failed (discount+Dec date, UTC vs UK time) — fixed via Europe/London dates.\n\nCOST: New system £39/mo vs old £18/mo, but old host costs ~£600/month in lost Saturday orders.\n",
    "8": "HARTWELL BAKERY ORDERING SYSTEM MIGRATION — WORKING NOTES\n\nClient: Priya Nandakumar, owns Hartwell Bakery, Frome. Old system: PHP app on shared host \"Bluefin\", crashes most Saturdays. Goal: migrate before Christmas rush.\n\nVOLUMES: ~340 online orders/week normally, ~1,100/week in fortnight before Christmas. Collection cut-off 2pm; orders after 2pm roll to next day.\n\nDECISIONS + REASONS:\n- Postgres over MySQL: new host only offers managed Postgres; self-run MySQL needs patching nobody at bakery can do.\n- Keep old order numbers (prefix \"HB\"): customers quote them by phone; counter staff would be confused by new format.\n- Delivery radius stays 6 miles (not 10): electric van only does ~90 miles/charge in winter.\n- Switch-over date: Wednesday 12 November — quietest day of quietest week in Priya's records; leaves 6 weeks before Christmas to fix issues.\n- Allergen labels (14 allergens, legal list) generated from product database, not typed text — March incident: label read \"contains no nuts\" on a walnut loaf.\n- Gift cards: 212 unredeemed, total £4,380, carry over at same value. Do NOT convert to store credit — Priya promised no expiry.\n- Product catalogue: 63 products. Seasonal group hidden outside Nov/Dec. Photos imported for 41 of 63; 22 pending from Sanna. Sourdough: two sizes, 90p price difference. \"Sold out today\" toggle for counter staff.\n- Collection slots: shop opens 7.30am, every 30 min until 4pm, limit 12/slot. Note field on every order. Counter tablet is old iPad on iOS 15 — works, Priya said maybe replace January.\n- Email receipts: collection slot bold, shop phone 01373 555 0192 at bottom. Wording \"Thank you, from all of us at Hartwell\" (was \"Thanks for your order\"). Three variants: collection, delivery, gift card. Nothing sent yet.\n- Customer list: 2,870 accounts, 1,944 ordered in last year, 38 duplicates merged. Priya's mother's account keeps 100% staff discount. Marketing consent carried over as-is.\n- Delivery: tested with Beckington address. Driver Owen (Tue/Fri) wants list sorted by postcode; printable sheet added. Gate codes for regulars only in a paper notebook behind the till.\n- Dry run (on a copy): export from old system 11 min, import 4 min. Found 6 past-dated orders still open — Priya said close them. One-page switch-over checklist taped to office wall.\n- Refunds via Tillwise dashboard, not the ordering system — confirmed with Priya in final walkthrough. Banner ready on old site, saying orders have moved, ready to switch on. Priya confirmed as sole admin for first month.\n\nRULES / DO NOT:\n- Don't delete Bluefin database until accountant Tom Okafor exports 2025 tax year (needed by 31 Jan).\n- Payments via \"Tillwise\", account in Marcus Hale's name — never ask for his password.\n- Don't switch on new system on a Saturday — busiest day, Jess/Arlo untrained.\n- Never email customers without Priya approving wording first (applies to receipt templates too).\n\nOUTSTANDING: domain transfer from nephew Dev to Priya; 22 photos from Sanna; iPad on iOS 15.\n\nTESTING: 25 fake checkouts, 2 failed (discount+Dec date, UTC vs UK time) — fixed via Europe/London dates.\n\nCOST: New system £39/mo vs old £18/mo, but old host costs ~£600/month in lost Saturday orders.\n\nSTATUS (Part 8, final pre-handover checks): Walked Priya through refunds process, added the \"orders have moved\" banner to old site (ready to switch on), confirmed Priya as sole admin for month one.\n"
   }
  }
 },
 "source": "# Session log, part 1: moving Hartwell Bakery's ordering system\n\nWorking with Priya Nandakumar, who owns Hartwell Bakery in Frome. The old ordering system is a PHP app on a shared host called Bluefin, and it goes down most Saturdays. The goal is to move ordering to a new app before the Christmas rush.\n\nPriya confirmed the bakery takes about 340 online orders a week, rising to roughly 1,100 in the fortnight before Christmas. The cut-off for next-day collection is 2pm. Orders placed after 2pm go to the day after.\n\nWe chose Postgres over keeping MySQL. The reason is that the new hosting only offers managed Postgres, and running our own MySQL would mean someone has to patch it, and nobody at the bakery can.\n\nWe decided to keep the old order numbers instead of starting fresh. Priya's reason: customers quote their order number on the phone, and the numbers start with the shop code HB, so a new format would confuse the counter staff.\n\nDo not delete the Bluefin database until the accountant, Tom Okafor, has exported the 2025 tax year. He needs it by 31 January.\n\nThe card payments run through a provider called Tillwise. The Tillwise account is in Priya's husband's name, Marcus Hale, so any change to the payment settings needs Marcus to log in himself. Do not ask him for his password.\n\nThe allergen labels are printed from the ordering system. There are 14 allergens on the label, which is the legal list. We decided to generate the labels from the product database rather than from typed text, because in March a typo on a label said \"contains no nuts\" on a walnut loaf, and that must never happen again.\n\nWe tested the new checkout with 25 fake orders. Two failed: both were orders with a discount code and a collection date in December. The cause was that the discount code expiry was being compared in UTC, not UK time. Fixed by storing dates in Europe/London.\n\nDo not turn on the new system on a Saturday. Saturday is the busiest day and the bakery has only two staff on the counter, Jess and Arlo, who have not been trained on the new screens yet.\n\nThe delivery radius stays at 6 miles. Priya considered 10 miles and rejected it because the van, which is electric, only does about 90 miles on a charge in winter.\n\nWe picked Wednesday 12 November as the switch-over date. The reason is that it is the quietest day of the quietest week in Priya's records, and it leaves six weeks before Christmas to fix problems.\n\nThe domain hartwellbakery.co.uk is registered at a registrar called Namecheap, but the login belongs to Priya's nephew, Dev, who set it up. Before switch-over we need Dev to transfer the login to Priya.\n\nGift cards: there are 212 unredeemed gift cards worth £4,380 in total on the old system. They must carry over to the new system at the same value. Do not convert them to store credit, because Priya promised customers they would not expire.\n\nThe new system charges £39 a month. The old host costs £18 a month but loses Priya roughly one Saturday of orders a month when it crashes, which she estimates at £600.\n\nRule from Priya: never email customers from the new system without her approving the wording first. A test email went out to 40 real customers last year and she is still apologising for it.\n",
 "later_work": "# Later sessions, fed in one per round\n\n## Part 2\nBuilt the product catalogue in the new system. There are 63 products, grouped into bread, pastries, cakes and seasonal. Priya wants the seasonal group hidden outside November and December. Imported photos for 41 of them; the rest will be photographed by a friend of Priya's called Sanna next week. The sourdough loaves come in two sizes and the price difference is 90p. Added a \"sold out today\" switch the counter staff can flip from a tablet.\n\n## Part 3\nSet up collection slots. The shop opens at 7.30am and slots run every 30 minutes until 4pm, with a limit of 12 orders per slot. Priya asked for a note field on every order because regulars leave messages like \"cut the loaf please\". Found that the tablet at the counter is an old iPad on iOS 15, which the new admin screen supports, but only just. Suggested replacing it before Christmas; Priya said maybe in January.\n\n## Part 4\nWorked on the email receipts. The template now shows the collection slot in bold and the shop's phone number at the bottom. The shop phone number is 01373 555 0192. Priya asked for the receipts to say \"Thank you, from all of us at Hartwell\" rather than \"Thanks for your order\". Wrote three receipt variants for collection, delivery and gift card purchases. Nothing has been sent to customers.\n\n## Part 5\nImported the customer list: 2,870 accounts, of which 1,944 have ordered in the last year. 38 accounts were duplicates and were merged. Priya's mother has an account with a staff discount of 100%, which must stay. Marketing consent was carried over as it was, because the old system recorded it properly.\n\n## Part 6\nTested the delivery flow end to end with a friend's address in Beckington. The van driver on Tuesdays and Fridays is a man called Owen, and he prefers the delivery list sorted by postcode. Added a printable delivery sheet. Found that the old system never stored delivery notes, so some regulars' gate codes are only written in a paper notebook behind the till.\n\n## Part 7\nDry run of the switch-over steps, on a copy. Export from the old system took 11 minutes. Import into the new one took 4 minutes. Found 6 orders with collection dates in the past still marked as open; Priya said to close them. Wrote a one-page checklist for the day, taped to the office wall.\n\n## Part 8\nFinal checks before handing over. Walked Priya through refunds, which are done from the Tillwise dashboard, not from the ordering system. Added a banner to the old site that will say orders have moved, ready to switch on. Agreed that Priya will be the only admin account for the first month.\n"
}