Files
picpeak/docs/FEATURE_COVERAGE.md
T
Paul Nothaft 1e8b6f1b0f fix(usage): close the QA findings on opt-in product usage
A QA exploration of this branch against an isolated rig — own stub
collector, SQLite and PostgreSQL — turned up one dead end and a set of
signals and controls that did not hold up. This closes all of them.

Rotating JWT_SECRET, the documented response to a suspected compromise,
made the signing key unreadable. That was already named and documented,
but it left no way out: the delete packet can never be signed, so the
row stays deletion_pending forever, and enable() refuses because it is
not `disabled`. An operator who rotated precisely because the secret was
compromised cannot restore it, so the feature was bricked with no
control left. POST /usage/abandon is offered only in that state; it
drops the local identity and records the receipt as
`collector-unconfirmed` rather than claiming a deletion that did not
happen.

Every failed delivery was retried on the next admin request, and
/activity is open to any authenticated admin while the settings ticker
fires it every five minutes per open tab — 30 activity calls against a
rejecting collector produced 30 outbound requests. Migration 206 adds
attempts/next_attempt_at and the unattended sender honours the gate;
Retry and opt-out still send immediately, and the tab names the time of
the next automatic attempt.

Feedback, votes and portal sessions now share an installation-wide
budget of 30/hour. They are the only endpoints whose effect is outbound
traffic carrying operator-written free text, and the general limiter
skips authenticated requests by design. Reading status and withdrawing
stay unthrottled.

gallery_image_protection was true on a bare install with no galleries:
PicPeak ships default_protection_level='standard' and
enable_devtools_protection=true, so it reported fleet-wide 100% and
could never separate a decision from an untouched default. It now reads
only what deviates from the shipped defaults, and the devtools flag is
not read at all — being on by default, its only informative state is
off, which is the opposite of what the key claims.

Also:
- the export receipt counted every packet and called the total "usage
  reports"; reports and participant operations are now counted and named
  separately
- GET /usage/preview no longer persists the custom_css marker, so the
  transparency view stops changing what will be sent
- the feedback route requires every field the packet schema requires,
  so an API caller gets the missing field named instead of a bare
  INVALID_PACKET from inside signing
- the German strings for this feature use "Sie" throughout, matching the
  rest of the admin UI; the ignore hint says what ignoring will do
  rather than stating it as already true
- the consent dialog returns focus to the control that opened it
- the long buttons wrap instead of running off a 390px viewport
- a deletion receipt is labelled as belonging to an earlier
  participation while a new one is active

Regression tests cover each of these, including the delete packet's
reuse of the last accepted sequence, which was an unwritten assumption
about the collector rather than a defect.
2026-09-06 17:40:43 +02:00

52 KiB

Product-usage coverage: usage.v2

Reviewed PicPeak baseline: a5ff9264 (3.124.1-beta.0). Review scope: all 81 current backend route families, all 26 feature flags, admin routes/settings and runtime/public boundaries. This is capability coverage, not instrumentation of every UI field. Source of truth: usage-coverage.v2.json; the PicPeak inventory test fails on an added/removed route family, literal route declaration or feature flag.

Privacy decision

The purpose remains feature prioritization, fixes and maintenance from #1110. Only installation-wide booleans and the existing fixed gallery-layout enums. No user/customer/guest identity, business values, documents, photos, messages, IP/domain/URL, per-action time, event IDs, frequencies or user-level history. A stable installation fingerprint remains pseudonymous (not anonymous); rare combinations can be distinctive. Participant-only dataset access and opt-out deletion therefore remain mandatory.

Of 73 capabilities, 19 were already present in v1 and 54 are new in v2: 56 configured/used pairs and 17 configuration-only signals. Configuration-only signals omit used entirely; this is deliberately not a false “unused” value. Guest-facing capabilities are measured from technical configuration only, never from actual likes, comments, uploads, downloads, newsletter interactions or views.

