docs(init): validate specification — v0.13 Production Hardening Round 2 + UAT Plan
15 new requirements (REQ-149..REQ-163), 14 phases (P0+P01..P12+P13). Three deep codebase sweeps surfaced ~60 gaps beyond v0.12: - orca job run runs locally (scheduler/emitter/SSH-push dead code) - jobspec schedule/timeout silently dropped (DaemonSet broken) - acl.Check called zero times (v0.12 zero-trust not wired) - command injection vectors (logs --job, tar-slip, sudoers, txn rollback) - Go toolchain 1.25.0 (24 stdlib vulns) - concurrency hazards (audit chain race, secrets data loss, no busy_timeout) - cache never invalidated by writes - massive doc drift (README mTLS claim false, cli.md missing 25 subcommands) v1.0.0 stays deferred for post-v0.13 UAT signoff. ---ci--- project: orca phase: 0 milestone: v0.13 status: specify ---/ci---
This commit is contained in:
@@ -548,3 +548,124 @@ The v1.0.0 production-ready tag stays deferred for post-v0.12 UAT
|
||||
- Leader-elected Raft coordinator
|
||||
- External CA / Let's Encrypt / cert transparency
|
||||
- Online-only features (HSTS, OCSP stapling, telemetry)
|
||||
|
||||
## Milestone v0.13: Production Hardening Round 2 + UAT Plan — IN PROGRESS
|
||||
|
||||
**Scope**: final production hardening round before the v1.0.0
|
||||
production-ready tag. Three deep codebase sweeps (security, reliability,
|
||||
feature/doc claims) surfaced ~60 gaps beyond v0.12 — the most critical
|
||||
being that `orca job run` runs locally via `exec.CommandContext` and
|
||||
never invokes the scheduler/emitter/SSH-push path (the documented
|
||||
deployment model is non-functional), jobspec `schedule:`/`timeout:` are
|
||||
silently dropped by the markdown parser (DaemonSet is fundamentally
|
||||
broken), `acl.Check` is called zero times in the codebase (v0.12's
|
||||
headline zero-trust feature is library-complete but not wired), and
|
||||
several command-injection vectors remain (`orca logs --job` backtick
|
||||
RCE via `%q`, tar-slip in restore, sudoers injection, etc.). 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. Constraints/capacity/affinity are enforced. This makes
|
||||
the documented deployment model functional and is the prerequisite
|
||||
for the UAT plan.
|
||||
- **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.
|
||||
|
||||
### Phases (14 total: P0 + P01..P12 + P13 final)
|
||||
|
||||
- [ ] Phase P0: Pre-execution (SPECIFY→CLARIFY→RESEARCH→IDEATE→PLAN→GRILL) — tag `v0.12.0`
|
||||
- [ ] Phase P01: Toolchain & dependency vulns (REQ-149) — tag `v0.12.1`
|
||||
- [ ] Phase P02: Input validation & injection hardening (REQ-150) — tag `v0.12.2`
|
||||
- [ ] Phase P03: Scheduler/deployment wiring + jobspec parser (REQ-151, REQ-152) — tag `v0.12.3`
|
||||
- [ ] Phase P04: ACL enforcement + WebAuthn registration auth (REQ-153) — tag `v0.12.4`
|
||||
- [ ] Phase P05: Seal/audit CLI + chain race + key zeroing (REQ-154) — tag `v0.12.5`
|
||||
- [ ] Phase P06: auth init-idp real + auth register (REQ-155) — tag `v0.12.6`
|
||||
- [ ] Phase P07: Concurrency safety (REQ-156) — tag `v0.12.7`
|
||||
- [ ] Phase P08: Transport & SSH safety (REQ-157) — tag `v0.12.8`
|
||||
- [ ] Phase P09: Migration & operational safety (REQ-158) — tag `v0.12.9`
|
||||
- [ ] Phase P10: Observability & metrics (REQ-159) — tag `v0.12.10`
|
||||
- [ ] Phase P11: Doc drift round 2 (REQ-160) — tag `v0.12.11`
|
||||
- [ ] Phase P12: `--type linux` + UAT plan + signoff script (REQ-161, REQ-162, REQ-163) — tag `v0.12.12`
|
||||
- [ ] Phase P13: Final review + ship + audit (milestone release) — tag `v0.12.13` = **v0.13 milestone release**
|
||||
|
||||
**Milestone tag**: `v0.12.13` (final phase patch = milestone release per
|
||||
feature-milestone rule; no separate `v0.13.0` tag). Per-phase tags:
|
||||
`v0.12.0`..`v0.12.13` (14 tags). Tags run on the previous minor's patch
|
||||
line (v0.12.x). The milestone branch label uses the milestone number
|
||||
(`milestone/v0.13-production-hardening-2`); no separate minor tag.
|
||||
|
||||
The v1.0.0 production-ready tag stays deferred for post-v0.13 UAT
|
||||
signoff (operator runs `scripts/uat-signoff.sh`, pastes output back;
|
||||
CI agent verifies and cuts v1.0.0).
|
||||
|
||||
### Per-phase REQ coverage (v0.13)
|
||||
|
||||
- **P01** — Toolchain bump (REQ-149)
|
||||
- **P02** — Injection hardening (REQ-150)
|
||||
- **P03** — Scheduler wiring + jobspec parser (REQ-151, REQ-152)
|
||||
- **P04** — ACL enforcement + WebAuthn reg auth (REQ-153)
|
||||
- **P05** — Seal/audit CLI + chain race + key zeroing (REQ-154)
|
||||
- **P06** — auth init-idp real + auth register (REQ-155)
|
||||
- **P07** — Concurrency safety (REQ-156)
|
||||
- **P08** — Transport & SSH safety (REQ-157)
|
||||
- **P09** — Migration & operational safety (REQ-158)
|
||||
- **P10** — Observability & metrics (REQ-159)
|
||||
- **P11** — Doc drift round 2 (REQ-160)
|
||||
- **P12** — `--type linux` + UAT plan + signoff (REQ-161, REQ-162, REQ-163)
|
||||
- **P13** — Final review + ship + audit
|
||||
|
||||
### New load-bearing rules adopted in Phase 0
|
||||
|
||||
- **R-022** — `orca job run` deploys to remote nodes via scheduler →
|
||||
emitter → SSH-push. Local exec path removed. Constraints/capacity/
|
||||
affinity enforced.
|
||||
- **R-023** — Zero-trust enforcement is operationally wired:
|
||||
`acl.Check` on every request path; `acl.json` 0600; audit actor =
|
||||
OIDC sub/SVID; WebAuthn registration requires auth.
|
||||
|
||||
### Binding conditions (for GRILL ratification)
|
||||
|
||||
- **C-39**: P03 (scheduler wiring) is the riskiest phase — changes the
|
||||
core `job run` path. Must not break existing `job run` (local
|
||||
fallback if no remote nodes registered). Full test coverage before
|
||||
P04 ships.
|
||||
- **C-40**: P04 (ACL enforcement) is deny-by-default — must not lock
|
||||
out the operator. Bootstrap ACL grants `cluster-admin` to the init
|
||||
cert's SPIFFE SVID. Staged rollout: log-only mode for first run,
|
||||
enforce after bootstrap ACL verified.
|
||||
- **C-41**: P05 (seal) — C-35 residual risk still applies (IdP lost +
|
||||
Shamir quorum unavailable → cluster unrecoverable). No backdoor.
|
||||
- **C-42**: P12 (UAT plan + signoff) is the v1.0 gate artifact. If
|
||||
P01..P11 slip, P12 still ships (honest signal via failing
|
||||
assertions). The signoff script is idempotent and read-only.
|
||||
- **C-43**: `verify-reqs` bold-format regex must be fixed in P11 so
|
||||
the consistency gate works for v0.12 AND v0.13.
|
||||
|
||||
### Risk register (for grill + research, for ongoing monitoring)
|
||||
|
||||
- **P03 scheduler wiring is riskiest** (mitigation: C-39 local fallback)
|
||||
- **P04 ACL deny-by-default could lock out operator** (mitigation: C-40 bootstrap ACL + staged rollout)
|
||||
- **P05 seal residual risk** (mitigation: C-41 documented, no backdoor)
|
||||
- **P02 injection hardening is high-count** (11 sub-fixes; mitigation: each is small and independently testable)
|
||||
- **14 phases is large** (mitigation: operator accepted "no limit on phases"; many phases are small fix bundles)
|
||||
- **UAT plan depends on P03 (scheduler) being functional** (mitigation: P12 ships regardless; failing assertions are honest signal)
|
||||
|
||||
### Deferred to v1.x (out of scope for v0.13) — unchanged from v0.12
|
||||
|
||||
- HA step-ca (active/passive via systemd)
|
||||
- `sqlite-wal-shared` / `git` / `file+flock` state backends
|
||||
- OS keyring integration for master key
|
||||
- Full cluster-rolling-upgrade orchestrator (v0.13 ships the thin `orca upgrade` wrapper only)
|
||||
- Live-migrate with storage replication (v0.13 ships drain+reschedule only)
|
||||
- Journald log shipping (optional centralized audit)
|
||||
- Network policy (`nftables` snippets beyond the ingress ruleset)
|
||||
- GPU / TPU constraints
|
||||
- jobspec `health` prober (v0.13 adds lint warning; enforcement deferred)
|
||||
- jobspec `update` rolling/canary controller (v0.13 adds lint warning; enforcement deferred)
|
||||
- jobspec `schedule.cron` scheduler loop (v0.13 adds lint warning; enforcement deferred)
|
||||
|
||||
Reference in New Issue
Block a user