Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:08
· 22 commits to main since this release
v0.2.0
1556c75

Changelog

Features

  • 88bb38d feat(cli): DerivePlan builds the steps a Start would run without writing or calling Docker
  • aad2932 feat(cli): add 'stackfork repos' with --json, --rescan and --prompt
  • a2065d5 feat(cli): add 'stackfork start-env' (prepare when needed, then up)
  • dc97937 feat(cli): add clone-db - seed a new instance from another's data (task 10.3)
  • 84158f6 feat(cli): add clone-db --from-dump
  • 5bfbfbc feat(cli): add gc - clean up orphaned instances (task 10.2)
  • c6f39df feat(cli): add stackfork env
  • 244cfd2 feat(cli): add stackfork open to open or print an instance's app URL
  • 1c82313 feat(cli): add usage overview and shared --help infrastructure
  • 556c8e0 feat(cli): ask whether to seed a new project at start-env; seed decides from the detected script
  • a95ba75 feat(cli): down --volumes --forget removes the instance; dashboard Remove uses it
  • d9191b1 feat(cli): global --instance, and a no-stack error that lists this repo's worktree instances
  • 5019f8e feat(cli): list profiles in where
  • 985f88a feat(cli): reset throws an environment away and starts it from zero
  • 0e1cabe feat(cli): seed once on the up that creates the data volume, plus a seed command
  • 27924b0 feat(cli): share lifecycle actions, add restart/logs and redact
  • c84dac1 feat(cli): stackfork runs and runs show
  • 7194ece feat(cli): start-env and worktree add reuse a prepared sibling's recipe
  • a3a0e8f feat(cli): support --help on every remaining subcommand
  • 35f9903 feat(cli): wire --help, global-flags-anywhere, and --root-relative paths
  • 8d17492 feat(config): a machine-wide hybrid mode falls back to container for plans without hybrid
  • 443ed37 feat(config): add config.json with scan roots and 'stackfork config'
  • ba6d606 feat(config): folder-scoped secret mappings with nearest-folder lookup
  • 9dd4b07 feat(config): per-machine startup mode (global and per repo)
  • 1aa6e44 feat(dashboard): --supervised mode for a parent process (ready line, own port, exits on stdin EOF)
  • 3760d68 feat(dashboard): /api/runs and /api/runs/log read API
  • 75f5ec8 feat(dashboard): App strip and proxy-stopped shortcut
  • 16a5013 feat(dashboard): Environment dialog per service, env overrides chip and reset to project defaults
  • 6715cdf feat(dashboard): Learn opens your agent in a terminal, with per-folder agent rules
  • 8814dbe feat(dashboard): LogDrawer Run source with step selector and Follow
  • 6d8446e feat(dashboard): POST /api/copy, the only place a credential is returned
  • 2ba2802 feat(dashboard): POST /api/env and the env read model, busy while a run owns the instance
  • 6349a07 feat(dashboard): Project page shell, checkouts and configuration
  • 5a87d13 feat(dashboard): Repos plan list shows the derived plan, cached per repo until a scan or action
  • 324eee8 feat(dashboard): Repos tab and Settings panel
  • 75dacbe feat(dashboard): Reset environment in the instance and worktree menus; guard blocks reset
  • bbd0aae feat(dashboard): Start and trust cover host exec steps
  • 9413c48 feat(dashboard): Start stream carries run, step and tagged line objects
  • e746969 feat(dashboard): add the stackfork logo as favicon
  • 5ab5cf0 feat(dashboard): copyable connection URLs for known databases
  • 07a5e6f feat(dashboard): dispatch the D4 action set with a per-project mutex
  • 96bfa3c feat(dashboard): embed Simple Icons logos with a mask-image mapping
  • 2d52e19 feat(dashboard): entry line in the Repos plan list (5.2)
  • db63df1 feat(dashboard): find, add and unmap secrets from Settings and every repo
  • 8605805 feat(dashboard): last run on the VersionCard
  • 307c243 feat(dashboard): live run state in the Repos plan list
  • 26a42a5 feat(dashboard): map and unmap secrets from the dashboard API
  • 61d2319 feat(dashboard): one Learn with your agent button per repo, not per row
  • 60f0eb0 feat(dashboard): per-kind use-it commands and the host-app env block
  • d0c6482 feat(dashboard): per-service start/stop (fix 5)
  • 563d2cd feat(dashboard): plan list, mode selector and trust dialog in the Repos panel
  • 4a13f3b feat(dashboard): polish the Repos tab and add screenshots
  • d3e1fb9 feat(dashboard): quick-access chips for the entry and links (5.1)
  • e95055a feat(dashboard): read-only Clean up panel with prune commands and dry-run counts
  • d545620 feat(dashboard): recent runs per step node and a log tail for failed steps
  • 8202451 feat(dashboard): redesign as OrbStack-style Running/Stopped stacks
  • 6ea02d9 feat(dashboard): render the startup workflow as a node canvas
  • 2c42f1e feat(dashboard): repos API, config endpoint and start/worktree/fetch actions
  • 16abcdb feat(dashboard): reset from the main checkout in the card menu, the worktree row and the gap callout
  • d057330 feat(dashboard): resources charts for the Project page
  • 6fa81fa feat(dashboard): route #project/NAME and link repo names to it
  • 3cab2d5 feat(dashboard): run the commands the page shows, with a native confirmation for destructive ones
  • 8389ce6 feat(dashboard): scaffold the Project page (routes, view, API contract)
  • adfc8a4 feat(dashboard): secrets rows show the folder a reference comes from
  • be73499 feat(dashboard): seed controls on instances and a startup recipe on the Repos tab
  • 041afe0 feat(dashboard): serve instances behind the security boundary
  • bf53223 feat(dashboard): serve the Project page read model at /api/project
  • 83615e6 feat(dashboard): serve the Project page resources from the metrics sampler
  • ec8735c feat(dashboard): show a failed start on the repo row with the retry command
  • 443a2e0 feat(dashboard): show host app pid, memory, CPU and exit under the row name
  • 42933e5 feat(dashboard): show the host app as a service row with stop, restart and logs
  • 0afa543 feat(dashboard): start the metrics sampler with the dashboard and stop it on close
  • 0f42254 feat(dashboard): stream redacted logs with a concurrency cap
  • eb6bbcf feat(dashboard): the page renders at once in a loading state when the first collection is slow
  • e096ede feat(dashboard): wire restart, logs panel and copyable CLI commands
  • 3123632 feat(doctor): check the local environment
  • 69563ca feat(doctor): report host apps whose supervisor is gone but whose port still answers
  • 662266f feat(env): apply overrides through a derived Compose file, host environment and reset
  • eef9133 feat(env): env set, unset and overrides with secret-like refusal and guard rules
  • d6cb15c feat(env): per-instance env-overrides.json store and secret-like name rule
  • d997f06 feat(examples): add node-postgres - minimal quick-start target (task 11.1)
  • 2eae6eb feat(examples): add vite-api - host-run app pattern (task 11.2)
  • 3d0516f feat(go): add version subcommand
  • 3a3d53e feat(go): port cli commands with fake-docker tests
  • 7d28e9d feat(go): read legacy idv instances
  • cf15ca4 feat(go): scaffold stackfork module, port identity and state
  • 19cf26a feat(guard): block destructive prune and gc --apply for agents
  • 8cf9b0b feat(guard): block host dev servers in stackfork-managed checkouts via a pre-tool-use hook
  • 0081ef9 feat(hooks): add stackfork hooks install/uninstall/status for Claude Code, Codex and Copilot CLI
  • c9461bb feat(hooks): tell the user to trust the Codex hook, and report it untrusted in status
  • 4fa60da feat(host): HostExec runs an exec step on the host with the instance environment
  • 6e3d54c feat(host): a foreground host run records how to start it again; tell agents to use host start
  • f33f498 feat(host): add host ls
  • 444c269 feat(host): add stackfork host, the sanctioned host-run path with stable port, env and route
  • a0234d3 feat(host): detached supervised host process with stop/restart/logs; Windows stubs so the tree vets on windows
  • 982cbb9 feat(host): expand placeholders in host and host exec commands before exec
  • cec0e01 feat(host): record each host app's command and exit in host-NAME.json
  • 6c0d3ea feat(host): wait for the host port with --wait-timeout (default 90s), name app, port and log tail on timeout
  • cd3c4bc feat(inventory): a created service waiting for a starting dependency shows amber 'waiting', not 'not started'
  • 10332db feat(inventory): add Instance.Apps for the app-first view
  • 130bb21 feat(inventory): add per-service settings for the OrbStack-style layout
  • a20113e feat(inventory): build the shared instance inventory and list command
  • 3330d2e feat(inventory): host app state, pid, memory, CPU and exit; partial when one is down
  • 1d1aba7 feat(inventory): one _URL env-block line per HTTP service
  • 23df2d3 feat(inventory): record seed recipe in the manifest and warn on an unseeded instance
  • 5f422d9 feat(inventory): services that never started show as optional, not stopped
  • dfd85b1 feat(inventory): status dots follow health, created is not optional, grouped warnings, one-offs apart; restart takes several services
  • d0fb481 feat(knowledge): entry and links with strict validation
  • b13235a feat(knowledge): entry summary for the Repos plan list
  • a66653a feat(knowledge): expand placeholders in host commands and warn on literals
  • e26528e feat(knowledge): look up a checkout's knowledge in its repo's verified worktrees
  • 82a190a feat(knowledge): resolve the app entry and links in one place
  • aba0296 feat(knowledge): schema 2 startup plan with typed steps; schema 1 converts on load
  • 237e182 feat(learn): add knowledge schema
  • a2e4252 feat(learn): collect isolation findings
  • 267afe1 feat(learn): detect risky startup scripts
  • eb1ab78 feat(learn): flag unpinned global toolchain installs and floating base images
  • 5e8de92 feat(learn): name the links left without a target when the entry is dropped
  • 524d88d feat(learn): propose a pending seed_once from detected scripts; verify needs a decision
  • 5606dd0 feat(learn): propose, record and verify the app entry and links
  • fa7bf59 feat(learn): record and verify an entry that names a host app
  • 84d2de9 feat(learn): record step --on host|container
  • 3d316ca feat(learn): record step --port and --args
  • fa183d7 feat(learn): record step, recipe alias, verify requires a recorded plan; readers use the plan
  • 2bc5579 feat(learn): record/verify/staleness - the project-learning workflow (13.5-13.9)
  • 55e1247 feat(learn): scan project facts
  • 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
  • f2199f8 feat(ports): add stable port allocator
  • 412988f feat(ports): persist stable ports in manifests
  • a932539 feat(ports): refuse busy recorded ports
  • b77b39f feat(proxy): route running instances by hostname
  • fefcf24 feat(proxy): run a tool-owned caddy proxy
  • 551c083 feat(proxy): survive Docker restarts and warn when routes exist but the proxy is down
  • 78c9cce feat(prune): dry-run-first instance removal; gc becomes prune --orphaned
  • 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
  • d2d22f9 feat(secrets): add named secrets
  • 36bf385 feat(secrets): config.json secrets map validated on load, with Map, Unmap and SecretsFor by resolved repository path
  • 0fe31a0 feat(secrets): effective references with fixed precedence, map override at up, prepare for new mapped names
  • f149bdd feat(secrets): fixed store-tool resolution with symlink, owner, permission and scanned-root checks, minimal environment and timeouts
  • 6a629f3 feat(secrets): guard blocks secret set, map and unmap, store reads of stackfork items and mapped op references, and forged /api/secrets calls
  • c11ee04 feat(secrets): keep --npmrc as an alias
  • fa541cf feat(secrets): keychain: and op:// reference grammar with one shared validator that never echoes unparsed input
  • f567558 feat(secrets): knowledge.json declares secret names only, strict on load, with learn record secret and --remove
  • fc6b069 feat(secrets): macOS hidden-answer dialog for Set value, written to the store through stdin; the value never reaches the page, argv or a log
  • 1aeb7f7 feat(secrets): macOS keychain backend through security with stdin writes and exit-code status mapping
  • 6fd6c71 feat(secrets): run redaction uses the preflight values; dashboard value cache and the Check secrets to view logs gate
  • aa806bf feat(secrets): secret ls, check, set, map and unmap, with the scanned roots wired into the store backend
  • 4688229 feat(secrets): secrets preflight step for every run, failing before Docker with every problem and its fix
  • 44fbc3f feat(secrets): secretstore skeleton with statuses, Windows stub and ResolveSecret delegation
  • d49a6c3 feat(secrets): the plan list carries the secrets preflight row so a failed Start shows it Failed
  • 507da68 feat(secrets): values go only to the Compose child; no os.Setenv, preflight values reused under a run
  • 68540c2 feat(seed): a data step on the host runs through HostExec with its migrate prefix
  • 359713f feat(seed): keep the last seed's output, show it on the dashboard, and add seed --mark-done
  • 265855e feat(seed): up and seed refuse an untrusted host seed before any Docker call
  • 2c1b4d0 feat(state): TryLock and Held for non-blocking lock checks
  • 5166554 feat(state): Windows process identity, tree kill and file lock
  • e6ac7fb feat(status): hint 'stackfork restart ' for unhealthy or exited services
  • 7fb2350 feat(template): configurable registry host
  • 40a1742 feat(up): start recorded host apps that are down, one host step each, behind the plan trust gate
  • cb20358 feat(urls): honour declared http ports
  • cf7a681 feat(windows): host command, env --format powershell, dashboard dialog and terminal, guard paths
  • 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
  • cd22e00 Add Dependabot for the vite-api example
  • 46ecb2a Add Repos view helpers: status vocabulary, sort, ago, relPath, ahead/behind bar
  • 3a87b5c Add a tagline for people who build with AI agents
  • 693b179 Add an install script for the release binaries
  • f67383c Add rel_root to instances: .worktrees/, main checkout or ~ path
  • b6dafdc Always render repo errors, drop dead decorateRunnables, expand via chevron path, link only http(s) URLs
  • f9ca171 CI: build the macOS app on macos-26 and install gitleaks by its module path
  • bf1a15c Clean up, Settings, Learn modal and Logs drawer in Berth style; drop unused rescanning flag
  • 66e8575 Darken light state colours so chips pass AA on surface-2
  • da1a74a Dashboard: name the real run command, Dismiss for failed runs, Finished one-shot host apps, not-answering host apps, host rm
  • ad61d5c Dedupe warning commands against the down command; pin final-review fixes in tests
  • 1556c75 Describe the Homebrew cask in plain words
  • d9f9ad4 Embed Geist Mono variable font (OFL 1.1)
  • 042193b Explain partial instances in the Repos status chip title
  • e0b877f Fail the secrets step for a Compose secret with no reference
  • 03b2e95 Finish the legacy prefix rename in docs, specs, the macOS app and the dashboard JS; neutral comments
  • a7d066e Fix hybrid host step on container-only plan, secret ls in worktrees, learning doc --remove form
  • 7b887f4 Fix project page failed-step node, Retry toast and log clipping
  • e386bd4 Give the real-alert test 30 s on slow CI runners
  • 48ca58f Hide mobile-only menu items on desktop; drop unused run-btn, cli-command, cmd-row rules
  • 0402d6a Instance cards, service table, callouts and focus-safe polling
  • 652af67 Instance cards: identity from app name, per-app colour, chips beside actions
  • c3f22cc Keep focus on endpoint links, copy chips, app chips and seed log; stop double-running a command across re-renders
  • 1e07fe2 Keep internal specs, plans and agent tooling out of the public repo
  • 8f6f90d List Homebrew, the install script and release binaries in the README
  • 4fd5edd Make URL placeholders follow the proxy and restart host apps when it toggles
  • 4455c03 Merge branch 'adapter-paths' into stabilize
  • c5b9399 Merge branch 'fix-host-restart' into stabilize
  • f6e46a4 Merge branch 'fix-hybrid-learn' into stabilize
  • 4e7a9dc Merge branch 'fix-live-tests' into stabilize
  • a1d4cd9 Merge branch 'fix-page-bugs'
  • 22a7482 Merge branch 'host-restart-on-change' into stabilize
  • 1ec64c9 Merge branch 'learn-entrypoint'
  • 8e7cdc3 Merge branch 'main' into project-page
  • 313b986 Merge branch 'main' into project-page
  • 11e243a Merge branch 'oss-code'
  • 133ef60 Merge branch 'oss-docs'
  • 041b969 Merge branch 'oss-scrub'
  • 6943e33 Merge branch 'pp-model' into project-page
  • 2c7ea86 Merge branch 'pp-resources' into project-page
  • 09e0e2f Merge branch 'pp-shell' into project-page
  • d777a06 Merge branch 'pp-workflow' into project-page
  • 30b69d5 Merge branch 'project-page' into stabilize
  • 96fd9e5 Merge branch 'project-page-design' into project-page
  • 737f7d1 Merge branch 'resume-e2e'
  • f1a7208 Merge branch 'stop-cascade'
  • 0bf07cf Name local GitOps in the README feature table
  • c806245 README: lead with the reproducible local recipe, Docker or host, supervised processes, Git-driven environments
  • f0cd5d4 README: rebrand around parallel branches and agents, local GitOps, dashboard media; launch plan
  • be1f4ec Rebuild the Repos view as a RepoTable with worktree table, lane graph and overflow menus
  • 5dc3e73 Recommend learning a project with the agent in the quick start
  • 5c8ea41 Remove private and client names from the tree
  • 96be19e Rename the legacy instance prefix and fixtures to neutral names
  • ef72ab7 Replace header and tabs with rail, toolbar, banner strip and four views
  • 78a8ed6 Report ahead/behind/upstream/last commit per worktree
  • c42ad77 Report the module version when the binary has no stamped version
  • d7caeaa Restyle dashboard with Berth tokens, base controls and theme toggle
  • 9a722cb Review fixes: external theme-init script, visible dark inputs, stopped-link contrast, reduced motion
  • 9738e60 SECURITY: state the live-mode Compose limit without pointing at an issue
  • 5948dd4 Say apps, plural, in the README subtitle
  • 208554f Shorten the README and make the agent wording vendor-neutral
  • b594679 Show how code changes reach each app (hot, restart, rebuild)
  • 695f54c Show the dashboard screenshot full width, above the feature table
  • 4820ba3 Skip unresolved sibling secret refs; add secret forget
  • be9bc68 Toast errors by response ok flag; keep pill below actions at its own width
  • 8f208a3 Wait 30 s by default in the macOS app tests
  • 81a2249 Wrap the header status cluster so the theme toggle fits at 400 px
  • 1c8fa1e Wrap the mobile rail and long settings paths at 400 px
  • 7495cde build(macos): app bundle and DMG script, icon, and a Swift CI job
  • ffeea43 build: add goreleaser config
  • dd3d122 cascade watcher: a job that exited 0 is finished, a server that exited 0 is lost; a service the mode's plan does not start is not watched
  • c243b3c ci(gitleaks): allow the fake test canaries (0123456789 run, test files only)
  • a081a1c ci(release): attach the macOS DMG after GoReleaser
  • 22c84d9 config: resume_on_start setting (config set resume-on-start, Settings page)
  • eb674bf dashboard: Environment dialog shows project values, pending resets and the other variables
  • 6b35f89 dashboard: ProjectCard and VersionCard in app.js and app.css
  • 5906fa0 dashboard: a link to a host app runs with its route; no duplicate route chip
  • 09de7ea dashboard: a partial instance shows Start for its stopped services
  • 842e438 dashboard: group instances by project in the first-paint template
  • 60e5ae4 dashboard: links to a host app that has not started yet read 'starts with the stack', not a warning
  • 71a8fb7 dashboard: no seed-failed banner while a run is in progress
  • 04c034c dashboard: run cards name a resume and a cascade stop
  • b685d08 dashboard: stopped containers with host apps still running read partial, with what Start and Stop do
  • 7196355 dashboard: the env overrides chip lists which overrides are set
  • 76c122c dashboard: watcher stops host apps whose compose dependency vanished
  • 07a9f1a dashboard: workflow canvas keeps commands inside the card and the decision spine straight
  • 19a5bbf docs(cli): add references/commands.md, verified against real flags
  • ed78240 docs(commands): move the dependency-cache note under prepare (fixes commands.md test)
  • 602c0ca docs(commands): sync flags and sub-forms with the CLI
  • ed8613b docs(dashboard): fmtDur must match runcard.go durText only; the CLI formats durations itself
  • e0feb17 docs(design): add the Project page critique, design and prototype
  • 6029157 docs(design): chart the Project page resources and draw the workflow as a node canvas
  • 8a3c0e7 docs(design): instances grouped by project
  • f2951a3 docs(design): link the Project page Figma file and how to run the prototype
  • 6f6d23b docs(env): apply of stopped containers and busy instances
  • 3175bb1 docs(env): env overrides in commands, SECURITY, CHANGELOG and SKILL
  • de17e95 docs(host-exec): learning, security and changelog for host exec steps
  • 864be91 docs(learning): make the studio example a host step
  • 92c169e docs(live): DESIGN.md LiveSwitch, cleanup callout and selector
  • 1adc57e docs(live): README positioning line and live mode section with its limits
  • 9892ab6 docs(live): SECURITY.md live mode and branch cleanup
  • 9037d26 docs(live): commands summary, learning reference, SKILL.md line and CHANGELOG
  • 06d603e docs(live): live clean refusals in the commands reference
  • 79bb8f9 docs(live): name the ceiling of the cache-folder repository walk
  • a1d214b docs(openspec): complete the add-dashboard change
  • 23c339d docs(openspec): scrub client names and personal paths; drop the openspec allowlist
  • dd5e529 docs(project-page): one Ready per mode branch
  • 883a51d docs(readme): restore "how to ask an agent" - dropped in the rewrite
  • 18cc6d4 docs(readme): rewrite for the public launch
  • b56b330 docs(references): draft seed rule, borrowed knowledge, host apps, env overrides
  • 082440e docs(secret): say removal keeps the secret references
  • ffd4120 docs(secrets): SECURITY Secrets section, README, commands and learning references, SKILL line, CHANGELOG, DESIGN Secrets table
  • 4abc523 docs(secrets): note the resolveTool ancestor-directory ceiling, document the review fixes in design, commands and tasks
  • f1e5494 docs(security): add the agent guard section, drop internal design refs
  • 0405e14 docs(security): describe what /api/run runs and the native confirmation
  • a2ec7f2 docs(security): document POST /api/copy as the only credential path
  • 1718f52 docs(security): re-prepare without deleting data after an unmap
  • 8d998a1 docs(security): trust covers the command line, not the code it runs
  • ac2085c docs(skill): add profile context hook
  • 04b6acb docs(skill): document oauth callbacks
  • 0ca7d09 docs(skill): note that a draft is not seeded
  • 97d2bd8 docs(skill): rename skill to stackfork
  • 969d144 docs(skill): split core skill and references
  • ded41a4 docs(skill): update codex agent metadata
  • 1d4db13 docs(skill): verification stays in the running instance, ask before expanding it
  • e690d11 docs(skill): wire list/clone-db/gc into the workflow (task 10.4)
  • bb87e56 ecosystem: per-language knowledge module; package.json only goes stale when scripts change
  • 33e2c2a feat(doctor,dashboard): warn when Docker's disk is nearly full and free the space no data needs
  • d1c9171 feat(start-env): run the startup plan for the selected mode; refuse untrusted host steps
  • 557479e fix(derived-plan): skip not-ready repos, hide the one-option mode select, show sources on hover, find the checkout from a subdirectory
  • 03c3b08 fix(start-env): fail the run when a host app exits at start or never listens
  • e599c2d fix(start-env): hybrid exclude drops dependents, errors when nothing is left, refuses exec in an excluded service
  • c6a9521 fix(start-env): reuse a sibling worktree's secret references when preparing from knowledge or an adapter
  • 9845b2a fix(start-env): say when an adapter exists only in the main checkout
  • 21a6ff1 fix(start-env): use knowledge verified in another worktree and copy its adapter files
  • 0727835 fix(urls,proxy): warn when knowledge cannot load; urls keeps the service line and the portless entry URL
  • d72bc8b go 1.26.10; CI and release on pinned GitHub-hosted runners, persist-credentials off
  • f0de3e4 guard: the host-run marker no longer unblocks destructive, live or secret forms
  • 505c9ff hybrid: a host step excludes the Compose service of its name; env set follows the mode
  • 95ce935 inventory: a finished job gets no 'exited' warning
  • fe54486 inventory: a one-shot job that exited 0 no longer makes the stack partial, so a host app can start next to a migrate service
  • a232a7a inventory: one knowledge App link per instance; expose used and is_main
  • a95b4ae knowledge: plan stop_cascade and host step depends_on
  • a9eebbe learn: skip migrate/seed steps the app's entrypoint already runs
  • 4829c3f lifecycle: cascaded host apps are not marked stopped by a person; watcher acts only on a service it saw up, rechecks under the lock
  • 4d2df78 lifecycle: stop cascades to dependent host apps and services when plan.stop_cascade is on
  • 8e4e427 perf(dashboard): announce the address at once; proxy registration and the first scan run in the background
  • b42c3e0 perf(prepare): keep dependency caches across restarts; dashboard: show start progress on the row, finish running actions on shutdown
  • ad2e9bc perf(prune): read volume sizes only for a dry run; test: live prune on scratch instances
  • 1b023f2 privatecheck: skip linked worktrees and local agent scratch
  • 84ca245 refactor!: remove python cli
  • 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
  • 7eaa250 test(go): add private material check
  • f99aa05 test(go): add python parity tests
  • c79ee0d test(go): drop python parity test
  • bccc961 test(go): port compose render/isolate tests
  • 2e31886 test(go): port live isolation tests
  • 091b8c6 test(host): host exec output is redacted in the terminal and the step log
  • fbb9913 test(host): real stdin, confinement and secret-environment checks for host exec
  • e49e322 test(host): wait for the host record before reading it in the child
  • 03833e5 test(inventory): the seed error and the run tail now end with the step's error
  • e18795d test(knowledge): host exec on, dir and once change the trust hash
  • 6251e0c test(lifecycle): the workflow graph follows the seed at its recorded place
  • 1590c92 test(live): TestLiveReset; docs and task list for env reset
  • 2478b67 test(live): a live up on a new volume never runs or containerizes a host seed
  • ff8feb2 test(live): mark the start-env fixtures as verified knowledge
  • 4bd9015 test(live): the dashboard loop fixture sits outside a configured folder
  • 6bf30ac test(macos): run every suite that shares the fake network recorder one at a time
  • 6a00a90 test(ports): prove urls survive restart
  • 3bff375 test(reset): live check for reset --from-main (not run here)
  • 7f1f213 test(runs): StartEnv begins the run after Check, refusals write nothing
  • caaa88f test(runs): live check of a recorded Start and a refused second Start
  • 2ae2167 test(runs): step writer redaction and 1 MiB cap
  • 6b6d62a test(secrets): STACKFORK_LIVE_SECRETS=1 enables every live round trip
  • 8f7691d test(secrets): prove values never leak
  • e5fedcd test(secrets): the live Start run expects the sync and secrets steps
  • 34254a3 test(seed): a swapped plan is refused with the review message; exec checks trust itself
  • 9163bd6 test(start-env): fix live test build context; tick 2.2
  • 591edff test(state): the child lock test closes the holder's file without unlocking
  • fb6d674 up: keep the seed pending when the plan has steps the seed needs; start-env retries a failed seed
  • 9549853 want_running: a whole-stack up records that the person wants the instance running; down, and a stop that leaves nothing running, clear it
  • ece630a want_running: start-env's own up is a whole start even when it names services; the plan's stop of an excluded service keeps the wish