brain-teach-text-corrections — QA report

Date: 2026-09-21 · Account: peytontianyan@gmail.com (Peyton Ong) · Verdict: MIXED · Plan: brain-teach-text-corrections.md · Findings: findings-2026-09-21.md

Account confirmation

Signed in as peytontianyan@gmail.com, header reads "Peyton Ong", playbook "QA Coverage Ceramics" (business name after CT-17's confirmed change). Wallet $24.90 at session end (started $26.35).

Brain page showing QA Coverage Ceramics playbook, signed in as Peyton Ong

Account/session confirmation — /brain, post-walk state.

Headline bug — fabricated duplicate offerings on CHANGE (CT-TEACHTXT-02 / 30)

Reproduced 3 independent times. Pasted a price-correction with the old value quoted verbatim ("the Weekend wheel class is now Rp 950.000, up from Rp 850.000") — instead of updating the existing offering, the classify pass fabricated a duplicate entry with no price, plus (in the CT-02 run) an entirely unrelated "Monthly kiln night" duplicate never mentioned in the paste.

What you sell chapter showing QA Weekend wheel class unchanged at Rp 850.000 plus a fabricated duplicate Weekend wheel class new entry with no price

Chapter 03 "What you sell" FRESH READ diff — original offering unchanged at the OLD price (Rp 850.000), fabricated duplicate "Weekend wheel class · new" with no price shown alongside it.

Contrast — the one CHANGE mechanism that works correctly (CT-TEACHTXT-17)

business_name CHANGE went through AC-BRAIN-174's delta-protected path: a clean "now / from the read" before-and-after card, founder picks Keep-mine or Use-new-one, confirmed and saved correctly.

Chapter 01 Your business showing Business Name field correctly updated to QA Coverage Ceramics after confirming the change

Chapter 01 "Your business" — Business Name correctly reads "QA Coverage Ceramics" after confirming the delta card (old value "QA·Coverage Studio" was shown before confirming — the safety net this plan set out to verify).

Scenario results

CT-TEACHTXT-01 — services ADD PASS

Data In: "New this month: Glaze Lab, Rp 400.000, Sunday mornings, two hours of glazing techniques on pieces you've already thrown." Data Out: New services entry: name="Glaze Lab", price="Rp 400.000", schedule="Sunday mornings", description matches. Original 2 seeded offerings byte-identical.

Clean ADD. Draft showed the new offering alongside the 2 unchanged seeded offerings. Confirmed and saved successfully.

CT-TEACHTXT-02 — services CHANGE FAIL

Data In: "Quick correction — the Weekend wheel class is now Rp 950.000, up from Rp 850.000." Data Out (draft, NOT saved): Fabricated "Weekend wheel class" (new, no price) + "Monthly kiln night" (new, no price, never mentioned in the input). Original "QA·Weekend wheel class" left unchanged at Rp 850.000. Discarded — account verified reverted.

See Headline Bug above for full detail and screenshot.

CT-TEACHTXT-03 — services REMOVE (deep-dive) FAIL

Data In: "We stopped running Kiln night — please remove it, we don't do that anymore." Data Out: Kiln night correctly excluded from the "new" 2-item set BUT bundled with a fabricated duplicate "Weekend wheel classes" (plural, no price). Clicking "Use new one" auto-committed to the live database immediately — independent of the page's Save/Discard controls.

Narrative: (a) The AI partially recognized the removal intent — net offering count dropped by one and Kiln night specifically was excluded from the "new" list. (b) reconcile()/the UI did NOT produce a safe, per-item reviewable draft — it produced an opaque whole-array "3 items vs 2 items — Keep mine / Use new one" choice with zero item-level detail, contradicting the plan's derived oracle (a labeled "will be removed, confirm?" row). (c) Accepting it did not cleanly remove only Kiln night — it also fabricated an unrelated duplicate offering with no price. (d) The write is NOT deferred to "Save to Brain" for this proposal type — it commits the instant "Use new one" is tapped, directly contradicting the on-screen promise "Nothing goes in until you say it sounds like you." Remediated live via seed-brain-coverage-qa.ts --only services.

CT-TEACHTXT-04 — faqs ADD PASS

Data In: "People keep asking: do you ship the finished pots overseas? Yes, we pack and ship internationally, cost depends on destination." Data Out: New FAQ: question="do you ship the finished pots overseas?", answer="Yes, we pack and ship internationally, cost depends on destination." All 5 seeded FAQs unflagged.

Clean ADD, matches CT-01's success pattern. Confirmed and saved.

CT-TEACHTXT-05 — faqs CHANGE FAIL

Data In: "Update the cancellation FAQ — it used to say 'Move once for free up to 48h before,' now it's 72h before, not 48h." Data Out: NO CHANGE anywhere. FAQ "QA·What if I need to cancel?" unchanged, policies.cancellation unchanged, still 48h. "4 details found" was reported but produced zero reviewable proposal.

Silent no-op — the most concerning failure mode, since the founder sees "4 details found" and has no indication the correction never landed. Discarded (nothing to save). Verified unchanged.

CT-TEACHTXT-08 — contact_info CHANGE (phone) FAIL

Data In: "Change the phone number — it used to be +62 361 000 0002, now it's +62 361 555 8888." Data Out (draft, NOT saved): Draft card text: "Contact: QA·Lena · qa-contact@example.com · +62 361 000 0002 · Change the phone number — it used to be +62 361 000 0002, now it's +62 361 555 8888…" — the raw correction sentence concatenated onto the contact string; old number still shown as current. Discarded, verified reverted.

Third distinct failure mode for the same underlying gap — confirms the CHANGE-matching problem spans both keyed-array AND keyed-map field shapes.

CT-TEACHTXT-17 — business_name CHANGE PASS

Data In: "Small correction — we're actually called QA Coverage Ceramics now, not QA Coverage Studio, we rebranded last month." Data Out: business_name = "QA Coverage Ceramics". Delta card showed "now: QA·Coverage Studio" / "from the read: QA Coverage Ceramics" before confirming.

See Contrast section above. The one CHANGE scenario that worked exactly as the product promises — confirms AC-BRAIN-174's scoped protection is real and functioning for its 4 covered fields.

CT-TEACHTXT-27 — social_url ADD (predicted broken) FAIL AS PREDICTED

Data In: "Add our Instagram — it's @qa_coverage_studio, that's where we post new pieces." Data Out: social_url unchanged. App's own copy: "Nothing here fits a playbook field yet." No error toast — classify completed cleanly, just produced no proposal.

Confirms the code-level gap (organize-content.ts has no social_url key) is real and reproduces cleanly, not aspirational-only.

CT-TEACHTXT-30 — confirm-batch atomicity (deep-dive) STRUCTURAL FINDING CONFIRMED

Data In: "A few updates: the Weekend wheel class is now Rp 950.000 up from Rp 850.000; our deposit policy is now 50% instead of 30%; and we now also have a third spot, the Seminyak studio, opened last month." Data Out: Only the services correction produced ANY visible proposal (policies deposit change and locations add were both silently dropped, zero trace). The services proposal that did appear showed a correctly-changed price this run PLUS 2 fabricated duplicate offerings (non-deterministic vs. CT-02's identical attempt, which failed outright). Post-save: 5 offerings (2 seed + 1 correctly changed + 2 phantom).

Structural proof: confirmed via this session's direct network capture during CT-01's "Save to Brain" (5 sequential brain-profile PUT calls observed, 3 returned 200 while 2 were still pending) and via CT-03's finding that a section-level choice fires its own immediate PUT independent of the page-level save. This directly evidences the code-review prediction that confirmAll() is a sequence of independent writes, not one atomic transaction — if any step failed mid-sequence, whatever landed before it would stay landed with no rollback. True fault-injection was NOT attempted (no tooling available in a real-browser walk), per the plan's own acknowledged limitation. Remediated live via seed-brain-coverage-qa.ts --only services.

Not walked this sitting (21 scenarios) NOT WALKED

CT-TEACHTXT-06, 07, 09–16, 18–26, 28–29. See the findings doc's Scope section for confidence-graded predictions on each group (business_hours/locations/policies CHANGE/REMOVE: high-confidence predicted to fail the same way as CT-02/03/05/08; description/target_audience/about_story.about CHANGE: predicted PASS by analogy to CT-17; gap-exposed delta-line group and the remaining 2 broken fields: genuinely open, not walked).

Bugs filed

IssuePriorityTitle
#5189P0Teach your Brain: CHANGE/REMOVE corrections corrupt or silently drop data (services/faqs/contact_info)
#5190P1Teach your Brain: offering removal auto-commits without page-level confirm

Process notes