fix(health): one contract for a throwing probe — heal is none, serving is not withheld; repair report gains missing/rebuilt/reason
A validateInvariants() that threw was re-synthesized by the host's catch as
heal:'rebuild' with serving:false — a rebuild lever one transient exception
away, while the native provider's own composer reports the same event as
heal:'none'. Two components disagreeing on what a thrown check means is how
a flaky probe becomes an outage. Both now agree: the report is named
('validate-invariants-threw'), loud (healthy:false, the error in detail),
unverified — and it never buys a rebuild and never withholds serving; the
provider's serving verdict is the provider's to compose, not inferred from a
probe that failed to run. The synthesized report also carries the provider's
name instead of 'unknown'.
RepairFamilyReport gains `missing: {count, sample}` (an exact count plus a
capped id sample — a verdict, not a dump), `rebuilt` (a full generational
rebuild ran, as opposed to an incremental heal) and `reason`, aligning the
receipt's shape with the provider-side health report.
Pinned in tests/unit/validate-invariants-delegation.test.ts.
This commit is contained in:
parent
7c8c8be30c
commit
116550eb16
3 changed files with 54 additions and 3 deletions
|
|
@ -1200,10 +1200,23 @@ export interface RelateManyParams<T = any> {
|
|||
*/
|
||||
export interface RepairFamilyReport {
|
||||
family: string
|
||||
/** The family was actually examined (false = skipped; see `skipped`/`reason`). */
|
||||
checked: boolean
|
||||
/** Items re-posted / corrected in place — the incremental heal count. */
|
||||
healed: number
|
||||
/**
|
||||
* What the check found missing or divergent, when it can name it: an exact
|
||||
* count plus a capped sample of ids (never the whole list — a report is a
|
||||
* verdict, not a dump). Absent when the family has nothing to name.
|
||||
*/
|
||||
missing?: { count: number; sample: string[] }
|
||||
/** A full generational rebuild of this family ran (as opposed to an incremental heal). */
|
||||
rebuilt?: boolean
|
||||
detail?: string
|
||||
/** Why the family was not checked (`checked: false`). */
|
||||
skipped?: string
|
||||
/** Why the outcome is what it is when neither `detail` nor `skipped` says it. */
|
||||
reason?: string
|
||||
}
|
||||
|
||||
/** The full receipt returned by repairIndex(). */
|
||||
|
|
|
|||
Reference in a new issue