feat(07.1): session revocation on privilege change — CR-01/CR-02/CR-03
- revoke_all_refresh_tokens: add skip_token_hash optional param (exclude
current session while revoking others)
- change_password, enable_totp, disable_totp: call revoke with skip hash
derived from refresh cookie; return sessions_revoked in response and
write to audit log metadata_
- 3 new tests: test_{change_password,enable_totp,disable_totp}_revokes_other_sessions
— all PASSED; 373 total passing, 0 regressions
- Frontend toasts: SettingsAccountTab + TotpEnrollment show
"Other sessions have been terminated." when sessions_revoked > 0
- Companion fixes: rate_limiting get_client_ip refactor, deps/auth.py
request.state.current_user, locustfile refresh-token task removal
- Version bump: 0.1.0 → 0.1.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
8d060a5da4
commit
c38c6b1c01
@@ -4,7 +4,7 @@
|
||||
|
||||
DocuVault is a multi-user SaaS document management platform built on FastAPI (Python) + Vue 3. It handles document upload, text extraction (PDF/DOCX/image/text), AI-based topic classification, per-user isolated storage, folder organization, document sharing, and pluggable cloud storage backends (OneDrive, Google Drive, Nextcloud, WebDAV).
|
||||
|
||||
**Current state:** Brownfield — single-user app is functional. Active milestone: migrating to multi-user, adding auth, PostgreSQL + MinIO, and cloud storage.
|
||||
**Current state:** v0.1 alpha — not production-ready. Multi-user SaaS with full auth, PostgreSQL + MinIO, cloud storage backends (OneDrive, Google Drive, Nextcloud, WebDAV), folder/share/quota management, structured observability, and a refactored AI provider layer backed by a `system_settings` DB table. All 7 phases complete as of 2026-06-05. The app is functional for local/self-hosted use but has not been hardened or audited for public internet deployment.
|
||||
|
||||
## Stack
|
||||
|
||||
@@ -116,7 +116,9 @@ This project uses the GSD (Get Shit Done) planning workflow. Planning artifacts
|
||||
/gsd:progress — check status and advance workflow
|
||||
```
|
||||
|
||||
### Current phase: Not started — run `/gsd:discuss-phase 1` to begin
|
||||
### Current state: v0.1 alpha — all 7 foundation phases complete (2026-06-05)
|
||||
|
||||
All phases are marked complete in `.planning/ROADMAP.md`. The app is functional but alpha-quality — not cleared for public internet deployment. The next milestone has not been started.
|
||||
|
||||
## Development Setup
|
||||
|
||||
@@ -134,6 +136,83 @@ cd frontend && npm run dev
|
||||
cd backend && pytest -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Documentation Protocol (Non-Negotiable)
|
||||
|
||||
Every major development step — completing a plan, fixing a significant bug, or shipping a new feature — must end with documentation and a commit. "Major step" means any plan execution (`/gsd:execute-phase`) or standalone feature work that changes user-facing behaviour, the API surface, environment variables, or the architectural rules.
|
||||
|
||||
### After completing each plan or phase
|
||||
|
||||
1. **Update `CLAUDE.md`** (this file):
|
||||
- Update the "Current state" line in the GSD Workflow section to reflect what was just completed.
|
||||
- Update the shared module map if new shared helpers were introduced.
|
||||
- Update the code standards if new non-negotiable rules were established.
|
||||
|
||||
2. **Update `README.md`** if any of the following changed:
|
||||
- New user-facing features (add to the Features section).
|
||||
- New or changed environment variables (update the env var table).
|
||||
- New cloud storage backend, AI provider, or API endpoint group.
|
||||
- Changed service URLs, port numbers, or startup procedure.
|
||||
- Changed version number (`backend/main.py` and `frontend/package.json` are the sources of truth).
|
||||
|
||||
3. **Version bump rule**: increment the patch segment of the version in `backend/main.py` and `frontend/package.json` after every plan that ships user-facing changes (e.g. `0.1.0` → `0.1.1`). Increment the minor segment after completing a full phase (e.g. `0.1.0` → `0.2.0`). Do not jump to `1.0.0` until the project owner explicitly signs off on a production-ready release.
|
||||
|
||||
---
|
||||
|
||||
## Git Protocol (Non-Negotiable)
|
||||
|
||||
After every major development step, save the work to the repository with an atomic commit and push. Do not accumulate multiple plan's changes into one commit — each plan gets its own commit.
|
||||
|
||||
### Commit sequence
|
||||
|
||||
```bash
|
||||
# 1. Stage all changed files (be explicit — avoid -A when sensitive files may exist)
|
||||
git add backend/ frontend/ CLAUDE.md README.md RUNBOOK.md SECURITY.md docker-compose.yml
|
||||
|
||||
# 2. Commit with a descriptive message following this format:
|
||||
# <type>(<scope>): <short summary>
|
||||
# where type = feat | fix | docs | refactor | test | chore | security
|
||||
git commit -m "feat(phase-N): short description of what was shipped"
|
||||
|
||||
# 3. Push to the remote repository immediately
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Commit types
|
||||
|
||||
| Type | When to use |
|
||||
|------|-------------|
|
||||
| `feat` | New user-facing feature or endpoint |
|
||||
| `fix` | Bug fix (root-cause, ≤50 lines) |
|
||||
| `docs` | CLAUDE.md, README.md, RUNBOOK.md, or SECURITY.md only |
|
||||
| `refactor` | Internal restructuring with no behaviour change |
|
||||
| `test` | Adding or fixing tests only |
|
||||
| `chore` | Dependencies, CI, build config |
|
||||
| `security` | Security hardening, CVE fixes, auth changes |
|
||||
|
||||
### When to commit
|
||||
|
||||
| Event | Action |
|
||||
|-------|--------|
|
||||
| Plan execution complete (`/gsd:execute-phase`) | Commit + push immediately after tests pass |
|
||||
| Documentation update (CLAUDE.md / README.md) | Commit + push in the same operation as the code it documents |
|
||||
| Bug fix during a phase | Commit the fix separately before continuing the plan |
|
||||
| Security gate findings resolved | Commit + push before marking the phase complete |
|
||||
| Version bump | Part of the plan's commit — not a separate commit |
|
||||
|
||||
### Commit message examples
|
||||
|
||||
```bash
|
||||
git commit -m "feat(07-ai): GenericOpenAIProvider + Anthropic json_schema + Celery retry backoff"
|
||||
git commit -m "fix(quota): atomic decrement on document delete — regression test added"
|
||||
git commit -m "docs(readme): add cloud storage backend table + alpha status warning"
|
||||
git commit -m "security(headers): add X-Correlation-ID + Referrer-Policy to SecurityHeadersMiddleware"
|
||||
git commit -m "chore(deps): bump PyMuPDF to 1.26.7 — resolves read-only filesystem issue"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Testing Protocol (Non-Negotiable)
|
||||
|
||||
Every feature, function, and bug fix requires tests. No phase or plan may advance until all tests pass.
|
||||
|
||||
Reference in New Issue
Block a user