Skip to content

feat(autostart): start opted-in Compose projects once per boot - #803

Open
roodboi wants to merge 62 commits into
nextfrom
feat/autostart-marker
Open

roodboi wants to merge 62 commits into
nextfrom
feat/autostart-marker

Conversation

@roodboi

@roodboi roodboi commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Behavior

Projects opt into machine-local login startup with hack autostart add --project <name> or hack up -d --always. Commands support positional names, JSON and noninteractive operation. Global pause remains independent of each project's pause. This is an optional feat targeting next; keep-up and upgrade reconciliation remain separate units.

This unit now supports Compose-only unattended starts. Projects declaring lifecycle/startup hooks, host processes, shared helpers, dependency bootstrap, image builds, external/command providers or unsupported composition require manual hack up. Built-in local encrypted app env remains supported without keychain fallback. Managed keys that redirect Compose, Docker, Git, executable lookup or host execution are refused by name without decrypting values. Ordinary manual starts keep their behavior.

Retained projects created by hack config adopt require manual starts because their runtime does not implement the unattended guards. Admission and dispatch refuse them at login. Manual down --recover reaches its retained owner before ordinary legacy discovery, including an interrupted start. Docker fixture failures now report only an allowlisted stage, exit status and known error code.

Explicit hack autostart run forwards SIGINT/SIGTERM to its pass, waits for detached startup cleanup and progress settlement, then exits with the signal status without printing successful completion. A repeated signal does not interrupt cleanup. SIGHUP is outside this explicit-command guard; use the installed service for unattended operation.

Admission rejects unresolved YAML merge keys at any depth, with bounded cycle-aware traversal. Harmless shared anchors and merged bases remain eligible; recursive aliases refuse.

Only service-origin daemon launches replay projects automatically; manual launches explain explicit hack autostart run. Children receive a fixed environment and no terminal. Docker readiness uses configurable ten-minute backoff. Waiting is visible in JSON and consumes no claims; later engine observations can resume the pass in the same boot. Starts are stable, staggered by 500 ms and capped at two. Already-running eligible instances are adopted only when the supported service graph is complete.

Project policy is checked before engine access or a claim, before discovery, under the instance lock and before Compose effects. The actual host runners and provider boundary also refuse unattended execution. Images are explicitly inspected locally; both Compose phases use --no-build --pull never and disable implicit dotenv. Only a confirmed missing-image diagnostic is a neutral manual-start refusal. Transport/configuration and ordinary preparation failures retain their claim and failure result. Manual-start refusals release only a matching unstarted boot/branch claim and do not enter login_run.failed.

Host-file/source-code binds, file-backed configs/secrets and indirect mounts require manual starts. Anonymous volumes, tmpfs and default local named storage remain supported. A bounded private effective-model probe covers generated overrides; existing named volumes must have no driver options and matching Compose ownership labels. Storage is checked before create and start. The only bind exception is the exact generated read-only TLS certificate paths: bounded no-follow reads authenticate safe ownership/modes and CA-only PEM content, and repeat before effects. No certificates or permissions are changed. This is not a container-privilege sandbox; prepared images and engine data remain trusted.

down pins its reconciled worktree target, publishes pause before waiting for the instance lock, then holds it through shutdown. The login CLI owns the same lock and rechecks intent before preparation and startup. Detached phase groups forward cancellation and settle before returning. Linux service-origin children run in independent transient user scopes; the daemon retains KillMode=control-group.

Registry writes are locked, atomic and private, with no-follow owner/mode/size checks. Legacy first opt-in independently observes a reviewed checkout; copied registrations retain review provenance. Ordinary unmarked registration/prune preserves legacy compatibility without granting startup authority. Project/global JSON matches the desktop contract, including waiting_for_engine; failure-budget fields remain Unit 2 placeholders.

Routing authenticates installed canonical templates before effects, publishes fresh nonsecret 0644 inodes and recreates mounts. Staging occurs outside mounted directories. Checkout/config/generated-input paths, executables, Docker context and Compose plugin paths are checked. Login Git probes disable global/system config, monitors and hooks. Doctor reports closed trust/manual-start categories.

Darwin ACL inspection covers those trust paths, registry and lock paths, routing inputs and TLS files. Bounded read-only probes refuse mutation grants, unknown rights and unsuccessful inspection; no permissions are repaired. Bounded Compose output is decoded from captured bytes as UTF-8 before model parsing, preserving non-ASCII trusted mount paths and refusing malformed text.