configured = current technical availability/configuration. Built-in means available, not evidence of use. used = one monotonic yes/no bit since consent to the current schema (v1: since joining; v2: since joining or explicit upgrade). It means successful allowlisted admin capability operation, not necessarily completion of a queued job. It is not an event log. Repeated operations do not store anything more. The marker table contains only constant capability keys.

  • Existing participation and migration default to usage-consent.v1. A client update alone does not collect any of the 54 new local markers or report fields.
  • The settings page presents the full local EN/DE catalog before v2 opt-in or upgrade; an unchecked checkbox requires an explicit decision.
  • A signed usage.v2 / consent command updates the same installation, after all prior queued operations have finished. It preserves its raw history and lookup identity. No downgrade or automatic expansion occurs.
  • Only a matching collector receipt upgrades local consent and atomically resets local usage markers. Until confirmation, collection remains v1, even if a receipt is lost. A pending consent is durable/retryable; opt-out always wins.
  • No second report on the same UTC day. The first expanded report may be on the next day of admin activity. API integration use alone does not trigger a report.
  • Collector must be deployed first. Old collectors reject the new schema; the client shows delivery pending instead of assuming consent or sending v2.
  • v1 validation remains unchanged and old envelopes remain exportable exactly as first received. Raw history contains the original schema version on each packet.
  • Aggregate projections include their schema version. Absent v2 fields in v1 projections are unknown, never false. reported and used_reported supply each metric's real denominator. Configuration-only use has denominator zero and is displayed as “Not collected”, not 0% adoption.

Every reported capability

The static bilingual definitions below are also shipped as features.v2.json in both applications, exposed at /schema/features.v2.json, and displayed in both usage interfaces. “Since” is the schema in which a key was introduced; definitions here describe v2. Legacy v1 semantics remain documented separately in the protocol reference.

