131 Commits

Author SHA1 Message Date
2af9ef1f40 docs: add Dual-Audience Development Guide for Agent-First APIs and Mobile-First UI 2026-08-25 00:11:56 -07:00
5f88733fc6 feat(sessions): implement agent session delegation with scoped permissions and instant handoff 2026-08-24 23:46:44 -07:00
80cab8454e feat(api): support Authorization: Bearer <session_id> in addition to Cookie headers for agent queries 2026-08-24 23:29:39 -07:00
85772659b7 feat(ui,api): polish a11y, mobile decks, app/role edit drawers, display name management, and instant search 2026-08-24 23:21:35 -07:00
509e6019b0 feat(ui): adapt admin management screens into responsive mobile cards and timeline feed 2026-08-24 22:20:47 -07:00
7ab1405459 feat(ui): implement adaptive card decks for launchpad, sessions, and passkeys with emergency recovery backup 2026-08-24 22:20:10 -07:00
a3f5c5c286 feat(ui): implement hero passkey authentication, conditional UI autofill, and 12-word recovery setup 2026-08-24 22:19:20 -07:00
029c32e022 feat(ui): implement design tokens and mobile-first adaptive navigation shell 2026-08-24 22:18:34 -07:00
8e7efcc1d1 docs(tasks): include Recovery PIN setup and 12-word voucher generation in task specs 2026-08-24 22:16:28 -07:00
449b428cea docs(tasks): add 4 phased task specifications for mobile-first UI revamp 2026-08-24 22:11:32 -07:00
c5f8f6fcbc docs: add technical design spec for mobile-first UI revamp 2026-08-24 22:10:09 -07:00
b9f4ccd71d feat(auth): resolve mobile cookie shadowing and synchronize tasks/path.md
- Implement iterative session cookie candidate resolution in getAuthenticatedUser
- Eliminate Hono first-match limitation causing mobile login redirect loops
- Use absolute UTC ISO strings for PostgreSQL session expiry queries
- Opportunistically clear host-level cookies upon shadow detection
- Ensure exhaustive server-side session revocation across all cookie candidates on logout
- Add automated regression test for cookie shadowing in server/main.test.ts
- Rename and standardize tasks/path.md with 5-template orchestrator standard
2026-08-24 21:48:33 -07:00
b66cc8209c
Merge pull request #24 from mrteye/jules/investigate-mobile-login-cookie-bug-12452066356128611281
chore: Complete Investigation on Mobile Login Cookie Redirect Failure
2026-08-24 21:23:18 -07:00
google-labs-jules[bot]
947b38d81a Investigate mobile login cookie persistence bug
- Investigated Chromium Android wildcard domain cookie behavior.
- Researched Hono's `getCookie` first-match parsing behavior.
- Added experimental Deno test scripts in `scratch/` for Hono cookie header parsing and pg timezone concepts.
- Wrote full root-cause analysis and ranked architectural solutions in `scratch/INVESTIGATIVE_REPORT.md`.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-25 00:31:19 +00:00
4b78f70efd fix(auth): eliminate conflicting deleteCookie and add created_at to users table 2026-08-24 17:14:07 -07:00
250e9c625b test: update logout redirect assertion 2026-08-24 16:23:12 -07:00
561588624a feat(ui): allow direct logout redirects to safe return urls instead of forcing login page 2026-08-24 16:22:15 -07:00
8babb8a46e fix(session): clear invalid cookies on redirect and add cache-control headers to prevent 302 caching loops 2026-08-24 15:57:02 -07:00
0a46e2bdfc fix(ui): use instant window.location.replace and hold loading state during auth redirect 2026-08-24 15:46:27 -07:00
54cdf0c442 fix(auth): remove invalid transports column reference in passkeys query 2026-08-24 15:41:49 -07:00
324ad24d05 fix(auth): add allowCredentials to login challenge options when username provided 2026-08-24 15:36:54 -07:00
cf42a32800 fix(auth): eliminate competing deleteCookie on login verify and ensure proper session persistence 2026-08-24 15:32:26 -07:00
3c57dfbc78 fix(merge): clean up merge conflicts in auth-session.ts and main.test.ts 2026-08-24 15:15:15 -07:00
09ed9de178
Merge pull request #23 from mrteye/feat-tier-1-ingress-control-217564989939913720
feat(auth-api): implement Tier 1 Traefik Ingress Control & Bypass Matrix

