Every claim on this site, and how to check it. Some claims live on private machines. Those are in the second list, and you can't run those yourself.
Commands for a fresh public clone. Counted on 2026-10-08 and counted again on 2026-10-09. If one returns a different number, email me.
Hirdforge's public extract is 67,115 lines of Go across 225 files
git clone https://github.com/kitporath/hirdforge && cd hirdforge
find . -name '*.go' -not -path './.git/*' | wc -l # 225
find . -name '*.go' -not -path './.git/*' -exec cat {} + | wc -l # 67115 → 225 files · 67,115 lines
Counted 2026-10-15. HEAD is 67d2e9b, a README commit on 2026-10-15. The Go counts come from the 2026-08-02 extract (266ea25) and have not moved. This repository is an extract of the production tree, so these commands count the extract and not the production tree.
An agent is the git author of 382 of the 808 non-merge commits
git shortlog -sn --no-merges HEAD
→ 426 mine, 382 agent personas, 47% of 808 non-merge commits
The personas are warband, ragnar, Knut the Swift, Chuck Norse, and others. Infrastructure identifiers were rewritten out of the public copy, but authorship, author dates, and merge topology are still in the history. It was not squashed.
The history is 1,520 commits, of which 712 are merge commits
git rev-list --count HEAD # 1520 git rev-list --merges --count HEAD # 712
→ 1,520 commits · 712 merges · 808 non-merge
Merge commits run roughly twice the merged pull-request count and are not a pull-request number. That is why the site quotes the agent-authored share rather than this figure.
The failure taxonomy exists, and three of the eight errors are mine
open docs/agent-failure-analysis.md in kitporath/kws
→ 13 claims audited · 8 material errors · 3 of them my own
The power-loss recovery is written up with its defects, not just its outcome
open docs/incidents.md in kitporath/kws
→ phase timings, the defects found, and the comparison where the previous platform did better
Decision records keep the rejected alternatives
open docs/decisions.md in kitporath/kws
→ ADRs with the alternatives that lost, and why
These are from the private estate. The incident write-ups are public. The machines are not, so these rows are my account of them.
| Total power loss recovered with no data loss and no split-brain | about 1h50m, July 2026 · 6 Kubernetes nodes · 8 GitOps applications. The write-up is public (incident records) |
| Chaos test: hard-killed a host running two of three control-plane nodes | failed safe, quorum held, exposed a placement gap since closed. Public (incident records) |
| Supply-chain campaign, 210 critical CVEs down to 151 | measured by rescan, not reported by the agent that did the work. Public (error analysis) |
| RKE2 1.33.13 and Cilium 1.18 to 1.19.4 across six nodes, 24 critical CVEs closed | a platform upgrade, counted separately from the image scan above |
| Kernel patching by drain and live migration across all five hypervisors | 22 of 22 VMs running, 6 of 6 nodes Ready throughout · report, 2026-07-30 |
| Front-door failover: HAProxy and keepalived pair, 13 seconds or less after the fix | drill and speed-investigation reports, 2026-07-11 |
| Backups encrypted with restic, local tier plus append-only offsite, restore-tested | backup runbook. The twelve-day silent gap and the restic-reading watchdog are in the same record |
| Purple-team exercise: dropped binary detected by Falco, pod quarantined by Talon | report, 2026-10-07, including the expired registry certificate it found. The engagement also exposed Talon’s response path silently dead since a policy port mismatch, fixed and re-verified the same night. A detection battery on 2026-10-10 found five Talon rules referencing Falco rule names absent from the deployed 0.44.1 ruleset: four restored and committed, one excluded with a recorded reason. An independent verification pass on 2026-10-10 corrected three claims in the night-one write-up, and the addendum stays in the file |
| Terraform identity scoped to templates and networks, and a self-escalation path found and closed | identity report 2026-08-25, guardrail check 2026-08-27 |
| App pod breach probe: own backend reachable, Vault, other apps and the Kubernetes API blocked | report, 2026-09-02 |
| Cluster egress contained at the gateway: workloads have no route to the public internet | containment primitive and the internal registry that made it possible |
| Suricata IDS on the WAN, Falco on the nodes, host journals from eight hosts in Loki | security observability inventory, verified live 2026-09-22 |
| auditd, fail2ban and AIDE on six of the eight journal hosts | host-hardening deploy record, 2026-07-24. Not yet on vidar or thor, which is why the main page says most |
| Pod Security labels in warn and audit mode on application namespaces, restricted on Vault | rollout record, 2026-07-24. Reporting, not enforcing, so the main page says report |
| A secrets engine sealed for 27 hours behind green dashboards | found by a direct query against Vault rather than the dashboard answer |
| 19 monitored hosts · ~120 pods · 3-node HA Vault with transit auto-unseal | hosts and Vault as characterized 2026-08-08; pods re-counted live on 2026-10-29 at 117. The pod count moves, so the site says ~120. |
| Workbench: about 52,200 lines of Go across 219 files, 535 Go test functions, 40 recorded decisions, Landlock sandbox for plugin harnesses, my daily tool since 2026-09-14 | counted 2026-10-29 on the private repository. Demo on request |
| Workbench benchmark: a 31B local model went from 5 of 9 tasks one-shot to 7 of 9 with reviewer-feedback revision, and a 35B model passed 8 of 9 | single sample, 2026-07-10, written up with the escalation metric that came out uninformative |
| Groundly: span-level citations or abstention, with a citation eval gating CI. The Go cutover waited for that eval to pass on the production model | private repository, Apache-2.0, public release pending. Demo on request |
| About 90% of infrastructure operations and 80% of coding done by local open-weight models, with the paid models kept to a small monthly budget | my account of the split, from operating logs and the gateway, not a single command output |
| The model gateway serves every lane from the estate. Its two cloud roles are opt-in, never a default or a fallback, and without their key every local lane keeps working | LiteLLM configuration in the private infrastructure repository, October 2026 |