Key (EN / DE) Since Configured Used
crm — Client management / Kundenverwaltung usage.v1 The clients capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_quotes — Quotes / Angebote usage.v1 The quotes capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_invoices — Invoices / Rechnungen usage.v1 The bills capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_contracts — Contracts / Verträge usage.v1 The contracts capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_projects — Projects / Projekte usage.v1 The projects capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_calendar — Admin calendar / Admin-Kalender usage.v1 The calendar capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_hours — Hours logging / Zeiterfassung usage.v1 The hoursLogging capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
customer_portal — Customer portal / Kundenportal usage.v1 The customerPortal capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
accounting — Accounting / Buchhaltung usage.v1 The accounting capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
workflows — Workflows / Workflows usage.v1 The workflows capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
newsletters — Newsletters / Newsletter usage.v1 The newsletters capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
face_recognition — Face recognition / Gesichtserkennung usage.v1 The faces capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
custom_css — Custom CSS / Eigenes CSS usage.v1 Custom CSS is configured globally or applied through a gallery/theme/template; CSS text is not sent. Applied CSS observed after consent, without observing visitors.
oauth — Admin SSO / Admin-SSO usage.v1 Admin OIDC is enabled and issuer/client configuration is present; no provider or credential values. Successful admin SSO login; no account, identity-provider or session details.
smtp — SMTP delivery / SMTP-Versand usage.v1 An outgoing SMTP host is configured; no host, account, address or credentials. A successful explicitly initiated admin SMTP test/send; no recipients or messages.
whatsapp — WhatsApp integration / WhatsApp-Integration usage.v1 The WhatsApp capability is enabled and a usable configuration is present; no phone number, token or template. Successful admin integration test; no recipient, message or delivery history.
backup — Backups / Sicherungen usage.v1 A full or database backup schedule is enabled; no schedule, path, storage sizes or backup names. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
s3_storage — S3 storage / S3-Speicher usage.v1 S3 is configured for media or backups; no bucket, endpoint, credentials or object keys. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
share_mounts — External folders / Externe Ordner usage.v1 At least one gallery uses an external folder; only existence, no folder paths or gallery identifiers. An admin initiated an accepted external-folder import; no scanned paths, files or counts.
galleries — Gallery management / Galerieverwaltung usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
photo_management — Media management / Medienverwaltung usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
photo_exports — Admin media export / Admin-Medienexport usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
photo_processing — Media maintenance tools / Medien-Wartungswerkzeuge usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
archive_management — Gallery archives / Galeriearchive usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
gallery_sharing — Gallery sharing and QR / Galeriefreigabe und QR usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
short_links — Short links / Kurzlinks usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
gallery_categories — Photo categories / Fotokategorien usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
event_types — Event types and presets / Ereignistypen und Vorlagen usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
slideshow — Live slideshow / Live-Diashow usage.v2 The slideshow capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
transfers — PicTransfer / PicTransfer usage.v2 The transfers capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
video_uploads — Admin video uploads / Admin-Video-Uploads usage.v2 Video extensions are allowed in global upload settings; no uploaded-file metadata. At least one admin video file was successfully stored/accepted; no names, formats, lengths, sizes or processing/visitor history.
camera_raw_uploads — Admin camera RAW uploads / Admin-Kamera-RAW-Uploads usage.v2 Camera RAW (DNG) is allowed in global upload settings; no camera models or EXIF. At least one admin camera RAW upload was stored/accepted; only the capability bit, no filename or metadata.
messaging — Messaging tools / Nachrichtenwerkzeuge usage.v2 The messaging capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
incoming_mail — IMAP intake / IMAP-Empfang usage.v2 Incoming mail is enabled and an IMAP configuration is present; no mailbox, server, folders or credentials. A successful explicit admin connection test or non-skipped manual poll; no background intake, messages, attachments or counts.
reminder_emails — Automatic event reminders / Automatische Ereigniserinnerungen usage.v2 The reminderEmails capability switch is effectively enabled; only a boolean. Not collected. Configuration only.
email_templates — Email templates / E-Mail-Vorlagen usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
email_webhook — Email webhook transport / E-Mail-Webhook-Transport usage.v2 Both email webhook settings are present; no URL or secret. Successful explicitly initiated admin send/test through the webhook transport; no recipients, messages or automatic deliveries.
accounting_incoming_invoices — Incoming invoices / Eingangsrechnungen usage.v2 The incomingInvoices capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
accounting_expenses — Expenses / Ausgaben usage.v2 The expenses capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
accounting_tax_report — Tax reports / Steuerberichte usage.v2 The taxReport capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
accounting_ledger — Ledger and accounting export / Kontenplan und Buchhaltungsexport usage.v2 The accounting capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
crm_installments — Installment-plan tools / Ratenplan-Werkzeuge usage.v2 Quotes or invoices are enabled; no actual payment plans, amounts or statuses are inspected. An admin saved an installment plan; no dates, amounts, currencies, payment status or document IDs.
document_templates — Document presets and blocks / Dokumentvorlagen und Bausteine usage.v2 Quotes or contracts are enabled, making document presets/blocks available; no template content. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
cms — CMS pages / CMS-Seiten usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
public_site — Public landing page / Öffentliche Startseite usage.v2 The public landing-page setting is enabled; no page HTML, texts, domains or visitors. Not collected. Configuration only.
branding — Branding settings / Branding-Einstellungen usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
seo_customization — SEO settings / SEO-Einstellungen usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
admin_management — Admin and role management / Admin- und Rollenverwaltung usage.v2 The userManagement capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
api_integration — HTTP API integration / HTTP-API-Integration usage.v2 An unrevoked, unexpired API credential exists; no tokens, names, scopes or owner data. Successful authenticated HTTP API capability call; only this bit, never URLs, request values, token/owner IDs or call counts. Does not trigger a report.
webhooks — Outbound webhooks / Ausgehende Webhooks usage.v2 At least one active webhook is configured; no destinations, subscriptions, secrets or delivery logs. Successful explicit admin webhook test/replay; no automatic or visitor-triggered deliveries.
restore — Restore / Wiederherstellung usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
portable_backup — Portable PicPeak export/import / Portabler PicPeak-Export/Import usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
database_backup — Database backups / Datenbanksicherungen usage.v2 Scheduled database backups are enabled; no schedules, file names or database contents. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
s3_photo_storage — S3 media storage / S3-Medienspeicher usage.v2 S3 is the configured media backend and required credentials are present; no values are sent. Successful admin media storage/accepted upload to S3; no buckets, objects or sizes.
s3_backups — S3 backup destination / S3-Sicherungsziel usage.v2 The configured backup destination is S3 with a bucket present; no bucket or credentials. An admin started a backup to the configured S3 destination or a successful S3 test upload; local exports never imply S3 use.
analytics_dashboard — Existing analytics module / Bestehendes Analytics-Modul usage.v2 The analytics capability switch is effectively enabled; only a boolean. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
feedback_moderation — Feedback moderation / Feedback-Moderation usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
guest_management — Guest administration tools / Gastverwaltungswerkzeuge usage.v2 Built-in capability is available; this is not evidence of use. A documented successful authenticated admin capability operation was observed since consent to this schema. No actor, operation history, parameters or counts.
gallery_feedback_likes — Gallery likes enabled / Galerie-Likes aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_feedback_ratings — Gallery star ratings enabled / Galerie-Sternebewertungen aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_feedback_comments — Gallery comments enabled / Galerie-Kommentare aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_feedback_favorites — Gallery favorites enabled / Galerie-Favoriten aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_feedback_reactions — Gallery reactions enabled / Galerie-Reaktionen aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_feedback_color_labels — Gallery color labels enabled / Galerie-Farblabels aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_guest_accounts — Guest identities enabled / Gastidentitäten aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_guest_uploads — Guest uploads enabled / Gast-Uploads aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_downloads — Gallery downloads allowed / Galerie-Downloads erlaubt usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
download_resolution_picker — Download resolution picker enabled / Download-Auflösungswahl aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_client_access — Client access enabled / Client-Zugang aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_watermarks — Watermarks enabled / Wasserzeichen aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_image_protection — Image protection enabled / Bildschutz aktiviert usage.v2 Enabled beyond the shipped defaults — a stronger protection level, canvas rendering, or right-click disabled — globally or on at least one gallery; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_reveal — Gallery reveal enabled / Galerie-Enthüllung aktiviert usage.v2 Enabled in applicable gallery/global configuration; only existence across the installation, never gallery IDs or counts. Not collected. Configuration only.
gallery_expiration — Gallery expiration configured / Galerieablauf konfiguriert usage.v2 At least one gallery has an expiry configured; no dates, gallery IDs or counts. Not collected. Configuration only.

