You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Login page: Continue with Google / Apple above an OR divider, with
redirecting, error and back-button states.
- /auth/callback: a provider's ?error= return (cancelled, refused) is now
reported as signin=failed instead of landing silently.
- SELF-HOSTING: Supabase, Google Cloud and Apple Developer setup steps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
Every name, identifier, file and doc moves from Trousseau to Knotwork,
with nothing a person already has left behind:
- Device storage: every IndexedDB and localStorage key moves from
trousseau.* to knotwork.* on first load (migrateKeys, now a prefix move
that also covers the older tableaux.suite.* keys).
- Documents: kind "trousseau" — in every exported file, device copy and
synced document — reads as "knotwork"; the next save writes the new name.
- Privacy policy: sign-in is a code, and Google or Apple can pass the
account's name; text, effective date and digest updated.
Left on the old name until they are renamed outside the repo: the Vercel
URL (trousseau-suite.vercel.app) and the GitHub repo URL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
…typecheck
The dependency bump to Vitest 5 left poolOptions and esbuild.jsx in
vitest.config.ts. Both are gone from the types, so next build stopped at
'Failed to type check' (reproduced on main). maxWorkers: 1 is v4's
replacement for singleFork; oxc.jsx replaces the ignored esbuild.jsx.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
…ready pins
The override holds playwright-core at 1.56.1 (the installed browser build);
the Dependabot bump moved @playwright/test to 1.63.0, which cannot load
1.56's internals (ERR_PACKAGE_PATH_NOT_EXPORTED: ./lib/coreBundle), so
'playwright test' and the marketing pipeline crashed on start. One version
everywhere, including next's optional peer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
The typecheck job runs npm ci then tsc, but @jfrusher/knotwork's types
live in the gitignored dist/, which nothing in that job builds — so every
import of it failed (79 x TS2307, plus TS18047/TS7006 knock-ons from the
resulting any). Reproduced locally from a clean dist/. The suite's build
script already builds the root first; typecheck now does the same.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
Full pipeline rerun (stills, three clips, composed images). The raw
screenshots came out byte-identical; the framed images and clips, which
carry the name, are updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
An empty wedding opened on 'This wedding', six 'No … yet' cards and a
disabled download, with the example wedding ~1,400px down on a phone.
Until anything is in the wedding, / now shows a welcome instead: what
Knotwork does, three ways in (set up your own, explore the example with
the guided tour, bring a guest list or a saved file), sign-in for a
returning visitor where accounts exist, the promises, and every tool.
The example had no way back out short of clearing the browser. It is now
marked, and the dashboard says so with 'Start your own wedding', which
keeps the example in Data and can be undone. SetupPrompt is folded into
the welcome.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
… a code
Since the email link became a six-digit code (030e098), the code is
verified in the browser and never passed through /auth/callback — the
only place a first sign-in starts the couple's wedding — and with no
`next` it went to /weddings, the planners' page. A new couple got no
wedding and 'None yet. Start one for a client'.
The login page now finishes every sign-in through the callback, which,
given no code to exchange, takes the session the browser already holds.
The callback's GET tests now really mock the server client (the old
vi.doMock ran after the static import, so it never applied).
Also on the way to an invite: say to use the invited address, and with
Apple to choose Share My Email — a hidden relay address never matches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
They were the only jobs on v4, which runs on the deprecated Node 20
runtime and warned on every run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
Updates social sign-in and authentication callbacks, rebrands the application and shared contract as Knotwork, and introduces welcome and example-wedding flows.
Changes:
Handles provider failures and browser-verified email sign-ins.
Renames branding, package APIs, storage keys, fixtures and exports.
Updates onboarding, tests, tooling and documentation.
Renames wedding-switch storage keys. Critical (2 votes): await legacy-key migration before the first readLink; direct opening can otherwise load wedding A into selected wedding B and upload A into B.
Changes export exclusions. Critical (3 votes): retain the legacy .trousseau.json rule alongside the new extension to protect private guest-data exports.
Selects welcome or dashboard content. Critical (1 vote): calculate emptiness only when the store is ready; summarising unreadable raw data after hydration failure throws before the dashboard fallback.
suite/components/shell/FrontPage.test.tsx
Tests loading and empty-wedding selection.
suite/components/shell/Footer.tsx
Updates footer branding.
suite/components/shell/ExampleBanner.tsx
Adds an example-wedding exit action. Moderate (1 vote): catch and display backup/storage failures from startYourOwnWedding, preserving the example instead of discarding the rejected promise.
Changes calendar branding and UIDs. Moderate (3 votes): preserve the stable @trousseau UID suffix and update its test; changing event identities creates duplicates and stale timings on re-import. Display branding can change in PRODID.
Updates canonical paths and setup instructions. Nit (3 votes): align cd Knotwork with the clone command, which creates Trousseau unless given an explicit destination.
docs/BUILDING-A-TOOL.md
Updates contributor contract and fixture references.
data/wedding.knotwork.json.dvc
Retargets the canonical DVC output.
data/.gitignore
Changes the canonical-data exclusion. Critical (3 votes): retain wedding.trousseau.json; existing private canonical files remain locally and can otherwise be staged by git add ..
CONTRIBUTING.md
Updates package references and setup instructions. Nit (3 votes): align cd Knotwork with the actual Trousseau clone directory or explicitly name the clone destination.
.gitignore
Changes root export exclusions. Critical (3 votes): retain the legacy .trousseau.json rule alongside the new rule so supported private backups cannot be staged accidentally.
- .gitignore, data/.gitignore, suite/fixtures/.gitignore: keep ignoring
the .trousseau.json names too — real weddings under the old name are
still on existing checkouts and in old backups.
- FrontPage: decide 'empty' only once the store is ready; an unreadable
wedding is kept as found and summarising it threw, crashing the page.
- openWedding: migrate the old keys first. /open runs before the store,
so on an unmigrated device it read no link and skipped the swap.
- Calendar: keep the @trousseau UID suffix; a UID is identity, and
changing it made re-imported events duplicates. PRODID says Knotwork.
- ExampleBanner: show why 'Start your own' failed instead of nothing.
- Clone instructions name the Knotwork folder, so 'cd Knotwork' works
(seven places, not just the two flagged).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
CodeQL (js/polynomial-redos, high) flagged /^-+|-+$/ in
suggestedFilename: on its own it is quadratic on a long inner run of
dashes (measured 105ms, 414ms, 1758ms at 10k/20k/40k). The preceding
/[^a-z0-9]+/ -> '-' already collapses every run to one dash, so the
output is unchanged with /^-|-$/ — the form Cadence and Brigade already
use. Same change in bundle.mjs and Tableaux's download slug.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam
Render cancelled sign-in failure on the weddings page
suite/app/auth/callback/route.ts:66
[P2] Cancelled provider sign-ins targeting /weddings still return silently: the callback sends /weddings?signin=failed, but WeddingsPage neither reads signin nor renders SignInFailed, so planners only see the ordinary sign-in prompt. Render a failure notice on that destination and test the displayed result, not just the redirect URL.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
redirecting, error and back-button states.
reported as signin=failed instead of landing silently.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Ns6xSyytpwWuhH7vCJ8Dam