Files
deepseek-harness/packages/boot
Yichen Jiang 0caceb2ced fix(boot): commit a recomposition only once the root include accepts it
`ProfileRuntime.recompose({ reloadBundles: true })` replaced its profile
before the Loader had accepted the update, so a rejected recomposition left
`current`, `layers`, and `originOf` describing a stack that never mounted.
The user patch watchers took a second path through the launcher's
`composeLive`, which wrote the new conflicts into the failure registry
before the update and kept composing from the runtime's stale profile.
Conflict records shared the registry with row failures under a fabricated
entry id and a group id that meant three different things, so the plugin
inventory attributed a conflict to the layer that won the id, and a bundle
disabled after failing kept its import and apply records forever.

The runtime now holds one committed composition — profile, stack ownership,
conflicts — and publishes a candidate only after `entry.update` resolves;
`originOf` reads the committed owners instead of recomputing them. The
watchers call `recompose` through a `reapply` callback, so every live change
goes through the one entry point. Conflicts live on the runtime with their
messages and never enter `pluginFailures`, whose records name rows that
reached the Loader; the inventory lists them under the layer that lost. A
contained group clears its rows' records when it unmounts.
2026-09-05 22:19:36 +08:00
..

description, kind
description kind
The boot package group: how dsh app bins start — environment loading, profile and patch layers, clear startup failures, and app-owned command lines. package-group

boot/ — shared app-bin boot glue

English | 中文

Summary

The boot group provides what every dsh app bin needs to start: app-boot turns a cordis.yml plus your environment and patch layers into a running app with clear failure messages, and cmdline lets the app own its command-line flags and --help. With these packages you can run dsh or write a new application or test fixture that boots the same way. Both are libraries imported by apps/cli and test-only Loader fixtures, never plugins a composition loads. This page maps the group; each package README owns its per-package contract.

Table of Contents

Packages

Package Role ctx key
app-boot Boots a dsh app from a cordis.yml: loads .env, applies profile and patch layers, and reports startup failures clearly (library for the bins)
cmdline Lets the app own its flags, --help, and exit code; passes everything after the launcher's flags through verbatim cmdlineArgs, appExit

  • dsh app — the dsh bin that consumes these helpers for its boot sequence.
  • Profile bundles — installable patch layers that dsh --profile compositions mount.
  • dsh-home-paths — the harness-home resolver both packages build on.
  • dsh-cmdline — how an app owns its flag family instead of the launcher.

Dev Note

None.