Gallery layouts (unchanged): grid, masonry, carousel, timeline, mosaic, gallery-premium, gallery-story, other. Only set membership, not how many galleries use a layout. Unknown names are normalized to other.

Exact observation sources

PicPeak backend/src/usage/capabilityRules.js is the fixed method/path allowlist; request paths, query/body/response values never leave the middleware. Only the resulting constant keys reach markUsed, with active schema consent, authenticated admin and 2xx response checks. Status/health polls are excluded.

Additional trusted success evidence in capabilityEvidence.js: accepted admin file storage (video / DNG / S3 booleans only, not chunk initialization), successful manual SMTP or email-webhook send/test, non-skipped manual IMAP poll/connection test, successful manual WhatsApp test, and successful S3 backup roundtrip test. SMTP vs webhook uses the actual selected transport (including per-account SMTP overrides), not just environment presence. Webhook test/replay means accepted enqueue, never remote delivery tracking.

UsageService.snapshot and expandedSnapshot.js inspect allowlisted settings, effective flags and technical configuration existence. They do not query customer/guest profiles, financial records, photos/EXIF, message/feedback bodies, audit/security logs or delivery histories. Inherited technical defaults count as configuration; disabled feature dependencies cannot be inferred as active. Optional-module tables/columns are guarded. CSS/layout inspection maps locally to presence/enums; no free-form CSS/theme content is sent.

OAuth is marked only by the successful admin OIDC callback, without claims or provider metadata. S3 backup use is inferred only for backup operations writing to the configured destination; a local DB/portable export is not S3 use. Background jobs and public/customer/visitor handlers never record product use.

