# Changelog

All notable changes to orca are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## v0.13 milestone (in progress) — tag line v0.12.x

The v0.13 milestone is **Production Hardening Round 2 + UAT Plan**.
Three deep codebase sweeps (security, reliability, feature/doc claims)
surfaced ~60 gaps beyond v0.12. v0.13 closes all critical/high/medium
findings and delivers the UAT plan + signoff script that gates the
v1.0.0 cut.

**Load-bearing architectural changes**:
- **R-022** — `orca job run` deploys to remote nodes via the scheduler →
  emitter → SSH-push pipeline. The local `exec.CommandContext` path is
  removed (P03).
- **R-023** — Zero-trust enforcement is operationally wired: `acl.Check`
  is invoked on every daemon handler + sshpush + txn apply path;
  `acl.json` is 0600; audit `actor` carries OIDC sub/SVID; WebAuthn
  registration requires auth; `cluster seal`/`unseal` + `doctor audit`/
  `doctor modes` CLI commands exist (P04, P05).

### v0.13 phase commits (v0.11.29..HEAD)

- `ed91d68` — feat(P10): observability expansion — metrics + security headers (REQ-159)
- `531b369` — fix(P09): migration + operational safety — job stop, retention, logs cap (REQ-158)
- `3a3ea74` — fix(P08): transport + SSH safety — typed errors, IPv6, timeouts, signal (REQ-157)
- `0358efe` — fix(P07): concurrency safety — SQLite, flock, cache, atomic writes (REQ-156)
- `978334a` — feat(P06): auth init-idp real + auth register + doctor oidc (REQ-155)
- `9e83238` — feat(P05): seal/audit CLI + chain race fix + key zeroing (REQ-154)
- `5232fcb` — fix(P04): wire ACL enforcement + WebAuthn reg auth + audit actor (REQ-153)
- `cf3d98e` — feat(P03): wire scheduler into job run + fix jobspec parser (REQ-151, REQ-152)
- `4b70e31` — fix(P02): input validation + injection hardening — 11 vectors (REQ-150)
- `b0158c9` — fix(P01): bump go toolchain to 1.25.12 + fix pre-existing test bugs (REQ-149)
- `7479cd1` — docs(checkpoint): P0 shipped — v0.12.0 tagged
- `1a2dd1a` — docs(P00): incorporate grill binding conditions C-44..C-49
- `437d9b2` — docs(P00): grill v0.13 — CONDITIONAL PROCEED (6 binding conditions C-44..C-49)
- `82bfab1` — docs(P00): create phase plans — 14 phases, 15 REQs, vertical slices
- `a2a651e` — docs(P00): ideation results — 15 accepted (REQ-149..REQ-163), 0 skipped
- `3f5e5de` — docs(P00): research findings — threat model round 3 (~60 gaps, F26-F101)
- `7a60b35` — docs(P00): clarify v0.13 — 7 decisions resolved (D-248..D-254)
- `8071793` — docs(init): validate specification — v0.13 Production Hardening Round 2 + UAT Plan

### v0.13 phase summary

- **P0** — Pre-execution: specify → clarify → research → ideate → plan → grill (tag `v0.12.0`)
- **P01** — Toolchain & dependency vulns: Go 1.25.12 bump, 24 stdlib vulns closed, govulncheck triage (REQ-149)
- **P02** — Input validation & injection hardening: 11 vectors closed (`orca logs --job` RCE, tar-slip, sudoers injection, pprof loopback, txn/nft ID validation, drain allocID, cluster_compat, podman image, nft TrustedProbes, sudoers user/role) (REQ-150)
- **P03** — Scheduler/deployment wiring + jobspec parser: `orca job run` wires scheduler → emitter → SSH-push; `schedule:`/`timeout:` parsed by markdown jobspec (REQ-151, REQ-152)
- **P04** — ACL enforcement + WebAuthn registration auth: `acl.Check` wired into daemon + sshpush + txn apply; WebAuthn registration requires auth; audit actor carries OIDC sub/SVID (REQ-153)
- **P05** — Seal/audit CLI + chain race fix + key zeroing: `orca cluster seal`/`unseal`, `orca doctor audit`, `orca doctor modes` CLI commands; audit hash-chain race fix; master key zeroed on exit (REQ-154)
- **P06** — auth init-idp real + auth register + doctor oidc: real Dex deployment, `orca auth register` browser flow, `orca doctor oidc` health check (REQ-155)
- **P07** — Concurrency safety: SQLite WAL, flock on known_hosts, cache thread-safety, atomic writes (REQ-156)
- **P08** — Transport & SSH safety: typed dial errors, IPv6 support, connect timeouts, signal handling (REQ-157)
- **P09** — Migration & operational safety: `orca job stop` via SSH, DB retention check, logs cap (REQ-158)
- **P10** — Observability & metrics: metrics endpoint expansion, security headers (REQ-159)
- **P11** — Doc drift round 2 (this phase, REQ-160)

