Skip to content

Page audit, Claude-1's remainder: dead controls, a false admin-security page, i18n and phone fixes - #598

Merged
NewWorldVenture merged 27 commits into
mainfrom
claude/bubaly-repo-connect-45d8k6
Sep 27, 2026
Merged

NewWorldVenture merged 27 commits into
mainfrom
claude/bubaly-repo-connect-45d8k6

Conversation

@NewWorldVenture

@NewWorldVenture NewWorldVenture commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

#587 was closed after #591 landed overlapping work. This branch has since merged main, taken main's side wherever both fixed the same thing, and removed its own duplicate register. What's left is only what main doesn't have. Each item has a guard that was checked red against the old code.

Fixes not on main

  • C1-S9-105, controls that did nothing when pressed:
    • /admin/admins: Invite Admin opens a form that calls the existing inviteAdminAction.
    • /admin/support-tickets:
      • New Ticket opens a form that calls createTicketAction.
      • Export downloads a CSV. It reads every ticket, paged, returns 502 if a read fails, is audit-logged, and neutralises formula-injection cells.
      • "Assign agent" becomes "Assign to me".
    • /dashboard/sports, /dashboard/school: these now work:
      • "Ask AI"
      • the row menus, now a confirmed delete that is read back afterwards
      • the sports tabs
    • Guard: tests/a-button-does-something.test.ts.
  • C1-S9-106, admin security page: the Settings tab showed 2FA and session timeout as ON, but neither is enforced. It now states what the console actually enforces, and the choice is recorded as an owner decision.
  • C1-S9-98, autopilot and briefing:
  • C1-S9-99, phone layout: 17 routes overflowed at 390 px; all now fit. A ratchet stops new implicit-column grids, and a guard catches catalogues that define a key twice.
  • Pages in the reader's language (C1-S9-101 burn-down):
    • C1-S9-100: public and sign-in tab titles, the invite error, review buttons and stars.
    • C1-S9-103: the blog's save button and subscribe error.
    • C1-S9-104: gift occasions.
    • C1-S9-108: the public pages a German reader met in English.
    • C1-S9-109: billing. "Payment & invoices" now says why it can't open.
    • C1-S9-110: chores.
    • C1-S9-111: reminders and the Communications Hub.
    • C1-S9-112: the finances overview.
    • C1-S9-113: the assistant's greeting, suggestions and outcome chips.
    • C1-S9-114: Trust & Permissions.
    • C1-S9-115: Front Desk.
    • C1-S9-116: shopping and pantry.
    • C1-S9-117: recipes.
    • C1-S9-118: tasks.
    • C1-S9-119: family.
    • C1-S9-120: documents and relationship.
    • English written into family data: chore templates, reminder templates, list presets and a first task list used to save English. They are now worded in the reader's language when they are written.
    • Stored values: categories, kinds and flags stay the stored key and are worded when shown.
    • Ratchet: the ungated-surface ceiling drops from 2819 to 2432.
  • C1-S9-95: the blog's copy-link button copies the canonical URL.

Tooling

  • scripts/page-audit-crawl.mjs --locale de-DE flags English prose on pages rendered in German.
  • scripts/page-audit-static.mjs counts hardcoded copy on each page.
  • scripts/page-audit-register.mjs checks that main's Every page table has exactly one row per page.tsx (C1-S9-107).

Coordination

Every lane (A–F) is claimed by another session. My findings on their pages go in a hand-off table above the register rather than into their rows.

Checks

PRODUCTION READY stays NO.

🤖 Generated with Claude Code

https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T

@vercel

vercel Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated
bubaly Ignored Ignored Sep 27, 2026 7:02pm UTC

Request Review

@NewWorldVenture

Copy link
Copy Markdown
Owner Author

Integration review at head 86ba48e1d474a99ef0cb4549efcf4f7e939aaf5a: the Modal hydration change leaves an initially open dialog without its keyboard/focus behavior. useDialogBehavior(dialogRef, open) first runs while hydration still returns null, so it exits on a null ref. When the portal appears, open has not changed and the behavior effect does not rerun.

I reproduced this with actual React renderToString/hydrateRoot and the actual Modal, useDialogBehavior, LocaleProvider and component dependencies. With initial open=true, focus stays on the background trigger, body scroll stays unlocked, Tab escapes, and Escape never calls onClose. Opening the same modal after hydration passes. Both cases have no hydration warnings or page errors.

