Features: the deferred key set proves its own reporting coverage (fleetd #337)

Dai Ha
2026-09-04 16:22:40 +07:00
parent dbe3bebf35
commit ff77005cc3
+28
@@ -4281,3 +4281,31 @@ Measured on merge: replacing the `.filter(...::add)` with one that logs every na
left all 1358 tests green — the noise control was correct and nothing held it there. Two tests now
cover both duties, including the **reverse** policy order (allow-list first, then deny-by-default),
because a guard fixed in one direction is not automatically fixed in the other.
---
## The deferred key set now proves its own reporting coverage too
**What it does.** `ConfigRefTopLevelReportingCoverageTest` covered `COLD_KEYS` and `SPLIT_KEYS` only.
It now covers the deferred bucket as well. The deferred set moved out of the test and into
`ConfigRef.DEFERRED_KEYS` (package-private, 11 keys), and `changedDeferredKeys` became
package-private like `changedColdKeys` and `changedSplitKeys`, so the test calls the real method
instead of a copy of the list. A name in any of the three sets with no comparison behind it now
fails the build, by name.
**On.** Always on — a unit test (fleetd #337).
**Why it exists.** The deferred bucket is the largest of the four: 11 of the 22 top-level keys. It
was also the one bucket where a name could be added with no code behind it and every checker stayed
green. Measured before the fix: dropping `guard`'s comparison out of `changedDeferredKeys` while
`"guard"` stayed in the set left all 1355 tests green. An operator who changes such a key gets no
"restart needed" line, so the daemon keeps running config that matches no file on disk and says
nothing.
**One thing to know for maintenance.** The real number of uncovered keys was **6 of 11** — `guard`,
`worktreeRoot`, `spawnReadyTimeoutMs`, `spawnReadyPollMs`, `quarantineCooldownSeconds` and
`leadHeartbeat`. My own ticket listed a different six. The worker re-derived the list by mutating
each key one at a time, as the brief asked, and contradicted me on two entries: `lifecycle` was
already covered, and `worktreeRoot` was uncovered and missing from my list. Both corrections were
checked again on merge with a third mutation. **A list in a ticket is a starting point, not a
measurement** — re-derive it, and say so when it disagrees.