DreamLake

Host enrollment

Status: Released no-save enrollment and production control-host process execution are verified. Separate disposable-machine reboot evidence passed. Main-API guard/recovery rollout and hosted uncertainty inspection are verified; held UI integration and Ge review remain separate. Tracking: Host #218, master #247.

2026-09-15 — consolidate Hosts into Compute (production)

Frontend PR #310 replaces the duplicate Hosts UI with Compute's Sources-style list/detail shell. Legacy list and host-detail URLs redirect to the corresponding Compute route. The enrollment CLI/SSH handoff and tracked-run lookup remain reachable; tracked-run status, logs, cancellation and recovery behavior are retained. Host APIs and CLI names remain unchanged.

The shared search supports substring and */? patterns across names, IDs, machine IDs and verified status. A derived prefix sits above Compute. All API pages load into one list, refreshed every ten seconds while visible; there are no UI pagination controls. This is heartbeat polling, not streaming resource telemetry. Nymph SSH is not enabled by this UI change.

Review: PR #310 includes current dashboard and enrollment-dialog screenshots using synthetic hosts. The earlier staging screenshots remain historical execution receipts. Linked live Notes preserve the 40-job Slurm evidence while pointing reviewers to the Compute migration. PR #310 merged at 9c20ef6; production deployment 6aaa24563ca46b0008e9a1a2 published 251e20f at 05:10 UTC September 16. The deployment preserves production ancestry and has the same tree as the tested merge. Signed-in browser verification showed the Compute inventory, new sidebar, two online hosts and all 40 historical Slurm hosts. Host status is time-dependent. Staging rollout remains separate.

Validation: focused route/pattern/prefix unit checks, browser checks for legacy redirects, all-page inventory, search, enrollment, denied access and retained tracked-run behavior; frontend typecheck/build and this documentation build. All four frontend CI checks passed, including the full browser suite. Nineteen focused host/run and Sources tests also passed locally. Fixed profile-tab overflow and removed obsolete assertions about deleted controls. Cmd+Shift+D reveals developer-only sidebar entries with [ dev ] badges; Logging remains a placeholder for the dash.ml migration. The resize handle follows the theme.

2026-09-15 — inactive tab hover edge

The first tab now aligns with the code block. Its selected state gives the panel a square upper-left join; selecting another tab restores the rounded corner. Removed the bottom border from hovered inactive tabs while preserving the top and side outline. The toolbar aligns with the right edge, with an 8px gap between the line-number and Copy buttons. Review the hover screenshot or run node docs/scripts/test-code-tabs.mjs <preview-url> /tmp/code-tabs.

2026-09-15 — code tab surface and hover

The active code tab and its bottom edge share the code-content background. Both upper code-panel corners are rounded, and inactive tabs show an outline and ink color on hover without selecting the tab. The compact page-colored row and existing MDX API remain unchanged.

How to test: run node docs/scripts/test-code-tabs.mjs <preview-url> /tmp/code-tabs. Check the matching active/content color, both panel corners, and the inactive hover screenshot, alongside keyboard, copy, mobile and dark-mode checks.

2026-09-15 — folder-style code tabs

The code tabs follow the chat tab strip's raised outline and monospace labels using the existing UIKit primitives. The active tab joins the panel baseline; inactive labels remain flat. The row stays 30px high with the page background, and the MDX API stays unchanged.

How to test: run node docs/scripts/test-code-tabs.mjs <preview-url> /tmp/code-tabs and inspect the updated desktop, mobile and dark screenshots. Confirm the active tab's rounded outline meets the panel cleanly.

2026-09-15 — UIKit code tabs

Published Dockit 0.2.22 supplies UIKit's standard tab controls with a compact row and the page background. The public CodeTabs/CodeExample API is unchanged. The browser review script checks row height and light/dark page-background matching alongside keyboard navigation, copy and mobile layout.

How to test: run node docs/scripts/test-code-tabs.mjs <preview-url> /tmp/code-tabs, then inspect the desktop/mobile/dark screenshots and /lakeshore/hosts/testing/#review-the-hosted-recovery-record.

2026-09-15 — Lakeshore navigation

