A component can name the files its build reads elsewhere

Freshness compared the commits under a component's own cwd, which is
right about where its files are and wrong about what its build reads.
tdep-survey's two clients each source one shared scripts/android-sdk-env.sh:
a fix committed there changed what every build does, moved no component's
subtree head, rebuilt nothing, and left every card correctly reporting
"current" while answering a narrower question than the reader was asking.

alsoWatch names the rest. The paths join the component's own in the same
subtree-head and dirty comparisons -- git takes several pathspecs, so it
stays one call each -- and it is part of the acceptance gate like any
other declared field. Declared rather than inferred: which files a build
reads is not knowable from here, and both wrong guesses are expensive.

Raised by the tdep-survey session, which traced why its dioxus client
could never become stale on the serving host.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Opus 5 committed 2026-09-01 11:11:07 -04:00
1 parent f00c3b970f
commit b67c70fa2f
7 files changed
+209 -18

No files matched your search

+15
View File
@@ -240,6 +240,21 @@ mutable at runtime from the phone.
somebody asked. Stop and Uninstall do go
through the script, and do strand the phone; the app confirms them
rather than hiding them.
- **A component's freshness covers its own directory plus whatever it
declared with `alsoWatch`** (`Component::watched_paths`, handed to
`git::subtree_head` and `subtree_dirty` as pathspecs -- git takes
several, so it stays one call). Scoping to `cwd` is right about where a
component's files are and wrong about what its build reads: tdep-survey's
two clients each source one shared `scripts/android-sdk-env.sh`, so a fix
committed there changed what every build does, moved no component's
subtree head, rebuilt nothing, and left every card correctly reporting
"current" -- the narrower-question shape, where nothing is wrong and
nothing says so. Declared rather than inferred because which files a
build reads is not knowable from here, and both wrong guesses are
expensive: too wide rebuilds everything on every commit, too narrow is
that silence. It is part of the acceptance gate like every other
declared field -- `same_declaration` destructures exhaustively, which is
what forced the decision when the field was added.
- **A stripped copy is only serveable if it is signed by the key the
build was.** `strip.rs` re-signs with `~/.android/debug.keystore`, and
nothing about a debug keystore says which builds it made -- it is per