Review the invented audit-retention copy (audRecKeepN) #343

Closed
opened 2026-08-27 22:44:49 +00:00 by Cordy · 2 comments
Owner

Copy review, deferred deliberately so Nikola can look at it on a running instance after the tag cut.

What this is

The Audit log "The record" panel (#342) has a Retention row. The handoff mockup only covers the indefinite case:

Retention — Kept indefinitely. Nothing in Cairn deletes an audit month file.

That sentence is only true when audit.retainMonths is 0. When an operator configures a non-zero retention, pruneLocked really does delete month files older than the cut, so showing the mockup's sentence would be a false statement about the instance's own evidence trail — on the one page where that matters most.

So a second variant was written to cover it:

audRecKeepN: "Kept for {n} months. Older month files are removed when the log rotates."

Nikola did not write this string. It is the only piece of copy on that page that is not a verbatim transcription of the handoff, and it is filed here rather than shipped silently under the design-handoff rules (see the repo wiki page "Design handoff rules", rule 4: deviate only for impossibility, and ask).

Why it is not visible on the dogfood

cairn-enc runs with retention 0, so the panel shows the mockup's sentence verbatim. To see the variant, set a non-zero audit.retainMonths in the cairn-enc-config secret and reopen Audit log → Settings.

What to decide

  1. Is the English wording right, or should it be reworded?
  2. Should the row say anything additional when retention is on — for instance naming the cut-off month, which Info() could return but currently does not?
  3. The de/fr/it translations of the variant follow whatever the English becomes.

Also worth a second look at the same time: the sibling composition denied · <reason> on the Query tab result chips. The reason itself is the server's own recorded refusal string, but the "denied" prefix is likewise not transcribed from the mockup — it was inferred from the mockup's denied — legal hold chip.

Blocked on: nothing. Purely a copy review after v0.7 deployment.

Copy review, deferred deliberately so Nikola can look at it on a running instance after the tag cut. ## What this is The Audit log "The record" panel (#342) has a Retention row. The handoff mockup only covers the indefinite case: > **Retention** — Kept indefinitely. Nothing in Cairn deletes an audit month file. That sentence is only true when `audit.retainMonths` is 0. When an operator configures a non-zero retention, `pruneLocked` really does delete month files older than the cut, so showing the mockup's sentence would be a false statement about the instance's own evidence trail — on the one page where that matters most. So a second variant was written to cover it: audRecKeepN: "Kept for {n} months. Older month files are removed when the log rotates." **Nikola did not write this string.** It is the only piece of copy on that page that is not a verbatim transcription of the handoff, and it is filed here rather than shipped silently under the design-handoff rules (see the repo wiki page "Design handoff rules", rule 4: deviate only for impossibility, and ask). ## Why it is not visible on the dogfood `cairn-enc` runs with retention 0, so the panel shows the mockup's sentence verbatim. To see the variant, set a non-zero `audit.retainMonths` in the `cairn-enc-config` secret and reopen Audit log → Settings. ## What to decide 1. Is the English wording right, or should it be reworded? 2. Should the row say anything additional when retention is on — for instance naming the cut-off month, which `Info()` could return but currently does not? 3. The de/fr/it translations of the variant follow whatever the English becomes. Also worth a second look at the same time: the sibling composition `denied · <reason>` on the Query tab result chips. The reason itself is the server's own recorded refusal string, but the "denied" prefix is likewise not transcribed from the mockup — it was inferred from the mockup's `denied — legal hold` chip. Blocked on: nothing. Purely a copy review after v0.7 deployment.
Author
Owner

Copy review decisions (Nikola, 2026-09-04):

  1. audRecKeepN English approved as shipped. de/fr/it keep the current shape for now — a broader translation deep-dive is planned separately and will revisit all locales at once.
  2. Cut-off month: build it. Info() gains the pruning cut-off (the month boundary below which files are removed at rotation — distinct from the Oldest row, which shows what actually survives). UI mockup first, per design-first; implementation follows the chosen variant.
  3. The inferred denied · <reason> chip prefix on the Query tab is blessed unchanged.

Issue stays open until 2 ships.

**Copy review decisions (Nikola, 2026-09-04):** 1. `audRecKeepN` English **approved as shipped**. de/fr/it keep the current shape for now — a broader translation deep-dive is planned separately and will revisit all locales at once. 2. **Cut-off month: build it.** `Info()` gains the pruning cut-off (the month boundary below which files are removed at rotation — distinct from the Oldest row, which shows what actually survives). UI mockup first, per design-first; implementation follows the chosen variant. 3. The inferred `denied · <reason>` chip prefix on the Query tab is **blessed unchanged**. Issue stays open until 2 ships.
Cordy closed this issue 2026-09-04 00:07:54 +00:00
Author
Owner

Follow-up shipped in v0.6.123 (PR #419, dogfoods rolled): variant B from audit-retention-config-hint-mockup.html — quiet Config chip on the Retention row, footer bar on the record box naming audit.retainMonths + restart requirement, Audit guide ↗ linking the future-canonical swisscairn.ch/docs/audit#retention. Footer copy flips at retention 0 to the enabling direction.

Tier decision recorded alongside: audit retention stays config-only by design — the runtime UI can stop recording, but nothing reachable from an admin session may destroy recorded evidence; the one destructive knob lives at infrastructure trust level, same tier as the encryption identities.

**Follow-up shipped in v0.6.123** (PR #419, dogfoods rolled): variant B from `audit-retention-config-hint-mockup.html` — quiet Config chip on the Retention row, footer bar on the record box naming `audit.retainMonths` + restart requirement, `Audit guide ↗` linking the future-canonical `swisscairn.ch/docs/audit#retention`. Footer copy flips at retention 0 to the enabling direction. Tier decision recorded alongside: audit retention stays config-only by design — the runtime UI can stop recording, but nothing reachable from an admin session may destroy recorded evidence; the one destructive knob lives at infrastructure trust level, same tier as the encryption identities.
Sign in to join this conversation.
No labels
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#343
No description provided.