## v0.12 milestone — COMPLETE (tag line v0.11.x)

The v0.12 milestone is **Security Hardening (Zero-Trust Identity)**.
Comprehensive security hardening across the entire attack surface
including the OS, plus adoption of a zero-trust identity model. 25
threat-model findings (F1..F25) closed. R-021 adopted: no Orca-issued
credentials — human identity is exclusively external (OIDC), machine
identity is exclusively mTLS/SPIFFE.

**Milestone release**: `v0.11.28` (29 phases, tags `v0.11.0`..`v0.11.28`).

### v0.12 phase highlights

- Command injection fix (REQ-119, F3)
- Namespace path traversal fix (REQ-120, F4)
- Txn apply path allowlist (REQ-121, F5)
- OIDC client + bundled Dex (REQ-144; BYO-IdP override)
- WebAuthn connector for Dex / passkeys (REQ-148)
- ACL rewrite to OIDC claims + enforcement (REQ-145, REQ-122, F1)
- Remove all password/token paths (REQ-146, R-021, C-34)
- Master key seal-to-OIDC + Shamir 3-of-5 recovery (REQ-147, C-35)
- Daemon auth hardening (REQ-123, REQ-124, F6, F24)
- Audit log tamper-evidence (REQ-125, F2)
- SVID chain validation (REQ-126, F9)
- Backup symlink validation (REQ-127, F7)
- step-ca /tmp hardening (REQ-128, F10)
- Master key rotation (REQ-129, F12, C-30)
- File-mode audit expansion (REQ-130, F13)
- aggregate.sh JSON injection + drift-gate fix (REQ-131, F11, F18)
- install.sh checksum+GPG verification (REQ-132, F14)
- nftables ruleset hardening (REQ-133, F21)
- sudoers hardening (REQ-134, F22)
- System user consistency (REQ-135, F23)
- SQLite file-mode + at-rest encryption (REQ-136, F8, C-31)
- Migration safety + identity migration (REQ-137, F19, C-34)
- Legacy CA/mTLS/daemon + step-ca password-provisioner deletion (REQ-138, F16)
- known_hosts tightening + transport hardening (REQ-139, F15, F25)
- Drift event authentication (REQ-140, F18)
- Security integration test suite (REQ-141, C-33)
- Zero-trust + OIDC + WebAuthn + threat-model docs (REQ-142)
- Final review + ship + audit (REQ-143)

## v0.11 milestone — COMPLETE (tag line v0.10.x)

The v0.11 milestone is **Production Hardening**. See the git log and
ROADMAP for the full phase list.

## v0.1 milestone — COMPLETE

Initial CLI skeleton, node management, task execution, state
persistence, audit log, health checks, and CoreCI release flow.

- `e1b5385` — feat(P06): CoreCI release flow with .coreci.yml and tea integration
- `07b8ad2` — ship(P05): health checks merged into milestone
- `b06458d` — docs(P05): verification - 4 layers pass
- `708d983` — feat(P05): health check daemon with /healthz, /readyz, /v1/* handlers
- `30c523c` — ship(P04): state persistence merged into milestone
- `759b1b5` — docs(P04): verification - 4 layers pass
- `b25e074` — feat(P04): audit log + persistence hardening
- `bb6b5b3` — ship(P03): task exec merged into milestone
- `857f756` — docs(P03): verification - 4 layers pass
- `f9a9873` — feat(P03): task execution engine with HCL specs, jobs, tasks, WaitDelay
- `78334f1` — ship(P02): node mgmt merged into milestone
- `c7dbcef` — docs(P02): verification - 4 layers pass
- `9580f34` — feat(P02): node management with SQLite-backed registry
- `46e929e` — chore(P01): source .env in trigger_coreci.sh for GITEA_TOKEN
- `503923b` — ship(P01): cli skeleton merged into milestone
- `e3f6e1d` — docs(P01): verification - 4 layers pass
- `aa3ccce` — feat(P01): CLI skeleton with Cobra, subcommand stubs, pre-push hook
- `c203895` — docs(P00): create 6 phase plans with wave ordering
- `65eb2e6` — docs(P00): research findings - architecture + personas
- `6f34f17` — docs(P00): ideation - 30 ideas accepted (3 tiers)
- `bc7ce1c` — docs(P00): clarify ambiguities (full autonomy, 10 decisions)
- `55aae53` — chore(P00): rename orch-engine to orca, configure gitea + coreci (v0.1)
- `0cba1aa` — chore(P00): set autonomy level to full
- `e2e77e7` — chore(P00): quick task - populate config.json with backlog reference
- `8c086de` — chore(config): populate ciagent config with standard settings
- `8774008` — docs(init): validate specification

Generated by make changelog. Do not edit by hand.