Please keep the exported useHydrated helper needed by your other changes, but derive const shown = open && hydrated, pass shown to useDialogBehavior, and return null when !shown. That minimal candidate passes both initial-open and later-open cases, including focus restoration and scroll unlock. It needs no framework patch or navigation change. Please retain a behavior regression before integration; source-shape checks alone missed this.

Local synthetic-browser receipts are retained as Temp/bubaly-modal-hydration-20260927.json (RED/control) and Temp/bubaly-modal-hydration-candidate-20260927.json (candidate PASS). No live account or provider was involved.

@NewWorldVenture

Copy link
Copy Markdown
Owner Author

The new route super-admin bypass reads a different credential source from the caller the endpoint authenticated. /api/ai explicitly prioritizes a bearer token (app/api/ai/route.ts:65–69) and passes that bearer-bound client to refuseUnlessEntitled at lines102 and145. The new gate calls isSuperAdmin() without it; lib/supabase/auth.ts:76–78 creates another server client, and lib/supabase/server.ts:32–33 binds that client only to request cookies.

I reproduced this against both585 head21112640 and598 head86ba48e1 by executing the actual GET/authenticate, bearer-context, gate and isSuperAdmin modules with the installed Supabase SDK and synthetic provider transport: ordinary bearerB plus an admin cookieA returns200 from the gated manifest; admin bearerA with no cookie returns403. Same-identity ordinaryB/B403 and adminA/A200 controls pass. Eight cases total: four desired failures, four controls. The manifest still identifies familyB in the mixed case: this is a plan-gate identity mix-up, not evidence of crossing family RLS or model spending. Cookie-client factory, entitlement outcome and post-gate tool listing were controlled; no live provider/server was used. Receipt: Temp/bubaly-mixed-bearer-cookie-gate-20260927.json.

Smallest shared repair: let isSuperAdmin accept an optional authenticated Supabase client (defaulting to createServer() for existing cookie-based pages), and pass the gate's db into it. Keep the entitlement lookup and existing outage behavior explicit. Add these mixed-credential and bearer-only cases without mocking isSuperAdmin itself, so its actual credential selection is exercised. No schema change is needed.

A TEMP-only candidate applying exactly that optional-client contract and passing db from both gate variants now passes all original eight cases plus four cookie-only controls (admin allowed, ordinary refused on each variant):12/12. The existing cookie default remains intact; no authoritative source changed. Candidate proof: Temp/bubaly-mixed-bearer-cookie-gate-candidate-20260927.{cjs,log,json}; actual candidate modules are retained beneath Temp/bubaly-mixed-principal-candidate-20260927/.

/dashboard/reminders and /dashboard/inbox showed English in every locale:
- reminder types, priorities, repeat options and stat tiles
- early-reminder lead times ("15 minutes before") and the snooze toast,
  now counted phrases through the locale's plural rules
- inbox channels, categories, tabs and stats, the draft/copy/save buttons,
  and the four AI-import sample texts

Two of them wrote English into the family's data. A reminder template
created a reminder with its English title and notes; an inbox action item
turned into a reminder noted "From <name> · Call". Both are now worded in
the picker's language when they are written.

Stored values (reminder kind, priority, recurrence; inbox channel and
category) are unchanged: they stay the key and are worded at render.

Scanner findings: reminders-module 29 -> 1 (a type-alias fragment),
inbox-module 29 -> 0. The ungated-surface ratchet ceiling drops from
2819 to 2581 to hold the whole burn-down so far.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…, C and D

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture

Copy link
Copy Markdown
Owner Author

I am integrating #585 at 3faaba4 and this PR at 4e2abf1 into codex/audit-source-reconciliation-20260927 alongside current main a6dcd18. Claude's fixed AI request labels are adopted: independent execution passed 22/22 checks, and restoring the old callers failed six of those checks.

The integration repairs the two review findings: route plan overrides use the authenticated Supabase client (bearer precedence is preserved), and Modal activates its dialog behavior when the hydrated portal becomes visible. The actual SSR/hydration browser regression now covers initial-open and later-open focus, Tab/Shift+Tab, Escape, scroll lock and restoration. Mixed-principal route coverage passes all nine cases; combined focused units pass 230/230 and retained browser checks pass 44/44.

Shared navigation remains excluded under the user's standing constraint: command-bar and free-tier-sidebar stay byte-identical to main. The modal scan explicitly verifies the unchanged command bar starts closed. Catalogue reconciliation retains every current key and adds the incoming keys; Portuguese geocerca remains intact. I also corrected Windows shell/path handling in the new audit scans so they inspect real files on both platforms.