Moved host guides under /lakeshore so Dockit selects the Lakeshore tab. Hosts now contains enrollment, credentials, remote agent setup, and testing/monitoring; the latter includes the live UI walkthrough. Selected-Vault runs belong to Run Configs; provider registration and resource setup belong to Providers. Existing /hosts/* guide URLs have permanent redirects. Internal guide links and component imports follow the new routes.

Validation: build the static site, run node docs/scripts/test-host-guide.mjs <preview-url>, and inspect the Lakeshore sidebar and old-URL redirects on the deployed site.

2026-09-15 — integrated code tabs

The testing guide uses Dockit's shared CodeTabs and CodeExample components. CLI/Python tabs form one code panel, with keyboard navigation and the existing code controls. Both examples remain in Markdown exports. The production build, rendered guide checks and browser checks passed locally. Dockit 0.2.21 is published from Dockit #30. The docs 0.1.13 deployment receipt will be recorded in the consumer PR.

How to test: open /lakeshore/hosts/testing/#review-the-hosted-recovery-record, switch CLI/Python with clicks and arrow keys, try Home/End, and copy the selected example. Check a narrow viewport and dark mode; the page must not scroll sideways. Run node docs/scripts/test-host-guide.mjs <preview-url> for the rendered guide and Markdown checks.

The browser check also saves screenshots:

shell
node docs/scripts/test-code-tabs.mjs http://127.0.0.1:4178 /tmp/code-tabs

Install Playwright or set PLAYWRIGHT_MODULE to an existing installation. Desktop screenshot, mobile, dark mode.

2026-09-15 — recovery inspection and rollout evidence

The testing guide now pairs CLI/Python inspection commands and links the real full-chain acceptance procedure from #552. Independent isolated acceptance passed both one-launch crash uncertainty and clearing after genuine result replay, including real browser screenshots and cleanup. Nymph 0.1.8 is now published and verified: all 28 public version/latest objects match, and exact Linux x86 bytes passed the native Debian 12 smoke. The owned production bos14 daemon was then upgraded and passed the hosted uncertainty check: one launch across SIGKILL/systemd restart, the same identity/ledger, retained logs and a warning preserved by browser reload. No terminal outcome was fabricated; authentic-result clearing remains isolated-test evidence. Cleanup removed the temporary SSH rule and confirmed no remaining payload; other daemons were preserved.

The current main API guard/recovery rollout is source 21765f7789b778725705caa72fff10507b53da2f, staging revision 171 and production revision 120, with configuration preserved. Verified rollout receipt #568. UI recovery display is deployed at 970e6f6 and was verified against the hosted run above. Held API #328/UI #239 remain separate.

How to test: follow the linked isolated acceptance command, require both scenarios and cleanup: true, and inspect warning/cleared screenshots. Normal client status/log reads must not submit or cancel a run.

2026-09-15 — production process loop and isolated reboot

Released Python 0.16.2, CLI 0.20.1 and nymph 0.1.6 enrolled geyang/bos14/bos14-ctrl through production with no credential saving. SDK/CLI hello runs succeeded with exit 0 and logs; cancellation reached cancelled/-3. Signed reconnect preserved identity and three pre-existing bos14 daemons. The production host, SDK output and cancelled receipt were verified in the signed-in browser. Review the retained records.

The sanitized production receipt records reviewed control-plane c1c72b7; signed callback ingress, restored backup verification, 44 required index checks and unchanged storage/index inventory preceded acceptance. The temporary operator SSH rule was removed. This connection still uses an encrypted existing CP-wide admin credential, not new namespace-scoped execution authority. The combined main-API #469/#523 deployment remains separate until its rollout receipt is verified.

Reboot #529 records a real disposable Ubuntu machine reboot with stable identity, no grant and a successful post-reboot tracked hello. Its strengthened cleanup and post-boot heartbeat gates passed offline tests; the historical cloud evidence was preserved, not relabeled as a rerun. Python maintenance #64/#54 also merged with 948 tests passed/60 skipped; the published version remains 0.16.2.

How to test: inspect the linked production records and the separate reboot procedure. Production-machine reboot, real Slurm/GPU/Kubernetes execution, held #328/#239 UI work, and Ge review are not covered by these results.

2026-09-15 — Python 0.16.2 noninteractive SSH

Python 0.16.2 is published from isolated source b398f2c: published 0.16.1 plus the reviewed SSH fix. Python detaches the SSH process tree and disables askpass, so password-only ProxyJump fails without prompting; configured key/agent access remains available. CLI password interaction is unchanged. New Notes work on main and dependency changes are excluded.

The source suite passed 669 tests with 60 skips. Fresh wheel and sdist installations each passed 20 host tests; a fresh no-cache PyPI installation passed those tests and the actual OpenSSH loopback matrix: CLI target/jump passwords, SDK no-prompt rejection, and key-file/isolated-agent direct and jump access. Systemd is stubbed in that transport fixture. PyPI registry hashes and downloaded bytes match the reviewed release artifacts.

The published SDK also completed staging run 6aa90495100be79cea5a92bf on the retained host ge-yang-d4c5da/demo/dev-runner: succeeded, exit 0, stdout DreamLake Python 0.16.2 live acceptance, with a fresh verified host heartbeat. Viewing requires the authorized staging account. This did not re-enroll or reboot the host and does not establish production acceptance. Ge review remains pending.

How to test: follow Python SSH authentication checks for pinned installation and the repeatable SSH matrix. Shared-worker upgrades, machine reboot recovery and production workload acceptance remain separate.

2026-09-15 — persistent enrollment patch releases

CLI 0.20.1 and Python 0.16.1 are published. The generated Nymph configuration explicitly sets runtime.keep_alive_s = -1 for persistent enrolled services; the daemon's global idle default is unchanged. Previously, its normal five-minute idle exit did not trigger the generated systemd Restart=on-failure policy.

These patches start from the released 0.20.0/0.16.0 tags and backport only the reviewed enrollment fix, regression tests, documentation and version changes. They exclude unrelated Notes development on main. CLI validation passed 1,019 tests, typecheck, all eight native builds and the 33-page client documentation build. Python validation passed 668 tests with 60 skips; fresh wheel and sdist installations each passed 27 host/run/bootstrap checks.

All eight native downloads and the release manifest matched their reviewed SHA256 hashes and sizes. All eight npm platform tarballs and the wrapper matched the same artifacts; a fresh npm installation passed version, capabilities help and an actual HTTP/portable-bootstrap check using synthetic SSH transport. Native and npm latest both read 0.20.1. Python PyPI and GitHub archives matched the reviewed hashes; a fresh public-index installation passed 27 checks.

The repair guide provides paired CLI/Python commands and the private configuration backup/restore sequence. Re-enrollment regenerates the entire Nymph and service configuration. The owned bos14 acceptance therefore checked the newly generated idle setting before restoring only its reviewed private_tracked section and absolute-binary service unit. It did not inject the idle setting into the restored configuration. The original enrollment receipt had expired and returned request_expired; explicit new repair operations retained the same host, enrollment, machine, SSH profile and signing key. These were new operations, not retries with changed request IDs after an uncertain response.

The published Python client passed 324.72 seconds of actual idle time; the published native CLI passed 302.83 seconds. Each interval retained its original process ID with zero systemd restarts. A fresh signed private capability after each configuration restore used the same original active key, and Python also had a fresh signed poll after its idle interval. The final CLI post-interval probe awaits the separately coordinated staging backend rollout; the process check itself passed. Sanitized publication and idle receipt.

The existing dedicated daemon remains running for the separately coordinated hosted private-run acceptance. These checks do not establish machine reboot recovery, rollout to other hosts, or completed hosted Vault execution. Tracking: host #218, Vault #241, master #247.

2026-09-13 — fresh published installer enrollment

CLI 0.13.0 and Python 0.10.0 each bootstrapped a separate fresh Linux account through the staging API and existing development connection. Neither account had nymph installed. Both downloaded v0.1.5, reached backend-verified online status, and ran as the exact non-root test user. Installed binary hashes match the published release verification manifest; identity, token and config files were mode 0600.

Repeated enrollment from both clients preserved each host and enrollment ID. After stopping each test service and removing its bootstrap token, a new signed heartbeat confirmed reconnect. Each worker then completed an explicitly uploaded uv script with the expected output and Unix identity, exit code 0.

uv 0.8.15 was supplied separately in each test user service environment. The bootstrap does not install uv. These were worker-service restarts, not machine or user-manager reboots. Existing workers were not upgraded.

Cleanup stopped the test processes, removed both dedicated accounts/homes and temporary SSH keys, and revoked only their signing keys. Audit records remain. The original staging worker stayed verified online. The cleanup harness initially used id instead of the key-list field keyId; correcting it and reading back revoked states completed cleanup. No runtime code was changed for that correction.

Enrollment/run IDs, hashes and cleanup evidence · Repeatable acceptance procedure.

How to test

Use Real SSH enrollment with separate disposable accounts and pin nymph v0.1.5. Verify online status, file modes, stable identity on replay, a fresh heartbeat after token-free restart and an actual tracked run. Clean only the test resources and verify the original worker remains online.

Production enrollment/execution, existing-host rollout, reboot recovery, password/jump-host prompting, Slurm/GPU/Kubernetes and Ge review/testing remain open. Registration and Host UI keep their existing design hold in #274.

2026-09-13 — published clients on an enrolled host

Fresh npm CLI 0.13.0 and PyPI Python 0.10.0 installations each passed four remote runs on ge-yang-d4c5da/demo/dev-runner: success, exit 7, timeout and cancellation. Both clients preserved argument vectors, uploaded only the selected non-Git script, returned the same run on identical replay and rejected changed replay payloads. Durable stdout/stderr and repeated log cursors matched. All eight submitted runs reached terminal states; cleanup did not touch the host service or pre-existing jobs. Durable run records remain available.

The main staging API runs 3b1ad31, task 147. The development control-plane image is a4cce89e9c20; its active worker advertises nymph 0.1.4, tracked runs, uv and the process runner. This proves the released clients work with that existing worker. It does not verify the nymph 0.1.5 installer or fresh enrollment.

Read-only production checks returned 200 for hosts and Lakeshore connections, with zero records for the tested account. No connection was added: registration and the dashboard boundary remain design-only in #274. Host UI, production execution, reboot/crash recovery and real Slurm/GPU/Kubernetes workloads remain open. Ge review/testing is unconfirmed.

Run IDs, output hashes and runtime evidence · Repeatable script.

How to test

Follow Check published clients on an enrolled test host. Install the pinned released clients, supply a protected test session file and an exact already-enrolled target. Require all eight run records to be terminal and both passed and cleanup to be true. Do not substitute a shared worker for an enrollment or reboot test; those need separate disposable resources.

2026-09-12 — deployed enrollment and command completion

The CLI enrolled a non-root bos14 account through the staging API and development control plane. Acceptance covered the matching machine's online status, user systemd service, private file permissions, retry with the same request ID, and a fresh signed heartbeat after removing the bootstrap token and restarting nymph. A remote command then completed with the expected stdout and Unix user.

The first deployed run exposed a result callback blocked by public ingress. Result and log callbacks now require the key of the worker assigned to the job. Ingress opens these POST routes only after the running API rejects unsigned callbacks. Legacy namespaced result callbacks remain blocked publicly.

ComponentRevision / changeValidation
Staging APIf0f9ef7Deployment succeeded; authenticated hosts 200, anonymous 401, invalid pagination/prefix 400.
Development control plane15b3072, PR #25Production-image build and 637 tests passed; 11 skipped. Existing worker reconnected after rollout.
Nymphd77f958, PR #26322 tests passed; 6 skipped. Linux build and all 5 transport tests passed.
IngressPR #269Dev/prod configs validated. Development callbacks reject unsigned requests; legacy result and bye routes return 404.

Temporary services, host files, control-plane records and connection credentials were removed after testing. Staging retains host/enrollment audit metadata; there is no host-delete API yet. Existing workers and user CLI profiles were preserved.

Signed raw log delivery returned 202 through public ingress. Unsigned, altered and replayed chunks returned 401. This checked callback delivery; S3 log archiving was not exercised.

Remaining work

  • Verify streamed logs and S3 archiving end to end.
  • Verify installer/package compatibility, production rollout and the host UI.
  • Complete Slurm/GPU and tracked-job integration in their workstreams.
  • Record Ge review and testing separately.

No CLI/Python/nymph package release or production API rollout is claimed here. Remote setup guide contains the setup steps.