# Kernel typed-error migration baseline (the ratchet floor).
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# THE CONVENTION (canonical · forward-compat-invariants.md FCI-023bis):
# every kernel effect-trait — in BOTH nika-kernel-core/src/io/*.rs AND
# nika-kernel-ai/src/*.rs — returns a TYPED #[non_exhaustive] error (Pattern A),
# never `std::io::Result`. A typed error carries the NIKA taxonomy across the
# contract boundary; `io::Result` erases it (the "stringly-typed of errors").
# The whole io/ family complies; in ai/, memory + provider comply.
#
# This file lists the modules STILL returning `std::io::Result` — a tracked
# migration. Each line is a known laggard (YELLOW, not RED). A NEW trait
# returning `std::io::Result` that is NOT listed here → RED (the forcing
# function: type it like its siblings). As a laggard migrates to a typed
# error, DELETE its line; when this file holds only comments, vector 40 goes
# fully green and the convention is uniform across io/ + ai/.
#
# FULLY MIGRATED 2026-06-11 — this file holds only comments and vector 40 is
# GREEN: the io/ computer-use family (screen → ocr → a11y → input → browser)
# migrated 2026-06-10/11, and the ai/ inference traits (VisionError
# NIKA-1501..1505 · AudioError NIKA-1601..1605) were typed 2026-06-11, hours
# after the ai/ scan extension surfaced them (the gate never watched ai/
# before — a Pattern-A audit blind spot). Both had ZERO implementors, so the
# retype was purely additive. A NEW effect trait returning std::io::Result
# anywhere in io/ or ai/ goes RED unless listed here with a reason.
#
# Enforced by scripts/hygiene/check-kernel-io-typed-errors.sh (vector 40).
