ship: v0.1 Foundation milestone complete #1
Reference in New Issue
Block a user
Delete Branch "milestone/v0.1-initial"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
All 6 phases shipped. v0.2.0 milestone tag. 21/24 REQ coverage.
Phases:
All 7 tags have Gitea releases with tarball assets.
See .ciagent/RELEASE_POLICY.md for the standing rule: every phase tag MUST produce a Gitea release, not just a git tag.
---ci--- project: orca phase: 0 milestone: v0.1 status: clarify decisions: - id: D-001 decision: Single binary distribution rationale: Simpler distribution; subcommands baked into one orca binary confidence: 0.95 - id: D-002 decision: modernc/sqlite for state store rationale: CGO-free, cross-compile friendly, single file confidence: 0.92 - id: D-003 decision: net/http for inter-node comms rationale: No external RPC framework for v0.1 confidence: 0.85 - id: D-004 decision: Single-node only for v0.1 rationale: Multi-node scheduling is out of scope confidence: 0.90 - id: D-005 decision: Human-readable default, --json for machine rationale: Serves both humans and AI agents confidence: 0.95 - id: D-006 decision: HCL/YAML job specs rationale: Familiar to Nomad users, simpler than JSON confidence: 0.88 - id: D-007 decision: mTLS for v0.1 rationale: Most secure default confidence: 0.80 - id: D-008 decision: Direct process execution (no containers) rationale: Avoids Docker dependency confidence: 0.85 - id: D-009 decision: ~/.orca/config.hcl and /etc/orca/orca.hcl rationale: XDG-style paths confidence: 0.90 - id: D-010 decision: Structured JSON via log/slog rationale: Native Go slog, no external dep confidence: 0.95 ---/ci---Implements Phase 1 of v0.1 Foundation: - go.mod with Go 1.25 - cmd/orca/main.go entry point - internal/cli/root.go with global --json flag - internal/cli/version.go (orca version) - internal/cli/init.go (orca init - creates ~/.orca/) - internal/cli/status.go (orca status - shows daemon info) - internal/cli/node.go (orca node {join,leave,list} - stubs) - internal/cli/job.go (orca job {run,list,stop,logs} - stubs) - Makefile (build, test, lint, fmt, release) - LICENSE (MIT) - README.md with quickstart - .gitignore - .githooks/pre-push + scripts/trigger_coreci.sh (CoreCI trigger) - Smoke tests in internal/cli/root_test.go Verified: go build, go test, go vet, gofmt all pass. ---ci--- project: orca phase: 1 milestone: v0.1 status: execute req_covered: - REQ-001 - REQ-002 - REQ-013 - REQ-015 - REQ-016 - REQ-019 - REQ-024 ---/ci---Implements Phase 2 of v0.1 Foundation: - internal/model/node.go: Node struct with state machine (pending/ready/left) - internal/store/store.go: SQLite open with WAL + foreign_keys pragmas - internal/store/migrate.go: embedded SQL migration runner - internal/store/migrations/0001_nodes.sql: nodes table schema - internal/store/node_repo.go: CRUD operations for nodes - internal/store/node_repo_test.go: 4 tests covering insert/get/list/update/delete - internal/engine/registry.go: in-memory wrapper with slog audit logging - internal/cli/node.go: orca node {join,leave,list} wired to registry Verified: node join/list/leave work end-to-end, JSON output, slog audit logs, state persists in SQLite, all tests pass with -race. ---ci--- project: orca phase: 2 milestone: v0.1 status: execute req_covered: - REQ-002 - REQ-005 - REQ-008 - REQ-012 - REQ-017 - REQ-018 ---/ci---Implements Phase 3 of v0.1 Foundation: - internal/model/job.go: Job + Task models with status state machines - internal/store/migrations/0002_jobs_tasks.sql: jobs + tasks tables with FK - internal/store/job_task_repo.go: JobRepo + TaskRepo with CRUD and lifecycle updates - internal/jobspec/spec.go: HCL parser using hashicorp/hcl/v2 hclsimple - internal/jobspec/spec_test.go: 4 tests for parser - internal/engine/executor.go: parallel task executor using os/exec with Go 1.25 WaitDelay for clean process shutdown - internal/cli/job.go: orca job {run,list,stop,logs} wired to executor - testdata/hello.hcl, testdata/fail.hcl: smoke test fixtures Verified: job run executes commands, captures stdout/stderr, persists state, job stop transitions status, job logs displays captured output. All tests pass with -race. ---ci--- project: orca phase: 3 milestone: v0.1 status: execute req_covered: - REQ-004 - REQ-006 - REQ-009 - REQ-018 - REQ-020 - REQ-021 ---/ci---- internal/daemon/server.go: HTTP Server with lifecycle, logging middleware - internal/daemon/health.go: /healthz (liveness), /readyz (db+ready), /v1/status - internal/daemon/jobs_handler.go: GET /v1/jobs, /v1/jobs/{id}, /v1/jobs/{id}/tasks - internal/daemon/nodes_handler.go: GET /v1/nodes - internal/daemon/tasks_handler.go: GET /v1/tasks (with ?job_id and ?limit) - internal/daemon/validate.go: input validation for path IDs - internal/daemon/version.go: ldflags-friendly version var - internal/store: added TaskRepo.ListRecent for unfiltered task listing - internal/cli/daemon.go: CLI wiring with signal.NotifyContext shutdown Personas: backend-engineer (handlers), cli-engineer (CLI wiring), security-engineer (input validation, no secrets in access logs, slog JSON). ---ci--- project: orca phase: 5 milestone: v0.1 status: execute requirements: covered: [REQ-006, REQ-017, REQ-019] partial: [] ---/ci---- Layer 1 build: go build ./... PASS - Layer 2 vet: go vet ./... PASS - Layer 3 test: all packages green - Layer 4 smoke: /healthz, /readyz, /v1/{jobs,nodes,tasks} all 200; SIGTERM clean REQ-006 (slog audit), REQ-017 (context propagation), REQ-019 (cobra) all covered. Daemon coverage 67.5%. ---ci--- project: orca phase: 5 milestone: v0.1 status: verify requirements: covered: [REQ-006, REQ-017, REQ-019] partial: [] ---/ci---Phase 5 ships: - /healthz, /readyz, /v1/status endpoints - /v1/jobs, /v1/jobs/{id}, /v1/jobs/{id}/tasks - /v1/nodes - /v1/tasks (with ?job_id, ?limit) - Graceful shutdown via signal.NotifyContext - Security: input validation, slog access logs, bounded timeouts ---ci--- project: orca phase: 5 milestone: v0.1 status: ship version: v0.1.5 requirements: covered: [REQ-006, REQ-017, REQ-019] partial: [] ---/ci---- Layer 1 build: go build ./... PASS - Layer 2 vet: go vet ./... PASS - Layer 3 test: all packages green - Layer 4 smoke: make build injects version, make changelog regenerates from commit log, tarball generation works (5.9MB) REQ-007 (CoreCI release flow) covered; REQ-014 (gosec/govulncheck) deferred to v0.2 (out of scope for v0.1 minimalism). ---ci--- project: orca phase: 6 milestone: v0.1 status: verify requirements: covered: [REQ-007] partial: [REQ-014] ---/ci---