/** * Prop 309 P2 degraded-mode test pack — entry E4 (induced-failure). * * Boundary (verbatim scope): ECL/mail poll completeness. Induced faults → * required behavior: "basename collision · own-broadcast exclusion · glob * failure → surfaced or LOUDLY accounted, never silent narrowing." * * Pack contract — every induced-failure test carries three assertions: * 1. The accounting fires (degraded output announces itself — never output * indistinguishable from a clean poll). * 2. The backstop throws. `totem mail` is a READ-ONLY path, so per * ADR-115 § 2 the requirement is a DEGRADED/UNVERIFIED-style envelope in * rendered output — the structured `warnings` channel (rendered as * `Warning: …` lines by `formatTextResult`) IS that envelope — not a * nonzero exit. Where this pack pins an exit code it is pinning the * deliberate exit-0-with-envelope contract, never blessing silence. * 3. Recovery/control: a positive control (healthy fixture poll renders * everything it should) AND fault-removed-returns-to-green. * * Framing defects: * - mmnto-ai/totem#2462 — "silent mail-suppression class": the own-broadcast * exclusion at mail.ts (`if (opts.includeProcessed !== true && toLower === * 'broadcast' && selfLower.has(senderSeat)) continue;`) assumes SELF is one * seat; post-dirs-union the default poll resolves ALL resident seats, so a * resident sender's broadcast is suppressed from every seat's default * render — silently, no accounting line. * - mmnto-ai/totem#2509 — the accounting-line gap: the default render gives * no account of items dropped by the exclusion; the required fix is a * rendered accounting line when suppression drops files mark-absent for * ≥1 resident non-sender seat. NOT yet implemented — the required-behavior * assertion below is `test.fails` with this issue ref (repo rule: * suppressions carry a ticket-ref comment), written against the REQUIRED * behavior so it EXECUTES every run and flips the moment the fix lands * (vitest 4 dropped `test.fixme`; `test.fails` is the in-repo vitest's * expected-fail primitive — green while the defect stands, loudly red * once the assertions pass and the marker must be removed). * * Filesystem-driven, hermetic (fresh tmp workspace per test), same fixture * idiom as mail.test.ts. Assertions target the structured `MailPollResult` * (the durable hook contract); the text formatter is human-only EXCEPT the * verdict line's `INCOMPLETE` token invariant, a pinned contract since * mmnto-ai/totem#2516 — a degraded scan whose verdict sentence is * indistinguishable from a clean scan's IS the silent-narrowing class this * pack exists to catch, so that one line is asserted like any other contract. */ export {}; //# sourceMappingURL=mail-degraded-e4.test.d.ts.map