Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/_validate-shapes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ name: _validate-shapes
# on: { pull_request: {}, workflow_dispatch: {} }
# jobs:
# shapes:
# uses: Chrison-dev/Homelab/.github/workflows/_validate-shapes.yml@main
# uses: Chrison-Homelab/Homelab/.github/workflows/_validate-shapes.yml@main
# secrets:
# schema_token: ${{ secrets.SCHEMA_RO_PAT }} # PAT: contents:read on Chrison-dev/Homelab
# schema_token: ${{ secrets.SCHEMA_RO_PAT }} # PAT: contents:read on Chrison-Homelab/Homelab
#
# The full-fidelity gate stays the superproject's `validate-shapes.yml`
# (./build.sh ValidateShapes) — this is the lightweight, early-feedback mirror.
Expand All @@ -38,7 +38,7 @@ on:
default: '.'
secrets:
schema_token:
description: 'PAT with contents:read on the private Chrison-dev/Homelab repo (to download the release asset). GitHub secret ids allow only alphanumerics + underscore — no hyphen.'
description: 'PAT with contents:read on the private Chrison-Homelab/Homelab repo (to download the release asset). GitHub secret ids allow only alphanumerics + underscore — no hyphen.'
required: true

jobs:
Expand All @@ -55,7 +55,7 @@ jobs:
set -euo pipefail
mkdir -p .validator
gh release download "${{ inputs.schema-ref }}" \
--repo Chrison-dev/Homelab \
--repo Chrison-Homelab/Homelab \
--pattern 'homelab-validate-linux-x64.tar.gz' \
--dir .validator
tar -C .validator -xzf .validator/homelab-validate-linux-x64.tar.gz
Expand Down
12 changes: 6 additions & 6 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[submodule "stacks/Komodo"]
path = stacks/Komodo
url = https://github.com/Chrison-dev/Homelab.Stacks.Komodo.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.Komodo.git
[submodule "stacks/DevOps"]
path = stacks/DevOps
url = https://github.com/Chrison-dev/Homelab.Stacks.DevOps.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.DevOps.git
[submodule "stacks/ErpForFactoryGames"]
path = stacks/ErpForFactoryGames
url = https://github.com/Chrison-dev/Homelab.Stacks.ErpForFactoryGames.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.ErpForFactoryGames.git
[submodule "vendor/ProxmoxSharp"]
path = vendor/ProxmoxSharp
url = https://github.com/Chrison-dev/ProxmoxSharp.git
Expand All @@ -18,10 +18,10 @@
url = https://github.com/Chrison-dev/SynoSharp.git
[submodule "stacks/Azure"]
path = stacks/Azure
url = https://github.com/Chrison-dev/Homelab.Stacks.Azure.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.Azure.git
[submodule "stacks/SmartHome"]
path = stacks/SmartHome
url = https://github.com/Chrison-dev/Homelab.Stacks.SmartHome.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.SmartHome.git
[submodule "stacks/BuildLab"]
path = stacks/BuildLab
url = https://github.com/Chrison-dev/Homelab.Stacks.BuildLab.git
url = https://github.com/Chrison-Homelab/Homelab.Stacks.BuildLab.git
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,15 +107,15 @@ Each stack repo runs an **opt-in** `validate.yml` (calls the superproject's
reusable [`_validate-shapes.yml`](.github/workflows/_validate-shapes.yml)), which
downloads the pinned schema/validator from the private Homelab `schema-v1` release.
That download needs the **`SCHEMA_RO_PAT`** Actions secret — a fine-grained PAT with
`contents:read` on `Chrison-dev/Homelab`, stored in Bitwarden as *"Homelab Schema
`contents:read` on `Chrison-Homelab/Homelab`, stored in Bitwarden as *"Homelab Schema
Read PAT"*. **Whenever you extract/create a new stack repo, make sure it's in the
secret's visibility scope**, else its `validate` check fails at the download step:

```bash
# zero-maintenance: covers every current + future private stack repo
bw get password "Homelab Schema Read PAT" | gh secret set SCHEMA_RO_PAT --org Chrison-dev --visibility all
bw get password "Homelab Schema Read PAT" | gh secret set SCHEMA_RO_PAT --org Chrison-Homelab --visibility all
# or tight (must re-run with the new repo appended each time):
bw get password "Homelab Schema Read PAT" | gh secret set SCHEMA_RO_PAT --org Chrison-dev \
bw get password "Homelab Schema Read PAT" | gh secret set SCHEMA_RO_PAT --org Chrison-Homelab \
--visibility selected --repos Homelab.Stacks.SmartHome,Homelab.Stacks.BuildLab,Homelab.Stacks.<New>
```

