Build a component this server has never built
"Not built here" was the one state nothing could clear. With no recorded commit a component was not stale, so Update built nothing, so no build ever wrote a record -- the card said it, and Pull, Update and the project's own button all did nothing about it, for ever. Worst for a server component, which the output check beside this one skips by design, having no APK to look for: that is why ai-app's backend sat there saying it after an Update that otherwise worked. Measured on a two-component fixture rather than argued. Before: /prepare answers `components: []` and the freshness is unchanged afterwards. After: the same call reports `step: "building"`, the card reads `current`, and `builtFrom` is on disk. So `nothing_built` asks the record as well as the output. The cost is one rebuild per component on a machine whose records were lost, which was the objection when this was written the other way round -- and is the right price now that the state is visible on the card. It is self-clearing: the first build writes the record and the question is never asked again. That leaves NotBuiltHere meaning exactly one thing, a component with no build command, where nothing was ever going to measure anything and no button would change it. Quiet and unflagged, as against NeverBuilt, which is flagged and has a Build beside it. One word had been covering both. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ce1f02b98f
commit
663626345a
2 files changed
+137
-26
No files matched your search
@@ -587,6 +587,34 @@ mutable at runtime from the phone.
|
||||
differ in nothing but the label and the old one said "Pulling and
|
||||
building" for all three.
|
||||
|
||||
- **"This server has never built it" is something to build, not
|
||||
something to sit on** -- and getting that backwards made it the one
|
||||
state nothing could clear. `component_is_stale` treated a missing
|
||||
`built_from` as no evidence of staleness, so Update built nothing, so
|
||||
no build ever wrote the record: a card reading "not built here" with
|
||||
Pull, Update and the project's own button all doing nothing about it,
|
||||
for ever. Worst for a `Server`, which the output check beside it
|
||||
deliberately skips (it has no APK to look for), so nothing else could
|
||||
rescue it. Measured on a two-component fixture rather than argued:
|
||||
`/prepare` answered `components: []` and the freshness was unchanged
|
||||
afterwards; with the fix the same call reports `step: "building"` and
|
||||
the card reads `current`.
|
||||
So `nothing_built` now asks the record as well as the output, and the
|
||||
cost is one rebuild per component on a machine whose records were lost
|
||||
-- which was the objection when it was written the other way, and is
|
||||
the right price now that the state is *visible*. It is self-clearing:
|
||||
the first build writes the record and the question is never asked
|
||||
again.
|
||||
Which leaves `NotBuiltHere` meaning exactly one thing: a component with
|
||||
**no build command**, where nothing here was ever going to measure
|
||||
anything and no button would change it. That is the whole difference
|
||||
between it and `NeverBuilt` -- one is actionable and flagged, the other
|
||||
is quiet, and they were one word covering both.
|
||||
`nothing_built` takes the record map rather than reading it: a `lock()`
|
||||
temporary inside a call's argument list stays held for the whole call,
|
||||
and a test helper doing exactly that deadlocked the moment anything
|
||||
under it wanted the same lock.
|
||||
|
||||
- **Freshness says *which* answer it is, and only three of them read as
|
||||
out of date.** `Freshness` was `current | behind | unknown`, and the
|
||||
card drew unknown as nothing at all -- so a component this server had
|
||||
|
||||
Reference in new issue
Block a user