Home platform control plane and infrastructure specs for Piotr's self-hosted systems.
  • Python 93%
  • Shell 6.6%
  • PLpgSQL 0.3%
  • Dockerfile 0.1%
Find a file
pdurlej 069b532cc9
All checks were successful
merged-in-main-audit / audit (push) Successful in 3s
python-ci / Python 3.11 (push) Successful in 40s
python-ci / Python 3.12 (push) Successful in 42s
python-ci / Python 3.13 (push) Successful in 41s
Merge pull request 'fix(backups): codify RS2000 unique-knowledge retention' (#839) from codex/795-unique-knowledge-retention into main
2026-06-26 14:53:55 +02:00
.codex docs(codex): add module instruction template 2026-05-09 00:45:37 +02:00
.forgejo fix(patchwarden): normalize safe review paths 2026-06-26 12:58:23 +02:00
.sisyphus/evidence Merge pull request 'docs(prompts): Order A3 master prompt draft (bug-class taxonomy + canary recall for Codex)' (#20) from claude/orders/order-a3-prompt-draft into main 2026-05-02 02:46:35 +02:00
compose ops(honcho): codify 3.0.9 host-ops runtime 2026-06-10 22:26:45 +02:00
config fix(matrix): restore mobile discovery routing 2026-06-23 08:13:48 +02:00
contexts ops(honcho): codify 3.0.9 host-ops runtime 2026-06-10 22:26:45 +02:00
control-plane fix(tests): register docker mock fixture directly 2026-06-26 14:06:32 +02:00
decisions docs(governance): renumber wloczykij ADR 2026-06-10 21:45:04 +02:00
docs fix(pr-sanity): align review signal UX 2026-06-26 10:41:36 +02:00
fixtures fix(m08): add safe product fences 2026-06-01 20:10:57 +02:00
forgejo platform v0 — L4 complete, ready for Phase 01 2026-04-30 23:44:14 +02:00
infra/forgejo-runner fix(ci): allow runner proxy exec API 2026-06-02 13:41:10 +02:00
migrations feat(memory): add control plane foundation 2026-06-01 19:55:39 +02:00
modules Merge remote-tracking branch 'origin/main' into codex/matrix-discovery-hotfix 2026-06-26 10:45:07 +02:00
network docs(network): resolve tailscale acl seed todos 2026-05-09 00:47:50 +02:00
ops/rs2000 fix(host-agent): allow compose PROJECT_ROOT assignment 2026-05-24 11:19:02 +02:00
policies feat(mcp): add Kan registry validation slice 2026-06-04 11:11:07 +02:00
prompts docs(prompts): clean stale ADR references 2026-06-11 00:35:51 +02:00
runbooks fix(backups): codify unique-knowledge retention 2026-06-26 13:43:10 +02:00
schema feat(mcp): add Kan registry validation slice 2026-06-04 11:11:07 +02:00
scripts fix(backups): codify unique-knowledge retention 2026-06-26 13:43:10 +02:00
state fix(backups): codify unique-knowledge retention 2026-06-26 13:43:10 +02:00
tests Merge remote-tracking branch 'origin/main' into codex/795-unique-knowledge-retention 2026-06-26 14:45:10 +02:00
.gitignore chore(sprint): clean local tooling artifacts 2026-05-30 10:21:54 +02:00
AGENTS.md chore(deps): add Forgejo Renovate setup 2026-06-02 10:20:50 +02:00
CODEOWNERS platform v0 — L4 complete, ready for Phase 01 2026-04-30 23:44:14 +02:00
INDEX.md docs(deslop): reconcile stale platform docs 2026-06-08 15:26:10 +02:00
MAP.md docs(deslop): reconcile stale platform docs 2026-06-08 15:26:10 +02:00
PLATFORM_CHARTER.md docs(security): guard against secret exposure via docker compose config (#711) 2026-06-08 21:51:37 +02:00
PLATFORM_CONSTITUTION.md platform v0 — L4 complete, ready for Phase 01 2026-04-30 23:44:14 +02:00
README.md docs(deslop): reconcile stale platform docs 2026-06-08 15:26:10 +02:00
renovate.json chore(deps): add Forgejo Renovate setup 2026-06-02 10:20:50 +02:00
REVIEW.md governance: ADR-0017 — no stacked PRs to main + 4-layer guard (pre/post-merge + cousin + operator) 2026-05-12 01:56:11 +02:00

pdurlej/platform

Canonical desired-state spec for piotr's homelab platform (RS 2000 + VPS 1000 + Mac/iPhone Tailnet). The repo is the source of truth; runtime is reconciled to match.

The repo is not the runtime. Runtime lives on RS 2000 (/opt/vps-home-platform-infra/) and VPS 1000 (/home/openclaw/). The repo describes intent + observed state; control plane (platformctl, future) reconciles.


I just walked in. Where do I start?

If you are a human reader, skim in this order:

  1. PLATFORM_CHARTER.md — vision, deploy flow, cognition rule (10 min)
  2. state/STATUS_NOW.md + state/strategy/platform-maturity-roadmap-*.md — current status and roadmap (10 min)
  3. decisions/ — numbered ADRs in chronological order (5 min each)
  4. Forgejo Issues filtered by owner-attention — what needs your call right now

If you are an agent (claude / codex / glm / antigravity / new arrival), read in this order:

  1. AGENTS.md — repo runbook (must-read; identity-isolation, canary, conventions)
  2. docs/forgejo-agent-operations.md — critical Forgejo operating contract; read before issues, PRs, Actions, runners, review bots, or Infisical-backed provider work
  3. AGENTS.md §"Joining as a new agent" — onboarding cookbook
  4. Forgejo Issues filtered by your skill class — pick one
  5. The issue's ## Spec sources section will tell you exactly which charter/ADR/module sections are relevant

If you are an operator-facing report, start at the relevant state/reports/STATE_OF_PLATFORM_*.md Owner Action Board section.


Repo map (mobile-scannable)

Where What Audience
PLATFORM_CHARTER.md Vision, deploy flow, cognition rule, sacred paths All
PLATFORM_CONSTITUTION.md Declarative oaths (counterpart to Iskra Constitution) All
AGENTS.md Repo runbook: identity-isolation, canary, conventions, anti-patterns Agents
docs/forgejo-agent-operations.md Critical Forgejo operating contract for agents: identity, issues, PRs, Actions, secrets, Ollama review bot Agents
INDEX.md Artifact map (full file-by-file index) Agents
decisions/ Architectural Decision Records (Nygard format, numbered) All
state/reports/ Strategic stop reports (STATE_OF_PLATFORM_*) Operator
state/archive/2026-04-30-L0-L4-synthesis/ Archived Apr-30 L0-L4 synthesis; current status is state/STATUS_NOW.md Historical reference
modules/<id>/module.yaml Per-module manifest (JSON-Schema validated) Producer / reviewers
modules/<id>/runbook.md Per-module operator runbook Operator / reviewers
prompts/ Master prompts driving Codex per wave Producer (Codex)
schema/module.schema.json JSON Schema for module.yaml Validators
control-plane/platformctl/ Future control plane (validate/plan/apply/health/logs) Phase 03+
tests/ smoke.sh runtime drift detector + validate-schema.sh All
.forgejo/workflows/ CI workflows (canary-required scaffold; Issue #49 to operationalize) Platform
.forgejo/issue_template/ Issue templates: atomic / meta / owner-decision Issue authors
runbooks/ Cross-module operator runbooks (deploy-vps1000, forgejo-actions-runner) Operator
migrations/ Vault → Infisical cutover plan Operator (Phase 06)
network/ Tailscale ACL seed (comment-heavy; never auto-applied) Operator
baseline/ Hard Backup Baseline manifest (immutable; per L-1 of original plan) Operator

Current phase

Phase 02 — Cataloging (~10% coverage as of 2026-05-04). Each module gets v2 audit fields per AGENTS.md §"Current phase". Roadmap in state/reports/STATE_OF_PLATFORM_2026-05-03.md §7.

After Phase 02 (~85 modules; pivot tranche of ~25 covers waves 4-9) → Phase 03 (control plane: platformctl) → Phase 04 (observability) → Phase 05 (agent execution) → Phase 06 (prune + cutover).

Sequencing is owner-attention-bounded, not calendar-bounded.


How work flows

issue (Forgejo)
   ↓ agent picks one (per AGENTS.md §"Joining as a new agent")
   ↓ branch: <actor>/orders/<short-slug>  (actor ∈ {claude, codex, glm, antigravity})
   ↓ commits authored as <actor> identity (per AGENTS.md §"Identity-isolation")
   ↓ PR with Canary Context Pack (per AGENTS.md)
   ↓ canary 3+3 review (mandatory for module/schema/prompts/tests/decisions paths)
   ↓ ≤3 iterations max → terminal action (approve_merge | … | split_pr)
   ↓ operator merges
   ↓ issue auto-closed (or manually if cross-issue)

Operator never reviews diffs by default — operator reviews decisions the orchestrator surfaces via Owner Action Board format.


Identity isolation (TL;DR)

Every actor commits and creates PRs as itself, never as pdurlej:

  • claude — orchestrator (PM role)
  • codex — producer (executes master prompts)
  • glm — z.ai reviewer
  • antigravity — Gemini-based scheduled PR factory (planned, see Issue #57)
  • pdurlej — owner; merge gate; not used for agent work

Concrete bash + PAT retrieval pattern in AGENTS.md §"Identity-isolation".


Quality gates

Gate What it does Where
Canary 3+3 Six diverse-model reviewers (tech-claude, tech-codex, tech-glm × product-claude, product-codex, product-glm) ADR 0001 + AGENTS.md
Hard 3-iter cap Forces terminal decision after 3 review rounds ADR 0002 Rule 2
Smoke.sh Runtime drift detector (manifest claim ≠ docker reality) tests/smoke.sh
validate-schema.sh JSON Schema validation for module.yaml tests/validate-schema.sh
Strategic stop Owner-facing product overview every N=3 cycles ADR 0001 Rule 4
Night Review Batch sanity check for accumulated small PRs AGENTS.md §"Night Review"

Where to put new memory

  • Decision (architectural) → new decisions/NNNN-<slug>.md (Nygard format, numbered)
  • Open loop / follow-up → Forgejo Issue (use meta_decomposition or atomic_task template)
  • Owner-must-decide → Forgejo Issue with owner_decision template + label owner-attention
  • Strategic state → next state/reports/STATE_OF_PLATFORM_<date>.md (only at strategic-stop cadence)
  • Module-specificmodules/<id>/runbook.md
  • Cross-cutting orchestrator habitstate/CLAUDE_SELF_INSTRUCTIONS.md

Do NOT put any of the above in markdown that lives only in chat or as inline reasoning. The repo is the memory layer. Chat is ephemeral.


Lineage / context

  • Original plan: /Users/pd/.claude/plans/super-fajnie-generalnie-zgadzam-bright-piglet.md (~30k tokens, 5 layers L-1 → L4)
  • L0-L4 partially executed; full atomic decomposition into Forgejo Issues is in progress (this is the swarm-fundament work)
  • Operator's vault for AI personality continuity: /Users/pd/Iskra-i-Piotr/03 Resources/Iskra/ (cousin letters tradition)

Maintained by claude / Pan Herbata. Updates go through canary 3+3 review like any other governance change.