Trust policy: strict refusal includes user-private-group write. On macOS the engine path (helper lookup, Docker plugins and the Docker socket path) accepts a root-owned directory whose only extra writer is group admin, such as /Applications, so default Docker Desktop and OrbStack layouts are eligible. World-writable directories and all checkout, config, registry and TLS inputs keep the strict check, and the hackd.service PATH check is unchanged. Ordinary daemon PATH/status behavior is unchanged. Docs describe private reviewed tools, nonrecursive permission review and umask 022 for manual starts; no owner permissions are changed automatically.

Stop wins over a waiting pass: if down cannot read the engine while choosing between base and branch instances (the login pass may be waiting for that same engine), it pauses the registration's marked instance, whatever its branch, before failing. A login service installed by an earlier version lacks the login-service marker; run hack daemon install once after upgrading (automatic reinstall is HACK-2216).

Formerly writable files must be preserved and replaced on fresh private inodes from reviewed inputs; in-place chmod or ACL changes cannot revoke retained writer descriptors. This applies to Compose/config/env/generated inputs and executable/Docker inputs as well as registries and TLS. Doctor names this requirement. Current metadata and stable reads do not infer permission history or freeze later Compose reads; merely copying unreviewed bytes is insufficient.

Login sequence

Validation

Head b34014ce2e1c2819a4b92f4cd7827f7d0424d9b5 merges next at e47681ea0 (normal merge). Conflicts: up keeps both next's --progress and --always; the six native plan acceptance scripts take next's assertNativePlanHome, and the superseded local wrapper and its test are removed; docs/reference/cli.md is regenerated.

  • Local (pinned Bun 1.4.4, umask 022, temp HOME): 36 PR test files plus the spawn-isolation guard: 528 pass, 2 skip, 0 fail. bun run typecheck, bun run check and bun run build pass.
  • Acceptance: check:native-plan-cli (env, host, routing, endpoint, process and acquisition plans, plus config import) and scripts/check-config-compiler-cli.ts pass against a locally built config compiler.
  • Persistent Codex reviewer: clean at this head. Exact-head hosted CI and the bot review are pending.

Remaining qualification

Real macOS/Linux login, reboot, cold Docker Desktop, native Darwin ACL behavior and keychain behavior remain unverified. Read-only Mac filesystem metadata confirms the documented app-bundle permission consequence; that is not runtime qualification. No manual macOS CI dispatch was requested. The full local suite was not run; planned exact-head CI, including enabled Docker/model/lifetime jobs, remains required. Earlier Docker dependency-worktree failures exposed the interrupted-adoption recovery regression; local recovery passes, but hosted Docker must confirm the failing scenarios.

Native login and linked-worktree opt-in are unsupported. Crash after claim or forced timeout can leave partial startup; a process census cannot revoke a request already accepted by Docker. Code/data inside prepared images and engine-managed volumes is not recursively audited. Current TLS file checks cannot revoke an older open writer; formerly writable trust files require reviewed manual replacement. Unknown engine missing-resource diagnostics fail closed as ordinary claimed failures. Older CLIs can erase opt-ins; service_ready does not yet prove executable capability. Explicit overlapping passes, shell-DOCKER_HOST-only engines, snapshot rollback restoring historical intent, native restart pauses and umask-dependent generated files remain documented follow-ups.

Tracks HACK-2213. Keep-up and HACK-2216 remain separate PRs.

@vercel

vercel Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hack-docs Ready Ready Preview Nov 15, 2026 2:22pm UTC

Request Review

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-15T14:25:23.466549Z f9f643f Manual request
🔒 Security Review ✅ Completed 2026-11-15T14:28:25.183854Z f9f643f Manual request

Security findings

Advisory findings (20)

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 48e793e237

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/daemon/autostart.ts Resolved
Comment thread src/commands/project.ts Resolved

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛡️ Codex Security Review · Automatically triggered

Here are some automated security review suggestions for this pull request.

Reviewed commit: 48e793e237

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

Comment thread src/daemon/autostart.ts Resolved
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e95d5184ab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/daemon/autostart.ts Resolved

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛡️ Codex Security Review · Automatically triggered

Here are some automated security review suggestions for this pull request.

Reviewed commit: e95d5184ab

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

Comment thread src/lib/projects-registry.ts Resolved
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: e191c62dc2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: e191c62dc2d13ee7514f362acefe88e81f092c55, base next through a262d42762 by normal merges.

