Skip to content

Reconcile the claims five merges left behind - #10

Merged
hakan-persson merged 1 commit into
mainfrom
docs/fix-repo-inconsistencies
Aug 22, 2026
Merged

Reconcile the claims five merges left behind#10
hakan-persson merged 1 commit into
mainfrom
docs/fix-repo-inconsistencies

Conversation

@petterl

@petterl petterl commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

A consistency sweep, not new work. The last five merges (#4, #5, #7, #8, #9) added
Azure resources and controls; several summary claims never followed, so the overview
described a cluster that no longer exists. No behaviour change — bicep compiles
clean and every parameter value is byte-identical.

I checked the things that could have drifted and mostly hadn't: doc references and
§ anchors all resolve, the docs index is complete, and the README's chart-version
table matches all 12 pinned targetRevisions. I also probed the Azure API versions
rather than assuming — activityLogAlerts@2020-10-01 and
diagnosticSettings@2021-05-01-preview really are the newest bicep knows, so the
scheduledQueryRules mistake from #6 is not repeated elsewhere.

Factually wrong

Where Claim Reality
README Status backups are "the next planned addition" Velero deployed at wave 4 with two schedules, CNPG's own ScheduledBackup, whole strategy in maintenance.md
README Portability "the residual Azure surface is one Bicep template" six, four of them standalone durable resources — and no table row for audit logging, which has no portable equivalent
README + maintenance.md pins Kubernetes 1.36.2 the bicep pins the minor alias on purpose; both files contradicted their own guidance
README layout block four of six Bicep files missing backup-storage, loganalytics, alerts
README prerequisites + install.md INFRA_RG enumerate what the durable RG holds neither named the audit workspace or the alerts
README overview "what the cluster actually enforces today" omitted audit logging, a control spanning two merged PRs

On the version one: omitting backup-storage.bicep from the layout block was
defensible as a partial orientation aid — missing three of six is a wrong inventory,
which is why it moved.

Two runbook blocks I had broken

§11's archive commands and §5c's action-group check were single 150-character
lines. I wrote them through a heredoc that ate the \ continuations, so they ran
correctly but were unreadable and broke the runbook's convention everywhere else.
Both restored. (§5c's came in via c60ce0a — the collapse originated in my text,
not the v2 PR.)

The 365-day archive, documented as a decision

Now that it is accepted rather than proposed, three things needed saying:

  • loganalytics.bicep read as a flat retentionInDays: 30, so the IaC — the
    source of truth in this repo — understated the real configuration. It now says the
    archive is set per-table in §11 and why it cannot live in the Bicep.
  • Retention is not retroactive, which is what makes the §11 step load-bearing
    rather than tidying-up: raising retention later does not recover rows that have
    already aged out, so every day it is deferred on a running cluster silently spends a
    day of the history the archive was meant to keep. Durable across a rebuild, since
    the workspace outlives the cluster.
  • The access bar the exposure implies: read on this workspace is read on every
    secret in the cluster, granted at the same bar as a Key Vault role rather than a
    monitoring dashboard. One inference of mine worth checking — a year of archived rows
    widens that rather than narrowing it.

Deliberately left alone

  • aks.bicep:101 and backup-storage.bicep:92 carry 4-line inline comments, over
    the ~2-line convention. Both pre-existing, and both are must-read-before-you-edit
    warnings — the immutable CIDRs especially. Churning them is the wrong trade.
  • install.md's other long command lines (§1 quota, §6 secrets, §7a deploy) are
    genuinely single-line commands in the existing style, not collapsed continuations.

Four CI jobs pass; references and anchors resolve; placeholders still 9.

A sweep for inconsistencies rather than new work. The last five merges added Azure
resources and controls; several summary claims never followed, so the overview now
describes a cluster that no longer exists.

Factually wrong, now corrected:

- README said backups were "the next planned addition". Velero has been deployed at
  wave 4 with two schedules since before this, CNPG has its own ScheduledBackup, and
  maintenance.md documents the whole strategy.
- README said the residual Azure surface was "one Bicep template". There are six,
  four of them standalone durable resources, and the Portability table had no row
  for audit logging at all — which has no portable equivalent, since the API-server
  audit feed is the provider's.
- README and maintenance.md both asserted Kubernetes 1.36.2. The bicep pins the
  minor alias deliberately because the patch channel owns the patch level, so both
  files contradicted their own guidance — the README's own note says to check
  kubernetesVersion in the bicepparam, and maintenance.md's AKS section says patches
  are automatic.
- The repo-layout block listed four of six Bicep files. Omitting backup-storage was
  defensible as a partial aid; missing three of six reads as a wrong inventory.
- README's prerequisite list and install.md's INFRA_RG comment both enumerated what
  the durable RG holds without the audit workspace or the alerts.
- The overview's "what the cluster actually enforces today" line did not mention
  audit logging, a control spanning two merged PRs.

Style, within one file: the bicepparam's audit section marker was three lines where
the file's other marker is one.

Also fixes two runbook command blocks I collapsed onto single lines by writing them
through a heredoc that ate the backslash continuations — §11's archive commands and
§5c's action-group check. They ran correctly but broke the runbook's convention and
were unreadable at 150 characters.

Documents the 365-day archive properly, now that it is the accepted decision rather
than a proposal:

- loganalytics.bicep read as a flat retentionInDays: 30, so the IaC understated the
  real configuration. It now says the archive is set per-table in §11 and why it
  cannot live in the Bicep.
- Records that retention is NOT retroactive, which is what makes the §11 step matter:
  raising retention later does not recover rows that have aged out, so every day it
  is deferred on a running cluster silently spends a day of history. Durable across a
  rebuild, since the workspace outlives the cluster.
- States the access bar the exposure implies: read on this workspace is read on every
  secret in the cluster, to be granted at the same bar as a Key Vault role. A year of
  archived rows widens that rather than narrowing it.

No behaviour change. Bicep compiles clean and every parameter value is byte-identical.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR performs a documentation/consistency sweep to align the repo’s high-level claims (README + runbooks) with the Azure/Bicep resources and controls introduced by the last several merges, explicitly calling out audit logging/alerting and the Kubernetes version pinning approach.

Changes:

  • Update README to reflect current enforcement (including audit logging), infrastructure layout, portability touchpoints, and backup status.
  • Clarify Log Analytics retention/archival handling (archive configured per-table in the runbook, not in Bicep) and restore runbook line-wrapping conventions.
  • Align version-pin documentation to the intentional “Kubernetes 1.36 minor alias” approach.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
File Description
README.md Updates overview, portability touchpoints, infra layout, and status claims to match current platform controls/resources.
infra/loganalytics.bicep Clarifies retention vs archive responsibilities (archive set via runbook after table exists).
infra/env/webservices.bicepparam Simplifies audit-logging comment while keeping parameters unchanged.
docs/maintenance.md Aligns Kubernetes pin documentation to the minor-alias strategy.
docs/install.md Updates durable RG description and restores readable multi-line command formatting; documents non-retroactive retention implications.
docs/decisions.md Adds explicit rationale about non-retroactive retention and the access implications of workspace read permissions.
Suppressed comments (2)

README.md:66

  • README storage section says MinIO “backs … backups” and implies “no Azure data PaaS”, but the same README later states Velero backs up to Azure Blob, and the repo’s infra layer provisions durable Azure Blob storage for backups (infra/backup-storage.bicep). This makes the storage overview internally inconsistent.

This issue also appears on line 199 of the same file.

Storage is in-cluster and portable: **MinIO** for S3-compatible object storage
(backs Loki, Thanos, and backups) and **CloudNativePG** for PostgreSQL — no Azure
data PaaS. Persistent volumes use a cheap StandardSSD StorageClass by default,
with a Premium class available opt-in.

README.md:202

  • Portability section claims “In-cluster MinIO + CloudNativePG mean no Azure data PaaS”, but backups are explicitly using a durable Azure Blob storage account (Velero row above; infra/backup-storage.bicep). This undermines the portability summary as written; clarify that the “no Azure data PaaS” claim is about primary runtime data, not backups.
In-cluster MinIO + CloudNativePG mean **no Azure data PaaS**. The residual Azure
surface is the `infra/` Bicep layer (the cluster plus four standalone durable
resources), one StorageClass string, a couple of LB annotations, and one
secret-store object. Everything under `k8s/` moves unchanged.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@hakan-persson hakan-persson left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified the load-bearing claims rather than reading for plausibility. All hold.

No behaviour change — confirmed with the compiler, not by inspection. The
compiled ARM from main and from this branch are byte-identical (az bicep build
on both, diffed as normalised JSON, exit 0). The bicepparam and
loganalytics.bicep edits touch only comments and @description strings;
parameter values are untouched.

(My first attempt compared Python hash() of the two templates and showed a
difference — that was string-hash randomisation between processes, not a real
diff. Mentioning it because "the hashes differ" would have been a plausible-looking
false finding.)

The factual corrections check out:

  • infra/aks.bicep:31 and the bicepparam both pin '1.36' — the minor alias — so
    the README's 1.36.2 was contradicting the repo's own stated policy. The live
    cluster happens to run v1.36.2, which is exactly why pinning the minor and
    letting the patch channel own the patch level is right, and why the README should
    not have hardcoded it.
  • Six infra/*.bicep files exist; the layout block listed four. Agreed that
    missing three of six is a wrong inventory rather than a partial aid.

The retention non-retroactivity point is the one I most wanted written down, and
the framing is right: every day it is deferred on a running cluster silently spends
a day of the history the archive exists to keep. That is a materially different
statement from "we should get around to it".

One overlap to resolve before merge

This and #13 independently fix the same stale sentence — Backups (Velero → MinIO …) are the next planned addition — so they conflict textually (verified with a
trial merge).

Your version is better and should win: "two schedules", base backups and WAL
archiving, plus the pointer to #not-yet-implemented. Mine only corrected the
tense.

They are otherwise complementary — #13 fixes (backs Loki, Thanos, and backups),
which this PR leaves untouched and which is the other half of the same error, since
Velero's BackupStorageLocation has provider: azure.

Suggested order: merge this first, then I rebase #13 onto it and drop my version of
the shared sentence.

Approving.

@hakan-persson
hakan-persson merged commit b026718 into main Aug 22, 2026
5 checks passed
@hakan-persson
hakan-persson deleted the docs/fix-repo-inconsistencies branch August 22, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants