MethodFeatures
verified checked against the code · what the statuses mean
Activity log — who did what, when
In simple terms
The app keeps a record of what people do in each workspace: who created or deleted a project, changed a design or an assumption, saved or switched a version, took or restored a snapshot, ran a solve or an analysis, exported a document, added or removed a member, changed a role, renamed the workspace — and who signed in and out. Each entry is one plain sentence with its time, for example:
- “Bea changed the electrolyser from 60 to 80 MW in Project X (feasibility)”
- “Olga exported the results workbook of Project X (prefeasibility) as Excel”
- “Dan was added as an editor by Bea”
When a change has a before and an after, the values are shown beside the sentence as small chips (“electrolyser 60 MW → 80 MW”), in the units the design panel and the assumption book use. Names are kept as they were at the time, so an entry still reads correctly after a project is renamed or deleted.
Where to find it
- Settings → Workspace → Activity log — for the workspace’s admins (its owner is one). Viewers and editors do not see the section, and the server refuses them the log. The entries are grouped by day, newest first; each links to the object as it is now — the project’s cockpit, its snapshots, or the members list — and never to something that has been deleted. Filters: person, project, what happened, and a day range. Show more reads the next hundred entries.
- All workspaces → Activity across workspaces — for the app’s super admin: the same list for every workspace, with a workspace column and filter.
What is recorded
- Every change that succeeded: designs, assumptions, imported assumption books, versions, snapshots, solves and analyses (started or stopped), projects, members, roles, accounts switched off or on, the workspace’s name, owner, creation and deletion, the default assumption book.
- Exports — the one kind of reading that is recorded: every document download and bundle, with the document and its format. For the hourly data and the bundles, the entry also says whether the file left at full resolution (with the hourly frame) or without it — as the confidential-data rule decided when the file was made.
- Signing in and out.
A change that failed or was refused leaves no entry. Neither does a preview (an import you only checked), nor a change to the value something already had.
What is never recorded
- What a request carried: no request bodies, no passwords, no tokens, no internet or e-mail addresses.
- Reading: opening a project, a room or a result is not recorded — only exports are. The prefeasibility recalculation is not recorded either: it runs after every edit, and the edit itself is what the log keeps.
- Failed sign-ins: they are counted by the sign-in throttle, not written to the log.
- Where you have been in the app (the page you opened last, your visits to the projects home), and the welcome or the What’s new notice you put away.
The super admin and workspaces they have not joined
The super admin opens a workspace’s content only by joining it, which its members see. The view across workspaces follows the same rule. An entry of a workspace the super admin has not joined shows only:
- when it happened, in which workspace, by whom, what kind of change it was, and whether it succeeded;
- one fixed sentence, such as “A design change in a workspace you have not joined.”, with a note to join the workspace to see the details.
Its project, the values that changed and every other detail stay hidden — in the list, in the CSV and in the project filter, which offers only the projects of workspaces the super admin has joined. Once the super admin joins, the same entries read in full; after they leave, they are hidden again.
The CSV
Export (CSV) downloads every entry the filters select — not only the page on the screen — as a spreadsheet file. It starts with a few lines saying what it is (the workspace, when, by whom, the filters), then one row per entry: the time in UTC, the workspace, the person and their role, the kind, the sentence, the changes, the project, the stage, the object, the resolution of an export, and the request’s route and status. The sentences are the same words the page shows. A cell that would start like a spreadsheet formula is written as text. The download is itself an entry: it is the newest one when the list reads itself again.
How long entries are kept
Each entry is kept in full for 12 months. After that it is folded into a count per
month, per workspace and per kind of change, and deleted; the page says how many
entries were folded that way. The folding runs when the server starts and then once a
day. The number of months is set with PTX_AUDIT_KEEP_MONTHS (see Environment
variables).
Where it is stored
The log is a database file of its own, audit.db, beside the app’s database. It is
created by the first entry, and updates to the app’s database never touch it. Back it
up together with the database — see Operations & security.
Before a workspace is deleted, the app’s own backup copies it beside the database copy.
Related topics
From the app’s documentation, docs/02-features/activity-log.md · Hyprisma 1.0.5