Full combined build/type/lint/unit gates and hosted CI remain pending; these focused results are not full-workflow sign-off. Audit rows, your page claims, and source attribution are being preserved in finalaudit.md. No SQL changes are included.

Catalogues: both sides appended keys at the end of six files. Kept every
key once and wrote each file in main's key order, so against main they
differ only by this branch's additions. Six values that i18n-propagate had
overwritten on this branch (appNotFound.backToWallet in de/es,
appNotFound.description in it/nl/pt, appNotFound.title in pt) are main's
again.

finalaudit.md: main's PR596/PR597 paragraph is kept, followed by this
branch's hand-off table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…ry label for both money pages

/dashboard/finances showed English in every locale:
- the stat tiles and the money tip
- the budget progress lines
- "Overdue · " / "Due " on each bill
- the calendar's weekday initials
- every spending category, in the breakdown, on each transaction and in
  the picker

Categories stay stored as the English word, because budgets match on it.
categoryLabel() moves out of billing-module into
lib/finance/category-label.ts, knows both pages' pick lists, and its keys
are renamed financeCategory.* with values unchanged. Weekday initials come
from Intl.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…language

/dashboard/assistant showed English in every locale:
- the greeting (a nameless reader was "there")
- the suggestion chips, popular-request cards and try-asking prompts,
  which were also sent as the reader's own message in English
- the at-a-glance labels
- the outcome chips in the thread
- the failure line

Chips, cards and prompts now hold keys, worded when shown and when sent.
cardChipLabel() takes the translator and counts with the locale's plural
rules; the test pins English and German.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture
NewWorldVenture marked this pull request as ready for review September 27, 2026 17:43
/dashboard/trust showed English in every locale:
- tabs and stats
- every domain and capability name
- effects, decisions, emergency kinds and approval models, some of them
  the raw stored value
- empty states, the policy modal, and the toast fallbacks

The trustDomain/trustCapability/trustRole keys already existed; the page
now words each stored value through them, and new keys cover the rest.
Scanner findings 21 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
The full suite found four failures from this branch's burn-down:
- a-client-write-reads-what-it-changed pinned chores' English approval
  toast; it now pins the catalogue call after the zero-row check (C1-S9-110)
- a-seeded-settings-row-is-not-shown-to-the-public pinned the English
  DEFAULT_REPUTATION fallbacks; it now pins each field's reviewsNew
  default key (C1-S9-108)
- reminder-provenance-ui mocked locale-provider without usePlural (C1-S9-111)
- trust-module asked tr() for a key that only exists as .one/.other;
  it now goes through usePlural (C1-S9-114)

Each assertion keeps its intent; only the copy it looks for moved into
the catalogue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture

NewWorldVenture commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner Author

I reproduced two communication-detail state leaks while the frozen integration #601 is completing its gates. The actual InboxModule keeps the same unkeyed CommDetail instance when the user selects another message. In the same household, type a reply for message A, then select message B: A's draft remains in B's reply field. Separately, add A's first action as a reminder, then select B: B's first action incorrectly displays disabled “Added” without creating B's reminder. Both desired browser assertions fail on the selected source; this is independent of localization.

The fixture executes the actual module and React with controlled query/action transport and two synthetic communications. No real provider delivery or database write is claimed. Evidence is retained in C:/Users/Daniel/AppData/Local/Temp/bubaly-inbox-state-red-v3-20260927.log; the two failed assertions show the old draft and missing enabled Remind control. A third delayed-draft experiment needs a stronger settlement witness and is not acceptance evidence yet.

Please scope the draft, drafting/sending/copied status, added action indices and pending completion handling to the communication identity. The existing reminderIds map deliberately retains one submission ID per communication/index across retries; a bare remount key must not silently lose that guarantee when switching A → B → A. Add actual interaction controls for both messages and for delayed completion after a selection change. Keep household changes covered by the existing authenticated boundary. I am retaining this as a separate follow-up so the already reviewed login/meal release can finish; no additional shared navigation or SQL change is needed.

Follow-up: the held-response test now witnesses response settlement and two real animation frames. It also fails on the old source: A's returned draft appears in selected B. The corrected suite has three desired failing assertions (bubaly-inbox-state-red-v4-20260927.log). A TEMP-only candidate scopes the six local state values by communication ID and captures that ID in each updater, while retaining the existing reminder submission-ID map. It passes all three cases plus two controls: legitimate AI completion and A → B → A draft preservation, and separate A/B reminders retaining their Added state on return (5/5, 3.5s). This candidate is not adopted or deployed. I can reconcile it with the latest localized module after the login/meal batch; please flag overlapping state work here.

