Skip to main content

Data retention

This page lists what a self-hosted instance stores, where, and for how long. Each period comes from the code or the shipped configuration. "No automatic deletion" means that no scheduled job deletes the data. The Deleted by column then names what still removes it. The personal-data map describes workspace purge, disconnection, and verified person erasure. The operator's record of processing gives the legal basis of each category.

The Setting column names the environment variable when the supported stack forwards it from .env. Otherwise, it names the Spring property, and the value is fixed in the supported stack. The configuration reference lists the settings that have an environment variable. The times of the scheduled jobs are in the time zone of the server process.

Worker disk​

The worker keeps these files under /data/worker-git-repos, on the worker-git-repos volume.

DataRetentionSettingDeleted by
Debug transcript of an agent run24 hours. It goes earlier when the job's evidence expires.NoneA worker sweep every minute
Inputs of an attemptUntil the result is admitted. Otherwise, 1 hour after the attempt ends. A worker restart deletes them.NoneThe same sweep
Repository checkouts of the workerNo automatic deletionNoneNothing deletes them

Server disk​

DataRetentionSettingDeleted by
Repository mirrors, on the git-repos volumeNo age limit. The server deletes a mirror when no workspace monitors its repository.NoneRepository monitoring

PostgreSQL​

The jobs that delete review job data run only when AGENT_ENABLED is true.

DataRetentionSettingDeleted by
Capture and output of a review job14 days after the job ends. A job that waits for delivery keeps them.hephaestus.agent.payload-retentionA server job every 6 hours
Review job rows, with their script runs and attempt usage90 days after the job endshephaestus.agent.row-retentionThe same job
Original review inputs (composition basis)Until they expire. The end of the job also deletes them.NoneThe same job
Evidence-copy receiptsAs long as their review job row. After that, until the worker that held the copy confirms its removal.hephaestus.agent.row-retentionThe same job, after the worker confirms. Person erasure and workspace purge clear the identities earlier.
Evidence of an item eventReplaced by a marker 30 days after it is recordedhephaestus.item-event-ledger.retain-forA server job every 15 minutes
Item events that nothing references30 days after their decisionhephaestus.item-event-ledger.retain-forThe same job
Item events that stay pendingThey expire after 7 days. The expired row goes 30 days later.ITEM_EVENT_LEDGER_PENDING_LAPSE_AFTER, hephaestus.item-event-ledger.retain-forThe same job
Practice results that no feedback cites, and the raw proof of scans400 daysNoneA server job at 03:00 every day
Feedback and its delivery recordsNo automatic deletion. Conversation feedback that is never shown is withheld after 14 days and kept.NoneWorkspace purge or person erasure
LLM usage records400 daysHEPHAESTUS_LLM_USAGE_RETENTIONA server job at 04:15 every day
conversationsNo automatic deletionNoneWorkspace purge, person erasure, or Slack disconnection
Slack messages and threads30 days for each connection, at most 180 daysNoneA server job at 03:30 every day
Outline documentsNo age limit. Document bodies above 200 MB for each workspace are evicted.hephaestus.integration.outline.cache.max-size-mbOutline sync
GitHub and GitLab mirror tablesNo age limit while a workspace monitors the repositoryNoneRepository monitoring
Sync job historyThe newest 50 runs of each connectionNoneEach new sync run
Connection audit recordsNo automatic deletionNoneWorkspace purge
Authentication events, including sign-ins, user views, IP address, and user agent12 months, in monthly partitionsNonePartition maintenance at 00:10 every day
Configuration audit events365 daysNoneA server job at 00:20 every day
Issued access tokensUntil they expire. Access tokens last 24 hours.hephaestus.auth.access-ttlA server job at 03:30 every day
Client sessionsAt most 7 days. A revoked session goes 1 day after revocation.hephaestus.auth.session-max-lifetimeA server job every hour
OAuth state values7 dayshephaestus.integration.oauth-state.nonce-retentionA server job at 04:00 every day
Email notifications waiting for deliveryDeleted when delivered. An account deletion confirmation expires at the purge deadline. Security, alert, and weekly digest mail expires after 24 hours. Product feedback mail expires after 7 days. Survey mail expires with its request.NoneDelivery and the retry job
Self-service account exportsThe download goes 48 hours after it is ready.NoneA server job every hour
Deleted accountsRemoved 48 hours after the request, by the next hourly sweephephaestus.auth.delete-cooldownA server job every hour
Product feedback and survey responsesNo automatic deletionNoneAccount erasure, survey deletion, or workspace purge
Research disclosure recordsNo automatic deletion. The released file is not stored.NoneClosure of the disclosure removes its mapping

NATS JetStream​

The nats-data volume keeps webhook deliveries. Each stream deletes its oldest messages first when it reaches its age limit or its size limit. Webhook ingestion operations gives the limits of each stream and their settings.

Logs and traces​

DataRetentionWhere to change it
Logs of the webapp, server, worker, PostgreSQL, and volume setup containersBy size only: 5 files of 50 MiBThe logging block of the service
Logs of the webhook server, NATS, reverse proxy, and maintenance pageBy size only: 3 files of 10 MiBThe logging block of the service
Journal logs, with the optional journald overlayThe journal size limit of the hostSystemMaxUse in journald.conf
Logs shipped to LokiThe retention that you set in LokiLoki
TracesOff by default. The OTLP recipient keeps them under its own retention.TRACING_OTLP_ENABLED

No container writes an HTTP access log.

Backups​

DataRetentionWhere to change it
pgBackRest backups, with the optional backup overlayTwo full backups, with their differential backups and WAL. Backup & restore gives the schedule.repo1-retention-full in pgbackrest.conf
A plain pg_dump fileNo automatic deletionDelete the file yourself

A backup contains the whole database, so it also contains data that the instance deleted later. Erasure does not reach a backup. Backup & restore gives the restore procedure.