Complete route-family decision matrix

Paths below are relative to PicPeak backend/src/routes/. “Partial” means only the disclosed allowlist/evidence, not every endpoint in that file. All literal route declarations are captured in the companion inventory, with excluded methods remaining unobserved.

Source Decision / signals Reason / limits
acceptInvite.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
admin.js composition Router composition / helpers; decisions are recorded for each mounted family.
adminApiTokens.js configuration: api_integration Only existence of a valid credential; no marker from token listing/creation, no scope, owner, token, expiry date or last-used time.
adminArchives.js partial: galleries, archive_management, photo_exports Admin archive/delete/restore/download initiation only; filenames, histories, storage sizes and polling excluded.
adminAuth.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
adminBackup.js partial: backup, portable_backup, restore, s3_storage, s3_backups Admin backup initiation, portable export/import and successful S3 roundtrip test. Local export never implies S3; names, schedules, sizes, contents and history excluded.
adminBusinessProfile.js excluded Business identity/bank/tax-address configuration and VAT-code helper surface are not separate usage signals. Billing/accounting capabilities are covered without profiling the business.
adminCalendar.js partial: crm, crm_calendar Authenticated admin calendar retrieval is capability use; no calendar entries, dates, recurrence, availability or bookings.
adminCategories.js partial: gallery_categories Admin category CRUD; no names, descriptions, colors or ordering values.
adminCMS.js partial: cms Admin CMS page CRUD only. Public page traffic, slug, HTML, text, links and media excluded.
adminContracts.js partial: crm, crm_contracts, document_templates Admin contract/block operations only; no legal text, signatures, signing parties or customer signing events.
adminCssTemplates.js configuration: custom_css Only existence of enabled applied CSS and locally observed application, not editing/viewing templates or any CSS text.
adminCustomers.js partial: crm, crm_hours, customer_portal Successful admin CRM/hour-entry/invitation operations only. No customer/account names, IDs, rates, billed hours, payment state or portal behavior.
adminDashboard.js partial: analytics_dashboard Admin analytics capability endpoint only; no stats, activities, health/CRM polls, underlying visitor data or dashboard values.
adminDatabaseBackup.js partial: backup, database_backup Admin database-backup initiation plus schedule-enabled boolean, no file data/history.
adminDeals.js partial: crm, crm_installments Admin installment-plan changes only. No actual plans, invoice links, amounts, paid states or deal reporting.
adminDev.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
adminEmail.js partial: messaging, incoming_mail, smtp, email_templates, email_webhook, reminder_emails Admin message operation/template edit, actual successful manual send/test transport and non-skipped manual IMAP poll/test. Reminder flag configuration only. No automated sends/polls, received-message or recipient data, queue/log reads, mailbox addresses or templates.
adminEventRename.js partial: galleries Successful rename only, not validate-rename. No former/new names or identifiers.
adminEvents/archiveBulk.js partial: galleries, archive_management, photo_exports Admin archive/delete/restore/download initiation only; filenames, histories, storage sizes and polling excluded.
adminEvents/crud.js partial: galleries, gallery_guest_uploads, gallery_downloads, gallery_client_access, gallery_watermarks, gallery_reveal, gallery_expiration, gallery_sharing, custom_css Admin creation/edit/publish etc. set galleries; sharing has its own fixed key. Guest/download/protection/reveal/expiry are configuration only; themes contribute controlled layouts and CSS presence. No gallery metadata or guest action history.
adminEvents/downloadResolutions.js configuration: download_resolution_picker Only whether a picker is configured globally or in a gallery. No chosen resolution, download event or counts.
adminEvents/faces.js partial: face_recognition Effective flag plus successful admin faces/people operation. No health polling, embeddings, names, groups, detections or visitor searches.
adminEvents/helpers.js composition Router composition / helpers; decisions are recorded for each mounted family.
adminEvents/index.js composition Router composition / helpers; decisions are recorded for each mounted family.
adminEvents/logo.js partial: branding Successful admin logo operation only; image/filename/content excluded.
adminEvents/qr.js partial: gallery_sharing Admin QR generation only; no scans, tokens or URLs.
adminEvents/resets.js partial: galleries, gallery_sharing Admin gallery reset/sharing capability only; no password, recipient, token or reset statistics.
adminEvents/slideshow.js partial: slideshow Admin generate/disable/configure only, never kiosk viewers or slide advances.
adminEventTypes.js partial: event_types Admin event-type CRUD; preset contents/names excluded.
adminExpenses.js partial: accounting, accounting_expenses, accounting_incoming_invoices Admin expense/inbound-invoice operations; no financial values, suppliers, mileage/location, dates, receipt files or OCR text.
adminExternalMedia.js partial: share_mounts Only admin import operation; status/list/browse are not use. Snapshot checks external-path presence, never reports a path.
adminFeatureFlags.js configuration: crm, crm_quotes, crm_invoices, crm_contracts, crm_projects, crm_calendar, crm_hours, customer_portal, accounting, workflows, newsletters, face_recognition, slideshow, transfers, messaging, reminder_emails, accounting_incoming_invoices, accounting_expenses, accounting_tax_report, accounting_ledger, admin_management, analytics_dashboard Only allowlisted effective capability booleans. No marker from reading or saving feature flags. Disabled roadmap/developer flags excluded.
adminFeedback.js partial: feedback_moderation, gallery_feedback_likes, gallery_feedback_ratings, gallery_feedback_comments, gallery_feedback_favorites, gallery_feedback_reactions, gallery_feedback_color_labels, gallery_guest_accounts Admin moderation/word-filter operations only. Visitor feedback is not observed. Master-enabled per-gallery feedback-option booleans only; no contents, ratings, likes, colors, identities or word lists.
adminGuests.js partial: guest_management Admin guest management/export initiation only. No guest names, invitations, tokens, contact data, guest counts or visitor interactions.
adminImageSecurity.js configuration: gallery_image_protection Only gallery/global technical protection configuration existence. No security events, blocked IPs, request counts, threat scores or admin monitoring access.
adminInvoices.js partial: crm, crm_invoices Admin invoice operations only; no amounts, VAT/customer/payment values or payment-check responses.
adminLedger.js partial: accounting, accounting_ledger Admin ledger-account/VAT/mapping edits and ledger export initiation only; no account/currency/VAT identifiers or exported records.
adminNewsletters.js partial: newsletters Admin campaign changes/test/queue/cancel only. Recipient resolution, previews, subscriptions/unsubscribes, delivery/open/click data and automatic sending excluded.
adminNotifications.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
adminPhotoDimensions.js partial: photo_processing Admin repair/regenerate/configuration initiation, never status polling or processing totals.
adminPhotoExport.js partial: photo_exports Admin export initiation only; export filters, selected files, sizes and contents excluded.
adminPhotos.js partial: photo_management, photo_exports, photo_processing, video_uploads, camera_raw_uploads, s3_storage, s3_photo_storage Successful admin edits/exports and accepted upload evidence only. Chunk init/status, failed uploads and public downloads excluded. Only video/RAW/S3 booleans survive, never file metadata/EXIF/content.
adminProjects.js partial: crm, crm_projects Admin project operations only; project/person names, business performance, metadata and totals excluded.
adminQuotes.js partial: crm, crm_quotes, document_templates Admin quote/preset operations only; no quote content, prices, customer acceptance or signatures.
adminRestore.js partial: restore Admin restore initiation only, never file selection, content, progress, errors or timing.
adminRoles.js partial: admin_management Admin account/role management capability; no names, permissions, role labels, password reset operations or active-user counts. Auth/self-profile endpoints excluded.
adminSettings.js partial: custom_css, oauth, smtp, backup, s3_storage, video_uploads, camera_raw_uploads, public_site, branding, seo_customization, slideshow, download_resolution_picker, gallery_watermarks, database_backup Only specified configuration presence/booleans and explicit branding/SEO/slideshow operations. Generic settings reads, security policies, passwords, storage data, SMTP/OIDC credentials, custom HTML/CSS/SEO values excluded.
adminShortUrls.js partial: gallery_sharing, short_links Admin short-link creation/deletion only; link/token/click metadata excluded.
adminSystem.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
adminSystemHealth.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
adminTaxReport.js partial: accounting, accounting_tax_report Admin tax report generation/export only; no totals, dates, tax regimes, geography or currency.
adminThumbnails.js partial: photo_processing Admin repair/regenerate/configuration initiation, never status polling or processing totals.
adminTransfers.js partial: transfers Admin transfer CRUD/files/link management/download only. Public recipients, received-file data, upload and download statistics excluded.
adminUsage.js excluded Consent, inspection, export, feedback, voting and deletion are explicit protocol operations; not product-use signals. Activity only triggers a due fixed report.
adminUsers.js partial: admin_management Admin account/role management capability; no names, permissions, role labels, password reset operations or active-user counts. Auth/self-profile endpoints excluded.
adminVatCodes.js excluded Business identity/bank/tax-address configuration and VAT-code helper surface are not separate usage signals. Billing/accounting capabilities are covered without profiling the business.
adminWebhooks.js partial: webhooks Active configuration existence plus successful admin manual test/replay enqueue. Actual network delivery/results/subscriptions/destinations excluded.
adminWhatsapp.js partial: whatsapp Effective configured sender and successful manual test only. No automated deliveries, phone numbers, templates or delivery statuses.
adminWorkflows.js partial: workflows Admin workflow authoring/approval/test initiation only. Runtime triggers, payloads, execution frequency/results and public approvals excluded.
analyticsTrackerProxy.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
auth.js partial: oauth Only successful admin OIDC callback sets oauth. Password/gallery authentication, MFA, account claims and provider details excluded.
customer.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
customerAuth.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
gallery.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
galleryFeedback.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
galleryGuests.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
protectedImages.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicCMS.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicContracts.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicFonts.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicNewsletter.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicPaymentCheck.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicQuotes.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicSettings.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicTransfer.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicTransferUpload.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
publicWorkflowApprovals.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
secureImages.js excluded Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.
setup.js excluded Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.
v1/events.js partial: api_integration Single bit after successful admin-owned scoped API authentication. No request/response values; API requests do not trigger reports.

