diff --git a/.claude/rules/repo-boundary.md b/.claude/rules/repo-boundary.md index eef78f4..413b7c9 100644 --- a/.claude/rules/repo-boundary.md +++ b/.claude/rules/repo-boundary.md @@ -1,8 +1,12 @@ ## Repo boundary -This repo owns **Repo Seed** only. It does not own: +This repo owns **disaster-control** (Resilience Control Plane) only. - +| Concern | Owner repo | +| --- | --- | +| Backup scripts (`railiance-backup`, `forgejo-backup`, `-s1`, `-s2`) | `railiance-platform`, `railiance-cluster`, `railiance-infra` | +| Forgejo restore orchestration | `railiance-infra` | +| State Hub code | `state-hub` | +| SSH certificates | `ops-warden` | +| Application runtime | `railiance-apps`, product repos | +| Repo template / `statehub register` | `repo-seed` | \ No newline at end of file diff --git a/.claude/rules/repo-identity.md b/.claude/rules/repo-identity.md index 3ccf329..78cd3b6 100644 --- a/.claude/rules/repo-identity.md +++ b/.claude/rules/repo-identity.md @@ -1,5 +1,6 @@ -**Purpose:** Git repository template to bootstrap coulomb projects. +**Purpose:** Resilience Control Plane for Coulomb Social / Helix Forge. **Domain:** infotech -**Repo slug:** repo-seed +**Repo slug:** disaster-control **Topic ID:** cee7bedf-2b48-46ef-8601-006474f2ad7a +**Workplan prefix:** DISCTL-WP- \ No newline at end of file diff --git a/.claude/rules/session-protocol.md b/.claude/rules/session-protocol.md index 800d2b2..13961bb 100644 --- a/.claude/rules/session-protocol.md +++ b/.claude/rules/session-protocol.md @@ -22,14 +22,14 @@ If the hub is offline: `cd ~/state-hub && make api` **Step 2 — Check inbox** With MCP tools: ``` -get_messages(to_agent="repo-seed", unread_only=True) +get_messages(to_agent="disaster-control", unread_only=True) ``` Mark read with `mark_message_read(message_id)`. Reply or act on coordination requests before proceeding. Without MCP tools: ```bash -curl -s "http://127.0.0.1:8000/messages/?to_agent=repo-seed&unread_only=true" \ +curl -s "http://127.0.0.1:8000/messages/?to_agent=disaster-control&unread_only=true" \ | python3 -m json.tool curl -s -X PATCH "http://127.0.0.1:8000/messages//read" \ -H "Content-Type: application/json" -d '{}' @@ -45,7 +45,7 @@ For each file with `status: ready`, `active`, or `blocked`, note pending **Step 4 — Present brief** 1. **Active workstreams** for `infotech` — title, task counts, blocking decisions -2. **Pending tasks** from `workplans/` + any `[repo:repo-seed]` hub tasks +2. **Pending tasks** from `workplans/` + any `[repo:disaster-control]` hub tasks 3. **Goal guidance** — if `goal_guidance` in summary: - `needs_workplan`: surface as top action — *"Repo goal '{title}' has no workplan yet"* - `alignment_warnings`: flag if active work is not aligned with current goal @@ -73,12 +73,12 @@ curl -s -X POST http://127.0.0.1:8000/progress/ \ If workplan files were modified, ensure the local copy is up to date first: ```bash git -C pull --ff-only -cd ~/state-hub && make fix-consistency REPO=repo-seed +cd ~/state-hub && make fix-consistency REPO=disaster-control ``` For repos where implementation runs on a remote machine (e.g. CoulombCore), use the combined target which pulls before fixing: ```bash -cd ~/state-hub && make fix-consistency-remote REPO=repo-seed +cd ~/state-hub && make fix-consistency-remote REPO=disaster-control ``` **C-15** (DB task ahead of file) is normal in multi-machine workflows — writeback will sync the file to match DB. **C-16** (repo behind remote) blocks all writes diff --git a/.claude/rules/stack-and-commands.md b/.claude/rules/stack-and-commands.md index ca469c0..669b2e7 100644 --- a/.claude/rules/stack-and-commands.md +++ b/.claude/rules/stack-and-commands.md @@ -1,27 +1,39 @@ ## Stack -- **Language:** Markdown-first registry and planning repo (no application runtime yet) -- **Key deps:** State Hub ADR-001 workplans, `registry/indexes/capabilities.yaml` +- **Language:** Markdown-first governance repo (YAML registers, policies, runbooks) +- **Key deps:** State Hub ADR-001 workplans, YAML registers, cross-repo backup tooling ## Dev Commands ```bash # Orient (offline-safe) cat .custodian-brief.md -cat README.md -cat SCOPE.md +cat INTENT.md +cat PanicSheet.md ls workplans/ -# Consumer bootstrap docs -cat docs/statehub-register.md -cat docs/template-validation-checklist.md +# Validate register YAML +python3 -c "import yaml; yaml.safe_load(open('AssetRegister.yaml')); yaml.safe_load(open('DataRegister.yaml'))" -# After workplan or registry edits — from ~/state-hub -make fix-consistency REPO=repo-seed - -# Validate registry entries (from reuse-surface checkout) -reuse-surface validate --root . - -# Sanity-check markdown / registry edits +# Sanity-check markdown / YAML edits git diff --check + +# Push to primary + off-Gitea mirror +git push origin main +./tools/sync-mirror.sh + +# After workplan edits — from ~/state-hub +make fix-consistency REPO=disaster-control + +# State Hub API (if hub offline: cd ~/state-hub && make api) +curl -s "http://127.0.0.1:8000/messages/?to_agent=disaster-control&unread_only=true" | python3 -m json.tool ``` + +## Key paths + +| Path | Purpose | +| --- | --- | +| `AssetRegister.yaml` / `DataRegister.yaml` | Stack inventory | +| `BackupPickupQueue.md` | Cross-repo backup closure tracker | +| `TestEvidence/` | Restore drill reports | +| `docs/mirror-sync.md` | Off-Gitea mirror procedure | \ No newline at end of file diff --git a/.repo-classification.yaml b/.repo-classification.yaml index ea7b5f4..a5b1c15 100644 --- a/.repo-classification.yaml +++ b/.repo-classification.yaml @@ -1,18 +1,21 @@ repo_classification: standard: Repo Classification Standard version: '1.0' - classified_at: '2026-06-22' - classified_by: agent - category: tooling + classified_at: '2026-07-07' + classified_by: grok + category: documentation domain: infotech secondary_domains: [] capability_tags: - - platform - - configuration + - resilience + - disaster-recovery + - business-continuity - documentation + - governance business_stake: - technology - - execution + - operations business_mechanics: - operation - notes: Git template for bootstrapping coulomb projects. + - compliance + notes: Resilience Control Plane for Coulomb Social / Helix Forge. \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index d61b5dd..b9ed77a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,13 +1,13 @@ -# Repo Seed — Agent Instructions +# disaster-control — Agent Instructions ## Repo Identity -**Purpose:** Git repository template to bootstrap coulomb projects. +**Purpose:** Resilience Control Plane for Coulomb Social / Helix Forge. **Domain:** infotech -**Repo slug:** repo-seed +**Repo slug:** disaster-control **Topic ID:** `cee7bedf-2b48-46ef-8601-006474f2ad7a` -**Workplan prefix:** `REPO-WP-` +**Workplan prefix:** `DISCTL-WP-` --- @@ -32,7 +32,7 @@ curl -s "http://127.0.0.1:8000/workstreams/?topic_id=cee7bedf-2b48-46ef-8601-006 | python3 -m json.tool # Check inbox -curl -s "http://127.0.0.1:8000/messages/?to_agent=repo-seed&unread_only=true" \ +curl -s "http://127.0.0.1:8000/messages/?to_agent=disaster-control&unread_only=true" \ | python3 -m json.tool ``` @@ -81,7 +81,7 @@ curl -s -X PATCH "http://127.0.0.1:8000/tasks/" \ **Start:** 1. `cat .custodian-brief.md` — domain goal and open workstreams (offline-safe) -2. Check inbox: `GET /messages/?to_agent=repo-seed&unread_only=true`; mark read +2. Check inbox: `GET /messages/?to_agent=disaster-control&unread_only=true`; mark read 3. Scan workplans: `ls workplans/` — note `status: ready`, `active`, or `blocked` files and open tasks 4. Check human-needed tasks: `GET /tasks/?needs_human=true` @@ -95,7 +95,7 @@ curl -s -X PATCH "http://127.0.0.1:8000/tasks/" \ 3. Note for the custodian operator: after workplan file changes, run from `~/state-hub`: ```bash - make fix-consistency REPO=repo-seed + make fix-consistency REPO=disaster-control ``` This syncs task status from files into the hub DB. @@ -122,7 +122,7 @@ Requires the `warden` CLI from `~/ops-warden` (`uv tool install .` or `uv run wa | Agent runtime | How to orient | | --- | --- | -| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=repo-seed` is for coordination, not secret vending | +| **Codex / Grok** (shell, HTTP State Hub) | `warden route` commands above; inbox `to_agent=disaster-control` is for coordination, not secret vending | | **Claude Code** (MCP when available) | `get_domain_summary("custodian")` for workstreams; **still** use `warden route` for credential ownership | | **llm-connect** (inference service) | Never put secret retrieval in prompts; route custody to OpenBao/operator paths surfaced by `warden route` | @@ -156,6 +156,26 @@ get wrong. +## disaster-control workflow + +Markdown-first repo — no application build. Verify changes with: + +```bash +# YAML registers parse +python3 -c "import yaml; yaml.safe_load(open('AssetRegister.yaml')); yaml.safe_load(open('DataRegister.yaml'))" + +# Whitespace / conflict markers +git diff --check + +# Mirror after push to Gitea +./tools/sync-mirror.sh +``` + +**Primary remote:** `gitea-remote:coulomb/disaster-control.git` +**Mirror remote:** `forgejo-remote:coulomb/disaster-control.git` — see `docs/mirror-sync.md` + +**Active workplans:** `DISCTL-WP-*` only. Template `REPO-WP-*` files archived under `workplans/archived/`. + --- ## Workplan Convention (ADR-001) @@ -163,10 +183,10 @@ get wrong. Work items originate as files in this repo — not in the hub. The hub is a read/cache/index layer that rebuilds from files. -**File location:** `workplans/REPO-WP-NNNN-.md` +**File location:** `workplans/DISCTL-WP-NNNN-.md` **Archived location:** finished workplans may move to -`workplans/archived/YYMMDD-REPO-WP-NNNN-.md`. The `YYMMDD` prefix is +`workplans/archived/YYMMDD-DISCTL-WP-NNNN-.md`. The `YYMMDD` prefix is the completion/archive date; the frontmatter `id` does not change. **Ad Hoc Tasks:** small opportunistic fixes discovered during a session use @@ -178,11 +198,11 @@ anything needing analysis, design, approval, dependencies, or multiple phases. ```yaml --- -id: REPO-WP-NNNN +id: DISCTL-WP-NNNN type: workplan title: "..." domain: infotech -repo: repo-seed +repo: disaster-control status: proposed | ready | active | blocked | backlog | finished | archived owner: codex topic_slug: ... @@ -202,7 +222,7 @@ derived health labels, not frontmatter statuses. ## Task Title ` ` `task -id: REPO-WP-NNNN-T01 +id: DISCTL-WP-NNNN-T01 status: wait | todo | progress | done | cancel priority: high | medium | low state_hub_task_id: "" # written by fix-consistency — do not edit @@ -215,5 +235,5 @@ Status progression: `todo` → `progress` → `done`; use `wait` for waiting/blo To create a new workplan: 1. Write the file following the format above -2. Notify the custodian operator to run `make fix-consistency REPO=repo-seed` +2. Notify the custodian operator to run `make fix-consistency REPO=disaster-control` (or send a message to the hub agent via `POST /messages/`) diff --git a/SCOPE.md b/SCOPE.md index 802fd33..7a81a14 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -6,26 +6,33 @@ ## One-liner -Git repository template to bootstrap coulomb projects. +Resilience Control Plane for Coulomb Social / Helix Forge — recovery governance, evidence, and registers. --- ## Core Idea -repo-seed is the canonical template for new repos: agent instructions, registry scaffold, and onboarding conventions. +`disaster-control` is the single source of truth for business continuity, disaster +recovery, cyber recovery, and restore-test evidence. It documents what exists, +what must survive, how it is rebuilt, and whether restore actually works. --- ## In Scope -- Template files for new repo bootstrap -- Documentation for statehub_register usage -- Registry capability entry for template capability +- Asset and data registers (`AssetRegister.yaml`, `DataRegister.yaml`) +- Resilience and backup policy (`ResiliencePolicy.md`, `BackupPolicy.md`, `RTO-RPO-Matrix.md`) +- Restore runbooks and incident playbooks +- Test evidence from restore drills (`TestEvidence/`) +- Cross-repo backup pickup tracking (`BackupPickupQueue.md`) +- Panic sheet and operator recovery documentation +- State Hub workplans (ADR-001) for resilience work --- ## Out of Scope - Application runtime code -- Owning downstream project implementations - +- Backup script implementation (lives in `railiance-cluster`, `railiance-platform`, `railiance-infra`) +- Owning infrastructure remediation — this repo tracks and evidences; owner repos implement +- `registry/` capability publish (inherited template scaffold; canonical template is `repo-seed`) \ No newline at end of file diff --git a/workplans/DISCTL-WP-0001-statehub-bootstrap.md b/workplans/DISCTL-WP-0001-statehub-bootstrap.md index 0cbbc8a..11a932b 100644 --- a/workplans/DISCTL-WP-0001-statehub-bootstrap.md +++ b/workplans/DISCTL-WP-0001-statehub-bootstrap.md @@ -4,11 +4,11 @@ type: workplan title: "Bootstrap State Hub integration" domain: infotech repo: disaster-control -status: ready -owner: codex +status: finished +owner: grok topic_slug: custodian created: "2026-07-04" -updated: "2026-07-04" +updated: "2026-07-07" state_hub_workstream_id: "e7e1ad29-1c50-40cf-9e1c-b6e43111ff17" --- @@ -20,7 +20,7 @@ Resilience control plane for Coulomb Social / Helix Forge: the single source of ```task id: DISCTL-WP-0001-T01 -status: todo +status: done priority: high state_hub_task_id: "af1cee45-7172-478a-8df4-3cda0e161a45" ``` @@ -28,11 +28,15 @@ state_hub_task_id: "af1cee45-7172-478a-8df4-3cda0e161a45" Review `INTENT.md`, `SCOPE.md`, `AGENTS.md`, and `.custodian-brief.md`. Replace generated placeholders with repo-specific facts where needed. +Result 2026-07-07: Updated identity across `AGENTS.md`, `SCOPE.md`, +`.claude/rules/`, `.repo-classification.yaml`; archived template `REPO-WP-*` +workplans to `workplans/archived/`. + ## Verify Local Developer Workflow ```task id: DISCTL-WP-0001-T02 -status: todo +status: done priority: high state_hub_task_id: "7a96f4ee-a491-4f37-9dbb-8f1c033aa042" ``` @@ -41,6 +45,9 @@ Identify the repo's install, test, lint, build, and run commands. Add or refine those commands in the agent instructions so future coding sessions can verify changes confidently. +Result 2026-07-07: Documented YAML validation, `git diff --check`, mirror sync, +and `fix-consistency` in `AGENTS.md` and `.claude/rules/stack-and-commands.md`. + ## Seed First Real Workplan ```task diff --git a/workplans/REPO-WP-0001-statehub-bootstrap.md b/workplans/archived/260707-REPO-WP-0001-statehub-bootstrap.md similarity index 100% rename from workplans/REPO-WP-0001-statehub-bootstrap.md rename to workplans/archived/260707-REPO-WP-0001-statehub-bootstrap.md diff --git a/workplans/REPO-WP-0002-template-validation-checklist.md b/workplans/archived/260707-REPO-WP-0002-template-validation-checklist.md similarity index 100% rename from workplans/REPO-WP-0002-template-validation-checklist.md rename to workplans/archived/260707-REPO-WP-0002-template-validation-checklist.md