diff --git a/AGENTS.md b/AGENTS.md index e276bad..9b2695c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -574,6 +574,23 @@ mutable at runtime from the phone. process marked its own errors -- and sequences with no meaning on a phone are consumed rather than printed, so a cursor movement cannot arrive looking like a corrupted log. +- **A runtime log can carry a *phone app's* own lines, and nothing here + had to change for it.** ai-app (`~/repos/ai-app-2`, the `rustify` + branch) has a phone this project delivers APKs to whose owner has no + `adb`; Android forbids one app reading another's `logcat`, so the app + keeps a bounded in-memory copy of its own log and posts it to + `ai-server` over the tunnel it is already enrolled against. + `ai-server` re-emits each line into its own `tracing` output, which is + this server's `Managed` service redirecting stdout to + `$XDG_DATA_HOME/dev-updater/services/-/.log` -- + so the lines arrive in the *server* component's Runtime tab, tagged + `ai_server::client_log` and carrying the app's own clock. Worth knowing + before adding a device-log store here: this route was chosen over one + (a new authenticated write endpoint on the TLS surface, a per-app log + store, `hasRuntimeLogs` for an APK component, and a second enrollment + for that app) precisely because the existing runtime log already + reaches the reader. Their reasoning is in ai-app's + `docs/DECISIONS.md`, 2026-09-07. - **A project's row has three buttons -- Pull, Update, Remove -- and the first two are the same act at two lengths.** Pull takes the commits and stops (`?build=false` on the pull route, `BuildState::pull_only`);