feat: Slice 0 — Auth + Task Capture Spine - #7
Merged
Conversation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Wrap db_client yield in try/finally so dependency_overrides.clear() is guaranteed to run even when a test body raises (prevents override leaking into later tests via the module-level app singleton) - Narrow _override_redis annotation from FakeRedis to Redis to match the _redis dep it overrides; add `from redis.asyncio import Redis` - Guard _test_db_url() against a malformed DATABASE_URL that would silently produce an invalid connection string Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace `import app.db.models` with `from app.db import models as _models` so the name `app` is not rebound, eliminating 6 mypy errors caused by the module shadowing the FastAPI instance imported from app.main. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wires the end-to-end visible loop: landing page redirects signed-in users to /dashboard; dashboard server gate checks auth and delegates to DashboardClient which renders the task list, empty state, and ⌘K command palette. Also fixes a pre-existing lint error in CommandPalette (setState in effect → moved to cleanup return). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…torybook static) Storybook static build artifacts add ~5,800 Parcel-bundled vendor JS nodes to the knowledge graph with mangled symbol names — pure noise. Excluding them yields a 92% node-count reduction and lets the LockIn architecture surface cleanly in graphify-out/graph.html. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
️✅ There are no secrets present in this pull request anymore.If these secrets were true positive and are still valid, we highly recommend you to revoke them. 🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request. |
Two CI failures, both fixed in one go (history-clean — no transient literal credentials): 1. js — @vitejs/plugin-react@4.x is CJS but vitest 3.x bundles Vite 7 (ESM-only). Bumped to ^5.0.0 (ESM-native) and renamed vitest.config.ts to .mts so Node loads the config as ESM. (apps/web has no "type": "module", so .ts configs default to CJS and cannot require() ESM.) Linux Node 20 rejects the boundary mismatch that local Windows Node tolerates. 2. python-api — CI workflow had no Postgres, so the Slice 0 db_client fixture (Task 7) couldn't connect to :5432. Start an ephemeral Postgres via docker run inside a step, generate a fresh random password per run (openssl rand), mask it in logs with ::add-mask:: and export DATABASE_URL + AUTH_SECRET through $GITHUB_ENV. No literal credentials in source — GitGuardian-clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Muzaffar-codes07
force-pushed
the
feat/slice-0-auth-task-capture-spine
branch
from
May 22, 2026 11:27
0465f5b to
e8d3ec1
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Smallest end-to-end loop that proves the architecture: signed-in user opens a ⌘K palette, types a task title, presses Enter, and sees it persist in a list — Postgres write and
task.createdevent on theevents:tasksRedis Stream.Taskmodel + Alembic0003migration,TaskServicedual-write (Postgres + Redis),POST/GET/DELETE /v1/tasks(DELETE is idempotent),user_uuid()uuid5mapping bridging Googlesub→ UUID,fakeredis-backed pytest fixtures./api/tasks(hardened: 401/400/503/non-JSON guards, 204 short-circuit), React Query v5 provider +useTasks/useCreateTask/useDeleteTaskhooks, ⌘K command palette,/dashboardwith empty state / list / delete buttons / error UI, Google sign-in landing.docs/superpowers/plans/2026-05-18-slice-0-auth-task-capture-spine.md,docs/decisions/2026-05-18-data-layer.md.CURRENT_SLICE.mdadvanced to Week 3–4 Scaffolding.Test plan
cd apps/api && python -m pytest -q→ 27 passed (auth, validation, persistence, event emission, ordering, user isolation, idempotent delete × 3)pnpm --filter @lockin/web test→ 4 passed (palette: closed renders nothing, trim+submit on Enter, blank guard, reset on reopen)pnpm --filter @lockin/web typecheck→ cleanpnpm --filter @lockin/web lint→ cleancd apps/api && python -m mypy app→ clean (strict)taskstable andtask.createdentry inXRANGE events:tasks - +, then refresh → row persistsCarried-forward (non-blocking, deferred per plan)
0003/0002have no DB-sidegen_random_uuid()default onid(ORM-only)created_atordering (very low real-world flake probability)?id=query string;TODO(week-3-4)marker added to refactor to[id]segment when PATCH landslockin_testDB is unused). The devlockinDB needsalembic upgrade headbefore the manual smoke test.🤖 Generated with Claude Code