# `Report`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Type · `import type { Report } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 2. Operations, reports, causes, problems

The one result of every write, discriminated by `outcome`. Frozen. Narrow on `outcome` before
reading `reason`, `supersededBy` or `patch`:
- 'refused' and 'rolled-back' carry `reason`;
- 'superseded' carries `supersededBy`;
- 'dry-run' carries `patch` (RFC 6902 over [`SessionState`](SessionState.md): what the write alone would have
  changed; a dry run runs no [`beforeCommit`](Session.beforeCommit.md) function).

Inherited from [`ReportFields`](ReportFields.md): [`op`](ReportFields.op.md), [`origin`](ReportFields.origin.md), [`seq`](ReportFields.seq.md), [`revision`](ReportFields.revision.md), [`changed`](ReportFields.changed.md), [`matched`](ReportFields.matched.md), [`pending`](ReportFields.pending.md), [`completed`](ReportFields.completed.md), [`problems`](ReportFields.problems.md).

## Declaration

```ts
export type Report = ReportFields & ({
  readonly outcome: 'committed' | 'staged' | 'deferred' | 'other';
  readonly reason?: undefined;
  readonly supersededBy?: undefined;
  readonly patch?: undefined;
} | {
  readonly outcome: 'refused' | 'rolled-back';
  readonly reason: Reason;
  readonly supersededBy?: undefined;
  readonly patch?: undefined;
} | {
  readonly outcome: 'superseded';
  readonly supersededBy: OpId;
  readonly reason?: undefined;
  readonly patch?: undefined;
} | {
  readonly outcome: 'dry-run';
  readonly patch: readonly JsonPatchOp[];
  readonly reason?: undefined;
  readonly supersededBy?: undefined;
});
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `Report` names no product |
| 2. A precedent | not recorded: no ledger row (coverage.json) names this member or its owner |
| 3. Two apps, or labs | pass: 28 apps (fleet cross-check: app-04c2774145, app-0c773a4ee3, app-37356bf09f, app-378d190f1b, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508 and 20 more) |
| 4. The cheaper fix first | not recorded per member (Appendix B decides it per need) |