…'s language

Statuses, classifications and the unknown-caller fallback were English in
every locale; the stat tiles and how-it-works rows carried dead English
twins beside their keys. Scanner findings 20 -> 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…eader's language

Shopping and pantry showed their categories, the cleared-items toast and
the pantry stat tiles in English in every locale; the Grocery/Custom list
presets wrote an English list name. Categories stay stored as the English
word and are shown through a shared groceryCategoryLabel(); presets are
worded when shown and when picked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
Categories, difficulty, dietary flags, AI remix buttons and stat tiles were
English in every locale. Flags stay stored as the English word and are
shown through flagLabel(); remix buttons are worded by action id while the
model's instruction is unchanged. Scanner findings 19 -> 3 (stored values).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture

Copy link
Copy Markdown
Owner Author

I am reconciling #601 with the concurrent main merges through e96e745 (#603 and #585). The original #601 hosted browser run finished clean at 1,777/1,777; its four stale Web source contracts are corrected. The later session race repair passes 20,850 full UTC units/build/types/lint locally, plus actual-SDK and controlled-browser regression gates. Its first push could not start CI because main had moved into conflict; those three authorization conflicts are now resolved.

The reconciled gate retains the authenticated-client principal and the incoming seven real-helper cases, with 503 for an unavailable super-admin lookup. Current main's shared navigation is preserved byte-for-byte; this batch adds no navigation changes relative to e96. The three conflict suites and adjacent contracts pass 78 checks; current-main chores/catalogue/control integration passes 94. The merged source is being frozen and published for fresh hosted acceptance.

Please base further integration on that reconciled #601 head or its eventual main merge, preserving the 503 outage behavior and the new cookie-owner session guard. This avoids competing main merges discarding the jointly reviewed boundaries. #602 remains a separate framework follow-up; its original hosted run is being retained to completion. The Inbox state reproductions and TEMP candidate described above remain a later batch.

… task creates

Priorities, tabs, the summary legend and quick-add buttons were English in
every locale, and a family's first task created a list named "Tasks" in
English. Scanner findings 16 -> 1 (type-alias fragment).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…ds in the reader's language

Roles, account badges, the role picker and the five shared-information
cards (with their counts) were English in every locale. Counts go through
the locale's plural rules. Scanner findings 16 -> 3 (type-alias fragments).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
DECISION_META carried cta/subtitle English strings next to the ctaKey /
subtitleKey the page actually renders, and DOMAIN_META a label nothing
reads. The scanner counted all 15 as hardcoded copy; nothing a reader saw
changes. Scanner findings 18 -> 3 (a CSS value and two type fragments).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
Documents' type filter, sort options, storage legend and quick actions,
and relationship's date kinds, gift statuses and load fallback were English
in every locale. The documents test pins the translated action labels; the
ungated-surface ceiling drops 2581 -> 2419.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
route-feature-gate: main's super-admin bypass is kept (it asks the client
the endpoint authenticated, and a failed lookup is "no"); this branch's
cookie-session version with a 503 is dropped. The gate tests pass on it.
behavior-module: main's <h1> with this branch's flex-wrap (C1-S9-99).

Ratchet: CEILING 2419 -> 2432. The 13 are not this branch's copy: main's
P-10 (711b15c) gives each AI request ledger row a fixed English label in
13 route files. Those are stored row labels, not rendered copy; they are
left to that change's owner and noted in finalaudit.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…uage; gate test follows main's gate

Concierge kinds, opening lines, tips and saved-plan titles; subscription
categories, cadences, statuses, per-period prices, usage lines and hint;
expense categories (through the shared categoryLabel()). Stored values are
unchanged.

route-plan-gate: main's merged gate (#585) reads a failed account lookup as
'not a super admin', so the family's own 403 stands; the test pinned this
branch's earlier 503 and now pins that nothing passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture

Copy link
Copy Markdown
Owner Author

The reviewed next batch is now published in draft #607 at 4d80774, with its full local and hosted checks running in parallel. It includes the remaining #598 localization at06cef776, the Inbox message-owned state repair, all sixteen non-documentation #604 paths plus the verified shared date-hydration repair, and the six chunk/contrast paths from #605 with the storage-read loop fix. The competing renderer loader is excluded because #602 supplies the upstream renderer repair.

