Skip to content

2026 strategy, batch 2b: the Trust Center and pricing value, every word keyed, plus the meals and CFO review fixes - #429

Merged
NewWorldVenture merged 22 commits into
mainfrom
claude/roadmap-implementation-ld8bon
Sep 9, 2026
Merged

NewWorldVenture merged 22 commits into
mainfrom
claude/roadmap-implementation-ld8bon

Conversation

@NewWorldVenture

Copy link
Copy Markdown
Owner

The four sections #428 named as "coming in the follow-up". Each was landed
onto the integration base in its own worktree, then adversarially reviewed by
a second agent that exported the sha and re-ran the gate, tsc, lint and the
tests itself rather than trusting the report. All four came back approved with
no blockers; the branches merged here are the ones each report named.

S-19 · W4 — the Trust Center says what it can prove

The one public page whose subject is honesty was claiming what no row in this
repository can back — bank-level security, SOC 2, uptime figures. It now
enumerates only what a row proves (lib/marketing/trust-ledger.ts): the ledger
a family can read, the exports they can take, the deletions that run, the model
calls that are logged, the decisions that wait for a person. The same overclaims
leave /ai, /features, /mobile, /faq and the reference showcases;
tests/marketing-claims-contract.test.ts pins the forbidden vocabulary in both
its corpora.

This is the section held out of #424 because its branch predated main's i18n
sweep and carried 217 English literals on the gated marketing-pages
surface. It was re-applied hunk by hunk onto the keyed pages — no page keeps a
literal where the base had a key — with every new string (sections, ledger
rows, page metadata, section names) in all seven catalogues.

S-20 · W3 — what the price buys, in numbers the app can produce

A per-day framing under the monthly price, the outcomes each tier hands back,
and a value block whose three number sources stay visibly apart: the real
cross-family aggregate (omitted below the public floor, never rounded up), the
illustrative sample computed by the app's own brief composer and badged as
such, and the published case studies. The highlight rail is rebuilt from the
homepage's own heroOutcomes.* keys so the two cannot drift; the upgrade modal
reads the same registry. Held out of #424 for the same reason (90 literals);
landed onto the keyed pricing-content.tsx with 51 new keys. The section's
demo-seed clause is out of scope — demo mode was removed in #414 — and nothing
was invented to replace it.

M10 — the meals-loop review fixes

A nut butter is not dairy (the allergen rules no longer classify by the word
"butter"); a proposed swap never keeps the allergen it was meant to remove; a
bought line is put away and cleared together, line by line, so a trip that
fails half way leaves the pantry and the list agreeing. The reviewer proved
the intent survived the merge rather than inferring it: the diff between the
fix stack and the landed sha is exactly the base's settleAll import.

M14 — the Family CFO review fixes

Distinct bills are counted, with covered, paid and open kept apart so every
"bills" string reads the number it names; a recurring bill paid this month
stays in the forecast's later months; and the affordability scenario refuses
to answer for a purchase dated outside the window the forecast actually
weighed, instead of saying "yes" about a month it never looked at.

The strategy file

2026MarketDom.md §5 now says per phase what #428 landed and what this PR
lands; §7 names the fifteen worktree branches that must not be merged and why
(≥97% already on main, or a parallel implementation of a section that
landed), the five sections genuinely unclaimed — S-06 (M9), S-04 (M12), W6,
W7, and a 304-key translation pass — and the lesson this batch cost: measure
how much of a branch's own delta already lives on main before merging it.

Checks

On the committed code tree at b1520d6 (the doc commit on top touches only
2026MarketDom.md, which no test reads): i18n gate clean on all five surfaces,
tsc clean, eslint clean, full suite 989 files / 9,274 tests green.
Each section's reviewer independently re-ran the gate, tsc and 15–55 test
files on an export of its sha. No file under supabase/migrations; no
shared-sidebar file; all four merges applied without a single non-catalogue
conflict.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K


