5f8a2146e63448ce04f4d996c4a22da89f64c20f
Dev Updater's unit is a project -- a directory in a checkout -- that produces components, so this declaration belongs at the repository root where it can say where each half lives. `cwd` is how a component says that, and it is what the old file was working around: sitting in `app/`, it reached the backend with `../server/Cargo.toml` and `../server/service`, which described the layout backwards. So the file says what this repository produces: the backend, built and serviced in `server/`, and then the APK, built in `app/`. The order is unchanged and still the point -- a failing APK build leaves the phone the APK it already had rather than half of a matched pair. The service script gains dev-updater's note about lingering. A user service stops at logout unless `loginctl enable-linger` is set, which for this one matters more than for a build server: the phone reaches ai-server whether or not anyone is logged in at the desk. **This changes the project path, so the phone's existing entry (at ~/repos/ai-app/app) has to be removed and the checkout root added instead**, and its components accepted once. Verified against dev-updater's current parser rather than by reading its schema: the declaration loads, `cargo build --release` resolves into server/, app/build-apk.sh into app/, the service script to an absolute path, and APK discovery from the root still finds the built APK. `./server/service status` prints not-installed and exits 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017xn8nHw1tw1R6PtiY1eEtw
Languages
Rust
54%
Kotlin
43.6%
Shell
2.4%