AGENTS.md: a runtime log can carry a phone app's own lines

ai-app's phone has no adb and Android forbids one app reading another's
logcat, so its app posts its own log ring to ai-server, whose stdout this
project's Managed service already redirects and reports. The lines land
in the server component's Runtime tab with nothing here changed.

Recorded so the next reader of this file does not build a device-log
store on the TLS surface for a case the existing runtime log covers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Fable 5.1 committed 2026-09-07 16:20:40 -04:00
1 parent 283b971186
commit c8545e70a6
1 file changed
+17
+17
View File
@@ -574,6 +574,23 @@ mutable at runtime from the phone.
process marked its own errors -- and sequences with no meaning on a process marked its own errors -- and sequences with no meaning on a
phone are consumed rather than printed, so a cursor movement cannot phone are consumed rather than printed, so a cursor movement cannot
arrive looking like a corrupted log. 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/<key>-<component>/<same>.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 - **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 first two are the same act at two lengths.** Pull takes the commits and
stops (`?build=false` on the pull route, `BuildState::pull_only`); stops (`?build=false` on the pull route, `BuildState::pull_only`);