Unit 1 implements machine-only autostart markers and CLI controls, up/down pause semantics, bounded once-per-boot Compose startup, desktop §6 JSON/global progress, safe noninteractive execution and registry trust checks. Failure fields are empty Unit 2 placeholders; no keep-up loop is claimed.

Evidence:

  • Exact-head CI run https://github.com/hack-dance/hack/actions/runs/43537181783 succeeded: all five planned Linux shards (4–8), focused tests and secret scan passed. Test/Docker fan-ins passed. Docker shards, native/compiler/model/image tiers and Linux lifetime were out of scope/skipped; those fan-ins are not evidence those tiers ran. Old cancelled runs remain visible and are superseded by this successful run.
  • Local pinned Bun 1.4.4: nine focused files, 108 pass / 1 existing compiled-child skip / 504 assertions; typecheck, lint/privacy, build and docs prepare/check pass. Full local suite was not completed; it was cancelled after invalid fixture setup and later superseded source/base revisions. Native-file-owner separately passed under private umask (29 tests, 197 assertions).
  • One persistent Claude Opus 5.5 reviewer: clean. Codex code review is clean at this exact head (feat(autostart): start opted-in Compose projects once per boot #803 (comment)); all bot findings have replies and are resolved. computer pr review-status: CLEAR at e191c62.

Not verified: real Linux/macOS login/reboot, live Docker startup, actual native keychain behavior, and terminal-independent lifecycle supervision. No additional macOS shards were dispatched. macOS/Docker/native qualification is deferred, not passed. No live home, registry, project, daemon or login service was changed for this work.

Known scope: primary-checkout opt-in only; native startup unsupported; unknown/complex Compose selection runs ordinary up and may repeat hooks; preflight failure or a crash after claim needs manual up in this slice. Keep-up follows with HACK-2215; daemon upgrade handling remains HACK-2216 and consumes #790's snapshot interface. Lead merges; this session does not.

Cleanup: no task runtime/test processes remain. The prescribed safe-rm cleanup was refused for four task scratch directories with GuardError: Cannot confirm an archived, idle T3 session; they were retained, with exact paths and receipts in the durable handoff. No alternate deletion was attempted.

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 08cf57d486

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/daemon/autostart.ts Resolved
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f714a6af87

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/daemon/autostart.ts Resolved
@roodboi

roodboi commented Nov 14, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2839fd79f5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/commands/project.ts Resolved
…at login

After the env-migration journal landed on next, an unfinished or unverifiable
`hack env migrate` surfaced in the login child as an unexpected error, which
the pass recorded as a failed start. Check the journal before any startup
work and report it as pending_env_migration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 57f211bf31

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/autostart-start-policy.ts Resolved
A modern project whose .hack/.env was written by `hack env materialize`
(env layers, no legacy contract, valid .env.state.json) was refused as
pending_env_migration. Use the same generated-output rule as the legacy
dotenv detector; unattended Compose never loads that file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Hooray!

Reviewed commit: 93cda95b3a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 93cda95b3a

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

roodboi and others added 2 commits November 15, 2026 07:40
Resolve conflicts with #831 shared service state: project-views keeps both
import sets (observation fields come from next's serializer); projects.ts
keeps the autostart row field and drops the now-redundant observe spread;
runtime-cache test takes next's file plus this branch's autostart polling
test; getting-started keeps both paragraphs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…autostart --json

Follow the machine-readable output rule from #835 for these new commands:
`hack autostart add|list|pause|remove|resume|run --json` now return
`{ ok, data: { schema: "hack.autostart.v1", action, ... } }`; `list` no longer
prints a bare object. The commands are added to the JSON inventory and the
generated reference table. `projects --json` keeps its legacy shape.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: 278f847184

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 278f847184

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: 278f847184728c30102f4d30e72ff020d00f28d8. Normal merge of next at 345dc0d119 (no rebase). This supersedes the note at b34014ce2e.

Since the last note

  • next bf74aaf0 merge: kept both the autostart and env-migration TLA contracts and coverage rows. Fix 57f211bf3: an unfinished or unverifiable env-migration journal is reported at login as pending_env_migration, not as a claimed failed start. Its regression test fails without the fix.
  • Fix 93cda95b3 (bot P2): .hack/.env written by hack env materialize (env layers, no legacy contract, valid .env.state.json) is no longer refused as a pending migration. Unattended Compose never loads it (--env-file /dev/null).
  • next 345dc0d1 merge (feat(projects): share backend-aware service state across CLI and daemon #831 conflicts): project-views keeps both import sets; projects.ts keeps the row's autostart field, and next's serializer owns observation; the runtime-cache test is next's file plus this branch's polling test; getting-started keeps both paragraphs.
  • Commit 278f84718 (fix(cli)!: standardize HACK-2218 machine output contracts #835 rule for new outputs): all six hack autostart add|list|pause|remove|resume|run --json now emit {ok, data: {schema: "hack.autostart.v1", action, ...}} through machineSuccess. They are registered in MACHINE_SCHEMAS, JSON_COMMAND_SHAPES and SCHEMA_JSON_VARIANTS, and the reference table is regenerated. list changes from a bare object to the envelope; nothing on next consumes it. projects --json keeps its legacy shape.

What I ran

  • Exact-head run 43691550268: all Linux jobs green, including test shards 4–8, docker-e2e 1–4 with fan-in, Candidate core and Config compiler (ubuntu, ubuntu-arm), linux-process-lifetime, Runtime state models, runtime-images, docs site and test focus. Queued, not waited for: test shards 1–3 (macOS-15).
  • Local (Bun 1.4.4, umask 022, temp HOME): 38 test files, including machine-output-contract, sync-spawn-bound and cli-spawn-env-isolation: 627 pass, 2 skip, 0 fail. Typecheck, check, privacy, docs:prepare and docs:check, and build pass. The nine acceptance scripts pass (the config compiler was linked locally with zig cc).
  • Persistent Codex reviewer, same thread across 7 rounds: VERDICT CLEAN at 278f847184.
  • GitHub Codex code review: no major issues at 278f847184. Security review: no findings. computer pr review-status: CLEAR at 278f847184.

For the Mac batch: a real login-service start with a down during the pass, and a cold Docker Desktop start. Run hack daemon install first: a login service installed by an earlier version lacks HACK_DAEMON_LOGIN_SERVICE. If #854 is merged, start refreshes it automatically.

Merge order: this follows #802 + #854. Expected conflicts on the next merge of next: docs/reference/v5-model-coverage.md and scripts/lib/tla-runtime-models.ts with #802; MACHINE_SCHEMAS, src/cli/json-contracts.ts and the generated docs/reference/machine-readable-output.md with #854 (both add entries). I will keep both sides' entries and regenerate the generated files. I will not push before you ask.

Still open: the Compose-only scope question (comment 6880936376). My default keeps the narrowing.

Resolve conflicts with #802: scripts/lib/tla-runtime-models.ts and
docs/reference/v5-model-coverage.md keep both the autostart-start-stop and
lifecycle-supervisor entries (the coverage doc has no generator).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: 5229457504

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 5229457504

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: 52294575044a30c21e57e1105546889820c76e79. Normal merge of next at 34b50534ed. This supersedes the note at 278f847184.

Since the last note: a merge of next 34b5053 (#802, #860, #818). The only conflicts were scripts/lib/tla-runtime-models.ts and docs/reference/v5-model-coverage.md; both keep the autostart-start-stop and lifecycle-supervisor entries. The coverage doc has no generator; the other generated files regenerated with no diff. No behaviour change in this PR.

What I ran

  • Exact-head run 43697907494: all Linux jobs green, including test shards 4–8, docker-e2e 1–4 with fan-in, Candidate core and Config compiler (ubuntu, ubuntu-arm), linux-process-lifetime, Runtime state models, runtime-images, docs site and test focus. Queued, not waited for: Candidate core (macos-latest), Config compiler (macos-latest, in progress) and test shards 1–3 (macOS-15).
  • Local (Bun 1.4.4, umask 022, temp HOME): 39 test files, including machine-output-contract, sync-spawn-bound, cli-spawn-env-isolation and tla-runtime-models (179 contract tests): 806 pass, 2 skip, 0 fail. Typecheck, check, privacy, docs and build pass. The nine acceptance scripts pass (the config compiler was linked locally with zig cc).
  • Persistent Codex reviewer, same thread across 8 rounds: VERDICT CLEAN at 5229457504. It confirmed feat(lifecycle): add standalone Rust supervisor with crash recovery #802's supervisor is a standalone crate that leaves the login child's up path unchanged, and that feat(update): report available updates read-only for any install kind (HACK-2218 R14) #860's update check runs only when explicitly invoked.
  • GitHub Codex code review: no major issues at 5229457504. Security review: no findings. computer pr review-status: CLEAR at 5229457504.

For the Mac batch (unchanged): a real login-service start with a down during the pass, and a cold Docker Desktop start. Run hack daemon install first: a login service from an earlier version lacks HACK_DAEMON_LOGIN_SERVICE. With #854 merged, start refreshes it.

Merge order: this follows the set with #811. Expected conflicts on the next merge of next: docs/versions/v5/getting-started.md and scripts/lib/tla-runtime-models.ts with #811, plus MACHINE_SCHEMAS, src/cli/json-contracts.ts and the generated machine-readable-output.md with #854. I will keep both sides' entries and regenerate the generated files. I will not push before you ask.

Still open: the Compose-only scope question (comment 6880936376). My default keeps the narrowing.

…hape

#835's success-shape test pins the legacy top-level keys of plain
`projects --json`. This branch intentionally adds the machine-wide
`autostart_global` object there (documented in always-on-projects), so add
it to the pinned key set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

Superseding the ready note at 52294575: hosted macOS test shard 2/8 failed in tests/machine-output-success-shapes.test.ts. That test pins the legacy projects --json keys, and this branch intentionally adds autostart_global. A test-only fix is pushed at 131d218ab0263ff5c0fc9ddfcb120691be80f754; a new ready note follows once the reviewer and CI are clean. @codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit: 131d218ab0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 131d218ab0

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

Ready for lead: 131d218ab0263ff5c0fc9ddfcb120691be80f754. Normal merge of next at 34b50534ed. This supersedes the note at 5229457504.

Since that note: one test-only commit. Hosted macOS test shard 2/8 at 5229457504 failed in tests/machine-output-success-shapes.test.ts: #835's test pins the top-level keys of the legacy projects --json object, and this branch intentionally adds the machine-wide autostart_global object there (documented in docs/always-on-projects.md; used by the desktop always-on contract). The pin now includes it. No production code changed.

What I ran

  • Exact-head run 43707115744: all Linux jobs green, including test shards 4–8, docker-e2e 1–4 with fan-in, Candidate core and Config compiler (ubuntu, ubuntu-arm), linux-process-lifetime, Runtime state models, runtime-images, docs site and test focus. Test shard 2/8 (macOS-15), the one that failed at the previous head, also passed. Queued, not waited for: Config compiler (macos-latest, in progress) and test shards 1 and 3 (macOS-15).
  • Local: machine-output-success-shapes and machine-output-contract give 103 pass. The prior full local set at 5229457504 was 39 files, 806 pass, 2 skip, 0 fail, plus the nine acceptance scripts.
  • Persistent Codex reviewer, same thread: VERDICT CLEAN at 131d218ab0 (round 9). It confirmed an additive, deliberate key is consistent with fix(cli)!: standardize HACK-2218 machine output contracts #835's rule.
  • GitHub Codex code review: no major issues at 131d218ab0. Security review: no findings. computer pr review-status: CLEAR at 131d218ab0.

For the Mac batch (unchanged): a real login-service start with a down during the pass, and a cold Docker Desktop start. Run hack daemon install first (a login service from an earlier version lacks HACK_DAEMON_LOGIN_SERVICE); with #854, start refreshes it.

Merge order: this follows the #811 set. Expected conflicts on the next merge of next: docs/versions/v5/getting-started.md and scripts/lib/tla-runtime-models.ts with #811, plus MACHINE_SCHEMAS, src/cli/json-contracts.ts and the generated machine-output table with #854. I will keep both sides' entries and regenerate. I will not push before you ask.

Still open: the Compose-only scope question (comment 6880936376). My default keeps the narrowing.

Resolve conflicts with #811: scripts/lib/tla-runtime-models.ts keeps both the
autostart-start-stop and lifecycle-controller contracts; getting-started keeps
both paragraphs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

…nner

#811's opt-in `lifecycle.runner: "supervisor"` runs its companion binary
even with no hooks or processes, so a runner-only project passed admission
and the login child executed the supervisor preflight. Refuse any runner
other than the default "mux" at admission, before a claim or dispatch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 2783428476

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@roodboi

roodboi commented Nov 15, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: f9f643fc6c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: f9f643fc6c

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

This branch has not been deployed

No deployments
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