Generated by Claude Code

/security becomes the Trust Center. The badges the page used to carry — an
annual audit, a healthcare-compliance claim, an uptime SLA, a bug bounty, a
choice of three hosting regions, hardware-module key management — were things
nothing in this repository could back, so they are gone, along with the
compliance-badge block and the residency chooser that framed them.

In their place, lib/marketing/trust-ledger.ts holds one row per claim and says
which of four things it is: verified in the product (enforced in code AND
pinned by a named test in this repo), in place as a process, inherited from a
provider, or planned. components/marketing/trust-ledger.tsx renders the four
status pills, their help text, and — for a verified row — the test files a
reader could go and check. Every row gets id="ledger-<key>" so the page can
link to a single claim.

A new #ai-trust section states how the assistant is allowed to act, in six
statements that are true of the shipped product: the Settings dial and that any
area can be turned down to Recommend; the always-asks list; the step timeline
and partly-finished reporting; quiet hours and the family trust ledger; what
model-call telemetry does and does not record; and that family data never
trains a model. The always-asks list is rendered from HIGH_STAKES_AI_DOMAINS
through trust-copy, and the role table from ROLE_DEFAULTS, so neither can drift
from lib/trust/engine.ts. The architecture section keeps only the layers we or
our providers actually run, and the incident timeline is labelled a policy.

/ai gets the same treatment in miniature: the scripted demo carries the sample
badge the homepage ledger uses, the model-agnostic chip and the phrase in the
page description are gone, and a link block sends a reader to /security#ai-trust
rather than restating the trust rules where they could go stale.

/features gains Kitchen Mode and Switch to Bubaly cards — the tile mock is
composed from DEFAULT_TILES and the import list from lib/migrate/competitors,
so neither can name something the product does not ship — and /mobile and /faq
gain the matching entries. The copy says "no new hardware to buy" and never
claims certified hardware, a PIN lock, voice control or burn-in protection,
none of which components/display has.

Route, sitemap and nav are untouched: this renames a page, not a URL.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…nks to

tests/marketing-trust-ledger.test.ts is the honesty guard. It asserts that
every ledger row carries one of the four statuses; that a 'verified' row cites
at least one test path that exists on disk and that no row cites a dangling
reference; that the five roadmap rows can never be 'verified' without an
external https evidence URL; that no row mentions healthcare compliance; and
that each of the retired claims is absent from the page AND from the resolved
en-US value of every security.* and trustCenter.* key the page renders — the
values are what a visitor reads, so checking only the markup would miss them.

It also proves the row it badges most strongly. For every entry in
HIGH_STAKES_AI_DOMAINS it calls evaluateAction with an AI actor acting for a
parent and asserts require_approval, so "money, health and documents always ask
a parent" stays a fact about the engine rather than a sentence on a page.

The remaining files pin the work this section shipped and nothing else:
the Kitchen Mode answer joining the mobile-notifications section from the
catalogue, /features#kitchen-mode and /features#switching resolving to real
anchors, the copy naming no hardware Bubaly does not ship and no rival's price,
the sample badge on the /ai demo with its link to /security#ai-trust, and
/security keeping its path, its sitemap entry and an honest AEO description.

The route contract loses its exception for a demo route that no longer exists
and gains an assertion that none has come back, so every public marketing page
now has to carry the AEO contract with no way to opt out.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
/pricing now leads with what the price buys before it shows the price.

- lib/marketing/value.ts holds the arithmetic and the tier copy in one
  place: perDayCents rounds UP (yearly over 365, monthly over 30) so the
  per-day line can never claim a cheaper day than the family pays, and
  realHandledCounts returns null — never a zero — below HANDLED_PUBLIC_MIN.
- components/marketing/pricing-value-block.tsx renders the tier x row
  matrix as three stacked cards (columns only from md up, no table and no
  sideways scroller) and three number cards that are never blended: the
  REAL cross-family counts, the badged illustrative sample with its
  estimate note, and the family's own numbers. No cross-family time-saved
  aggregate is published.
