Initialize ops repository
This commit is contained in:
33
.gitignore
vendored
Normal file
33
.gitignore
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
.DS_Store
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Terraform
|
||||
**/.terraform/
|
||||
**/*.tfstate
|
||||
**/*.tfstate.*
|
||||
**/crash.log
|
||||
**/crash.*.log
|
||||
|
||||
# Common secret material (keep out of Git)
|
||||
*.pem
|
||||
*.key
|
||||
*.p12
|
||||
*.pfx
|
||||
*.jks
|
||||
*.kubeconfig
|
||||
*.ovpn
|
||||
*.mobileconfig
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
*.tfvars
|
||||
*.tfvars.json
|
||||
!.tfvars.example
|
||||
!.tfvars.json.example
|
||||
|
||||
# Decrypted scratch areas
|
||||
vault/tmp/
|
||||
1
00-doctrine/.gitkeep
Normal file
1
00-doctrine/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
7
00-doctrine/README.md
Normal file
7
00-doctrine/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Doctrine
|
||||
|
||||
This directory defines the non-negotiable rules of operation.
|
||||
|
||||
- `operator-charter.md` is the one-page version you keep visible.
|
||||
- `personal-operating-doctrine.md` is the full doctrine that everything derives from.
|
||||
|
||||
25
00-doctrine/backup-doctrine.md
Normal file
25
00-doctrine/backup-doctrine.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Backup Doctrine
|
||||
|
||||
## Principles
|
||||
|
||||
- Backups exist for **calm recovery**, not comfort.
|
||||
- Encrypt backups **before** they leave the system.
|
||||
- A backup that cannot be safely lost is incorrectly scoped.
|
||||
- Restores are verified: a backup without a restore test is a hope, not a backup.
|
||||
|
||||
## In-repo boundaries
|
||||
|
||||
- What is backed up, where it is stored, and how it is restored is recorded in `60-backups/manifests/`.
|
||||
- Proof that restores work (restore drills, checksums, validation notes) lives in `60-backups/restore-tests/`.
|
||||
|
||||
## Minimum standard
|
||||
|
||||
For each backup set, record:
|
||||
|
||||
- Source (what)
|
||||
- Destination (where)
|
||||
- Method (how)
|
||||
- Frequency (when)
|
||||
- Restore procedure (how to get it back)
|
||||
- Validation (how you know it worked)
|
||||
|
||||
27
00-doctrine/identity-law.md
Normal file
27
00-doctrine/identity-law.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Identity Law
|
||||
|
||||
## Principles
|
||||
|
||||
- Operate via **roles**, not personalities.
|
||||
- Issue access as **leases** (time-bound, revocable), not permanence.
|
||||
- Prefer **short-lived credentials** over long-lived secrets.
|
||||
- Public keys are safe to store; private keys are not.
|
||||
|
||||
## In-repo boundaries
|
||||
|
||||
- Role definitions live in `20-identity/roles/`.
|
||||
- Policies and intent live in `20-identity/policies/`.
|
||||
- Leases (who/what has access, until when) live in `20-identity/leases/`.
|
||||
- Public keys live in `20-identity/keys/public/`.
|
||||
- Private keys and plaintext secrets never live in this repo.
|
||||
|
||||
## Required properties (revocation)
|
||||
|
||||
Every identity mechanism must support:
|
||||
|
||||
1. **Revoke**: shut it off quickly.
|
||||
2. **Rotate**: replace it predictably.
|
||||
3. **Prove**: show what changed and when.
|
||||
|
||||
If any of the above is not true, the mechanism does not belong in the core.
|
||||
|
||||
113
00-doctrine/operator-charter.md
Normal file
113
00-doctrine/operator-charter.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# The Operator Charter (One Page)
|
||||
|
||||
*(v1.0)*
|
||||
|
||||
## I. Prime Directive
|
||||
|
||||
I do not optimize for convenience. I optimize for **clarity, recoverability, and sovereignty**.
|
||||
|
||||
If a system cannot be understood, rebuilt, or revoked, it does not belong.
|
||||
|
||||
## II. The Core
|
||||
|
||||
There is **one core of authority**.
|
||||
|
||||
- `op-core-vm` is the origin of action.
|
||||
- It is disposable, but authoritative.
|
||||
- No critical action occurs outside it.
|
||||
|
||||
The host is a console. The phone is a witness.
|
||||
|
||||
## III. Identity Law
|
||||
|
||||
Identity is finite.
|
||||
|
||||
- Roles over personalities.
|
||||
- Least privilege, always.
|
||||
- Devices receive leases, never permanence.
|
||||
|
||||
Anything that cannot be revoked cleanly is a liability.
|
||||
|
||||
## IV. Naming Is Reality
|
||||
|
||||
If it cannot be named correctly, it is not understood.
|
||||
|
||||
Format:
|
||||
|
||||
```
|
||||
<role>-<scope>-<id>
|
||||
```
|
||||
|
||||
No myth names. No ambiguity. Renaming precedes deletion.
|
||||
|
||||
## V. Infrastructure Doctrine
|
||||
|
||||
Infrastructure is **cattle, not pets**.
|
||||
|
||||
- Nodes are replaceable.
|
||||
- Loss is expected.
|
||||
- Rebuilds are boring.
|
||||
|
||||
Sentiment is reserved for people, not machines.
|
||||
|
||||
## VI. Separation of Meaning
|
||||
|
||||
Meaning and infrastructure never mix.
|
||||
|
||||
- Knowledge, media, philosophy → cold storage.
|
||||
- Keys, infra, authority → clean core.
|
||||
|
||||
What matters must be portable. What operates must be disposable.
|
||||
|
||||
## VII. Backup Rule
|
||||
|
||||
Backups exist for **calm recovery**, not comfort.
|
||||
|
||||
- Encrypt before upload.
|
||||
- Cloud storage is a vault, never a brain.
|
||||
- No live sync for the core.
|
||||
|
||||
If losing a backup causes panic, it is wrongly scoped.
|
||||
|
||||
## VIII. The Nuke Test
|
||||
|
||||
Every system must answer:
|
||||
|
||||
> “If this disappears today, can I rebuild without panic?”
|
||||
|
||||
If not: reduce scope, split responsibility, document recovery, or remove it.
|
||||
|
||||
## IX. Tool Discipline
|
||||
|
||||
Every tool must earn its place.
|
||||
|
||||
- Fewer tools, deeper mastery.
|
||||
- No duplicates without reason.
|
||||
- No installs without intent.
|
||||
|
||||
Bloat is deferred failure.
|
||||
|
||||
## X. Drift Control
|
||||
|
||||
Entropy is natural. Drift is optional.
|
||||
|
||||
Regularly: audit identities, review devices, correct names, delete without regret.
|
||||
|
||||
Maintenance is freedom.
|
||||
|
||||
## XI. Authority Boundary
|
||||
|
||||
Critical actions occur only:
|
||||
|
||||
- from the core
|
||||
- with intent
|
||||
- with traceability
|
||||
|
||||
No shortcuts. No “just this once”.
|
||||
|
||||
## XII. Final Law
|
||||
|
||||
I build systems I am **not afraid to touch**.
|
||||
|
||||
If fear appears, I stop — not to hesitate, but to **restore clarity**.
|
||||
|
||||
111
00-doctrine/personal-operating-doctrine.md
Normal file
111
00-doctrine/personal-operating-doctrine.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Personal Operating Doctrine — Operator Edition
|
||||
|
||||
*(v1.0)*
|
||||
|
||||
## 1. Prime Directive
|
||||
|
||||
I do not optimize for convenience. I optimize for **clarity, recoverability, and sovereignty**.
|
||||
|
||||
If a system cannot be understood, rebuilt, or revoked, it does not belong.
|
||||
|
||||
## 2. The Core
|
||||
|
||||
There exists **one core** from which all authority flows:
|
||||
|
||||
- `op-core-vm` is the origin of action.
|
||||
- It is disposable, but authoritative.
|
||||
- Nothing touches critical infrastructure unless it originates here.
|
||||
|
||||
The host machine is a **console**, not a source of trust. The phone is a **witness**, not a workstation.
|
||||
|
||||
## 3. Identity Law
|
||||
|
||||
Identity is finite.
|
||||
|
||||
- I operate through **roles**, not personalities.
|
||||
- Each role has minimal scope and clear purpose.
|
||||
- Devices hold **leases**, never permanent identity.
|
||||
|
||||
Anything that cannot be cleanly revoked is a liability.
|
||||
|
||||
## 4. Naming Is Reality
|
||||
|
||||
If I cannot name it correctly, I do not understand it.
|
||||
|
||||
All systems are named by:
|
||||
|
||||
```
|
||||
<role>-<scope>-<id>
|
||||
```
|
||||
|
||||
No myth names. No vibes. No ambiguity.
|
||||
|
||||
Renaming precedes deletion. Deletion follows clarity.
|
||||
|
||||
## 5. Infrastructure Is Cattle
|
||||
|
||||
No machine is sacred.
|
||||
|
||||
- All nodes are replaceable.
|
||||
- Rebuilds are expected.
|
||||
- Loss is boring, not catastrophic.
|
||||
|
||||
Sentiment is reserved for people and meaning — never machines.
|
||||
|
||||
## 6. Separation of Concerns
|
||||
|
||||
Meaning and infrastructure do not mix.
|
||||
|
||||
- Knowledge, media, philosophy → cold storage.
|
||||
- Keys, infra, authority → clean core.
|
||||
|
||||
What matters must be portable. What operates must be disposable.
|
||||
|
||||
## 7. Backup Doctrine
|
||||
|
||||
Backups exist to enable **calm recovery**, not comfort.
|
||||
|
||||
- All backups are encrypted **before** leaving the system.
|
||||
- Cloud storage is a **vault**, never a brain.
|
||||
- No live sync for core systems.
|
||||
|
||||
If a backup cannot be lost safely, it is incorrectly scoped.
|
||||
|
||||
## 8. The Nuke Test
|
||||
|
||||
Any system must pass this test:
|
||||
|
||||
> “If this disappears today, can I rebuild without panic?”
|
||||
|
||||
If the answer is no: reduce scope, split responsibility, document recovery, or remove it entirely.
|
||||
|
||||
## 9. Tool Minimalism
|
||||
|
||||
Every tool must earn its place.
|
||||
|
||||
- Fewer tools, deeper mastery.
|
||||
- No duplicates without reason.
|
||||
- No installs without intent.
|
||||
|
||||
Bloat is deferred failure.
|
||||
|
||||
## 10. Drift Control
|
||||
|
||||
Entropy is inevitable. Drift is optional.
|
||||
|
||||
I perform regular identity audits, device reviews, naming corrections, and deletion passes.
|
||||
|
||||
Maintenance is a form of freedom.
|
||||
|
||||
## 11. Authority Boundary
|
||||
|
||||
Critical actions happen only from `op-core-vm`, with intent, awareness, and traceability.
|
||||
|
||||
No “just this once”. No shortcuts.
|
||||
|
||||
## 12. Final Rule
|
||||
|
||||
I build systems I am **not afraid to touch**.
|
||||
|
||||
If fear appears, I stop — not to hesitate, but to **restore clarity**.
|
||||
|
||||
9
10-inventory/README.md
Normal file
9
10-inventory/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Inventory
|
||||
|
||||
Inventory is the map of reality.
|
||||
|
||||
- Hosts live under `10-inventory/hosts/<role>-<scope>-<id>/`.
|
||||
- Networks and services are recorded under `10-inventory/networks/` and `10-inventory/services/`.
|
||||
|
||||
If it exists and matters operationally, it is inventoried and named.
|
||||
|
||||
1
10-inventory/hosts/.gitkeep
Normal file
1
10-inventory/hosts/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
10-inventory/networks/.gitkeep
Normal file
1
10-inventory/networks/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
10-inventory/services/.gitkeep
Normal file
1
10-inventory/services/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
13
20-identity/README.md
Normal file
13
20-identity/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Identity
|
||||
|
||||
Identity is operated as roles + leases.
|
||||
|
||||
In this repo:
|
||||
|
||||
- roles: `20-identity/roles/`
|
||||
- policies: `20-identity/policies/`
|
||||
- leases (time-bound grants): `20-identity/leases/`
|
||||
- public keys only: `20-identity/keys/public/`
|
||||
|
||||
Private keys and plaintext secrets do not belong here.
|
||||
|
||||
1
20-identity/keys/public/.gitkeep
Normal file
1
20-identity/keys/public/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
7
20-identity/keys/public/README.md
Normal file
7
20-identity/keys/public/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Public keys only
|
||||
|
||||
Store public keys here (e.g., `*.pub`).
|
||||
|
||||
- Name keys to match the role/device: `<role>-<scope>-<id>`.
|
||||
- Never commit private keys.
|
||||
|
||||
1
20-identity/leases/.gitkeep
Normal file
1
20-identity/leases/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
20-identity/policies/.gitkeep
Normal file
1
20-identity/policies/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
20-identity/roles/.gitkeep
Normal file
1
20-identity/roles/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
20-identity/templates/.gitkeep
Normal file
1
20-identity/templates/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
8
30-infra/README.md
Normal file
8
30-infra/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Infrastructure
|
||||
|
||||
Infrastructure is cattle.
|
||||
|
||||
Store infrastructure-as-code and configuration management here.
|
||||
|
||||
Guardrail: keep state and generated artifacts out of Git (e.g., Terraform state).
|
||||
|
||||
1
30-infra/config/.gitkeep
Normal file
1
30-infra/config/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
30-infra/k8s/.gitkeep
Normal file
1
30-infra/k8s/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
30-infra/terraform/.gitkeep
Normal file
1
30-infra/terraform/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
40-apps/.gitkeep
Normal file
1
40-apps/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
4
40-apps/README.md
Normal file
4
40-apps/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Apps
|
||||
|
||||
Application-specific operational material (deploy, config, lifecycle) lives here.
|
||||
|
||||
1
50-runbooks/00-panic-day/.gitkeep
Normal file
1
50-runbooks/00-panic-day/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
13
50-runbooks/00-panic-day/README.md
Normal file
13
50-runbooks/00-panic-day/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Panic Day
|
||||
|
||||
This folder contains rebuild-from-zero drills.
|
||||
|
||||
Rule: each drill must be runnable with only this repo, cold storage, and the vault keys.
|
||||
|
||||
Suggested drills:
|
||||
|
||||
- Rebuild `op-core-vm` from a clean base image.
|
||||
- Restore this repo, validate integrity, and re-establish authority boundary.
|
||||
- Rotate critical credentials and invalidate all prior device leases.
|
||||
- Restore one representative backup set end-to-end and record proof.
|
||||
|
||||
1
50-runbooks/10-provision/.gitkeep
Normal file
1
50-runbooks/10-provision/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
4
50-runbooks/10-provision/README.md
Normal file
4
50-runbooks/10-provision/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Provision
|
||||
|
||||
Create and bootstrap new nodes/services in a repeatable way.
|
||||
|
||||
1
50-runbooks/20-incident/.gitkeep
Normal file
1
50-runbooks/20-incident/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
4
50-runbooks/20-incident/README.md
Normal file
4
50-runbooks/20-incident/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Incident
|
||||
|
||||
Containment, diagnosis, recovery, and postmortem procedures.
|
||||
|
||||
1
50-runbooks/90-decom/.gitkeep
Normal file
1
50-runbooks/90-decom/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
4
50-runbooks/90-decom/README.md
Normal file
4
50-runbooks/90-decom/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Decommission
|
||||
|
||||
Safe teardown, revocation, and evidence capture for retired systems.
|
||||
|
||||
15
50-runbooks/README.md
Normal file
15
50-runbooks/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Runbooks
|
||||
|
||||
Runbooks are executable documents: written to be followed under pressure.
|
||||
|
||||
Minimum required sections:
|
||||
|
||||
- Purpose
|
||||
- Preconditions
|
||||
- Steps (exact commands)
|
||||
- Validation (how you know it worked)
|
||||
- Rollback / abort criteria
|
||||
- Evidence (what to record)
|
||||
|
||||
Use `ops/50-runbooks/_template.md` for new runbooks.
|
||||
|
||||
35
50-runbooks/_template.md
Normal file
35
50-runbooks/_template.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Runbook: <title>
|
||||
|
||||
## Purpose
|
||||
|
||||
What this runbook does and when to use it.
|
||||
|
||||
## Preconditions
|
||||
|
||||
- Access/role required:
|
||||
- Systems required:
|
||||
- Expected safe state:
|
||||
- Time estimate:
|
||||
|
||||
## Steps
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## Validation
|
||||
|
||||
How to prove the procedure succeeded (commands + expected output).
|
||||
|
||||
## Rollback / Abort
|
||||
|
||||
What to do if validation fails, and when to stop.
|
||||
|
||||
## Evidence
|
||||
|
||||
What you record (timestamps, change IDs, logs, screenshots).
|
||||
|
||||
## Notes
|
||||
|
||||
Gotchas, dependencies, links.
|
||||
|
||||
7
60-backups/README.md
Normal file
7
60-backups/README.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Backups
|
||||
|
||||
- Backup manifests live in `60-backups/manifests/`.
|
||||
- Restore proofs live in `60-backups/restore-tests/`.
|
||||
|
||||
Backups are only real when restores are verified.
|
||||
|
||||
1
60-backups/manifests/.gitkeep
Normal file
1
60-backups/manifests/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
60-backups/restore-tests/.gitkeep
Normal file
1
60-backups/restore-tests/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
9
70-audits/README.md
Normal file
9
70-audits/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Audits
|
||||
|
||||
Audits are how drift is prevented.
|
||||
|
||||
- Checklists live in `70-audits/checklists/`.
|
||||
- Evidence and outcomes live in `70-audits/reports/`.
|
||||
|
||||
If a checklist item cannot be verified, treat it as failed until proven otherwise.
|
||||
|
||||
1
70-audits/checklists/.gitkeep
Normal file
1
70-audits/checklists/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
12
70-audits/checklists/README.md
Normal file
12
70-audits/checklists/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Checklists
|
||||
|
||||
Use these to perform regular drift control.
|
||||
|
||||
When you run a checklist, file the result under `70-audits/reports/` with:
|
||||
|
||||
- date/time
|
||||
- operator role used
|
||||
- what changed
|
||||
- what was revoked/rotated
|
||||
- any failures and follow-ups
|
||||
|
||||
17
70-audits/checklists/quarterly.md
Normal file
17
70-audits/checklists/quarterly.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Quarterly Drift Control
|
||||
|
||||
## Identity
|
||||
|
||||
- Rotate high-value credentials and invalidate old material.
|
||||
- Re-evaluate role scopes; remove privileges that became “default”.
|
||||
|
||||
## Backup reality check
|
||||
|
||||
- Perform a full restore drill of at least one critical system.
|
||||
- Verify restore validation steps still match reality.
|
||||
|
||||
## Infra sanity
|
||||
|
||||
- Identify and remove orphaned resources (accounts, hosts, services).
|
||||
- Confirm all critical infrastructure is reproducible from `ops/`.
|
||||
|
||||
22
70-audits/checklists/weekly.md
Normal file
22
70-audits/checklists/weekly.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Weekly Drift Control
|
||||
|
||||
## Identity
|
||||
|
||||
- Review active leases; revoke anything unused or unclear.
|
||||
- Confirm least-privilege matches reality (roles/policies still correct).
|
||||
- Confirm no new long-lived credentials exist without rotation plan.
|
||||
|
||||
## Backups
|
||||
|
||||
- Verify latest backups completed for all critical sets.
|
||||
- Confirm at least one restore proof is recent (per backup cadence).
|
||||
|
||||
## Inventory / Naming
|
||||
|
||||
- Confirm new systems/services are inventoried and named `<role>-<scope>-<id>`.
|
||||
- Rename unclear entries before deleting anything.
|
||||
|
||||
## Core boundary
|
||||
|
||||
- Confirm critical changes still originate only from `op-core-vm`.
|
||||
|
||||
1
70-audits/reports/.gitkeep
Normal file
1
70-audits/reports/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
9
70-audits/reports/README.md
Normal file
9
70-audits/reports/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Reports
|
||||
|
||||
Store audit outcomes and evidence here.
|
||||
|
||||
Suggested format:
|
||||
|
||||
- `YYYY-MM-DD-weekly.md`
|
||||
- `YYYY-Q#-quarterly.md`
|
||||
|
||||
4
80-automation/README.md
Normal file
4
80-automation/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Automation
|
||||
|
||||
Scripts and containers that make operations repeatable live here.
|
||||
|
||||
1
80-automation/containers/.gitkeep
Normal file
1
80-automation/containers/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
80-automation/scripts/.gitkeep
Normal file
1
80-automation/scripts/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
3
90-scratch/.gitignore
vendored
Normal file
3
90-scratch/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!README.md
|
||||
6
90-scratch/README.md
Normal file
6
90-scratch/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Scratch
|
||||
|
||||
Disposable working area.
|
||||
|
||||
Nothing here is source of truth. Everything here is safe to delete.
|
||||
|
||||
34
README.md
Normal file
34
README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# ops
|
||||
|
||||
Single source of operational truth: everything here must be understandable, rebuildable, and revocable.
|
||||
|
||||
## Non-negotiables
|
||||
|
||||
- **Authority boundary:** critical actions originate from `op-core-vm`.
|
||||
- **No plaintext secrets in Git:** `vault/` contains encrypted artifacts only; `20-identity/keys/public/` is public keys only.
|
||||
- **Naming is reality:** everything is named `<role>-<scope>-<id>`.
|
||||
- **Nuke test:** if losing it causes panic, reduce scope or remove it.
|
||||
|
||||
## Read first
|
||||
|
||||
- `00-doctrine/operator-charter.md`
|
||||
- `00-doctrine/personal-operating-doctrine.md`
|
||||
|
||||
## Layout
|
||||
|
||||
- `00-doctrine/` – the law (stable, rarely changed)
|
||||
- `10-inventory/` – what exists (hosts, networks, services)
|
||||
- `20-identity/` – roles, policies, leases, public keys
|
||||
- `30-infra/` – infrastructure as code + config management
|
||||
- `40-apps/` – application-specific ops (deploy, config, lifecycle)
|
||||
- `50-runbooks/` – executable procedures (panic day, provision, incident, decom)
|
||||
- `60-backups/` – backup manifests + restore proofs
|
||||
- `70-audits/` – checklists + reports
|
||||
- `80-automation/` – scripts and containers that make the above repeatable
|
||||
- `90-scratch/` – disposable working area (not source of truth)
|
||||
- `vault/` – encrypted-only artifacts (safe to leak without keys)
|
||||
|
||||
## What does not belong here
|
||||
|
||||
Meaning-bearing material (books, media, personal archives) stays in cold storage, not `ops/`.
|
||||
|
||||
12
vault/README.md
Normal file
12
vault/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Vault (encrypted-only)
|
||||
|
||||
This directory contains **encrypted artifacts only**.
|
||||
|
||||
Rules:
|
||||
|
||||
- Never commit plaintext secrets (even temporarily).
|
||||
- Never commit private keys.
|
||||
- Treat `vault/` as safe-to-leak ciphertext: if leaking it would break you, it is mis-scoped.
|
||||
|
||||
Decryption/working material belongs in `vault/tmp/` (gitignored) and should be wiped after use.
|
||||
|
||||
Reference in New Issue
Block a user