Commits and versions
Grunddata never overwrites data. Every save appends. This gives you a complete, attributable history of your data without having to configure anything.
Two concepts do the work: commits and versions.
Commits
Section titled “Commits”A commit is a single save operation. It does not matter whether it covers one row typed in the web app or five thousand rows uploaded from Excel — it is one commit.
A commit records:
| Part | Description |
|---|---|
| Message | What the change was for. Supplied by the user or the web app’s editable default. |
| Author | The signed-in user, resolved to a name and email. |
| Timestamp | When the commit was created. |
| Sequence | A monotonically increasing number giving a strict chronological order. |
| Record versions | Every record version the save produced. |
Where to see commits
Section titled “Where to see commits”Open a table’s overview page. The Recent commits panel lists the latest commits touching that table, with the message, the author and the timestamp. Choose View all to search the table’s commit history.
From commit history you can:
- View the active records as they were at a selected commit.
- Compare a commit with the preceding table commit or with the current records.
- Restore the table to a selected commit. A restore replaces the current table state and is recorded as a new commit with an editable default message.
Snapshots and comparisons load records a page at a time, so large tables do not need to be downloaded all at once.
When saving records or adding/editing attributes in the web app, the commit message is shown
inline with the save controls. Each form starts with a short editable default, which can be
replaced or cleared before saving. Attribute defaults include the attribute name, such as
Counterparty attribute updated.
Versions
Section titled “Versions”Every record has a version. It starts at 1 and increments on every change.
Saving a change appends a new row rather than updating the existing one:
| id | source_id | version | account_name | is_deleted | commit |
|---|---|---|---|---|---|
018f…a1 |
018f…77 |
1 | Nominal amount | false | Initial load of chart of accounts |
018f…b4 |
018f…77 |
2 | Nominal amount (SEK) | false | Clarify account names for reporting |
018f…c9 |
018f…77 |
3 | Nominal amount (SEK) | true | Retire unused accounts |
Reading this table:
source_idis identical in all three rows. It is the same account throughout.ididentifies one version row. It changes each time.versioncounts the revisions.- The current state of a record is simply its highest version.
Soft deletes
Section titled “Soft deletes”Deleting a record does not remove anything. It appends a new version flagged as deleted.
The record then:
- Disappears from the records grid.
- Is excluded from Excel and Google Sheets downloads.
- Is excluded from the OData feed.
- Keeps its full history, attributable to whoever deleted it and why.
What this gives you
Section titled “What this gives you”-
Answer “who changed this?” — every version carries its author and its commit message.
-
Answer “when did this value change?” — versions are ordered, and commits have a strict sequence.
-
Answer “what did this look like at year end?” — the versions in place at that time are still there.
-
Recover from a bad bulk edit — the previous values were never destroyed.