- The plan cards gain the per-day line under the monthly price on paid
  tiers only, the outcome-first column, and cancel-or-downgrade under
  Family+. Tier positioning, the highlight rail (now the six hero
  outcomes plus Kitchen Mode) and the switching band all moved to
  catalogue keys; the server page passes the handled stats, the sample
  numbers, up to two published case studies and the compact switching
  band down as props.
- The in-app upgrade modal reads the same registry and the same rounding,
  and its remaining interpolated English became keys.

Tests: tests/marketing-value.test.ts, plus the value-block guards added
to tests/marketing-claims-contract.test.ts and
tests/mobile-pricing-toggle-touch-target.test.ts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
The rail is built from HERO_OUTCOMES, whose copy is catalogue keys. Carrying
a second English label beside them would be a copy that can drift, not the
'label plus labelKey' the data-array rule is asking for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
Restores the D1 work (plan moments in the 12-week forecast, coverage
summary, the affordability scenario panel and the CFO surface links)
onto the current base.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…nd stop answering "yes" to what the forecast never weighed

Three ways the CFO surface stated more than the data supported.

Counts next to the word "bills" were occurrence counts. The forecast
expands one monthly bill into three payments inside a 12-week horizon, so
a household with three bills read "4 of 5 bills" on the Covered tile and
"4 bills are covered … 1 still need a hand" below it, and one autopay
rent read "3 covered by autopay" on the money timeline. CoverageSummary
now carries distinct-bill counters (coveredBills / paidBills / openBills /
totalBills) beside the payment counters, and every string that says
"bills" reads those. A bill with any occurrence still to pay by hand is
open, however many of its other occurrences are covered.

A recurring bill marked paid dropped out of the forecast entirely. A
monthly rent paid this month took February's and March's rent with it:
$0 due, an unchanged lowest balance, and — because nothing was left open
— the explicit all-clear "Every one of the 1 bills in the next 12 weeks
is covered … Nothing to do by hand." Only a non-recurring bill now
short-circuits on 'paid'; a recurring one credits the paid occurrence and
still expands the rest of the horizon.

A commitment landing outside the horizon came back as verdict 'ok', so
the affordability panel answered a $50,000 boat dated nine months out
with a green "Yes" chip. That case is now its own verdict,
'not_assessed', rendered as a neutral "Not in this horizon" chip, and the
supporting line says the forecast does not reach that date rather than
implying a check happened.

Tests pin all three: payment counts vs bill counts, a paid monthly rent
still contributing its February and March occurrences to totalOutflow and
lowestBalance, and the beyond-horizon scenario never returning 'ok'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
Carries the S-03 loop (meal week context, allergy substitutions, retailer
handoff and the bought flow) onto this worktree branch so the review fixes
land on top of it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
The apply script re-sorts every key on write, which turned a two-string patch
into an 800-line reorder of six catalogues and a merge conflict for every
other section touching them. Restored to the file's existing order with the
one updated value and the one new key edited in place.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…t clears line by line

Three things the meal → pantry → grocery loop got wrong, each of which reached
a family's real list or real pantry.

`butter` is a whole-word match, so a dairy allergy rewrote every spread whose
name merely ends in it: peanut butter, apple butter, cocoa butter and butter
lettuce went onto the list as "peanut olive oil", "apple olive oil", "cocoa
olive oil" and "olive oil lettuce", each with a reason saying peanut butter
contains butter. The dairy rule now exempts a nut, seed or fruit butter — and
a butter lettuce — while still swapping the butter a family means when they
write it. That also un-breaks a household allergic to BOTH peanuts and dairy,
whose safe spread (sunflower seed butter) was read as dairy and dropped.

