Jon Chery 60b0357eb6 feat(P0c): Job/Service/DaemonSet schemas + emitter interface + systemd stub (REQ-074)
P0c — Kind-specific schema validators + Layer 4 emitter interface.

Schemas (internal/spec/schema/schema.go, REQ-074):
- Validator interface with JobValidator, ServiceValidator, DaemonSetValidator.
  JobValidator: count=1, no service block, optional schedule/timeout.
  ServiceValidator: ports required, count>=1, restart+update+runtime required.
  DaemonSetValidator: schedule mode required, no ports (D-175), no count.
  ValidatorFor(kind) dispatcher. 96.2% coverage.

Emitter interface (internal/emitter/emitter.go, REQ-074, I-B-002):
- File{Path,Content,Mode}, Emitter interface { Render(spec,node) []File },
  Registry keyed by kind:runtime, Register + Render lookup. 100% coverage.

Systemd stub (internal/emitter/systemd.go):
- SystemdEmitter for process runtime. Renders minimal [Service] unit at
  /etc/systemd/system/orca-v1-alloc-<name>.service (orca-v1- prefix per
  dual-write window REQ-090 — no overlap with v0.8 daemon's orca-<job>).

Flock test fix: TestFlock_concurrentBlocks rewritten to use non-blocking
tryFlockEx (LOCK_NB) instead of a leaked blocking goroutine. Eliminates
the temp-dir cleanup race.

20 packages pass, 20 bats pass, gofmt clean, verify-reqs 90 consistent.

---ci---
project: orca
phase: P0c
milestone: v0.9
status: execute
---/ci---
2026-08-05 17:17:02 +00:00

Orca

Offline/CLI-first orchestration engine inspired by HashiCorp Nomad, far simpler than Kubernetes.

Status

v0.1: Foundation — see .ciagent/ROADMAP.md for the 6-phase plan.

Pillars

  • Simplicity — single binary, minimal dependencies
  • AI-first — CLI designed for both humans and AI agents
  • Offline-first — no cloud dependencies
  • CLI-first — primary interface is the command line
  • Security before features — NFRs ship before new functionality
  • Bug fixes before features — stability is paramount
  • NFRs before features — observability and auditability first

Quickstart

Install (1-liner)

# User-level install (binary at ~/.local/bin/orca, state at ~/.orca)
curl -fsSL https://git.cloudinit.dev/coreci/orca/raw/branch/main/scripts/install.sh | bash

# System-level install (binary at /usr/local/bin/orca, state at /root/.orca)
curl -fsSL https://git.cloudinit.dev/coreci/orca/raw/branch/main/scripts/install.sh | sudo bash -s -- --system

# Pin a specific version
curl -fsSL https://git.cloudinit.dev/coreci/orca/raw/branch/main/scripts/install.sh | bash -s -- --version v0.4.2

Then initialize local state and verify:

orca init          # creates ~/.orca/ (or /root/.orca with --system)
orca version       # prints version info
orca --help        # show all subcommands

Build from source

make build         # Build binary to ./bin/orca
./bin/orca init    # Initialize local state
./bin/orca version # Verify

Update in place

Re-running the installer updates the binary while preserving your config, database, and certificates in the namespace dir:

curl -fsSL https://git.cloudinit.dev/coreci/orca/raw/branch/main/scripts/install.sh | bash
# → "updated orca from v0.4.1 to v0.4.2"

Subcommands

Command Description Status
orca version Print version info Phase 1
orca init Initialize local orca state Phase 1 (stub)
orca status Show orca daemon status Phase 1 (stub)
orca node Node management (join, leave, list) Phase 2
orca job Job management (run, list, stop, logs) Phase 3

Development

make build      # Build binary to ./bin/orca
make test       # Run tests with race detection
make lint       # Run golangci-lint
make fmt        # Format code
make release    # Build + create Gitea release (Phase 6)

Architecture

See .ciagent/ARCHITECTURE.md for full architecture details.

License

MIT — see LICENSE.

S
Description
Orca — offline/CLI-first orchestration engine (Nomad-inspired, far simpler than Kubernetes)
Readme MIT 6.2 MiB
Languages
Go 94.7%
Shell 4.9%
Makefile 0.3%