Lucas Berger
9e39a5c492
chore: merge executor worktree (worktree-agent-ad448992e936c77aa)
2026-06-18 12:58:57 -04:00
Lucas Berger
29f3d62312
chore: merge executor worktree (worktree-agent-a1f3ad1ab5d67e70c)
2026-06-18 12:58:56 -04:00
Lucas Berger
28e9ca9840
docs(17-03): complete phone layout overlap fix plan — SUMMARY.md
...
FAB lifted above BottomTabBar, phone content padding added, D-01
regression guard committed to layout.spec.ts; 3-profile e2e sweep green.
2026-06-18 12:54:30 -04:00
Lucas Berger
4cb16f8271
docs(17-04): complete brand wiring plan — BrandSlot logo, favicons, maskable icon fix, accent
...
- BrandSlot: placeholder div replaced with decorative logo img (ce95aa3 )
- tokens.css: --brand-logo-border-radius 0, --color-member-0 #e8915a (df578fd )
- index.html: favicon.svg + favicon.ico links, theme-color #e8915a (df578fd )
- vite.config.ts: maskable icon fixed to /icon-maskable-512.png, theme_color #e8915a (df578fd )
- Build: green; manifest.webmanifest verified correct
2026-06-18 12:51:58 -04:00
Lucas Berger
85a803fba6
test(17-03): add FAB↔BottomTabBar overlap regression guard to layout.spec.ts
...
- New test: "New Event FAB does not overlap BottomTabBar (A — phone only)"
- Skips on desktop profile; runs iphone + pixel (the profiles that exposed D-01)
- Asserts fabBox.y + fabBox.height <= navBox.y (FAB bottom ≤ bar top)
- Confirms Task 1 fix resolves the seed defect — passes green on both profiles
2026-06-18 12:51:32 -04:00
Lucas Berger
df578fd7b7
feat(17-04): wire favicons + theme-color in index.html, fix maskable icon + accent in manifest
...
- index.html: add favicon.svg (SVG, modern browsers first) + favicon.ico (legacy) links
- index.html: update theme-color from #4A90D9 to approved #e8915a (warm amber)
- vite.config.ts: fix maskable icon — reference /icon-maskable-512.png (separate file) not /icon-512.png
- vite.config.ts: update manifest theme_color to #e8915a to match index.html
- tokens.css: update --color-member-0 to #e8915a (warm amber, Variant B, operator-approved 17-02)
- --sx-color-primary follows automatically via var(--color-member-0)
2026-06-18 12:50:50 -04:00
Lucas Berger
ce95aa3e6b
feat(17-04): wire logo img into BrandSlot, set --brand-logo-border-radius 0
...
- Replace placeholder FS div with decorative <img src="/logo.svg" alt="" aria-hidden>
- Apply Surface B-1 style (width/height brand-logo-size, borderRadius token, contain/block)
- Update --brand-logo-border-radius from 50% to 0 (SVG draws its own rx=104 shape)
- h1 FamilySync and tagline p unchanged; LoginPage.tsx untouched (seam contract honored)
- No dangerouslySetInnerHTML (T-05-24 invariant maintained)
2026-06-18 12:48:55 -04:00
Lucas Berger
5e1c714894
fix(17-03): lift FAB above BottomTabBar and reserve phone content padding
...
- CalendarShell.tsx: FAB bottom changed from var(--space-6) to
calc(var(--bottom-chrome-h) + var(--space-6)) — sits 24px above bar
- App.tsx: contentStyle gains phone-only paddingBottom: var(--bottom-chrome-h)
via spread pattern ...(phone ? {...} : {}) — desktop unchanged
2026-06-18 12:48:35 -04:00
Lucas Berger
9e080fb22a
docs(phase-17): update tracking after wave 1
2026-06-18 12:45:49 -04:00
Lucas Berger
65e6222944
chore: merge executor worktree (worktree-agent-af89750bf86857964)
2026-06-18 12:44:24 -04:00
Lucas Berger
58d11caee0
chore: merge executor worktree (worktree-agent-a1fb88aa75fd00c8f)
2026-06-18 12:44:23 -04:00
Lucas Berger
d917157c63
docs(17-02): complete branding assets plan summary
...
Records approved brand decisions for plan 17-04:
- logo art approved (family-house redesign)
- brand accent #e8915a (warm amber)
- --brand-logo-border-radius: 0
2026-06-18 12:43:45 -04:00
Lucas Berger
4c99470c1a
feat(17-02): apply approved family-house logo + regenerate icon set
...
- Overwrite logo.svg with approved higher-contrast family-house SVG
(warm peach gradient bg, amber roof, bold white walls, heart finial,
three clearly-spaced family figures in rose/gold/blue)
- Regenerate full icon/favicon set from new art:
favicon.svg, favicon.ico (967 B), icon-192.png (192x192),
icon-512.png (512x512), icon-maskable-512.png (512x512 safe-zone),
apple-touch-icon.png (180x180)
- Approved brand decisions recorded for plan 17-04:
accent #e8915a, --brand-logo-border-radius: 0
2026-06-18 12:42:43 -04:00
Lucas Berger
d01ec2388c
docs(17-01): complete token groundwork plan — SUMMARY
...
tokens.css restructured to :root,[data-theme=light] combined selector;
--bottom-chrome-h added; all --sx-color-* overrides intact; build green;
layout.spec.ts pixel profile 15/15 pass; Schedule-X colors verified.
2026-06-18 12:14:45 -04:00
Lucas Berger
b364573285
feat(17-02): generate full icon/favicon set from logo.svg (Task 2)
...
- Run @vite-pwa/assets-generator minimal2023Preset against public/logo.svg
- Produce: favicon.ico (861 B, non-trivial), favicon.svg, icon-192.png (1617 B),
icon-512.png (4221 B), icon-maskable-512.png (3353 B, 512x512 distinct maskable
with safe-zone padding), apple-touch-icon.png (1110 B, 180x180)
- Replace 3 placeholder stubs with real generated assets
- Update pwa:icons script to include post-generation canonical rename step
- Add generator intermediate output filenames to .gitignore
2026-06-18 12:13:50 -04:00
Lucas Berger
c2f89bd55f
feat(17-01): restructure tokens.css to combined :root,[data-theme=light] selector + add --bottom-chrome-h
...
- Change :root { to :root, [data-theme="light"] { (D-06 combined selector)
- Add --bottom-chrome-h: calc(56px + env(safe-area-inset-bottom, 0px)) to spacing scale
- Keep all 12 --sx-color-* overrides inside the combined block (cascade unchanged)
- Keep --brand-logo-* tokens inside the combined block (verbatim, no value changes)
- Add dark-theme stub as comment-only (Phase 999.20 fills values; no live rule)
- All existing values unchanged; PWA build passes; Schedule-X colors verified via playwright-cli
2026-06-18 12:12:42 -04:00
Lucas Berger
7db9005645
feat(17-02): install @vite-pwa/assets-generator, author logo.svg, add pwa-assets.config.ts
...
- Add @vite-pwa/assets-generator@1.0.2 as devDependency in apps/pwa
- Add pwa:icons script (pwa-assets-generator generate) to apps/pwa/package.json
- Approve sharp build scripts in pnpm-workspace.yaml (required for @vite-pwa/assets-generator)
- Hand-author apps/pwa/public/logo.svg: warm/rounded/at-home family scene with house, two adults, child, heart — square 512x512 viewBox, self-contained, text-free
- Create apps/pwa/pwa-assets.config.ts with minimal2023Preset, images: ['public/logo.svg'], no overrideManifestIcons
2026-06-18 12:12:17 -04:00
Lucas Berger
eb0db8beef
docs(17): create phase plan
2026-06-18 11:36:21 -04:00
Lucas Berger
280438b2d3
docs(17): create phase plan (6 plans, 2 waves) — UI optimization & polish
2026-06-18 11:34:04 -04:00
Lucas Berger
28cf79754a
docs(17): add validation strategy
2026-06-18 11:19:24 -04:00
Lucas Berger
f789a67f95
docs(17): research phase domain
2026-06-18 11:17:44 -04:00
Lucas Berger
a1457a5b30
docs(17): UI design contract
2026-06-18 10:59:25 -04:00
Lucas Berger
efeee02a36
Merge remote-tracking branch 'origin/main' into gsd/phase-17-ui-optimization-polish
...
# Conflicts:
# .planning/STATE.md
2026-06-18 10:08:45 -04:00
Lucas Berger and Claude Opus 4.8
cfe84715d5
docs: add developer profile section to CLAUDE.md
...
Publish / publish (push) Successful in 11s
Generated by /gsd-profile-user from session analysis (8 dimensions).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-18 10:07:03 -04:00
luckberg
07787177d4
Update CLAUDE.md
...
Publish / publish (push) Successful in 11s
Added local auth
2026-06-18 07:12:17 -04:00
Lucas Berger
1e2cc52659
docs: refresh project documentation against current codebase
Publish / publish (push) Successful in 26s
2026-06-18 06:44:29 -04:00
luckberg
18d3ee6a4f
Merge pull request 'Phase 19: Local Auth (No-OIDC Mode)' ( #23 ) from gsd/phase-19-local-auth-no-oidc-mode into main
...
Publish / publish (push) Successful in 1m25s
Reviewed-on: #23
2026-06-18 06:24:58 -04:00
Lucas Berger and Claude Opus 4.8
b6490feff4
fix(19): satisfy CI fast-checks + secret scan
...
CI / changes (pull_request) Successful in 9s
CI / api (pull_request) Successful in 3m2s
CI / fast-checks (pull_request) Successful in 4m20s
CI / security (pull_request) Successful in 1m14s
CI / harness (pull_request) Successful in 6m56s
CI / gate (pull_request) Successful in 2s
Lint (eslint --max-warnings 0):
- index.ts: disable no-unsafe-argument on the type-only Context mismatch when
delegating to the OIDC handler inside the local-session skip wrapper
- localAuth.ts: handleLogout is sync (no await) — drop async (require-await)
- devBypass.ts: disable detect-possible-timing-attacks on the public well-known
dev-placeholder string compare (not a secret comparison)
- remove dead code / unused bindings flagged by no-unused-vars: makeTestApp
(localSession.test), makeUnauthContext + BrowserContext import (login.spec),
unused memberId (admin.test), unused txSelectCount counter (me.test)
- localAuthMiddleware.test / me.test: fix unused + reflow-detached
eslint-disable directives
Format: prettier --write across the 20 Phase-19 files that were never formatted.
Secret scan (gitleaks): allowlist two false positives — the synthetic >=32-char
TEST_SECRET in localSession.test.ts, and .planning/ design prose (a generic-api-key
regex hit on "credential atomically, 409-equivalent"). Neither is a real secret.
Verified locally: format:check, lint, typecheck, md:lint, gitleaks (no leaks),
PWA 266/266, API 452/452.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 23:05:15 -04:00
Lucas Berger
91ab9d1f78
docs(19): ship phase 19 — PR #23
2026-06-17 22:49:45 -04:00
Lucas Berger
abf7be782a
docs(phase-19): add security threat verification (28/28 closed, threats_open: 0)
CI / changes (pull_request) Successful in 10s
CI / fast-checks (pull_request) Failing after 2m17s
CI / api (pull_request) Successful in 2m51s
CI / security (pull_request) Failing after 12s
CI / harness (pull_request) Successful in 5m9s
CI / gate (pull_request) Failing after 2s
2026-06-17 22:47:45 -04:00
Lucas Berger
f3af130e9e
docs(17): add workstream D — 4 UI findings from Phase 19 UAT (logout button, admin feedback, popup centering, admin nav)
2026-06-17 22:34:18 -04:00
Lucas Berger
af0a70ccec
test(19): complete UAT — Tests 1-3 pass live, 4 resolved-by-fix, 5→ship; 4 UI findings routed to Phase 17
2026-06-17 22:32:52 -04:00
Lucas Berger
73dd6a2383
docs(19): re-review after fixes — status clean (0 critical/warning, 2 info)
2026-06-17 20:50:25 -04:00
Lucas Berger
9cccf17ef9
chore: enable MemPalace discuss-time recall + KG mirror
2026-06-17 20:45:39 -04:00
Lucas Berger
5f74ae965d
docs(19): add code review fix report
2026-06-17 20:42:51 -04:00
Lucas Berger
cef2c66de5
merge(19): land code-review fixes (CR-01..04, BL-01..04, WR-01..07, IN-01..04)
2026-06-17 20:39:49 -04:00
Lucas Berger
2691dd0f95
fix(19): IN-04 enforce single-use OIDC-link nonce to prevent state replay
2026-06-17 20:37:09 -04:00
Lucas Berger
83e23d760d
docs(state): record phase 17 context session
2026-06-17 20:37:02 -04:00
Lucas Berger
3784762817
docs(17): capture phase context (layout polish + branding + theme groundwork; dark mode/styling deferred)
2026-06-17 20:37:02 -04:00
Lucas Berger
f02521dd02
fix(19): IN-03 evict stale loginAttempts entries to bound in-memory map growth
2026-06-17 20:35:43 -04:00
Lucas Berger
e392bf2eb7
fix(19): IN-02 add lockstep test pinning inlined scrypt params against canonical verifyPassword
2026-06-17 20:34:58 -04:00
Lucas Berger
f2fc1404d4
fix(19): IN-01 validate LOCAL_SESSION_EXPIRES coercion (fallback on NaN/non-positive)
2026-06-17 20:34:14 -04:00
Lucas Berger
916fb34f17
docs: add backlog items 999.20 (dark mode/theming) + 999.21 (styling refresh)
2026-06-17 20:34:02 -04:00
Lucas Berger
4bd6b2c057
fix(19): WR-05 add no-echo tests for admin create-member and me password hook sites
2026-06-17 20:33:46 -04:00
Lucas Berger
32bdd1e92d
fix(19): WR-07 reject route ids with trailing garbage via strict integer parse
2026-06-17 20:32:26 -04:00
Lucas Berger
4cf2ad4bff
fix(19): WR-06 stop sliding the rate-limit cooldown window on rejected attempts
2026-06-17 20:31:07 -04:00
Lucas Berger
30ad25c026
fix(19): WR-03 make scrypt hashing async (threadpool) to avoid event-loop starvation DoS
2026-06-17 20:30:28 -04:00
Lucas Berger
322929aebe
fix(19): WR-02+WR-04 centralize OIDC config (env-or-app_config) and discover auth endpoint
2026-06-17 20:26:47 -04:00
Lucas Berger
c4d8d76a4c
fix(19): WR-01 parse reset-admin flags explicitly and stop echoing username
2026-06-17 20:25:18 -04:00
Lucas Berger
40666e1cc5
fix(19): BL-04 keep context oidcIss/oidcSub null for local users (no fabricated identity sentinels)
2026-06-17 20:24:01 -04:00