Tag

#decision

22 pages tagged #decision.


1 deprecated hidden

Decisions decisions/ 22 pages

Thin-core architecture: one Go binary owning state, sequencing, keys and recovery, with every other tool kept as a pinned subprocess.

decisions/0001-thin-core-architecture #architecture

Project name exocomp, after the Control D collision ruled out the working name.

decisions/0002-project-name-exocomp #naming

Secrets envelope of age recipients, a DEK and HKDF subkeys, with a recovery kit that closes the credential loop.

decisions/0003-secrets-envelope #secrets #security

OpenTofu HTTP state backend implemented in SQLite, sidestepping the S3 conditional-write gap.

decisions/0004-opentofu-http-state-backend #state #terraform

Job sandboxing via nono's enforcing tier, so a job is denied every powerful local socket.

decisions/0005-job-sandboxing-nono #security #sandbox

A uv build-time Python toolchain plus a doctor-gated operator escape hatch in the data volume.

decisions/0006-uv-toolchain-escape-hatch #toolchain #offline

The audit hash chain is deferred, and reviving it requires an off-host-anchored head.

decisions/0007-audit-chain-deferral #security #deferred

Multi-step choreography runs on a step ledger over the job store, with DBOS deferred.

decisions/0008-step-ledger-over-dbos #queue #execution

LAN listeners require locally-minted bearer tokens, with TLS on by default.

decisions/0009-lan-access-tokens #security #auth

A git-centric source model with deploy and fleet keys, and state-only versus run-in-server workspaces.

decisions/0010-source-and-credential-model #sources #credentials

Project dependencies resolve from root requirements.txt or pyproject.toml into hash-gated caches, with uv shipped at runtime.

decisions/0011-project-dependency-resolution #dependencies #offline

Litestream as an optional fast-RPO sidecar replicating the database WAL, with restic staying authoritative and an unencrypted remote refused without an acknowledgement.

decisions/0012-litestream #backup #replication

OpenBao Transit as an optional additive seal for the DEK, keeping the age keyring recovery path and treating unreachable as an explicit error.

decisions/0013-openbao-transit-seal #secrets #backup

One core with three thin programmatic faces, the machine CLI, the HTTP API and MCP, sharing the one auth model, the one queue and the wire envelope.

decisions/0014-agent-facing-surface #api #mcp #cli

Ansible collections go per-source in a content-hash-keyed cache resolved at claim time and garbage-collected with the source lifecycle.

decisions/0015-per-source-collections #ansible #offline

exocomp ships as a self-contained base image that is also an artifact carrier, bootstrapping uv when absent and delegating ansible on PATH.

decisions/0016-artifact-carrier-image #packaging #containers

One shared probe vocabulary for checks and gates, with the SSRF guard applied per face and Location opt-in per kind.

decisions/0017-shared-probe-vocabulary #checks #probes

Aggregate check events, the event host set and the limit-hosts flag are removed, leaving migration 0041 as inert schema.

decisions/0019-aggregate-check-events-removed #checks

Reload first, restart after drain, and recover interrupted jobs, with schedules reloading without a restart.

decisions/0020-reload-restart-and-recovery #serve #recovery

The host scope stays write-only: the request response returns terminal state, and a same-key retry polls the original job without enumeration.

decisions/0021-host-request-polling #api #auth

Withdraw the v1.0 label: the acceptance bar stays met and gate-tested, but the release line begins at v0.1.0 and release-please owns later versions.

decisions/0022-pre-1.0-release-line #release #versioning


All tags