import type { SlotDef, SlotCategory } from './types.js'; /** All 33 Mk4 canonical slots */ export declare const SLOTS: SlotDef[]; /** Slot lookup by path — dual-keyed (current on-wire `path` AND Mk4 `canonical` * where defined) so callers can look up by either name. See issue #66. */ export declare const SLOT_BY_PATH: Map; /** Mk4 canonical → current on-wire path. Used by read helpers to resolve * a canonical name back to the path that read/write/kernel actually uses * today. Empty for slots whose path is already canonical. */ export declare const CANONICAL_TO_CURRENT: ReadonlyMap; /** Current on-wire path → Mk4 canonical. Used by display helpers when the * UI wants to surface the forward-spec name. */ export declare const CURRENT_TO_CANONICAL: ReadonlyMap; /** Resolve any path (legacy or canonical) to the slot definition. */ export declare function getSlotByAnyPath(path: string): SlotDef | undefined; /** Read a value from a .faf data object, checking both the slot's current * `path` and its Mk4 `canonical` (if defined). Returns the first non-undefined * value. Lets the cli read .faf files that contain either legacy or canonical * keys without forcing a migration. */ export declare function readSlotValue(data: Record, slot: SlotDef): unknown; /** Slots grouped by category */ export declare function slotsByCategory(category: SlotCategory): SlotDef[]; /** Base-tier slots (1-21) — used by score_faf */ export declare const BASE_SLOTS: SlotDef[]; /** Enterprise-tier slots (1-33) — used by score_faf_enterprise */ export declare const ENTERPRISE_SLOTS: SlotDef[]; /** Placeholder values treated as Empty */ export declare const PLACEHOLDERS: Set; /** `None`, `N/A`, `not applicable` (any case): * a typed none — counts as an empty slot. It scores 0 until filled; faf auto * fills a tech slot from a repo fact and otherwise keeps the words as typed. * Only in a tech slot the app-type leaves out does faf auto write * `slotignored` over them — the app-type's decision, never the words'. */ export declare const EXPLICIT_NONE: ReadonlySet; /** The value that marks a slot as not required and not scored (the What-Not). * It comes only from the app-type; a typed word never means it. */ export declare const SLOTIGNORED = "slotignored"; /** True for a typed none — counts as an empty slot: `None`, `N/A`, * `not applicable`, `none` (any case, any padding). */ export declare function isExplicitNone(value: unknown): boolean; /** True for words typed into a slot that do not fill it: a typed none * (`None`, `N/A`, `not applicable`) or any other placeholder word * (`unknown`, `null` written as a string, …), any case, any padding. Like a * typed none, they count as an empty slot, and faf keeps them as typed until * a repo fact fills a tech slot (or, in a tech slot the app-type leaves out, * `faf auto` marks it `slotignored`). An empty value (`''`, YAML null) is * not typed words. */ export declare function isTypedWords(value: unknown): boolean; /** Check if a value is a placeholder (empty) */ export declare function isPlaceholder(value: unknown): boolean; /** The `# found:` note of a type detection chose with no classifying signal * (its `library` fallback). A type carrying it is faf's fallback, not a fact * about the repo: `faf auto` writes no `slotignored` over typed words on it, * and `faf score` promises none. */ export declare const NO_CLASSIFYING_SIGNALS = "no classifying signals \u2014 fallback"; /** Whether the app-type `type` uses `slot` — the one rule for which slots * count: the type's active categories, less the slots a `framework` repo * leaves out. `null` when `type` is not an app-type faf knows (then faf * cannot tell, and decides nothing from it). */ export declare function appTypeUsesSlot(type: unknown, slot: SlotDef): boolean | null; /** App-type to active category mapping. The canonical 24-type ladder — * detectable apps + `encyclopedia` (curated knowledge) + `intent` (seed). * About is NOT an app_type — it is a repo role (`about.represents`). * (See v6.6.md doctrine memory + fafipedia-vs-grokipedia-architecture.) * Sorted ascending by active slot count for readability. * * v6.5.0 changes vs prior: * - Added `universal` to cli / library / mcp / frontend / data-science. * These types ship/build/CI somewhere — slotignoring those slots was * losing real signal. (cli/library: 9→12; mcp/data-science: 14→17; * frontend: 13→16.) * - Order is by ascending slot count, not insertion order. */ export declare const APP_TYPE_CATEGORIES: Record;