The adopted source passes24/24 retained Inbox/date browser cases and53 focused guards, with the separate native chunk and formatter proofs retained. finalaudit.md and four supporting documents are committed and pushed, preserving your attributed findings, every prior audit ID, and #606's B6b claim. No SQL or navigation changes are introduced by this batch, and no broad workflow closure is claimed.

#601 is now merged as main82da8da64 after clean1,786/1,786 hosted E2E and all other required checks. Production verification is pending. Please coordinate remaining source work against #607 so we preserve the session fixes, new ownership guards and current catalogue keys. #602 and #607 still require their own complete gates before release.

…r's language; English-only voice classifier recorded OPEN

Pattern kinds and stats, feed tabs and filters, capture kinds, the capture
toast, Undo and history rows were English in every locale. The example
commands stay English deliberately: classifyVoiceCommand() reads only
English phrasing, so a translated example would be filed as a note. That
classifier limit is recorded OPEN for the owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
Renewal categories and load fallback, message tabs and smart groups were
English in every locale, and a family's auto-created first conversation was
named "Family Chat" in English.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
Policy types and premium frequencies came straight from the English lib
data into the list, gaps line, form and detail title; the detail rows,
'/mo' '/yr' and 'Whole family' were English too. typeLabel() and
perFrequency() word each stored value through the catalogue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture

Copy link
Copy Markdown
Owner Author

The user has now requested that all open PR work be reconciled into main and deployed. The current main audit checkpoint is4123f13 (#608); production session/meal/page repairs from#601 are verified on82da. #602 carries the Next16 renderer fix and a default-false manual production-SQL apply guard. #607 carries repaired Inbox ownership, shared date hydration, localized controls, and the corrected marketplace test fixture (20,871 unit tests now pass).

I am reconciling these branches for release. Please preserve the newer main/607 session, Inbox, Modal, formatter, and cache guards when resolving overlaps. Pending SQL must remain unapplied; no production migration dispatch is authorized by this release coordination. Additional unique changes will be reviewed and integrated, with superseded alternatives recorded explicitly. Please keep finalaudit.md claims and prior failures intact.

…eader's language

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
The page spliced an English 'Doctor'/'Dentist' into English sentences
(Add Doctor, No dentists yet, Primary doctor, …), which no language can
translate. Each kind now has whole-sentence keys, read through k(name);
the title, description, Whole Family, Save Changes, Add Insurance and
upload toasts are keys too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
…ct-45d8k6

Main integrated this branch's PR585/598 work. Its side is kept wherever
both touched the same thing:
- route-feature-gate: main's isSuperAdmin(db), with 503 when the read
  fails; route-plan-gate.test.ts is main's copy, which pins that 503.
- a-client-write-reads-what-it-changed, a-seeded-settings-row…: main's
  versions of the same translated assertions.
- Catalogues: main's order and values (incl. its appNotFound wording) plus
  this branch's 540 keys main lacks; nothing of main's removed.
- finalaudit.md: C1-S9-115…126 kept after main's entries.
- Ratchet: main's 2650 lowered to 2349 by C1-S9-114…126.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01776xJyhVe8xJQvTGeNfT9T
@NewWorldVenture
NewWorldVenture merged commit 177ed1a into main Sep 27, 2026
7 checks passed
NewWorldVenture pushed a commit that referenced this pull request Sep 27, 2026
24 files conflicted, nearly all where both sides translated the same
module:
- Assistant, concierge, finances, insurance, medical records, reminders,
  shopping, subscriptions and voice: main's burn-down (C1-S9-114…126) is
  kept, since it is the fuller version, with real plurals, category and
  frequency labels, and a greeting with no English fallback. Helpers of the
  port's that main's version replaces (the voice route labels) are removed.
- The port's accessible names are carried onto main's lines: the food and
  planning "Open" links (with main's shrink-0 for P-12) and the trust
  module's emergency-kind select.
- Tests take main's expectations; the reminder mock gains main's
  usePlural and keeps the port's parameters.
- Catalogues: the union at 15,985 keys each, with main's wording where both
  sides carried a key.
- i18n ratchet: both histories kept. The merged tree measures 1,922, banked
  as the ceiling.

tsc clean. Lint: 0 errors, 15 warnings. 21,399 tests in 1,702 files pass
in UTC. next build succeeds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DXw2nu25BjyRfA6Fg3YiMS
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