Context
The task brief notes "shared/ between repos isn't yet a thing". Multiple modules in extension/src/shared/ are 1:1 forks of equivalent files in the desktop repo (motion presets, domain parsing, types, ProfileEditor, atoms.css).
Problem / Observation
High-confidence overlaps:
A drift bug today is invisible until a user opens the same site on both platforms.
Proposed approach
Stand up a private npm package (@keyfount/core or similar), version-pinned, that owns:
Profile, AccountEntry, DerivationInputs
derive, argon2, render, memorable, wordlist, fingerprint
domain (registrable-domain extraction)
sync/keys, sync/auth (client-side OPAQUE flow)
The package can live in keyfount/core repo or as a workspace dependency of both apps. Until then, add a // SYNC WITH desktop/src/... header comment to every duplicated file so future contributors at least know to update both.
Acceptance criteria
Context
The task brief notes "
shared/between repos isn't yet a thing". Multiple modules inextension/src/shared/are 1:1 forks of equivalent files in the desktop repo (motion presets, domain parsing, types, ProfileEditor, atoms.css).Problem / Observation
High-confidence overlaps:
registrableDomain()shared via tldts.derive.ts,render.ts,memorable.ts,wordlist.ts) is the most security-sensitive duplication: a fix here that misses the desktop produces silent password drift.A drift bug today is invisible until a user opens the same site on both platforms.
Proposed approach
Stand up a private npm package (
@keyfount/coreor similar), version-pinned, that owns:Profile,AccountEntry,DerivationInputsderive,argon2,render,memorable,wordlist,fingerprintdomain(registrable-domain extraction)sync/keys,sync/auth(client-side OPAQUE flow)The package can live in
keyfount/corerepo or as a workspace dependency of both apps. Until then, add a// SYNC WITH desktop/src/...header comment to every duplicated file so future contributors at least know to update both.Acceptance criteria
docs/(or this issue) for the eventual package.