← kitporath.com

Evidence index

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.

Verify these 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

Open the document →

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

Open the document →

Decision records keep the rejected alternatives

open docs/decisions.md in kitporath/kws

→ ADRs with the alternatives that lost, and why

Open the document →

Not checkable from here

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-brainabout 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 nodesfailed safe, quorum held, exposed a placement gap since closed. Public (incident records)
Supply-chain campaign, 210 critical CVEs down to 151measured 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 closeda platform upgrade, counted separately from the image scan above
Kernel patching by drain and live migration across all five hypervisors22 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 fixdrill and speed-investigation reports, 2026-07-11
Backups encrypted with restic, local tier plus append-only offsite, restore-testedbackup 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 Talonreport, 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 closedidentity report 2026-08-25, guardrail check 2026-08-27
App pod breach probe: own backend reachable, Vault, other apps and the Kubernetes API blockedreport, 2026-09-02
Cluster egress contained at the gateway: workloads have no route to the public internetcontainment primitive and the internal registry that made it possible
Suricata IDS on the WAN, Falco on the nodes, host journals from eight hosts in Lokisecurity observability inventory, verified live 2026-09-22
auditd, fail2ban and AIDE on six of the eight journal hostshost-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 Vaultrollout record, 2026-07-24. Reporting, not enforcing, so the main page says report
A secrets engine sealed for 27 hours behind green dashboardsfound by a direct query against Vault rather than the dashboard answer
19 monitored hosts · ~120 pods · 3-node HA Vault with transit auto-unsealhosts 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-14counted 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 9single 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 modelprivate 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 budgetmy 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 workingLiteLLM configuration in the private infrastructure repository, October 2026