Every admin settings tab

These 29 current SettingsPage tabs are also inventoried and tested against the frontend TabType. Page navigation itself is not tracked.

Tab Capability / exclusion
usage Explicit consent/report inspection/feedback is not itself adoption telemetry.
features Only the allowlisted effective feature booleans; no settings visit/save marker.
general video_uploads, camera_raw_uploads, public_site, custom_css. General technical upload/public-site/CSS configuration only; no title, URLs, limits, times, HTML or identity.
events galleries, gallery_guest_uploads, gallery_downloads, gallery_client_access, gallery_watermarks, gallery_image_protection, gallery_reveal, gallery_expiration. Gallery operations and disclosed configuration only; no event/customer values or visitor use.
eventTypes event_types. General admin event-type capability; no names or preset contents.
branding branding, gallery_watermarks. Branding operation and watermark configuration only; no branding text, logos or colors.
categories gallery_categories. Category management capability only; no names/order/category membership.
thumbnails photo_processing. Admin processing settings/regeneration initiation only; no image data or progress.
downloads download_resolution_picker. Configuration boolean only; no actual download/selection behavior or resolution values.
styling custom_css. Presence/application only plus controlled gallery-layout enums, never CSS/theme values.
cms cms, public_site. Admin page editing capability/public-site enabled only; no HTML, slugs or traffic.
email smtp, incoming_mail, messaging, email_templates, email_webhook. Configuration and documented manual admin capability operations only; messages, recipients, automatic activity and mailbox values excluded.
moderation feedback_moderation. Admin moderation/word-filter capability, never feedback content or visitor behavior.
security Excluded password/MFA/session/rate-limit/security profiles and operations.
sso oauth. Enabled/config-present and successful admin callback only; no claims/provider details.
imageSecurity gallery_image_protection. Configuration presence only; no blocked-IP/security analytics or monitoring history.
seo seo_customization. Admin SEO configuration operation only; no meta tags, URLs, robots or verification tokens.
apiTokens api_integration. Valid credential presence and one successful scoped API capability bit; no tokens/scopes/owner metadata.
webhooks webhooks. Active configuration and manual test/replay enqueue only; no delivery data.
status Excluded operational health, diagnostics, resource data, update and storage polling.
analytics analytics_dashboard. Analytics capability and admin aggregate-view use only; no embedded analytics results/tracker IDs or visitors.
backup backup, database_backup, portable_backup, restore, s3_backups. Schedule presence/manual capability initiation only, no histories, sizes, paths or files.
businessProfile Excluded business identity, bank accounts and addresses.
crm crm, crm_quotes, crm_invoices, crm_projects, crm_hours, customer_portal, crm_installments. Only coarse module capabilities; no policies/amounts/customer/payment values.
contracts crm_contracts, document_templates. Admin contract/template capability only; no legal text or signatures.
reminderTemplates reminder_emails, email_templates. Reminder flag configuration and admin template editing only; no automatic reminder sends/recipients/content.
accounting accounting, accounting_incoming_invoices, accounting_expenses, accounting_tax_report, accounting_ledger. Only module capabilities, no tax codes, rates, balances or business identity.
whatsapp whatsapp. Configured integration plus manual test only; no phone numbers, tokens or automatic delivery.
slideshow slideshow. Admin setup capability only; no kiosk viewers, slide progress or photos.

