You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ef704cb feat(learn): scan proposes the startup plan and the dev script port
4f5b795 feat(learn): the copied prompt says how to ask for a secret
2b24a65 feat(learn): verify records the prepare recipe of the verified instance
e95fbf6 feat(learn): warn when a host step fixes a port or the hostname
fa60fc7 feat(lifecycle): draw a plan as a workflow graph from the runner's own rules
d745626 feat(lifecycle): folder references reach only names a repository uses
59c241f feat(live): POST /api/live on, off and resume; live state in /api/repos and the Repos fragment, with the Live switch, worktree notes, cleanup callouts and selector markup
58dac26 feat(live): Reconcile gates on trust, picks targets and mode, skips on locks, rate-limits and pauses on failure
43210be feat(live): TestLiveBranchCleanup squash-merges a branch into a temp origin and cleans it with real Docker, leaving the sibling's volume
ef50aa7 feat(live): TestLiveMode reconciles a push with real Docker and pauses on a broken Dockerfile
505b16f feat(live): a live run is cut from the plan and runs through StartEnv; no host step, no data removal
b886975 feat(live): baseline store moves only after a succeeded live run
a55740e feat(live): branch cleanup candidates (linked worktrees with an upstream, minus the exclusions)
7c29256 feat(live): cleanup eligibility is re-read from disk right before acting (status, ignored files, merge proof, locks)
ac70c79 feat(live): debounce 3 s with a 60 s ceiling
ae70396 feat(live): derive the watch set from compose.json, facts, manifest and overrides
a1b1e93 feat(live): detect merged, closed and open branches from the local repository
51d7f2c feat(live): fetch schedule with jitter, backoff and one warning per upstream commit
a67aaf1 feat(live): knowledge live overrides and learn record live-watch, live-ignore, fact migration-dir
bf8771d feat(live): live runs skip host exec steps and say why; Windows host exec checks
0cf609a feat(live): live runs, Resume, cleanup callouts and selector on the page; failed live run toasts once, a succeeded one is silent
87e0422 feat(live): optional gh enrichment from fixed paths, cached and capped, only more conservative
83a6df7 feat(live): per-repository live and cleanup settings in config.json
56af16e feat(live): poll the watch set with stat then SHA-256, read the branch from HEAD
78fd933 feat(live): repos.Sync returns a SyncResult; SyncUpstream keeps its behaviour
9c54be5 feat(live): runs record trigger live, a cause and a no-wait Begin
e274cb6 feat(live): scan lists migration directories at the root and in build contexts
9b779cd feat(live): stackfork live on|off|status and live cleanup, with the trust, secret and watch-set checks of D12
fe9d5d9 feat(live): suggest and auto cleanup in the loop with a grace period and Keep; live clean previews and cleans; candidates in live status
67a5325 feat(live): the cleanup run removes the worktree, then the instance and its volumes, then the branch
7f31750 feat(live): the dashboard runs the live loop under a lock, rereads config.json and waits for a live run on shutdown
4468de6 feat(live): the guard blocks live clean --yes; POST /api/live cleanup, clean and keep behind native confirmations
100caf5 feat(live): the guard blocks live on, automatic cleanup and the live API for agents
8e8561d feat(macos): Swift package skeleton for the menu bar app
3305d7e feat(macos): add global shortcut to show the dashboard
1b74f5b feat(macos): dashboard API client, menu model and menu poller
f4cecc5 feat(macos): ready-line parser, child environment and dashboard supervisor
860380d feat(macos): status menu, dashboard window and app wiring
a2ef89e feat(metrics): sample container and host app CPU and memory into a 6 h ring buffer
7e89cd0 feat(plan): a missing exec service suggests recording the step on the host
7d9f1d7 feat(plan): exec once deps reruns when the lockfiles change
8aad711 feat(plan): exec steps take on: host; trust covers host exec steps
beb4d0e feat(plan): plan text and json show host exec steps with their trust state
f6faae0 feat(plan): show expanded host commands with --expand and in --json
982c3b6 feat(plan): stackfork plan prints the derived plan and exits 0 without recorded steps
77bee3c feat(plan): stackfork plan prints the startup plan; plan --trust records per-machine trust
27e3336 feat(plan): the runner runs host exec steps on the host
2117488 feat(repos): Sync reports whether an update is blocked
0ce5b78 feat(repos): SyncUpstream fetches the upstream, fast-forwards a clean checkout, and warns (touching nothing) when local changes or commits block it
7dc278f feat(repos): main-only recipe lookup and move-aside for untracked adapter files
554e45e feat(repos): only verified learned knowledge makes a repo ready
1ccc57b feat(repos): read branches, worktrees and dirty state with local git only
11d87ba feat(repos): readiness levels and scan joined with instance state
ce02894 feat(repos): rebuild a prepare recipe from a sibling worktree; ready means startable
05184ae feat(repos): reuse unchanged repos from an mtime cache
278375a feat(repos): sibling recipe carries seed_once to new worktrees
abd8175 feat(repos): sibling recipe copies registry configs that only reference an env token
3e235ba feat(repos): walk configured roots for git repositories
7b5ffd8 feat(reset): reset --from-main rebuilds a worktree from the main checkout's recipe
b78a709 feat(runs): Begin with run lock, ids, retention and interruption sweep
4a38dd7 feat(runs): List, Get and Log with derived interrupted and durations
12ec866 feat(runs): PlanRunner records every step of a Start
41a2a09 feat(runs): UpAndSeed records the seed as its own step, seed.log is no longer written
381f66b feat(runs): dashboard Start, card Start and /api/run children record trigger dashboard
f52a34d feat(runs): every start begins with a sync step (fetch, fast-forward when safe, warn otherwise)
77f925f feat(runs): last_run on every instance, seed_error from the seed step log
046f4b5 feat(runs): run and step model with private on-disk store
e90b48d feat(runs): up and seed record their own runs, --in-run suppresses both
8f8cfcc feat(secret): map and unmap accept a folder; guard keeps it person-only
868d6c0 feat(secrets): /api/secrets, /api/secrets/check and /api/secrets/set behind the token, Origin and Host checks, with rows moved to lifecycle
9f76081 feat(secrets): 1Password backend through op read with OP_ variables only, timeout and missing/locked mapping
9a3b5c1 feat(secrets): Linux Secret Service backend through secret-tool with stdin writes and missing, locked and no-D-Bus mapping
7da3028 feat(secrets): Secrets table in the Repos panel with status chips, Check, row overflow and the Check secrets to view logs gate
02a9bb1 feat(secrets): Windows Credential Manager backend for keychain: references
50362ad feat(secrets): Windows op.exe paths and owner check, console echo-off and PowerShell value dialog helpers
407b541 feat(secrets): Windows wiring: console echo-off in secret set, PowerShell Set value dialog, guard rules for Credential Manager reads
cc92fc0 feat(windows): state and config under LOCALAPPDATA; Windows path tests
0e38108 feat(worktree): add 'stackfork worktree add' with a credential denylist
9fdf38a feat(worktree): warn when a worktree prepares without a Compose file the main checkout uses
ff652ad feat: add ClientCo isolated development skill
f766416 feat: identity tagline in help and the dashboard
fc45a51 feat: obey the recorded entry in proxy, inventory, urls and open
e2fef0d feat: organize templates by runtime, add a Go web app template
971aa65 feat: seed a new database automatically, no question; the dashboard only warns when a seed failed
f28645e feat: standardize named localhost URLs for isolated apps
Fixes
3debd81 fix(ci): skip cleanly without Docker, tolerate an older Compose version
5b1debf fix(cli): down --instance no longer requires a Git checkout at --root
7af59f5 fix(cli): prepare and up refuse a repository that was never learned
c63f3e6 fix(cli): register --force on prepare and up; adapt fixtures to the learn gate
ec28390 fix(compose): primary HTTP service picks by port priority, not name
a39b0f2 fix(config): a repository key or home is never a folder to inherit
9af17b0 fix(dashboard): --supervised keeps off the CLI dashboard's recorded port; tests remove their temp binary
140d8bb fix(dashboard): Open App guesses nothing when the entry is recorded as none
9282852 fix(dashboard): Remove deletes the whole stack, refuses a dirty worktree before asking; guard blocks confirmation bypass
38e3394 fix(dashboard): Repos entry line shows the scan's proposal and a real copy command
7abb65e fix(dashboard): a finished Start removes only its own progress, a card Retry stays disabled during its Start
7cc34c9 fix(dashboard): a seed that has not run yet is not shown as failed
1cc5dd6 fix(dashboard): align the Settings secrets columns and honour hidden in dialogs
d4cf370 fix(dashboard): an open tab keeps working after the dashboard restarts
f22a445 fix(dashboard): app-strip chips show just the label, not the URL too
f2cd0ab fix(dashboard): bind before announcing; a taken port exits non-zero with a clear message
d619e13 fix(dashboard): cap app-strip chip width, it wasn't actually truncating
0e20920 fix(dashboard): copy buttons say Copied or Copy failed where you clicked
1435714 fix(dashboard): correct legacy icon initial, mail logos, stack actions
a9c09d2 fix(dashboard): give the running-dashboard probe 2 s so a busy machine is still recognised
b057762 fix(dashboard): host rows get a host: id, bounded host logs, follow note
a71c43c fix(dashboard): let tests wait for background scans before temp dirs go
b86e35a fix(dashboard): link to the project page by name and path; resources answers 409 for an ambiguous name
f3c159b fix(dashboard): load recent runs for the selected checkout; singular run heading
9cbaa43 fix(dashboard): one App chip per port, not one per endpoint
5565f9c fix(dashboard): proxy-start button stays visible while running; style copy actions as clickable
3b87e88 fix(dashboard): quote selector values and read Windows separators on the Project page
d6be030 fix(dashboard): re-measure a full Docker disk every 30 s so the banner clears soon
3714233 fix(dashboard): recognise a running dashboard by a header, not a slow inventory call
324f436 fix(dashboard): revert page width, stop truncating service addresses
8dca790 fix(dashboard): run callout attribute is data-run-outcome so clicks in it do not post /api/run
1cfec7b fix(dashboard): seed buttons reach the action handler; recipe select shows the current decision
b9d40bf fix(dashboard): seed callout covers only a failed seed; tick 4.3-4.5 after browser check
349a2d9 fix(dashboard): show the recorded plan from a worktree's verified knowledge
f19ec20 fix(dashboard): the card's Start on a hybrid instance runs the plan, not a plain compose up
c35a746 fix(dashboard): unique checkout keys from the worktree path; cap the log tail at 8 KB
08145f0 fix(dashboard): use a neutral folder example in the Add secret dialog
f934814 fix(dashboard): warning chip uses the attention tokens; Open App picker shared with inventory; document link probes
0e7f85a fix(dashboard): widen the page so long names stop truncating early
2b75fa8 fix(env): guard /api/env, redact override secrets in every log path, mask URL passwords whole, refuse vault-interpolated names, plan host steps as targets
4aa8821 fix(env): recreate stopped containers without starting them, report per-service outcomes, use remembered secret values and retry stale endpoints on apply
60000bd fix(env): refuse control characters in a literal password put in an environment block
324b1e3 fix(env): wait for a busy instance, stronger apply, host and escaping tests
178e623 fix(examples): correct node-postgres build context and add CI check
215a118 fix(guard): a backslash in a URL word counts as a slash
fbc118f fix(guard): block prepare --force and up --force for agents
ffb6f12 fix(guard): brace and glob forms and other segments cannot hide a forged dashboard call
bdf3da8 fix(guard): close Windows bypasses (Git Bash escapes, backtick and caret, powershell and cmd unwrap)
afc7ee0 fix(guard): down --volumes deletes data, so it is for people only
b9b56ec fix(guard): lower-case the program name on every OS; test: pin argv.GlobalFlags to the top FlagSet
6b7179e fix(guard): see through env -S, absolute env, arch, stdbuf and caffeinate
c4c3e8e fix(guard): split the command line as the CLI does, for the live rules and every older rule
d9d25ec fix(hooks): put the Copilot hook in settings.json, which Copilot CLI does not rewrite
6488556 fix(host): a grandchild holding the output no longer holds a host exec step
79327a9 fix(host): a host app that listens on all interfaces or IPv6 counts as listening
03d6597 fix(host): a stopped or exited host app stays as an exited row with Start; down forgets it
5b7899c fix(host): lockfile hash stays in the checkout and reads regular files; {{port}} steps must listen
4fc302d fix(host): one picker for the app among several host apps (route, chip, Open App, urls); other chips carry their names
9bd95f0 fix(host): per-start host args, orphan group kill, /proc start time, stale stop flag, atomic name claim, confined --dir
ea2f5b8 fix(host): placeholder grammar, lock-safe exec expansion and port reservations
5075246 fix(host): restart a running host app when the trusted plan's command changed
f0a8cd1 fix(host): show an app that is up but not listening as starting; give the supervisor 60s to record
b0669b8 fix(host): starting a host step that already runs is a success
b601f06 fix(host): up also brings back a recorded host app in container mode when no container of that name runs
534ce87 fix(host): up and dashboard Start restart a running host app when the trusted plan command changed
f75533a fix(host): up restarts only a server that ended by itself; a stopped app stays stopped; a start that does not listen warns instead of killing; redacted errors; stricter restart args
a70237c fix(identity): resolve paths to their spelling on disk, so a scan root typed in another case matches its instances (macOS)
b3b9189 fix(inventory): keep the guessed App chip beside path links; warn when knowledge cannot load
8756047 fix(inventory): offer reset from main only on the checked-out branch
5632633 fix(knowledge): ASCII link names, refuse bad percent escapes; trust test follows the spec
8c15de8 fix(knowledge): a converted schema 1 recipe is always a recorded plan
7e2d82b fix(knowledge): control-character refusal only for trust-covered steps; a broken knowledge.json is an error, not an empty plan
e238638 fix(knowledge): keep placeholder values as literal arguments
808ff53 fix(knowledge): plan.no_seed keeps an empty schema 1 seed undecided; none is explicit
0099597 fix(learn): strict dev script pick, step port field, hybrid only with an app service
847c8cf fix(learn): the entry guess never picks a mail catcher or admin console; stale proposals are guessed again
380f111 fix(learn): the learn prompt and the skill send an agent to the checkout that already has the branch
2f51879 fix(learn): tolerate a missing env_file target
d0fff0b fix(lifecycle): a decision keeps its branch label before a parallel group
6d84e53 fix(lifecycle): draw one Ready per mode branch; test the canvas against PlanGraph output
aeae701 fix(lifecycle): draw the seed decision where RunOrder places the seed
b02770f fix(lifecycle): keep the once kind out of the step subtitle
af8c0ff fix(lifecycle): mark steps the runner adds as derived in the workflow graph
8edf178 fix(lifecycle): never run an unrecorded migrate or seed on a draft
2ce4e6f fix(lifecycle): never run exec steps in a web server or proxy service
651d07b fix(lifecycle): recover from stale network endpoints in up and down
c317b70 fix(lifecycle): seed and migrate decisions use knowledge borrowed from a verified worktree
99bd050 fix(lifecycle): separate workflow nodes for a step whose command differs per mode
cba0429 fix(live): a person's cleanup is refused while the repository is paused; Keep stops only auto
42be22e fix(live): a worktree with an initialized submodule is not eligible for cleanup
60774f4 fix(live): admit a configured folder that is itself a repository; live on refuses a repo outside every folder
5daa25a fix(live): an ignored cache folder with a git repository is not a cache; cache names count at known roots only
5c4101a fix(live): compare checkout paths with os.SameFile so a differently typed case matches
b027101 fix(live): git cherry does not prove a branch that holds a merge commit
5c1703b fix(live): match a cleanup candidate's instance by root and branch; other instances block it
2616dc5 fix(live): no sync of a checkout on another branch; ignore live keys that are not main checkouts under a configured root
1a0aceb fix(live): one cleanup at a time per repository, from every entry point
00f9971 fix(live): per-worktree refs block a cleanup; SECURITY.md states the reflog loss and the trust comparison exactly
d7eb25b fix(live): re-read Keep and the branch tip right before a cleanup
68da678 fix(live): status warns while a live run left a host step undone
1f87374 fix(live): the host-skipped warning clears only on a start-env or reset that succeeded
1c80c78 fix(live): the page cleanup refuses ignored files and volumes that grew after the confirmation
13b8d37 fix(live): the pending seed entry of a live run shows on host
ce9614e fix(live): the unattended fast-forward also checks that no parent of an added path is a local file
c2a8531 fix(live): the unattended fast-forward never overwrites an ignored or untracked file
8abe4c7 fix(macos): keep ready lines out of diagnostics, read the login env NUL-separated, tidy test dirs
1ba4022 fix(macos): non-modal alerts so the supervisor keeps running; same-origin new-window links load; show non-token 403s
04755be fix(macos): open the dashboard window on launch and when the app is opened again
e8c314c fix(metrics): prune old rings, circular ring buffer, wake on touch, keep last values on a failed stats call, back off a failing df
0e282cc fix(open): a host route wins over an entry recorded as none; keep the urls hint
1fcab26 fix(open): bare open follows the entry rules via one shared picker
0c03550 fix(plan): a database-only stack suggests the host instead of running the app command in it
475e479 fix(plan): a host exec step refuses an absolute dir
b34c11a fix(plan): keep the only-service fallback; a host-run step is suggested when the command is not found in a database
5f60091 fix(plan): plan reads the plan start-env reads
0fe2e25 fix(plan): print every Step field when trusting, derived from the struct
2873a83 fix(plan): resolve the service of a serviceless exec step (schema 1 migrate)
9441c9e fix(plan): run the seed at its recorded place after install, build and migrate
9436d4e fix(plan): scope the scan's hybrid exec steps to container; Check also covers once data steps
a6078aa fix(plan): show every hashed field when trusting; validate --mode; document no-host-step rule
4985f94 fix(plan): the host hint skips a command that needs a shell
6d5cac3 fix(plan): trust output uses the original Step; test that every field is printed
77e3181 fix(ports): keep Bound a bind probe; Listening dials
f0aaac8 fix(prepare): copy the untracked adapter files the prepare args name from the main checkout into a linked worktree
55b6727 fix(prune): don't repeat 'running' in the state column
c263f58 fix(repos): keep scanning inside a root that is itself a git repo
ffb2c29 fix(repos): move-aside stays in the adapter folders, refuses symlinks and git errors, and never copies main's knowledge.json
fa005c6 fix(repos): only recipe table rows in profile references mark a repo ready
7a52b3f fix(reset): --from-main applies only the main recipe, runs what was confirmed and says prepare it
4420690 fix(reset): prepare with the recipe the instance was last prepared with; a failed step's log ends with its error
6f0f20a fix(reset): the seed always runs after a reset deleted the data; an exec step with no service names the stack's services and the fix
b002f2b fix(reset): tracked env files never refuse, an aside file is refused early, and the move uses the checked list
ec2eb3f fix(runs): --in-run is honoured only for start-env's own up in this process
f24ad48 fix(runs): Log reads only the log path the writer made and refuses symlinks
55db206 fix(runs): a panic in a Start ends its run as failed
32ee6ee fix(runs): only the schema step the seed prefix ran is skipped, and only in the seed's service
cdacf78 fix(runs): plan list and plan --json show steps in run order, seed shows its real command
d1c55a4 fix(runs): redact sibling secret references in prepare output
d2ffce2 fix(runs): retry command is set when a run begins, so an interrupted run has one
62a0e12 fix(runs): the prepare before an up is a step of the run, logged, redacted and able to fail
8fd0750 fix(runs): the seed log lookup uses the main checkout's plan and the run's mode
94a76a2 fix(secret): a folder name declared later re-prepares; preflight and sibling note follow the folder
9084624 fix(secret): removing an instance keeps its secret references for the next prepare
bd7a709 fix(secrets): --secret accepts only env: and npmrc:, run and exec output is redacted with the known values
e459803 fix(secrets): Store scrubs the value from errors in every backend, and macOS refuses non-ASCII values
a151677 fix(secrets): a plan prepare step cannot carry --secret or any flag outside the recipe allowlist
875472f fix(secrets): a refused sibling recipe is checked before any file is copied
caed2be fix(secrets): a reserved secret name is reported as reserved and secret unmap can remove it
da0fb90 fix(secrets): a sibling worktree lends no keychain: or op:// reference
533fdd3 fix(secrets): adapter_files entries must be clean relative paths and prepare args are checked from every source
0da1baf fix(secrets): docs no longer say an agent has no terminal
0c31ed1 fix(secrets): guard blocks the remaining store-read forms and percent-encoded API paths
b0bbbfd fix(secrets): guard normalizes dashboard API paths (query, escapes, dot segments) before matching
17b81b2 fix(secrets): guard sees through env, sudo, nice, timeout, xargs and backticks, and checks every secret-tool service attribute
ed4c417 fix(secrets): one reference set for the preflight and prepare, sibling flags before the person's, no late resolve under a run
0a79399 fix(secrets): refuse secret names that steer Docker or the shell, and skip them in the Compose child environment
79d4cb9 fix(secrets): run and exec redact unless their output is a terminal
ceb8baf fix(secrets): secret ls shows the flag and sibling sources
14829e7 fix(secrets): start-env names a sibling store reference it drops
b6ccfd6 fix(secrets): start-env says when a --secret flag is ignored on a prepared instance
920d513 fix(secrets): the dashboard log gate covers every unresolved reference kind and keys remembered values by reference
9e4f9b7 fix(secrets): the guard blocks 1Password reads when the machine map cannot be read
92fdfe4 fix(secrets): wire registry secret into containers
6abf401 fix(security): keep a directly-referenced named secret literal in the snapshot
3e3d8fe fix(security): stop render from leaking ambient env vars into the snapshot
8c59c0d fix(seed): check trust on the plan that runs a host seed
12f8a2d fix(seed): keep the seed pending when the up that created the volume fails
a65775f fix(seed): one mode from up to the seed run; an empty seed command does nothing
3b6162f fix(seed): run the recorded migrate before the seed, and accept --instance
fa75fb8 fix(seed): say which service the seed cannot run in and which services the stack has
0b602f0 fix(seed): the data seed follows the active mode's plan and resolves its service like Check
b717d73 fix(test): TestLiveTemplate reads from assets/nuxt/, not the old flat path
d97aebe fix(test): retry the proxy's first reachability check
de65373 fix(trust): a checkout with no main repo is trusted under its own path, never under an empty one
de0ea21 fix(trust): refuse to offer approval for a plan too long to show
1d76287 fix(trust): require trust only when the active mode runs a host step; readable trust diff
a95826f fix(trust): single --root, in-process trust of the shown plan, quoted control characters, worktree-first plan, mode checks
0c59c06 fix(urls): a labelled mail catcher or console is never the primary service while an app service exists
e1a04c8 fix(urls): host app URLs use the instance hostname in urls, the dashboard and the API
71fd7d1 fix(verify): links use a 3 s probe timeout
75c9e4c fix(verify): never probe the stable port of a stopped entry service
4847fc5 fix(windows): dashboard dialog takes text from the environment; BOM launcher, all five PowerShell quotes, own console
1a53b74 fix(windows): lock file without O_APPEND, hidden console for supervisors, identity-pinned host kill
890aea5 fix(windows): quote all PowerShell quotes in env, dial in doctor, refuse cmd metacharacters for batch files, kill host tree on timeout
0220e94 fix(worktree): a branch already checked out elsewhere names that checkout and the start-env command instead of git's raw refusal
526b724 fix: borrowed adapter compose files point at the new checkout
0bc056d fix: finish the isolated-dev -> stackfork rename in what users see
2ffc8bd fix: host restart runs the trusted plan's command; env set refuses service/host-app name clash; set-mode on a worktree; hybrid up stops excluded services
e1f1e08 fix: run the proxy with host networking on native Linux
2e52ce3 fix: serialize proxy route rebuilds and lock per-instance up/down/restart
5eced90 fix: simplify isolated development setup and preserve Node runtime
Others
f158dad Add ActionToast, fix 400px card header order and drawer focus return
805a830 Add Dependabot for Go, Actions and the example app
7b528e1 refactor(cli): extract resolvePrepare and startRefusal from StartEnv
c85e7ec refactor(compose,state): share endpoint computation and manifest glob
ec33d35 refactor(dashboard): hold the sampler on the Server with an injectable start
77aba37 refactor(go): switch identity to stackfork constants
7804769 refactor(host): one environment and argv check for host and host exec
e45a5f0 refactor(lifecycle): PlanRunner.Steps lists the steps a run declares
00fdadd refactor(prune): remove instance state through lifecycle.ForgetInstance
22c2bc6 refactor: generalize isolated development skill across projects
b857773 refactor: move client recipes to private profiles
34a5a17 release: cask clears quarantine; README installs with Homebrew
fab6a9f resume: finish a stack that a cut-off resume left half started
c044e9f resume: retry an instance skipped only because it was busy and log skip reasons; the cascade watcher keeps its sightings on a busy tick
d4d78e8 resume: start what was running at dashboard start and when Docker returns; one watcher per machine runs resume, then the cascade watcher, never on the same tick
ea7e575 seed: no migrate prefix when the plan records a seed and no schema step
0921668 test(cli): cover --help everywhere, global flags anywhere, --root paths
e214459 test(cli): give worktree fixtures a git identity and skip real-Compose tests without Docker
b890e3e test(dashboard): borrowed knowledge, no instances, run order, masked env null, redacted log tail
bf157e4 test(dashboard): cover the workflow canvas in Node
290f705 test(dashboard): live end-to-end test across two scratch instances
b72000d test(dashboard): render the resources charts from a fixture
4537881 test(dashboard): the supervised-port test owns its port range, apart from a running app
97fb130 test(dashboard): verify the page template and app.js contract