Expand Down
4 changes: 2 additions & 2 deletions Infrastructure/schema/shape.schema.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/Chrison-dev/Homelab/Infrastructure/schema/shape.schema.json",
"$id": "https://github.com/Chrison-Homelab/Homelab/Infrastructure/schema/shape.schema.json",
"title": "Homelab Infrastructure Shape",
"description": "Declarative shape of a unit of homelab infrastructure provisioned by the C#-native engine / community-scripts renderer. See ADR-0001. kind: Stack groups LXC members and carries a CTID range + inheritable defaults; kind: LXC describes a container with the full Proxmox surface (most fields optional). The community-scripts create path (Deploy-Shape.ps1) honours a subset; the rest is converge-only (ProxmoxSharp, BL-010).",
"type": "object",
Expand Down Expand Up @@ -323,7 +323,7 @@
"properties": {
"name": { "type": "string", "description": "Provider key the engine knows (e.g. 'github', 'cloudflare')." },
"action": { "type": "string", "description": "Provider verb (e.g. 'org-runner-token', 'tunnel-token')." },
"with": { "type": "object", "description": "Action arguments (e.g. { org: Chrison-dev }).", "additionalProperties": true },
"with": { "type": "object", "description": "Action arguments (e.g. { org: Chrison-Homelab }).", "additionalProperties": true },
"auth": { "$ref": "#/$defs/secretSource", "description": "How to authenticate to the provider — typically { env: <PAT name> }." }
}
}
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ is a self-contained service/stack with its own lifecycle. Cross-cutting concerns
### Stack conventions

Every `Homelab.Stacks.*` repo follows the same shape (see
[`ErpForFactoryGames`](https://github.com/Chrison-dev/Homelab.Stacks.ErpForFactoryGames)
[`ErpForFactoryGames`](https://github.com/Chrison-Homelab/Homelab.Stacks.ErpForFactoryGames)
as the reference):

- **`compose.yml`** + per-service `*.env` / `stack.env` — the stack itself.
Expand Down
2 changes: 1 addition & 1 deletion docs/Backlog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

- **Board:** [Homelab Backlog (Project #7)](https://github.com/users/ChrisonSimtian/projects/7)
— the Idea → Planned → In Progress → Done view, with **Stage** and **Priority** fields.
- **Items:** [GitHub Issues](https://github.com/Chrison-dev/Homelab/issues) — one
- **Items:** [GitHub Issues](https://github.com/Chrison-Homelab/Homelab/issues) — one
per `BL-xxx`. Labels carry priority (`priority:high|medium|low`) and tags
(`iac`, `proxmox`, `networking`, `ci-cd`, …).
- **Plans:** the detailed implementation plans stay in-repo under
Expand Down
34 changes: 17 additions & 17 deletions docs/Scripts.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,57 +10,57 @@ All scripts are located in the `src/Proxmox/` directory and are designed to run

Installs PowerShell Core on the Proxmox node for running PowerShell scripts. Uses snap package manager as Microsoft doesn't officially support Debian 13 yet.

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/install-powershell.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/install-powershell.sh)`

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/install-powershell.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/install-powershell.sh)`

### Inventory

Collects hardware information from Proxmox nodes in Markdown format. Output is formatted for easy copying into Confluence or other documentation. Available in both Bash and PowerShell versions.

**Bash version:**

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/inventory.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/inventory.sh)`

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/inventory.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/inventory.sh)`

**PowerShell version:**

**Direct execution:**

```bash
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/inventory.ps1' -UseBasicParsing).Content"
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/inventory.ps1' -UseBasicParsing).Content"
```

**Using wget (download first):**

```bash
wget https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/inventory.ps1 -O /tmp/inventory.ps1 && pwsh /tmp/inventory.ps1
wget https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/inventory.ps1 -O /tmp/inventory.ps1 && pwsh /tmp/inventory.ps1
```

### Hardware Information

Quick hardware overview script that collects vendor and model information for key components (CPU, mainboard, RAM, graphics, NICs).

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/hardware-info.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/hardware-info.sh)`

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/hardware-info.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/hardware-info.sh)`

### Detailed Hardware Information

Comprehensive hardware information collector that gathers detailed information about CPU, memory, storage, network, GPU, and system components. More detailed than the basic hardware-info.sh script.

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/get-hardware-info.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/get-hardware-info.sh)`

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/get-hardware-info.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/get-hardware-info.sh)`

### CPU Snapshot

Collects CPU configuration and usage statistics for VMs and LXC containers. Useful for capacity planning, performance analysis, and resource optimization.

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/proxmox-cpu-snapshot.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/proxmox-cpu-snapshot.sh)`

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/proxmox-cpu-snapshot.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/proxmox-cpu-snapshot.sh)`

### NFS Shares Setup

Expand All @@ -71,26 +71,26 @@ This also allows us to at some point add a SSD to the node and use this for cach

**Bash version:**

**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/setup-nfs-shares.sh)`
**CURL:** `bash <(curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/setup-nfs-shares.sh)`

**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/setup-nfs-shares.sh)`
**WGET:** `bash <(wget -qO- https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/setup-nfs-shares.sh)`