Key additions:
1. **Dynamic Bypass Matix:** Implemented native Deno path prefix routing and IPv4 CIDR subnet allowlisting directly inside the edge proxy sub-request without needing database lookups, ensuring <30μs latency. 
2. **Dual-Response Protocol (Unregistered Fallback):** Unregistered domains properly redirect web browsers to a central SSR 404/Error page (`/errors/unregistered`), while APIs/headless clients receive strict 403 JSON payloads. 
3. **Guest Sandboxes & In-Flight Promotion:** Introduced `POST /api/guests/sandbox` to rapidly provision ephemeral passkey-less sessions, and updated the WebAuthn verification endpoint to detect and promote those sessions without destroying their continuous UI state.
4. **Docs & UI:** Created `TIER1_INGRESS_SPEC.md` and wired up all dynamic bypass properties into the Admin Application Registry dashboard.
2026-08-24 15:13:41 -07:00
7230a4d7ea
Merge branch 'main' into feat-tier-1-ingress-control-217564989939913720 2026-08-24 15:13:20 -07:00
google-labs-jules[bot]
2ac6252bff feat(auth-api): implement Tier 1 Traefik Ingress Control & Bypass Matrix
- Add idempotent migrations for `is_public`, `bypass_paths`, and `allowed_cidrs` in `server/db.ts`.
- Update `AppRecord` and `getAppByHost` in `server/auth-session.ts` to cache bypass rules in Valkey.
- Implement native Deno, fast-path prefix (`isPathBypassed`) and CIDR matchers (`isIpAllowed`).
- Update `GET /api/forward-auth` to evaluate dynamic rules and properly return 302/403 for unregistered domains.
- Create `ui/components/UnregisteredAppPage.tsx` SSR view for browser fallbacks.
- Update `AdminAppsPage.tsx` to handle the new ingress settings visually and post to `/api/admin/apps`.
- Add `POST /api/guests/sandbox` to generate ephemeral Valkey guest sessions.
- Update `POST /api/register/verify` to detect `upgrade_session` and promote guests to full users in-flight.
- Add `docs/TIER1_INGRESS_SPEC.md`.
- Ensure tests run cleanly and add comprehensive unit test cases for the bypass matrix.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 22:08:43 +00:00
544fdf0569
Merge pull request #22 from mrteye/feat-sso-launchpad-logout-2100-7262934389430052995
feat(ui): implement App Launchpad and secure logout redirect

This PR implements the requested App Launchpad feature and secures the logout process against open-redirect attacks.