Rewriting only the matched span left the allergen standing in the modifier:
"whole wheat bread" under a gluten allergy became "whole wheat gluten-free
bread" — wheat bread that is also gluten-free, written to a coeliac
household's list. The rewrite now checks what it left behind and, when that
names the allergen, the replacement stands alone.

`recordShoppingTrip` looped an additive pantry delta over every checked line
and cleared the list only if every line succeeded. On a partial failure the
succeeded deltas were already applied and nothing was cleared, so the second
tap the modal invites added them again: one milk bought, two milk owned. The
unit of work is now the line — each is put away and taken off the list
together — so a retry finds only what never landed. The one window that
cannot close inside a single write (put away, delete refused) is named in
`clearFailed`, blocks the charge, and is said out loud instead of showing a
clean success.

Three comments that promised what the code did not are corrected: the trip's
"a retry does the same thing again", the meals module's "the swaps are the
names now ON the list" (untrue for a pantry swap, which writes nothing), and
the `exempt` doc's implied handling of the inverse spelling.

Tests: the dairy-only butter case, the peanut+dairy spread, the wheat
modifier, and a two-item trip whose second line fails, run twice, asserting
the first item's pantry quantity reflects one purchase and not two.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…app can produce

Merges worktree-wf_9fc0af7c-543-4 onto the integration base. The branch's
pricing-content.tsx and pricing/page.tsx predate main's i18n sweep of those
files, so neither is taken wholesale: the current keyed files stay as the
skeleton and the branch's structure is re-applied onto them.

