docs(guide): add platform.production-checks + new DEVOPS section (backups, security)

- platform.production-checks: the daily prod health sweep (deep actuator/critical
  set, Loki ERROR+5xx top-5, backup freshness, ClamAV per-VM) -> 06:30 email report.
- NEW DevOps nav section in the reader (SPECIAL + section block + expandFor).
- devops.backups: pg_dumpall->Swift nightly job, verify/restore, gaps (#13/#14/#15).
- devops.security: ClamAV/firewall posture from the 2026-07-02 sweep — FAILING,
  remediation in #16 (Critical, PCI CDE) / #17. Reconciler: devops = concept docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 07:55:49 -04:00
parent 2be67a26d1
commit 5d23388ef5
5 changed files with 210 additions and 2 deletions
+18 -1
View File
@@ -22,6 +22,7 @@
function expandFor(key: string) {
const app = key.split('.')[0];
if (app === 'platform') open = { ...open, platform: true };
else if (app === 'devops') open = { ...open, devops: true };
else if (app === 'technical') open = { ...open, technical: true };
else if (app === 'processes') open = { ...open, processes: true };
else open = { ...open, modules: true, ['app:' + app]: true };
@@ -81,9 +82,10 @@
// group nav: product-app "Modules" section (all except platform/technical) + platform + technical
$: searching = !!search.trim();
const SPECIAL = ['platform', 'technical', 'processes'];
const SPECIAL = ['platform', 'devops', 'technical', 'processes'];
$: productApps = filtered.filter(a => !SPECIAL.includes(a.app));
$: platformApp = filtered.find(a => a.app === 'platform') ?? null;
$: devopsApp = filtered.find(a => a.app === 'devops') ?? null;
$: technicalApp = filtered.find(a => a.app === 'technical') ?? null;
$: processesApp = filtered.find(a => a.app === 'processes') ?? null;
@@ -178,6 +180,21 @@
</div>
{/if}
<!-- DEVOPS -->
{#if devopsApp}
<div class="nav-sec">
<button class="sec-head" on:click={() => toggle('devops')}>
<span class="chev">{(searching || open['devops']) ? '▾' : '▸'}</span> DevOps
</button>
{#if (searching || open['devops'])}
{#each devopsApp.modules as m (m.module)}
<button class="nav-item" class:active={m.module === activeModuleKey}
on:click={() => selectModule(m.module)} title={m.module}>{m.title}</button>
{/each}
{/if}
</div>
{/if}
<!-- TECHNICAL -->
{#if technicalApp}
<div class="nav-sec">