Key changes:
1. **Logout Return-Path Validation**: Added `isSafeRedirectUrl` and updated the `GET /logout` handler. Unsafe redirects are logged as `open_redirect_intercepted`, while successful logouts generate `logout_success` events on the Merkle ledger. All host and parent wildcard cookies (`getCookieDomain()`) are cleared to prevent state collisions.
2. **SSO Application Launchpad**: Introduced `ui/components/AppLaunchpadPage.tsx` using pure Hono SSR JSX. Updates `GET /dashboard` to render this page as the main authenticated landing view. Query logic uses strict Zero-Knowledge filtering—regular users only see explicitly granted apps, and Global Admins see all apps tagged with an `[Admin]` badge.
3. **Hybrid Ingress Playbook**: Authored `docs/HYBRID_INGRESS_PLAYBOOK.md` detailing the architectural split between Traefik ForwardAuth and client application SSR routing.
4. **Testing & QA**: Written comprehensive hermetic unit tests in `server/main.test.ts` for the redirect interceptor, standard logout logic, and Zero-Knowledge role queries. All tests pass with full quality gate compliance (`deno fmt`, `deno task lint`, `deno task check`).
2026-08-24 14:58:52 -07:00
google-labs-jules[bot]
e52f931edb feat(ui): implement App Launchpad and secure logout redirect
- Add isSafeRedirectUrl utility to prevent open-redirect vulnerabilities.
- Update GET /logout to handle ?redirect=, clear cookies safely, and log audit events.
- Create AppLaunchpadPage.tsx using pure Hono SSR JSX for application visibility and SSO launching.
- Update GET /dashboard and AuthenticatedLayout.tsx to mount the Launchpad as the default authenticated view with Zero-Knowledge querying.
- Add HYBRID_INGRESS_PLAYBOOK.md documentation for Traefik ForwardAuth routing.
- Implement exhaustive unit tests in server/main.test.ts for redirect preservation, anomaly logging, and Zero-Knowledge role filtering.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 21:58:36 +00:00
e9b9088fec docs: add Use Case 12 for Hybrid Cloud Edge, Cloudflare Tunnel & Split-Horizon audit requirements 2026-08-24 14:46:44 -07:00
b4b05c37ff feat(sdk): add ForwardAuth header passthrough hydration in createAuthMiddleware 2026-08-24 14:17:10 -07:00
cd1d866077 docs(tasks): standardize and upgrade Task 4.1 and Task 4.2 to 100% rubric compliance 2026-08-24 14:15:38 -07:00
443df1c2ce chore(tasks): remove JULES_PROMPTS.md to eliminate agent prompt confusion 2026-08-24 14:13:35 -07:00
226d04228b
Merge pull request #21 from mrteye/feat/auth-api-traefik-ingress-control-task-6742583984777370201
feat(tasks): create Traefik Universal Edge Ingress task file
2026-08-24 14:13:08 -07:00
9ace888b4b
Merge pull request #20 from mrteye/feat/sso-launchpad-task-file-4077230937799430847
docs: draft phase 4 sso launchpad and logout spec
2026-08-24 14:12:51 -07:00
google-labs-jules[bot]
5f31989137 feat(tasks): create Traefik Universal Edge Ingress task file
Generates `tasks/new/2026-0824.01.jul.feat.auth-api.traefik-ingress-control-2105.md` outlining the architecture and implementation steps for:
- Traefik global default-deny ForwardAuth setup
- Valkey-cached dynamic database bypass matrix (`is_public`, `bypass_paths`)
- Hybrid universal path and CIDR exemptions
- Dual-response error handling (302 vs 403) for unregistered apps
- Ephemeral guest sandbox flow with passkey promotion

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 21:12:30 +00:00
google-labs-jules[bot]
b0dd2d098c docs: draft phase 4 sso launchpad and logout spec
Drafted the task markdown file for Phase 4 covering Central SSO Application Launchpad, Logout Return-Path Preservation, Hybrid Ingress Gateway Protocol, and Strict Additive Security Audit.

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 21:10:17 +00:00
4fce954c86 docs(tasks): add Prompt 4.2 for Jules with SSO launchpad, logout return-path, and additive security audit 2026-08-24 13:56:12 -07:00
2e30c5ad3e docs(tasks): enrich Prompt 4.1 for Jules with comprehensive Tier 1 bypass and allowlist architecture 2026-08-24 13:39:56 -07:00
7420401147 fix(cookie): dynamically calculate parent wildcard domain (.atyg.org) to prevent host-scoping redirect loop 2026-08-24 13:11:17 -07:00
ce29459f78 fix(ui): add Cache-Control no-cache middleware and version tags to auth-client.js to prevent stale browser caching 2026-08-24 13:07:23 -07:00
b867a166e9 docs: add ForwardAuth Redirection & Deep-Link Protocol Specification (RFC-SPEC-2026-FA-01) 2026-08-24 12:53:16 -07:00
96bcf69179 feat(forwardauth): add browser 302 redirect with safe return URL and open-redirect protection 2026-08-24 12:52:23 -07:00
590a13e694 fix(infra): add ForwardAuth middleware labels to auth-api service in compose generator 2026-08-24 12:40:31 -07:00
4cf7cb2d18 docs(tasks): add Phase 4 Prompt 4.1 for Traefik Tier 1 Global Ingress Discovery 2026-08-24 12:27:46 -07:00
885d26e595 docs: add Use Case 11 (Guest Trial Sandboxes & In-Flight Upgrade) and quick links in README.md 2026-08-24 11:34:44 -07:00
8ee0f305a8 docs(tasks): mark all Phase 3 stories as COMPLETE in JULES_PROMPTS.md 2026-08-24 08:57:01 -07:00
574c4d66aa fix(phase3): restore deno.json workspace/tasks and fix recovery/audit typing 2026-08-24 08:56:47 -07:00
a0a05da03c
Merge pull request #19 from mrteye/feat-sss-recovery-matrix-4307830478024114673
feat: 2-of-3 Shamir's Secret Sharing Recovery Matrix
2026-08-24 00:50:26 -07:00
google-labs-jules[bot]
f63d0c9afe feat: implement 2-of-3 SSS recovery matrix using Wasm/Rust
- Scaffolds a new Rust crate `wasm/sss_recovery` for constant-time Shamir's Secret Sharing over GF(256) with strict Wasm `zeroize`
- Implements purely typed BIP-39 fallback mapped via Deno WebCrypto in `ui/utils/bip39.ts`
- Migrates `server/recovery.ts` logic mapping Device/Voucher + Server shares with Valkey rate-limiting
- Applies mandatory in-memory JS zeroization on all reconstructed buffers

Co-authored-by: mrteye <1945243+mrteye@users.noreply.github.com>
2026-08-24 07:49:34 +00:00
4ed20be4a2
Merge pull request #18 from mrteye/feat-webauthn-prf-8747559092824518798
feat: WebAuthn PRF Extension for KEK Derivation
2026-08-24 00:46:51 -07:00