What lands: lib/marketing/value.ts (per-day ceil arithmetic, the REAL-card
floor, the tier copy registry), components/marketing/pricing-value-block.tsx
(the tier matrix and the three-source panel — real counts, the badged sample,
the family's own numbers — never blended), the value block and up to two
case-study cards above the plan cards, per-day lines under the paid prices
with the billed-annually sub-line kept, outcome-first goal and positioning
lines from the registry, the highlight rail rebuilt from the six hero
outcomes' own keys plus Kitchen Mode, the compact switching band handed in
from the server page in place of the Smart Imports callout, cancel-anytime
under Family+, and the in-app upgrade modal reading the same registry and
arithmetic. Fifty-one new keys land in all seven catalogues.

Decisions taken while resolving rather than merging: the AEO section name
stays keyed as on main; the highlight badge labels, the feature-matrix
column labels and the positioning callout labels keep main's
pricingContent.* keys, with only the positioning line coming from the
registry; the Kitchen Mode tile keeps main's pricingContent.kitchenMode and
turnAnyTabletOrSmart keys rather than borrowing the homepage band's headline;
the plan-card names use the registry's tier label keys so the trial name is
no longer an English literal. The value test's card locators are repointed
at the <PlanCard boundaries, since the keyed cards carry no name literal to
search for. The demo-seed clause is out of scope: demo mode was removed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…e gives it

The branch's copy of tests/marketing-claims-contract.test.ts called the
English catalogue `en`; main's calls it `catalogue`. Git merged the new
describe block cleanly but left it referring to a name that does not exist
in this file, which tsc and the test itself both caught.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
… keyed

Merges worktree-wf_9fc0af7c-543-3 onto the batch base. The section's work
(the /security Trust Center rewrite with its evidence ledger, the /ai honesty
edits, the Kitchen Mode card, /mobile section and FAQ entry) is re-applied
onto the pages as main's i18n sweep left them: every t() key the base already
had stays, and the branch's intent is ported hunk by hunk.

Decided rather than merged:

- The security page's module-level data kept an English label beside every
  catalogue key. Those labels are the literals that turned the marketing-pages
  gate red. The data now holds keys only, the shape the other marketing pages
  use, and the honesty test's key finder reads quoted keys under the security.
  and trustCenter. prefixes instead of labelKey:.
- The FAQ's Kitchen Mode entry is two catalogue keys inside FAQ_SECTIONS,
  which on the base already holds keys, rather than the branch's render-time
  special case; the nav test asserts that shape.
- The claims contract keeps both corpora: the base's key-following one and the
  branch's prefix-scanning one, each with its own assertion.
- Eleven orphaned security.* keys carrying the retired boasts (SOC 2 Type II,
  HIPAA, Audited annually, 99.99%, HSM, certificate pinning, column-level
  encryption, public audits, Bank-Level) are deleted from all seven catalogues.
  Nothing renders them and the prefix corpus rightly refuses them. The other
  orphaned security.* keys stay, as the section spec allows.
- en-US keeps its casing for security.privacyByDesign and
  security.transparentAccountable; the six translations the branch added for
  them are kept, since the base had none.
- The AEO section name is a new key, security.trustCenterAeoName, in all
  seven catalogues.
- /features metadata takes the branch's keyed featuresPage.metaTitle; /ai
  keeps the base's keyed title and takes the branch's keyed description.
… allergen, a trip clears line by line

Merges worktree-wf_80ffc3db-358-8. The section itself had already reached
main through a sibling branch, and every section file on main was
byte-identical to the branch's own parent except the groceries service, which
had since moved its meal-plan reads onto settleAll. So each conflict was the
pre-fix text on one side and the reviewer's fix on the other: every hunk took
the fix, and the settleAll import and call stay as main has them.

What the fixes change. The dairy rule exempts a nut, seed or fruit butter and
a butter lettuce while still swapping the plain butter a family means when
they write it. A rewrite whose leftover modifier itself names the allergen
("whole wheat bread" under a gluten allergy) falls back to the bare
replacement instead of writing "whole wheat gluten-free bread" to the list.
recordShoppingTrip puts each bought line away and deletes it in the same
iteration, so a trip that fails half way leaves the pantry and the list
agreeing and a retry adds only what never landed; a line put away whose
delete was refused is named in clearFailed, and the action withholds the
purchase charge while anything is still on the list. The bought modal says
both failure kinds out loud and re-reads the list without closing.

Catalogues: the two strings this fix needs had not landed with the section.
couldNotPutTheseIn still said the list was unchanged, which the per-line clear
makes untrue, and theseAreInYourPantry was absent. Both come in from the
branch in all seven catalogues, in sorted place; nothing else in the
catalogues moved.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…bill's later months, refuse what the forecast never weighed

The Family CFO section itself already sits on this base; this merge lands
only its review-fix commit on top of the base's own variants of the files.

Three honesty defects on the CFO surface are closed. Every string that says
"bills" now reads the new distinct-bill counters on CoverageSummary
(coveredBills / paidBills / openBills / totalBills) rather than the payment
counters, so one monthly autopay rent no longer reads as three covered
bills. A recurring bill marked paid now credits only the paid occurrence and
still expands the rest of the horizon, so next month's rent stays in the
projection and the all-clear cannot fire on it. A commitment dated beyond
the 12-week horizon now gets its own verdict, not_assessed, with a neutral
chip and a line saying the forecast does not reach that date, instead of
the green "Yes".

Conflict resolutions were all one-directional: the base's side of each
conflicted file was kept (its settleAll batch in timeline-load.ts and the
page's requireAal2 gate stay as they are) and the review commit's hunks
were re-applied on top of it, which they did without drift. The catalogues
gain affordabilityScenario.verdictNotAssessed in all seven languages, and
the section's own affordabilityScenario.nothingInTheNext12Weeks copy is
reworded in all seven so it no longer implies a check happened.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
… it is keyed (W4)

The Trust Center used to say what a trust page is expected to say — bank-level
security, SOC 2, uptime — none of which a row in this repository can prove.
It now says only what one can: the ledger the family can read, the exports they
can take, the deletions that actually run, the model calls that are logged, and
the decisions that wait for a person. lib/marketing/trust-ledger.ts is the one
place those claims are enumerated, components/marketing/trust-ledger.tsx
renders them, and tests/marketing-claims-contract.test.ts pins the forbidden
vocabulary in both of its corpora. The /ai, /features, /mobile and /faq pages
and the reference showcases lose the same overclaims.

This section was held out of #424 for one reason: the branch predates main's
i18n sweep of these pages and carried 217 English literals on the gated
marketing-pages surface. Landed here hunk by hunk onto the keyed pages, with
every new literal — sections, ledger rows, page metadata, section names —
lifted into all seven catalogues. Its adversarial reviewer re-ran the gate,
tsc, lint and 26 test files on an export of the sha and found nothing to
refute.

Merged from worktree-wf_62bfdf60-bdb-2 (cda78a9), the branch the agent's own
report named.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
… word keyed (W3)

The pricing page said what each plan cost. It now says what the price buys, in
numbers the app can produce: a per-day framing under the monthly price, the
outcomes each tier hands back, and a value block whose three sources stay
visibly apart — the real cross-family aggregate (omitted below the public
floor, never rounded up to a number), the illustrative sample computed by the
app's own brief composer and badged as such, and the published case studies.
The highlight rail is rebuilt from the homepage's own heroOutcomes.* keys so
the two never drift; the upgrade modal reads the same registry.

Held out of #424 because the branch's pricing-content.tsx predated main's
i18n sweep of that file; landed here onto the keyed file with 51 new keys in
all seven catalogues. The section's demo-seed clause is out of scope — demo
mode was removed in #414 — and no replacement was invented. The reviewer
verified 55 marketing/i18n test files on an export of the sha.

Merged from worktree-wf_62bfdf60-bdb-1 (93d1940), the branch the agent's own
report named.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
… allergen, a trip clears line by line

Section S-03 landed in #424; its reviewer's four fixes did not. A nut butter is
not dairy: the allergen rules no longer classify by the word "butter". A
proposed swap must never keep the allergen it was meant to remove. And a bought
line is put away and cleared TOGETHER, line by line, so a shopping trip that
fails half way leaves the pantry and the list agreeing about what came home.
The tool result surfaces the substitutions it made instead of implying the
list was written as asked.

The reviewer proved the intent survived the merge rather than inferring it:
the diff between the fix stack and the landed sha is exactly the base's
settleAll import and nothing else.

Merged from worktree-wf_62bfdf60-bdb-3 (c08f23e), the branch the agent's own
report named.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…bill's later months, refuse what the forecast never weighed (M14)

The Family CFO section landed in #424; its reviewer's three fixes did not. The
bill count is now the count of distinct bills, with covered, paid and open
kept apart so every "bills" string on the page and the timeline module reads
the number it names. A recurring bill marked paid this month stays in the
forecast's later months — paying March does not pay April. And the
affordability scenario refuses to answer for a purchase dated outside the
window the forecast actually weighed, instead of answering "yes" about a month
it never looked at.

Merged from worktree-wf_62bfdf60-bdb-4 (a845974), the branch the agent's own
report named.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
…hes are superseded

2026MarketDom.md exists so an agent with no history can pick a section and
work alongside whoever is here. Its §5 still credited only #421 and #424 and
its §7 still listed S-19, S-20 and dd9-13 as in progress; an agent reading it
today would have re-built the Trust Center. §5 now says per phase what #428
landed and what batch 2b lands; §7 names the fifteen worktree branches that
must not be merged and why, the five sections that are genuinely unclaimed,
and the second lesson this batch cost: measure how much of a branch's own
delta already lives on main before merging it, because a parallel
implementation of a landed section looks exactly like a fix stack until you
do.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KP9rt5rVQ9jDMpZp2xBy3K
@vercel

vercel Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
bubaly Ready Ready Preview Sep 8, 2026 3:02am UTC

Request Review

This branch was successfully deployed

1 active deployment
Preview — 5003da55 Deployed Sep 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants