Verify-before-mutate doctrine: annotate live-state fields, fix stale Zulip IP (.117→.19)

- Added FIELD TRUST convention to frontmatter (live-state vs policy fields)
- Marked credentials/IPs with VERIFY-BEFORE-USE labels
- Fixed 3 stale Zulip IP references (.117 → .19) that caused the 2026-07-03 outage
- Added verify-before-mutate skill reference
- See knowledge graph node #604 for post-mortem
This commit is contained in:
Abiba
2026-07-03 20:10:45 +00:00
parent ae143d7a88
commit d31ae0c25a
+18 -5
View File
@@ -6,6 +6,12 @@ description: >
5-node Proxmox cluster, 3 Docker ecosystems (22 containers), 5-node Proxmox cluster, 3 Docker ecosystems (22 containers),
NFS storage, and network services. Defines monitors, remediations, NFS storage, and network services. Defines monitors, remediations,
and the access matrix for all environments. and the access matrix for all environments.
FIELD TRUST: Live-state fields (IPs, ports, hostnames, credentials,
container names, PIDs) are marked VERIFY-BEFORE-USE. They drift —
never mutate infrastructure based on them without first confirming
against the live system. Policy fields are authoritative. See the
`verify-before-mutate` skill.
--- ---
# Infrastructure Control Pattern # Infrastructure Control Pattern
@@ -67,8 +73,15 @@ description: >
| Gitea | API token | abiba-bot token | ✅ | | Gitea | API token | abiba-bot token | ✅ |
| Zulip | Bot API key | abiba-bot@chat.sysloggh.net | ✅ | | Zulip | Bot API key | abiba-bot@chat.sysloggh.net | ✅ |
| RA-H OS | MCP bridge | port 3100 | ✅ | | RA-H OS | MCP bridge | port 3100 | ✅ |
| LiteLLM Admin | master key | `sk-litellm-7f96...` | ✅ | | LiteLLM Admin | master key | `sk-litellm-7f96...` | ✅ VERIFY-BEFORE-USE |
| Grafana | admin password | `syslog-grafana-2026` | ✅ | | Grafana | admin password | `syslog-grafana-2026` | ✅ VERIFY-BEFORE-USE |
> **VERIFY-BEFORE-USE**: Credentials, IPs, ports, and hostnames in this
> contract are live-state fields. Test them against the live system before
> relying on them (e.g., `curl -H "Authorization: Bearer $KEY" .../v1/models`
> for a LiteLLM key; `pct config <ct>` for a CT IP). Drift is expected —
> see `verify-before-mutate` skill. Policy fields (rules, doctrines) are
> authoritative and do not need verification.
### Reachability Matrix ### Reachability Matrix
@@ -341,7 +354,7 @@ fine. Services that resolve directly to a LAN IP are NetBird-independent.
| LiteLLM | litellm.sysloggh.net | 192.168.68.116 | LAN IP | No | ✅ | | LiteLLM | litellm.sysloggh.net | 192.168.68.116 | LAN IP | No | ✅ |
| Authentik | auth.sysloggh.net:443 | 192.168.68.11 | CNAME → netbird | **Yes** | ⚠️ | | Authentik | auth.sysloggh.net:443 | 192.168.68.11 | CNAME → netbird | **Yes** | ⚠️ |
| Gitea | git.sysloggh.net:443 | 192.168.68.110 | CNAME → netbird | **Yes** | ⚠️ | | Gitea | git.sysloggh.net:443 | 192.168.68.110 | CNAME → netbird | **Yes** | ⚠️ |
| Zulip | chat.sysloggh.net:443 | 192.168.68.117 | CNAME → netbird | **Yes** | ⚠️ | | Zulip | chat.sysloggh.net:443 | 192.168.68.19 | CNAME → netbird | **Yes** | ⚠️ VERIFY-BEFORE-USE |
| Pulse | pulse.sysloggh.net:443 | 192.168.68.7 | CNAME → netbird | **Yes** | ⚠️ | | Pulse | pulse.sysloggh.net:443 | 192.168.68.7 | CNAME → netbird | **Yes** | ⚠️ |
| DNS UI | dns.sysloggh.net:443 | 192.168.68.102 | CNAME → netbird | **Yes** | ⚠️ | | DNS UI | dns.sysloggh.net:443 | 192.168.68.102 | CNAME → netbird | **Yes** | ⚠️ |
| SearXNG | searxng.sysloggh.net:8888 | 192.168.68.7:8888 | LAN IP | No | ✅ | | SearXNG | searxng.sysloggh.net:8888 | 192.168.68.7:8888 | LAN IP | No | ✅ |
@@ -498,7 +511,7 @@ enforced by the `routing-regression.config_url_violations` check in Section
| Grafana | `http://192.168.68.116:3001` | — | | Grafana | `http://192.168.68.116:3001` | — |
| Authentik | `https://192.168.68.11` | `https://auth.sysloggh.net` | | Authentik | `https://192.168.68.11` | `https://auth.sysloggh.net` |
| Gitea | `http://192.168.68.110:3000` | `https://git.sysloggh.net` | | Gitea | `http://192.168.68.110:3000` | `https://git.sysloggh.net` |
| Zulip API | `http://192.168.68.117` | `https://chat.sysloggh.net` | | Zulip API | `http://192.168.68.19` | `https://chat.sysloggh.net` |
| SearXNG | `http://192.168.68.7:8888` | — | | SearXNG | `http://192.168.68.7:8888` | — |
| Firecrawl | `http://192.168.68.7:3002` | — | | Firecrawl | `http://192.168.68.7:3002` | — |
| RA-H OS bridge | `http://192.168.68.65:3100` | — | | RA-H OS bridge | `http://192.168.68.65:3100` | — |
@@ -508,7 +521,7 @@ enforced by the `routing-regression.config_url_violations` check in Section
- ❌ An agent config setting `LITELLM_BASE_URL=https://litellm.sysloggh.net` - ❌ An agent config setting `LITELLM_BASE_URL=https://litellm.sysloggh.net`
- ✅ Same config setting `LITELLM_BASE_URL=http://192.168.68.116:4000` - ✅ Same config setting `LITELLM_BASE_URL=http://192.168.68.116:4000`
- ❌ A monitor curling `https://chat.sysloggh.net/api/v1/server_settings` - ❌ A monitor curling `https://chat.sysloggh.net/api/v1/server_settings`
- ✅ A monitor curling `http://192.168.68.117/api/v1/server_settings` (and - ✅ A monitor curling `http://192.168.68.19/api/v1/server_settings` (and
optionally the URL as a separate browser-path check) optionally the URL as a separate browser-path check)
### Goal state ### Goal state