Skip to content

Make development local-first and track mybots deployment - #5

Open
mzored wants to merge 12 commits into
mainfrom
issue-17-local-first
Open

Make development local-first and track mybots deployment#5
mzored wants to merge 12 commits into
mainfrom
issue-17-local-first

Conversation

@mzored

@mzored mzored commented Aug 31, 2026

Copy link
Copy Markdown
Owner

Outcome

Development remains local-first. Production deploys exact SHA releases from a clean local checkout through one foreground receiver, with no server Git checkout, development environment, or target deployment helper execution.

What changed

  • replace the rejected activation transaction with immutable per-SHA release directories and one atomic current selector
  • use a stable direct assist-ai-bot.service with server-owned environment and persistent data
  • add exact-SHA/origin verification, archive validation, locked dependency export, disk preflight, and a fail-fast foreground lock
  • build each venv at its immutable final release path, validate same-SHA archive/tree identity before reuse, and reject credential, key, certificate, and SSH archive material
  • retain ordinary in-process failed-start rollback and explicit recover <sha> only; there is no activation journal, background worker, boot recovery, A/B slot reuse, or automatic pruning
  • preserve the legacy checkout during prefix-safe first cutover; a normal cutover failure restores the preflight environment, selector, unit file, and loaded unit
  • replace control-plane tests with immutable-release, selector-boundary, SIGKILL, real-builder, cutover-fault, archive, direct-current subprocess-health, and static direct-systemd acceptance coverage

Verification

  • make check: 745 tests on macOS
  • shellcheck -x ops/*.sh tests/deploy/*.sh
  • actionlint .github/workflows/*.yml
  • Ubuntu CI runs systemd-analyze verify plus direct-unit property checks; live user-systemd runtime proof is outside this PR

No production service or host state was changed.

@mzored
mzored force-pushed the issue-17-local-first branch 3 times, most recently from c43441d to 61dfdac Compare August 31, 2026 06:13
@mzored

mzored commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

Replacement implementation pushed at 910e811.

The old remote helper, current symlink, and mutable transaction journal are replaced by fixed A/B slots, a stable launcher, immutable activation requests, durable selection state, and stable systemd controls. Stable controls and unit files reject substituted symlink paths even when their contents match. Bootstrap re-entry is covered after SIGKILL during legacy Git retirement. Runtime proof now tolerates the launcher exec transition within the stabilization window, then requires the selected interpreter and working directory with no restart increase.

Verified locally on macOS:

  • 48 focused deployment tests passed, including activation and retirement SIGKILL boundaries.
  • The full required check passed: 679 repository tests, deployment tests, lock validation, Black, isort, and flake8.
  • Bash parsing, warning-level ShellCheck, actionlint, Python compilation, and diff checks passed.

Exact-head CI run 33373441061 passed check on Ubuntu, check on macOS, and the native Ubuntu 24.04/systemd 255 integration job. No merge or production action was performed.

@mzored
mzored force-pushed the issue-17-local-first branch 9 times, most recently from 25c02a5 to ccec66f Compare August 31, 2026 10:11
@mzored
mzored force-pushed the issue-17-local-first branch from ccec66f to 213fbf6 Compare August 31, 2026 10:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant