Reverts the per-level enable map (`LevelsConfig` / `LevelConfig`) added in
3567206 and aligns every layer with threshold semantics — the unwritten
convention used by pino/winston/Python/Java/Go/syslog/OpenTelemetry.
- `arts/logger/types.ts`: drop `LevelsConfig`. `Transport.level?: LogLevel`
replaces `Transport.levels?`. Same shape on console/http/callback options.
- `arts/logger/engine-logger.ts`: restore `if (lvl < state.level) return`
gate; remove `enabledLevels` Set and the build-from-* helpers.
- `arts/logger/consts.ts`: remove `levelsAtLeast` / `allLevels`. Keep
`ALL_LEVELS` for adapters that iterate severities.
- 5 SDK adapters (datadog/logtail/loki/otel/sentry): `level?: LogLevel`
with the same defaults as before; per-level filter dropped because
every adapter already exposes a top-level `filter?` predicate that
serves the rare advanced case without losing capability.
- `libs/logger`: `CatalogDiagnosticsOptions.level?: LogLevel` replaces
`levels?: LevelConfig<DiagnosticLogEntry>`; `LevelConfig` removed from
the public surface.
- Test page and artifact-docs example updated to threshold form.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- **Per-transport filters** — `levels` (per-severity enable + filter) and `filter` (global predicate) at the transport level. The deprecated `minLevel` shorthand was removed; use `levels: levelsAtLeast(LogLevel.X)` for the equivalent effect.
- **Per-transport filters** — `level` (threshold cutoff) and `filter` (arbitrary predicate) at the transport level. Threshold matches the convention used across pino/winston/Python/Java/Go/syslog/OTel.
- **Hybrid dispatch** — sync loop, transports may return `Promise<void>` for
async work. Caller never awaits.
- **Failure routing** — when a transport throws (sync) or rejects (async), a