Every feature flag (configuration decisions)

Flag Signal / exclusion
accounting accounting, accounting_ledger. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
analytics analytics_dashboard. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
bills crm_invoices. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
calendar crm_calendar. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
calendarBooking Excluded: disabled roadmap placeholder, not an implemented booking capability.
clients crm. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
contracts crm_contracts. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
crmDevelopment Excluded: internal development/test helpers, not product adoption.
customerPortal customer_portal. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
expenses accounting_expenses. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
faces face_recognition. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
galleries galleries. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
hoursLogging crm_hours. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
incomingInvoices accounting_incoming_invoices. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
incomingMail incoming_mail. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
messaging messaging. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
newsletters newsletters. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
projects crm_projects. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
quotes crm_quotes. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
reminderEmails reminder_emails. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
slideshow slideshow. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
taxReport accounting_tax_report. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
transfers transfers. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
userManagement admin_management. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
whatsapp whatsapp. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.
workflows workflows. Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean.

Deliberately excluded runtime and future features

  • Gallery/customer/public events and optional website analytics
  • Automated newsletter, reminder, WhatsApp, webhook and IMAP jobs
  • Security/audit logs, biometric embeddings and recognition results
  • Operational health, migration, update and polling metrics
  • Business/customer/user identities, geography, amounts and document contents
  • Disabled calendarBooking and internal crmDevelopment; hosted future product #1111
  • Image fragmentation: removed from current PicPeak, not a live capability

The Messages and Reminder Emails implementations were reviewed as real features, despite stale placeholder comments. Reminder Emails remains configuration-only. Calendar booking is still a disabled placeholder and is not presented as a working capability. This review does not approve any public visitor tracking, even if another optional analytics integration is configured.

All exclusion decisions still permit the existing product functions themselves. They restrict this usage program; they do not disable galleries, email or jobs. Adding capabilities requires a documented scope review, updated inventory, closed schema, both UI disclosures/docs and tests; a wider collection scope requires renewed explicit consent, not a silent catalog expansion.

Verification obligations

Required checks include unchanged v1 validation, closed v2 fields, all 73 configuration signals and privacy canaries, all route/flag decisions, no configuration-only use, disabled/pending/upgrade/opt-out boundaries, mixed-version denominators, byte-identical protocol/catalogs, EN/DE UI catalog consistency, raw export and deletion, SQLite/PostgreSQL and paired local Docker/browser tests. Test outcomes are recorded separately; this document is not a claim of legal certification or proof that modified self-hosted clients report truthfully.