{ "settings_tabs": { "usage": { "signals": [], "reason": "Explicit consent/report inspection/feedback is not itself adoption telemetry." }, "features": { "signals": [], "reason": "Only the allowlisted effective feature booleans; no settings visit/save marker." }, "general": { "signals": [ "video_uploads", "camera_raw_uploads", "public_site", "custom_css", "download_original_filenames" ], "reason": "General technical upload/public-site/CSS configuration only; no title, URLs, limits, times, HTML or identity. v3 also reports two installation inventory totals separately, with explicit consent." }, "events": { "signals": [ "galleries", "gallery_guest_uploads", "gallery_downloads", "gallery_client_access", "gallery_watermarks", "gallery_image_protection", "gallery_reveal", "gallery_expiration", "gallery_capture_date_sort" ], "reason": "Gallery operations and disclosed configuration only; no event/customer values or visitor use. v3 also reports two installation inventory totals separately, with explicit consent." }, "eventTypes": { "signals": [ "event_types" ], "reason": "General admin event-type capability; no names or preset contents." }, "branding": { "signals": [ "branding", "gallery_watermarks" ], "reason": "Branding operation and watermark configuration only; no branding text, logos or colors." }, "categories": { "signals": [ "gallery_categories", "gallery_folders" ], "reason": "Category management capability only; no names/order/category membership." }, "thumbnails": { "signals": [ "photo_processing" ], "reason": "Admin processing settings/regeneration initiation only; no image data or progress." }, "downloads": { "signals": [ "download_resolution_picker" ], "reason": "Configuration boolean only; no actual download/selection behavior or resolution values." }, "styling": { "signals": [ "custom_css" ], "reason": "Presence/application only plus controlled gallery-layout enums, never CSS/theme values." }, "cms": { "signals": [ "cms", "public_site" ], "reason": "Admin page editing capability/public-site enabled only; no HTML, slugs or traffic." }, "email": { "signals": [ "smtp", "incoming_mail", "messaging", "email_templates", "email_webhook" ], "reason": "Configuration and documented manual admin capability operations only; messages, recipients, automatic activity and mailbox values excluded." }, "moderation": { "signals": [ "feedback_moderation" ], "reason": "Admin moderation/word-filter capability, never feedback content or visitor behavior." }, "security": { "signals": [], "reason": "Excluded password/MFA/session/rate-limit/security profiles and operations." }, "sso": { "signals": [ "oauth" ], "reason": "Enabled/config-present and successful admin callback only; no claims/provider details." }, "imageSecurity": { "signals": [ "gallery_image_protection" ], "reason": "Configuration presence only; no blocked-IP/security analytics or monitoring history." }, "seo": { "signals": [ "seo_customization" ], "reason": "Admin SEO configuration operation only; no meta tags, URLs, robots or verification tokens." }, "apiTokens": { "signals": [ "api_integration" ], "reason": "Valid credential presence and one successful scoped API capability bit; no tokens/scopes/owner metadata." }, "webhooks": { "signals": [ "webhooks" ], "reason": "Active configuration and manual test/replay enqueue only; no delivery data." }, "status": { "signals": [], "reason": "Excluded operational health, diagnostics, resource data, update and storage polling." }, "analytics": { "signals": [ "analytics_dashboard" ], "reason": "Analytics capability and admin aggregate-view use only; no embedded analytics results/tracker IDs or visitors." }, "backup": { "signals": [ "backup", "database_backup", "portable_backup", "restore", "s3_backups" ], "reason": "Schedule presence/manual capability initiation only, no histories, sizes, paths or files." }, "businessProfile": { "signals": [], "reason": "Excluded business identity, bank accounts and addresses." }, "crm": { "signals": [ "crm", "crm_quotes", "crm_invoices", "crm_projects", "crm_hours", "customer_portal", "crm_installments", "crm_invoice_import", "crm_combined_billing", "crm_monthly_billing_manual", "crm_document_conversion" ], "reason": "Only coarse module capabilities; no policies/amounts/customer/payment values." }, "contracts": { "signals": [ "crm_contracts", "document_templates" ], "reason": "Admin contract/template capability only; no legal text or signatures." }, "reminderTemplates": { "signals": [ "reminder_emails", "email_templates" ], "reason": "Reminder flag configuration and admin template editing only; no automatic reminder sends/recipients/content." }, "accounting": { "signals": [ "accounting", "accounting_incoming_invoices", "accounting_expenses", "accounting_tax_report", "accounting_ledger" ], "reason": "Only module capabilities, no tax codes, rates, balances or business identity." }, "whatsapp": { "signals": [ "whatsapp" ], "reason": "Configured integration plus manual test only; no phone numbers, tokens or automatic delivery." }, "slideshow": { "signals": [ "slideshow" ], "reason": "Admin setup capability only; no kiosk viewers, slide progress or photos." } }, "reviewed_picpeak_base": "a5ff9264 (3.124.1-beta.0)", "schema_version": "usage.v3", "purpose": "Product capability prioritization and installation gallery/photo totals; no contents, identities, per-entity breakdowns, action frequencies or visitor observations.", "route_families": { "acceptInvite.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "POST /:token" ] }, "admin.js": { "decision": "composition", "signals": [], "reason": "Router composition / helpers; decisions are recorded for each mounted family.", "route_signatures": [] }, "adminApiTokens.js": { "decision": "configuration", "signals": [ "api_integration" ], "reason": "Only existence of a valid credential; no marker from token listing/creation, no scope, owner, token, expiry date or last-used time.", "route_signatures": [ "GET /", "POST /", "DELETE /:id" ] }, "adminArchives.js": { "decision": "partial", "signals": [ "galleries", "archive_management", "photo_exports" ], "reason": "Admin archive/delete/restore/download initiation only; filenames, histories, storage sizes and polling excluded.", "route_signatures": [ "GET /", "GET /:id", "POST /:id/restore", "GET /:id/download", "DELETE /:id" ] }, "adminAuth.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /profile", "PUT /profile", "POST /change-password", "POST /logout", "GET /mfa/status", "POST /mfa/setup", "POST /mfa/enable", "POST /mfa/disable", "POST /mfa/recovery-codes" ] }, "adminBackup.js": { "decision": "partial", "signals": [ "backup", "portable_backup", "restore", "s3_storage", "s3_backups" ], "reason": "Admin backup initiation, portable export/import and successful S3 roundtrip test. Local export never implies S3; names, schedules, sizes, contents and history excluded.", "route_signatures": [ "GET /config", "PUT /config", "GET /status", "POST /run", "GET /picpeak/export", "POST /picpeak/import", "GET /runs/:id", "GET /files", "DELETE /cleanup", "POST /test-connection", "GET /manifest/:backupRunId", "POST /manifest/validate", "GET /manifest/:backupRunId/download", "GET /manifests/:backupId", "GET /manifests/:backupId/download", "POST /manifests/validate", "GET /s3/buckets", "GET /s3/files", "DELETE /s3/cleanup", "POST /s3/test-upload", "GET /download/:backupId", "GET /checksums", "POST /estimate" ] }, "adminBusinessProfile.js": { "decision": "excluded", "signals": [], "reason": "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.", "route_signatures": [ "GET /", "GET /logo-diagnostic", "POST /logo", "DELETE /logo", "PUT /", "GET /bank-accounts", "POST /bank-accounts", "PUT /bank-accounts/:id", "DELETE /bank-accounts/:id" ] }, "adminCalendar.js": { "decision": "partial", "signals": [ "crm", "crm_calendar" ], "reason": "Authenticated admin calendar retrieval is capability use; no calendar entries, dates, recurrence, availability or bookings.", "route_signatures": [ "GET /items" ] }, "adminCategories.js": { "decision": "partial", "signals": [ "gallery_categories", "gallery_folders" ], "reason": "Admin category CRUD; no names, descriptions, colors or ordering values. v3 adds only: gallery_folders. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /global", "GET /event/:eventId", "POST /", "PUT /:id", "PUT /:id/hero", "DELETE /:id", "POST /reorder", "DELETE /reorder/:eventId", "POST /reorder-global" ] }, "adminCMS.js": { "decision": "partial", "signals": [ "cms" ], "reason": "Admin CMS page CRUD only. Public page traffic, slug, HTML, text, links and media excluded.", "route_signatures": [ "GET /pages", "GET /pages/:slug", "PUT /pages/:slug", "POST /pages/:slug/logo", "DELETE /pages/:slug/logo" ] }, "adminContracts.js": { "decision": "partial", "signals": [ "crm", "crm_contracts", "document_templates", "crm_document_conversion" ], "reason": "Admin contract/block operations only; no legal text, signatures, signing parties or customer signing events. v3 adds only: crm_document_conversion. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /blocks", "POST /blocks", "PUT /blocks/:id", "DELETE /blocks/:id", "GET /", "POST /", "GET /:id", "PUT /:id", "POST /:id/send", "POST /:id/cancel", "POST /:id/convert-to-event", "POST /:id/convert-to-invoice", "POST /:id/resend-signed", "POST /:id/restamp-signatures", "POST /:id/countersign", "POST /:id/upload-signed-pdf", "GET /:id/pdf", "GET /:id/signed-pdf", "GET /:id/audit-trail", "GET /:id/verify-integrity", "GET /:id/preview" ] }, "adminCssTemplates.js": { "decision": "configuration", "signals": [ "custom_css" ], "reason": "Only existence of enabled applied CSS and locally observed application, not editing/viewing templates or any CSS text.", "route_signatures": [ "GET /", "GET /enabled", "GET /:slotNumber", "PUT /:slotNumber", "POST /:slotNumber/reset" ] }, "adminCustomers.js": { "decision": "partial", "signals": [ "crm", "crm_hours", "customer_portal", "crm_combined_billing", "crm_monthly_billing_manual" ], "reason": "Successful admin CRM/hour-entry/invitation operations only. No customer/account names, IDs, rates, billed hours, payment state or portal behavior. v3 adds only: crm_combined_billing, crm_monthly_billing_manual. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /", "GET /search", "GET /invitations", "POST /invite", "DELETE /invitations/:id", "POST /", "POST /:id/send-invite", "GET /:id", "PUT /:id", "POST /:id/deactivate", "POST /:id/reactivate", "POST /:id/erase", "POST /:id/password-reset", "PUT /:id/events", "GET /hour-entries/unbilled-summary", "GET /:id/hour-entries", "POST /:id/hour-entries", "PUT /:id/hour-entries/:entryId", "DELETE /:id/hour-entries/:entryId", "POST /:id/hour-entries/bill", "POST /:id/bill-combined", "POST /:id/trigger-monthly-bill", "GET /:id/monthly-draft" ] }, "adminDashboard.js": { "decision": "partial", "signals": [ "analytics_dashboard" ], "reason": "Admin analytics capability endpoint only; no stats, activities, health/CRM polls, underlying visitor data or dashboard values.", "route_signatures": [ "GET /stats", "GET /activity", "GET /health", "GET /analytics", "GET /crm-stats" ] }, "adminDatabaseBackup.js": { "decision": "partial", "signals": [ "backup", "database_backup" ], "reason": "Admin database-backup initiation plus schedule-enabled boolean, no file data/history.", "route_signatures": [ "GET /status", "PUT /config", "POST /backup", "GET /progress", "GET /history", "DELETE /cleanup", "POST /test", "GET /checksums" ] }, "adminDeals.js": { "decision": "partial", "signals": [ "crm", "crm_installments" ], "reason": "Admin installment-plan changes only. No actual plans, invoice links, amounts, paid states or deal reporting.", "route_signatures": [ "GET /:uuid/documents", "PUT /:uuid/installment-plan" ] }, "adminDev.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /email-templates", "POST /send-test-email" ] }, "adminEmail.js": { "decision": "partial", "signals": [ "messaging", "incoming_mail", "smtp", "email_templates", "email_webhook", "reminder_emails" ], "reason": "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.", "route_signatures": [ "GET /config", "POST /config", "GET /incoming-config", "POST /incoming-config", "POST /incoming-config/folders", "POST /incoming-config/test", "POST /incoming-config/roundtrip", "POST /incoming-config/poll", "GET /received", "GET /received/:id", "POST /item/:kind/:id/state", "DELETE /item/:kind/:id", "GET /accounts", "GET /identities", "POST /accounts", "POST /accounts/test", "POST /test", "POST /flush-queue", "GET /queue", "GET /queue/:id", "POST /send", "GET /templates", "GET /templates/:key", "PUT /templates/:key", "POST /templates", "POST /templates/:key/preview" ] }, "adminEventRename.js": { "decision": "partial", "signals": [ "galleries" ], "reason": "Successful rename only, not validate-rename. No former/new names or identifiers.", "route_signatures": [ "POST /:eventId/rename", "POST /:eventId/validate-rename" ] }, "adminEvents/archiveBulk.js": { "decision": "partial", "signals": [ "galleries", "archive_management", "photo_exports" ], "reason": "Admin archive/delete/restore/download initiation only; filenames, histories, storage sizes and polling excluded.", "route_signatures": [ "POST /:id/archive", "POST /bulk-archive", "POST /bulk-delete" ] }, "adminEvents/crud.js": { "decision": "partial", "signals": [ "galleries", "gallery_guest_uploads", "gallery_downloads", "gallery_client_access", "gallery_watermarks", "gallery_reveal", "gallery_expiration", "gallery_sharing", "custom_css", "gallery_capture_date_sort" ], "reason": "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. v3 adds only: gallery_capture_date_sort. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "POST /", "GET /", "GET /:id", "POST /:id/send-gallery-email", "POST /:id/publish", "POST /:id/duplicate", "PUT /:id", "POST /:id/reveal", "DELETE /:id", "POST /:id/toggle-status", "POST /:id/extend" ] }, "adminEvents/downloadResolutions.js": { "decision": "configuration", "signals": [ "download_resolution_picker" ], "reason": "Only whether a picker is configured globally or in a gallery. No chosen resolution, download event or counts.", "route_signatures": [ "GET /:id/download-resolutions", "PATCH /:id/download-resolutions" ] }, "adminEvents/faces.js": { "decision": "partial", "signals": [ "face_recognition" ], "reason": "Effective flag plus successful admin faces/people operation. No health polling, embeddings, names, groups, detections or visitor searches.", "route_signatures": [ "GET /faces/health", "GET /:id/faces", "PATCH /:id/faces", "GET /:id/people", "GET /:id/people/suggestions", "POST /:id/people/suggestions/dismiss", "PATCH /:id/people/:personId", "POST /:id/people/merge", "POST /:id/people/:personId/split", "GET /:id/people/:personId/faces", "POST /:id/faces/rescan", "POST /:id/faces/recluster", "GET /faces/auto-categories", "PUT /faces/auto-categories", "POST /:id/faces/categorize", "DELETE /:id/faces/categorize", "DELETE /:id/faces" ] }, "adminEvents/helpers.js": { "decision": "composition", "signals": [], "reason": "Router composition / helpers; decisions are recorded for each mounted family.", "route_signatures": [] }, "adminEvents/index.js": { "decision": "composition", "signals": [], "reason": "Router composition / helpers; decisions are recorded for each mounted family.", "route_signatures": [] }, "adminEvents/logo.js": { "decision": "partial", "signals": [ "branding" ], "reason": "Successful admin logo operation only; image/filename/content excluded.", "route_signatures": [ "POST /:id/logo", "DELETE /:id/logo" ] }, "adminEvents/qr.js": { "decision": "partial", "signals": [ "gallery_sharing" ], "reason": "Admin QR generation only; no scans, tokens or URLs.", "route_signatures": [ "GET /:id/qr", "GET /:id/qr-print" ] }, "adminEvents/resets.js": { "decision": "partial", "signals": [ "galleries", "gallery_sharing" ], "reason": "Admin gallery reset/sharing capability only; no password, recipient, token or reset statistics.", "route_signatures": [ "POST /:id/reset-password", "POST /:id/resend-email" ] }, "adminEvents/slideshow.js": { "decision": "partial", "signals": [ "slideshow" ], "reason": "Admin generate/disable/configure only, never kiosk viewers or slide advances.", "route_signatures": [ "POST /:id/slideshow/generate", "POST /:id/slideshow/disable", "PATCH /:id/slideshow" ] }, "adminEventTypes.js": { "decision": "partial", "signals": [ "event_types" ], "reason": "Admin event-type CRUD; preset contents/names excluded.", "route_signatures": [ "GET /", "GET /active", "GET /:id", "POST /", "PUT /:id", "DELETE /:id", "POST /reorder" ] }, "adminExpenses.js": { "decision": "partial", "signals": [ "accounting", "accounting_expenses", "accounting_incoming_invoices" ], "reason": "Admin expense/inbound-invoice operations; no financial values, suppliers, mileage/location, dates, receipt files or OCR text.", "route_signatures": [ "GET /categories", "POST /categories", "PATCH /categories/:id", "DELETE /categories/:id", "POST /inbound", "GET /inbound", "GET /inbound/pending-summary", "POST /inbound/bill-pending", "GET /inbound/by-customer/:customerAccountId", "GET /inbound/:id/file", "GET /inbound/:id/page/:n", "GET /inbound/:id", "PATCH /inbound/:id", "POST /inbound/:id/categorize", "POST /inbound/:id/rebill", "POST /inbound/:id/supplier-payment", "GET /", "POST /", "GET /:id/proof", "GET /:id", "PATCH /:id", "POST /:id/invoice", "POST /:id/paid" ] }, "adminExternalMedia.js": { "decision": "partial", "signals": [ "share_mounts" ], "reason": "Only admin import operation; status/list/browse are not use. Snapshot checks external-path presence, never reports a path.", "route_signatures": [ "GET /list", "POST /events/:id/import-external" ] }, "adminFeatureFlags.js": { "decision": "configuration", "signals": [ "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" ], "reason": "Only allowlisted effective capability booleans. No marker from reading or saving feature flags. Disabled roadmap/developer flags excluded.", "route_signatures": [ "GET /", "PUT /" ] }, "adminFeedback.js": { "decision": "partial", "signals": [ "feedback_moderation", "gallery_feedback_likes", "gallery_feedback_ratings", "gallery_feedback_comments", "gallery_feedback_favorites", "gallery_feedback_reactions", "gallery_feedback_color_labels", "gallery_guest_accounts" ], "reason": "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.", "route_signatures": [ "GET /events/:eventId/feedback-settings", "PUT /events/:eventId/feedback-settings", "GET /events/:eventId/feedback", "PUT /feedback/:feedbackId/:action", "DELETE /feedback/:feedbackId", "GET /events/:eventId/feedback-analytics", "GET /events/:eventId/feedback/export", "GET /feedback/pending-moderation", "GET /word-filters", "POST /word-filters", "PUT /word-filters/:id", "DELETE /word-filters/:id" ] }, "adminGuests.js": { "decision": "partial", "signals": [ "guest_management" ], "reason": "Admin guest management/export initiation only. No guest names, invitations, tokens, contact data, guest counts or visitor interactions.", "route_signatures": [ "GET /events/:eventId/guests", "GET /events/:eventId/guests/aggregate", "GET /events/:eventId/guests/invites", "POST /events/:eventId/guests/invites", "DELETE /events/:eventId/guests/invites/:inviteId", "GET /events/:eventId/guests/export-all", "GET /events/:eventId/guests/:guestId", "GET /events/:eventId/guests/:guestId/export", "DELETE /events/:eventId/guests/:guestId", "POST /events/:eventId/guests/:keepId/merge" ] }, "adminImageSecurity.js": { "decision": "configuration", "signals": [ "gallery_image_protection" ], "reason": "Only gallery/global technical protection configuration existence. No security events, blocked IPs, request counts, threat scores or admin monitoring access.", "route_signatures": [ "GET /settings", "PUT /settings", "GET /dashboard", "GET /logs", "GET /events/:eventId/access-logs", "POST /block-ip", "DELETE /logs/cleanup", "GET /export" ] }, "adminInvoices.js": { "decision": "partial", "signals": [ "crm", "crm_invoices", "crm_invoice_import" ], "reason": "Admin invoice operations only; no amounts, VAT/customer/payment values or payment-check responses. v3 adds only: crm_invoice_import. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /", "GET /:id", "POST /", "POST /import", "PUT /:id", "GET /:id/rebill-proofs", "POST /:id/send", "POST /:id/mark-paid", "POST /:id/send-reminder", "POST /:id/test-payment-check", "POST /:id/reissue", "POST /:id/release-for-delivery", "POST /:id/cancel", "GET /:id/pdf", "POST /preview", "GET /:id/payment-log" ] }, "adminLedger.js": { "decision": "partial", "signals": [ "accounting", "accounting_ledger" ], "reason": "Admin ledger-account/VAT/mapping edits and ledger export initiation only; no account/currency/VAT identifiers or exported records.", "route_signatures": [ "GET /accounts", "POST /accounts", "PATCH /accounts/:id", "DELETE /accounts/:id", "GET /vat-codes", "POST /vat-codes", "PATCH /vat-codes/:id", "DELETE /vat-codes/:id", "GET /mappings", "PATCH /mappings/category/:id", "PATCH /mappings/settings", "GET /export" ] }, "adminNewsletters.js": { "decision": "partial", "signals": [ "newsletters" ], "reason": "Admin campaign changes/test/queue/cancel only. Recipient resolution, previews, subscriptions/unsubscribes, delivery/open/click data and automatic sending excluded.", "route_signatures": [ "GET /", "GET /:id", "GET /:id/recipients", "POST /", "PUT /:id", "DELETE /:id", "POST /:id/preview", "POST /:id/recipients/resolve", "POST /:id/test", "POST /:id/queue", "POST /:id/cancel" ] }, "adminNotifications.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /", "PUT /:id/read", "PUT /read-all", "DELETE /clear-all" ] }, "adminPhotoDimensions.js": { "decision": "partial", "signals": [ "photo_processing" ], "reason": "Admin repair/regenerate/configuration initiation, never status polling or processing totals.", "route_signatures": [ "POST /repair-dimensions", "GET /repair-dimensions/status", "POST /repair-capture-dates", "GET /repair-capture-dates/status", "POST /repair-orientation", "GET /repair-orientation/status" ] }, "adminPhotoExport.js": { "decision": "partial", "signals": [ "photo_exports", "photo_xmp_export" ], "reason": "Admin export initiation only; export filters, selected files, sizes and contents excluded. v3 adds only: photo_xmp_export. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /:eventId/filtered", "GET /:eventId/filter-summary", "POST /:eventId/export", "GET /export-formats" ] }, "adminPhotos.js": { "decision": "partial", "signals": [ "photo_management", "photo_exports", "photo_processing", "video_uploads", "camera_raw_uploads", "s3_storage", "s3_photo_storage", "photo_replacement", "photo_admin_marks" ], "reason": "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. v3 adds only: photo_replacement, photo_admin_marks. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "POST /:eventId/upload", "GET /uploads/:upload_id/status", "GET /uploads/:upload_id/stream", "POST /photos/:photoId/retry", "DELETE /:eventId/photos/:photoId", "PUT /:eventId/photos/:photoId/mark", "PATCH /:eventId/photos/:photoId", "POST /:eventId/photos/bulk-delete", "POST /:eventId/photos/bulk-update", "GET /:eventId/photos/:photoId/download", "GET /:eventId/photos", "GET /:eventId/photo/:photoId", "GET /:eventId/thumbnail/:photoId", "GET /:eventId/preview/:photoId", "GET /:eventId/debug", "POST /:eventId/chunked-upload/init", "POST /:eventId/chunked-upload/:uploadId/chunk/:chunkIndex", "POST /:eventId/chunked-upload/:uploadId/complete", "GET /:eventId/chunked-upload/:uploadId/status", "DELETE /:eventId/chunked-upload/:uploadId" ] }, "adminProjects.js": { "decision": "partial", "signals": [ "crm", "crm_projects" ], "reason": "Admin project operations only; project/person names, business performance, metadata and totals excluded.", "route_signatures": [ "GET /", "POST /", "GET /:id", "PUT /:id", "POST /:id/events", "POST /:id/quotes", "POST /:id/contracts", "GET /:id/overview", "GET /email/:emailId/preview", "POST /email/:emailId/resend", "POST /email/:emailId/cancel", "POST /email/:emailId/retry", "POST /email/:emailId/send-now" ] }, "adminQuotes.js": { "decision": "partial", "signals": [ "crm", "crm_quotes", "document_templates", "crm_document_conversion" ], "reason": "Admin quote/preset operations only; no quote content, prices, customer acceptance or signatures. v3 adds only: crm_document_conversion. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /", "GET /:id", "POST /", "PUT /:id", "POST /:id/send", "POST /:id/duplicate", "POST /:id/accept", "POST /:id/decline", "POST /:id/convert", "POST /:id/convert-to-invoice", "POST /:id/convert-to-contract", "GET /:id/pdf", "POST /preview", "GET /presets/line-items", "POST /presets/line-items", "PUT /presets/line-items/:id", "DELETE /presets/line-items/:id", "GET /presets/payment-terms", "POST /presets/payment-terms", "PUT /presets/payment-terms/:id", "DELETE /presets/payment-terms/:id", "GET /presets/payment-net-days", "POST /presets/payment-net-days", "PUT /presets/payment-net-days/:id", "DELETE /presets/payment-net-days/:id", "GET /presets/payment-timing", "POST /presets/payment-timing", "PUT /presets/payment-timing/:id", "DELETE /presets/payment-timing/:id" ] }, "adminRestore.js": { "decision": "partial", "signals": [ "restore" ], "reason": "Admin restore initiation only, never file selection, content, progress, errors or timing.", "route_signatures": [ "GET /status", "POST /validate", "POST /start", "GET /progress", "GET /run/:id", "GET /run/:id/report", "GET /available-backups", "POST /list-backups", "GET /settings", "PUT /settings" ] }, "adminRoles.js": { "decision": "partial", "signals": [ "admin_management" ], "reason": "Admin account/role management capability; no names, permissions, role labels, password reset operations or active-user counts. Auth/self-profile endpoints excluded.", "route_signatures": [ "GET /", "GET /permissions", "POST /", "POST /:id/clone", "PUT /:id", "DELETE /:id" ] }, "adminSettings.js": { "decision": "partial", "signals": [ "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", "s3_auto_import", "download_original_filenames" ], "reason": "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. v3 adds only: s3_auto_import, download_original_filenames. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /", "GET /:type", "GET /customer-surface", "PUT /customer-surface", "PUT /accounting", "PUT /slideshow", "GET /downloads", "PUT /downloads", "GET /sso", "PUT /sso", "POST /sso/test", "GET /:type", "GET /password/complexity", "PUT /branding", "POST /logo", "DELETE /logo", "POST /branding/watermark-logo", "PUT /theme", "PUT /general", "PUT /security", "PUT /analytics", "PUT /seo", "GET /storage/info", "POST /favicon", "PUT /security/rate-limit", "GET /public-site/default", "POST /public-site/reset" ] }, "adminShortUrls.js": { "decision": "partial", "signals": [ "gallery_sharing", "short_links" ], "reason": "Admin short-link creation/deletion only; link/token/click metadata excluded.", "route_signatures": [ "GET /events/:eventId/short-urls", "POST /events/:eventId/short-urls", "DELETE /short-urls/:id" ] }, "adminSystem.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /version", "GET /updates", "GET /updates/whatsnew", "POST /updates/whatsnew/seen", "GET /updates/changelog", "GET /updates/instructions", "GET /status", "GET /database", "GET /updates/notifications", "PUT /updates/notifications", "POST /updates/notifications/send", "POST /updates/notifications/check" ] }, "adminSystemHealth.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /backup-integrity", "GET /backup-coverage", "GET /failures", "POST /failures/email/:id/retry", "DELETE /failures/email/:id" ] }, "adminTaxReport.js": { "decision": "partial", "signals": [ "accounting", "accounting_tax_report" ], "reason": "Admin tax report generation/export only; no totals, dates, tax regimes, geography or currency.", "route_signatures": [ "GET /", "GET /pdf", "GET /csv" ] }, "adminThumbnails.js": { "decision": "partial", "signals": [ "photo_processing" ], "reason": "Admin repair/regenerate/configuration initiation, never status polling or processing totals.", "route_signatures": [ "GET /settings", "PUT /settings", "POST /regenerate", "POST /regenerate-previews", "GET /regenerate/status" ] }, "adminTransfers.js": { "decision": "partial", "signals": [ "transfers", "transfer_upload_links" ], "reason": "Admin transfer CRUD/files/link management/download only. Public recipients, received-file data, upload and download statistics excluded. v3 adds only: transfer_upload_links. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /", "POST /", "GET /:id", "PATCH /:id", "DELETE /:id", "POST /:id/files", "DELETE /:id/files/:fileId", "POST /:id/upload-files", "DELETE /:id/extra-files/:extraId", "GET /:id/extra-files/:extraId/download", "POST /:id/upload-link", "DELETE /:id/upload-link", "GET /:id/download", "GET /:id/uploads/:uploadId/download" ] }, "adminUsage.js": { "decision": "excluded", "signals": [], "reason": "Consent, inspection, export, feedback, voting, deletion and abandoning an unsignable deletion are explicit protocol operations; not product-use signals. Activity only triggers a due fixed report.", "route_signatures": [ "POST /activity", "GET /", "POST /dismiss", "POST /enable", "POST /consent", "POST /disable", "POST /abandon", "POST /retry", "GET /preview", "GET /export", "PUT /feedback-preferences", "POST /feedback", "POST /vote", "POST /portal-session" ] }, "adminUsers.js": { "decision": "partial", "signals": [ "admin_management" ], "reason": "Admin account/role management capability; no names, permissions, role labels, password reset operations or active-user counts. Auth/self-profile endpoints excluded.", "route_signatures": [ "GET /me/permissions", "GET /", "GET /roles", "GET /invitations", "POST /invite", "DELETE /invitations/:id", "GET /:id", "PUT /:id", "POST /:id/deactivate", "POST /:id/activate", "DELETE /:id", "POST /:id/reset-password" ] }, "adminVatCodes.js": { "decision": "excluded", "signals": [], "reason": "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.", "route_signatures": [ "GET /" ] }, "adminWebhooks.js": { "decision": "partial", "signals": [ "webhooks" ], "reason": "Active configuration existence plus successful admin manual test/replay enqueue. Actual network delivery/results/subscriptions/destinations excluded.", "route_signatures": [ "GET /", "POST /", "GET /:id", "PUT /:id", "DELETE /:id", "POST /:id/test", "GET /:id/deliveries", "GET /:id/deliveries/:deliveryId", "POST /:id/deliveries/:deliveryId/replay" ] }, "adminWhatsapp.js": { "decision": "partial", "signals": [ "whatsapp" ], "reason": "Effective configured sender and successful manual test only. No automated deliveries, phone numbers, templates or delivery statuses.", "route_signatures": [ "GET /config", "PUT /config", "POST /test" ] }, "adminWorkflows.js": { "decision": "partial", "signals": [ "workflows", "workflow_automation_enabled" ], "reason": "Admin workflow authoring/approval/test initiation only. Runtime triggers, payloads, execution frequency/results and public approvals excluded. v3 adds only: workflow_automation_enabled. Exact definitions are in features.v3.json; configuration-only signals never observe the public surface.", "route_signatures": [ "GET /approvals", "POST /approvals/:id/:action", "GET /runs/:runId/steps", "GET /:id/runs", "POST /:id/test-run", "GET /", "GET /:id", "POST /", "PUT /:id", "PATCH /:id/enabled", "DELETE /:id" ] }, "analyticsTrackerProxy.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [] }, "auth.js": { "decision": "partial", "signals": [ "oauth" ], "reason": "Only successful admin OIDC callback sets oauth. Password/gallery authentication, MFA, account claims and provider details excluded.", "route_signatures": [ "POST /admin/login", "POST /admin/login/mfa", "POST /logout", "POST /gallery/verify", "POST /gallery/:slug/client-login", "POST /gallery/share-login", "POST /gallery/logout", "GET /session", "POST /admin/change-password", "POST /password-strength", "GET /admin/sso/login", "GET /admin/sso/callback" ] }, "customer.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /events", "GET /events/:slug/access-token", "GET /profile", "PUT /profile", "GET /profile/marketing", "PUT /profile/marketing", "POST /profile/password", "GET /quotes", "GET /invoices", "GET /quotes/:id/pdf", "GET /invoices/:id/pdf", "GET /contracts", "GET /contracts/:id/pdf" ] }, "customerAuth.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "POST /login", "POST /logout", "GET /session", "GET /invite/:token", "POST /accept-invite", "GET /password-reset/:token", "POST /password-reset" ] }, "gallery.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /resolve/:identifier", "GET /:slug/verify-token/:token", "GET /:slug/info", "GET /:slug/show/:token/session", "GET /:slug/show/:token/state", "GET /:slug/photos", "GET /:slug/people", "PATCH /:slug/photos/:photoId/visibility", "PATCH /:slug/photos/visibility/bulk", "GET /:slug/download/:photoId", "GET /:slug/download-all", "POST /:slug/download-selected", "POST /:slug/download-jobs", "GET /:slug/download-jobs/:token", "GET /:slug/download-jobs/:token/file", "POST /:slug/photo/:photoId/view", "GET /:slug/photo/:photoId", "GET /:slug/thumbnail/:photoId", "GET /:slug/hero/:photoId", "GET /:slug/preview/:photoId", "GET /:slug/stats", "POST /:eventId/upload", "GET /:slug/uploads/status", "GET /:slug/css-template" ] }, "galleryFeedback.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:slug/feedback-settings", "GET /:slug/photos/:photoId/feedback", "POST /:slug/photos/:photoId/feedback", "GET /:slug/feedback-summary", "GET /:slug/my-feedback" ] }, "galleryGuests.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "POST /:slug/guest", "GET /:slug/guest/me", "DELETE /:slug/guest/me", "POST /:slug/guest/recover", "POST /:slug/guest/verify", "POST /:slug/guest/redeem" ] }, "protectedImages.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:slug/photo/:photoId/view", "POST /:slug/photo/:photoId/generate-secure-token", "POST /:slug/photo/:photoId/generate-url", "GET /:slug/photo/:photoId/signed/:token" ] }, "publicCMS.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /pages/:slug" ] }, "publicContracts.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "POST /:token/sign", "POST /:token/upload-signed-pdf", "GET /:token/pdf" ] }, "publicFonts.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /" ] }, "publicNewsletter.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /unsubscribe/:token", "POST /unsubscribe/:token" ] }, "publicPaymentCheck.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "POST /:token" ] }, "publicQuotes.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "POST /:token/respond" ] }, "publicSettings.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /" ] }, "publicTransfer.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "GET /:token/download", "GET /:token/download/:fileId" ] }, "publicTransferUpload.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token", "POST /:token" ] }, "publicWorkflowApprovals.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "GET /:token/:action", "POST /:token/:action" ] }, "secureImages.js": { "decision": "excluded", "signals": [], "reason": "Public/customer/gallery/visitor surface or existing optional third-party analytics proxy: no product-usage middleware, callbacks, counters or report triggers.", "route_signatures": [ "POST /:slug/generate-token", "GET /:slug/secure/:photoId/:token", "GET /:slug/secure-download/:photoId/:token", "GET /security/stats" ] }, "setup.js": { "decision": "excluded", "signals": [], "reason": "Bootstrap, passwords/MFA/session/profile, per-person notifications, developer helpers and operational health/update/log polling are outside the prioritization purpose.", "route_signatures": [ "GET /status", "POST /verify-token", "POST /admin", "POST /complete" ] }, "v1/events.js": { "decision": "partial", "signals": [ "api_integration" ], "reason": "Single bit after successful admin-owned scoped API authentication. No request/response values; API requests do not trigger reports.", "route_signatures": [ "POST /events", "GET /events", "GET /event-types", "GET /events/:id", "POST /events/:id/photos", "GET /events/:id/share-link", "GET /events/:id/photos" ] } }, "feature_flags": { "accounting": { "signals": [ "accounting", "accounting_ledger" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "analytics": { "signals": [ "analytics_dashboard" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "bills": { "signals": [ "crm_invoices", "crm_invoice_import", "crm_monthly_billing_manual" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "calendar": { "signals": [ "crm_calendar" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "calendarBooking": { "signals": [], "reason": "Excluded: disabled roadmap placeholder, not an implemented booking capability." }, "clients": { "signals": [ "crm" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "contracts": { "signals": [ "crm_contracts" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "crmDevelopment": { "signals": [], "reason": "Excluded: internal development/test helpers, not product adoption." }, "customerPortal": { "signals": [ "customer_portal" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "expenses": { "signals": [ "accounting_expenses" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "faces": { "signals": [ "face_recognition" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "galleries": { "signals": [ "galleries" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "hoursLogging": { "signals": [ "crm_hours" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "incomingInvoices": { "signals": [ "accounting_incoming_invoices", "crm_combined_billing" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "incomingMail": { "signals": [ "incoming_mail" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "messaging": { "signals": [ "messaging" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "newsletters": { "signals": [ "newsletters" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "projects": { "signals": [ "crm_projects" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "quotes": { "signals": [ "crm_quotes", "crm_document_conversion" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "reminderEmails": { "signals": [ "reminder_emails" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "slideshow": { "signals": [ "slideshow" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "taxReport": { "signals": [ "accounting_tax_report" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "transfers": { "signals": [ "transfers", "transfer_upload_links" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "userManagement": { "signals": [ "admin_management" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "whatsapp": { "signals": [ "whatsapp" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." }, "workflows": { "signals": [ "workflows", "workflow_automation_enabled" ], "reason": "Only effective configuration boolean; dependency rules apply, no flag values/history beyond this boolean." } }, "excluded_runtime": [ "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, financial amounts and document contents; only explicit v3 inventory totals are permitted.", "Disabled calendarBooking and internal crmDevelopment; hosted future product #1111", "Image fragmentation: removed from current PicPeak, not a live capability" ], "configuration_only": [ "reminder_emails", "public_site", "gallery_feedback_likes", "gallery_feedback_ratings", "gallery_feedback_comments", "gallery_feedback_favorites", "gallery_feedback_reactions", "gallery_feedback_color_labels", "gallery_guest_accounts", "gallery_guest_uploads", "gallery_downloads", "download_resolution_picker", "gallery_client_access", "gallery_watermarks", "gallery_image_protection", "gallery_reveal", "gallery_expiration", "gallery_folders", "transfer_upload_links", "workflow_automation_enabled", "s3_auto_import", "gallery_capture_date_sort", "download_original_filenames" ], "inventory_totals": { "galleries": { "name": { "en": "Stored galleries", "de": "Gespeicherte Galerien" }, "description": { "en": "Current number of gallery records, including drafts, inactive and archived galleries. Deleted galleries are excluded. One total for the installation, no breakdown or identifiers.", "de": "Aktuelle Anzahl gespeicherter Galerien einschließlich Entwürfen, inaktiven und archivierten Galerien. Gelöschte Galerien zählen nicht. Eine Gesamtzahl der Installation, ohne Aufschlüsselung oder Kennungen." } }, "photos": { "name": { "en": "Stored photo records", "de": "Gespeicherte Fotoeinträge" }, "description": { "en": "Current number of non-video photo records, including RAW, guest uploads and records of archived galleries. One total for the installation; not unique files, thumbnails, processing success or photo contents. Deleted records are excluded.", "de": "Aktuelle Anzahl der Fotoeinträge ohne Videos, einschließlich RAW, Gast-Uploads und Einträgen archivierter Galerien. Eine Gesamtzahl der Installation; keine eindeutigen Dateien, Vorschaubilder, Verarbeitungserfolge oder Fotoinhalte. Gelöschte Einträge zählen nicht." } } } }