/** * Per-signal `results[]` rows synthesized for a batch-level early exit — the exits that return * before the per-signal loop and would otherwise leave the scan's signals with no recorded outcome. * Entry shape matches the loop's own rows so the derived per-signal telemetry is identical in * structure: normalized `dex`, `direction`/`score` only when usable, and a zero-width work window * (both stamps present — a half window is dropped downstream, and a missing one is * indistinguishable from an unstamped legacy row). * * Each row carries `__signalIndex`, its position in the INPUT list, so the event mapper pairs the * row with THIS signal's `meta` rather than with the first signal sharing its asset. It is read * inside the loop, not zipped on by the caller: a dropped signal shifts every later output * position. The input list is the scan's own signal array, which is what the mapper indexes into; * close-position's static-params fallback list has no scan array behind it, so its index matches * nothing and the mapper degrades to its asset join, as it does for any unmatched index. * * A signal with no usable asset is dropped: an outcome that names no asset is not attributable. * A drop is a hole in the "no signal goes unrecorded" contract, so it is logged (once per call, * with the count) rather than passing silently. Counts are unaffected — the row is still absent. * Total by construction — it runs on the trading path and must never throw on a malformed entry. */ export declare function skippedSignalResults(signals: readonly unknown[] | undefined, reason: string, nowMs: number, overrides?: { success?: boolean; error?: string; }): Array>; //# sourceMappingURL=skipped-signal-results.d.ts.map