Member invites, gallery resync, content and operator docs

- Invite flow: admin issue/revoke on join requests, public single-use
  claim links (hash-only tokens, 7-day expiry, no state reveal), claim
  creates the Member account and marks the request accepted
- Gallery: admin status page plus resync endpoint; sync refreshes
  thumbnails whose content changed; tools/gallery contract and checker
- Docs: public content page, admin-only operator runbook, api.md
  invite/gallery sections, all routes in the live API docs, docs
  reachability gate test
- Screenshots cover the new pages; version 1.0.18
This commit is contained in:
2026-10-06 02:56:08 +02:00
parent e512556703
commit 9fb4d65787
36 changed files with 1147 additions and 19 deletions
+4 -1
View File
@@ -19,7 +19,7 @@ STAGING_ADMIN_PASSWORD ?= staging-admin-pass-1
PYTEST := $(PY) -m pytest
.PHONY: install dev prod test test-headed test-unit test-api test-e2e test-fast test-failed \
test-first-failure test-slowest test-cache-clean check-ui preflight coverage coverage-headed \
test-first-failure test-slowest test-cache-clean check-ui check-gallery preflight coverage coverage-headed \
coverage-html locust locust-headless screenshots screenshots-staging screenshots-production \
staging-refresh prune prune-dry-run tree tree-loc zip delete-pyc clean
@@ -73,6 +73,9 @@ test-cache-clean:
check-ui: $(STAMP)
$(PY) -m $(PKG).gates
check-gallery: $(STAMP)
$(PY) tools/gallery/check.py $(GALLERY_DIR)
preflight: $(STAMP)
$(PY) -c "import $(PKG).main; print('import ok')"
$(PY) -m pyflakes $(PKG) tests