**With parameters:**

```bash
curl -fsSL https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/setup-nfs-shares.sh | bash -s -- "192.168.1.100" "MyNAS"
curl -fsSL https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/setup-nfs-shares.sh | bash -s -- "192.168.1.100" "MyNAS"
```

**PowerShell version:**

**Direct execution:**

```bash
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/setup-nfs-shares.ps1' -UseBasicParsing).Content"
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/setup-nfs-shares.ps1' -UseBasicParsing).Content"
```

**With custom parameters:**

```bash
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-dev/Homelab/main/src/Proxmox/setup-nfs-shares.ps1' -UseBasicParsing).Content" -- -NasIP "192.168.1.100" -NasName "MyNAS"
pwsh -c "Invoke-Expression (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/Chrison-Homelab/Homelab/main/src/Proxmox/setup-nfs-shares.ps1' -UseBasicParsing).Content" -- -NasIP "192.168.1.100" -NasName "MyNAS"
```
2 changes: 1 addition & 1 deletion docs/adr/ADR-0004-storage-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
- **Date:** 2026-06-01
- **Deciders:** Chris
- **Relates to:** [ADR-0001](ADR-0001-iac-tooling.md), [BL-016 NFS hardening](../plans/BL-016-nfs-hardening.md),
build issue [#108](https://github.com/Chrison-dev/Homelab/issues/108), consumer [#105](https://github.com/Chrison-dev/Homelab/issues/105)
build issue [#108](https://github.com/Chrison-Homelab/Homelab/issues/108), consumer [#105](https://github.com/Chrison-Homelab/Homelab/issues/105)

## Context

Expand Down
4 changes: 2 additions & 2 deletions docs/adr/ADR-0005-cloudflare-tunnel-topology.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
- **Deciders:** Chris
- **Relates to:** [ADR-0001](ADR-0001-iac-tooling.md),
[BL-001 Teleport](../plans/BL-001-teleport.md),
Teleport exposure [#117](https://github.com/Chrison-dev/Homelab/issues/117),
cloudflared redeploy [#118](https://github.com/Chrison-dev/Homelab/issues/118)
Teleport exposure [#117](https://github.com/Chrison-Homelab/Homelab/issues/117),
cloudflared redeploy [#118](https://github.com/Chrison-Homelab/Homelab/issues/118)

## Context

Expand Down
2 changes: 1 addition & 1 deletion docs/adr/ADR-0006-media-stack.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
[#105 declarative *arr stack](../plans/105-arr-declarative-stack.md),
[BL-013 community-scripts deploy](../plans/BL-013-community-scripts-deploy.md),
[BL-016 NFS hardening](../plans/BL-016-nfs-hardening.md)
- **Defers to:** [#106 Komodo + Maintainerr](https://github.com/Chrison-dev/Homelab/issues/106)
- **Defers to:** [#106 Komodo + Maintainerr](https://github.com/Chrison-Homelab/Homelab/issues/106)

## Context

Expand Down
8 changes: 4 additions & 4 deletions docs/adr/ADR-0007-pangolin-remote-access.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
- **Deciders:** Chris
- **Relates to:** [ADR-0005 tunnel topology](ADR-0005-cloudflare-tunnel-topology.md)
(**supersedes its Teleport-front-door decision**, §4–5), [BL-001 Teleport](../plans/BL-001-teleport.md),
Teleport exposure [#117](https://github.com/Chrison-dev/Homelab/issues/117),
cloudflared redeploy [#118](https://github.com/Chrison-dev/Homelab/issues/118),
[#136](https://github.com/Chrison-dev/Homelab/issues/136) (this),
[#137](https://github.com/Chrison-dev/Homelab/issues/137) (China VPN — co-tenant of the future VPS stack)
Teleport exposure [#117](https://github.com/Chrison-Homelab/Homelab/issues/117),
cloudflared redeploy [#118](https://github.com/Chrison-Homelab/Homelab/issues/118),
[#136](https://github.com/Chrison-Homelab/Homelab/issues/136) (this),
[#137](https://github.com/Chrison-Homelab/Homelab/issues/137) (China VPN — co-tenant of the future VPS stack)

## Context

Expand Down
6 changes: 3 additions & 3 deletions docs/adr/ADR-0008-stack-extraction-meta-repo.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
- **Deciders:** Chris
- **Relates to:** [ADR-0001 IaC tooling](ADR-0001-iac-tooling.md) (establishes "submodules
declare the *shape*; the hub converges" — this ADR extends that to a first-class
composition model), Phase 0 epic [#272](https://github.com/Chrison-dev/Homelab/issues/272),
Leapmotor→SmartHome fold [#271](https://github.com/Chrison-dev/Homelab/pull/271)
composition model), Phase 0 epic [#272](https://github.com/Chrison-Homelab/Homelab/issues/272),
Leapmotor→SmartHome fold [#271](https://github.com/Chrison-Homelab/Homelab/pull/271)

## Context

Expand Down Expand Up @@ -73,7 +73,7 @@ their own `Homelab.Stacks.<Name>` repos, composed as submodules at `stacks/<Name
turning drift into a reviewable PR and removing the manual second PR.

Phase 0 (items 4 + 5, plus the schema publish) is tracked in
[#272](https://github.com/Chrison-dev/Homelab/issues/272) and **unlocks** the
[#272](https://github.com/Chrison-Homelab/Homelab/issues/272) and **unlocks** the
extractions.

### What qualifies a stack for extraction
Expand Down
2 changes: 1 addition & 1 deletion docs/plans/057-synosharp-write-path.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Plan: #57 — SynoSharp write path (SSH-runner → reconciler)

**Issue:** [#57](https://github.com/Chrison-dev/Homelab/issues/57) ·
**Issue:** [#57](https://github.com/Chrison-Homelab/Homelab/issues/57) ·
**Relates to:** [ADR-0002 (SynoSharp SSH-runner)](../adr/ADR-0002-synosharp.md),
[iac-csharp-native plan](iac-csharp-native.md), [BL-013 deploy renderer](BL-013-community-scripts-deploy.md) (the dry-run pattern this mirrors)
**Status:** Phase A + Phase C done — 2026-06-15. Transport wedge live-verified
Expand Down
4 changes: 2 additions & 2 deletions docs/plans/105-arr-declarative-stack.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Plan: #105 — Declarative *arr media stack (rebuild as IaC, NFS-hardened)

**Issue:** [#105](https://github.com/Chrison-dev/Homelab/issues/105) ·
**Issue:** [#105](https://github.com/Chrison-Homelab/Homelab/issues/105) ·
**Relates to:** [#43 shapes](iac-csharp-native.md), [BL-013 community-scripts deploy](BL-013-community-scripts-deploy.md),
[#45 converge](BL-010-converge.md), [BL-016 NFS hardening](BL-016-nfs-hardening.md) ·
**Defers to:** [#106 Komodo revival + Maintainerr](https://github.com/Chrison-dev/Homelab/issues/106) ·
**Defers to:** [#106 Komodo revival + Maintainerr](https://github.com/Chrison-Homelab/Homelab/issues/106) ·
**Status:** Scoping — 2026-06-01.

## Goal
Expand Down
4 changes: 2 additions & 2 deletions docs/plans/115-gaming-vm-steamos.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Plan: #115 — Gaming VM (Bazzite/SteamOS) on desktop-01 with GPU passthrough

**Issue:** [#115](https://github.com/Chrison-dev/Homelab/issues/115) ·
**Issue:** [#115](https://github.com/Chrison-Homelab/Homelab/issues/115) ·
**Relates to:** [#57 SynoSharp write path](057-synosharp-write-path.md) (the layered, dry-run-default
pattern this mirrors), [ADR-0001 shape contract](../adr/), [#113 converge apply](BL-010-converge.md)
**Status (2026-06-15):** Phases **A–D DONE + L4 DONE**. Both `bazzite` (1003) and the adopted
Expand Down Expand Up @@ -93,7 +93,7 @@ Adoption-friendly: reconciling against an **existing** VM (1003) must emit only
- `stacks/Gaming/bazzite.vm.yaml` — `kind: VM`, **vmid 1003 (adopted)**, clones the 1002
passthrough recipe (`hostpci0: 0000:09:00,pcie=1,x-vga=1`).
- Scaffolded **locally** for now (not yet a submodule repo) — promote to
`Chrison-dev/Homelab.Stacks.Gaming` when the shape stabilises.
`Chrison-Homelab/Homelab.Stacks.Gaming` when the shape stabilises.

## Streaming to the MacBook

Expand Down
2 changes: 1 addition & 1 deletion docs/plans/159-arr-wire.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Plan: #159 — `arr-wire` config migration (self-contained, side-by-side)

**Issue:** [#159](https://github.com/Chrison-dev/Homelab/issues/159) ·
**Issue:** [#159](https://github.com/Chrison-Homelab/Homelab/issues/159) ·
**Builds on:** [#105 declarative stack](105-arr-declarative-stack.md), [ADR-0006](../adr/ADR-0006-media-stack.md) ·
**Status:** Building — 2026-06-21 · branch `feat/159-arr-wire`.

Expand Down
Loading
Loading