/** * Kernel enums — enums the X++ runtime defines, with NO AOT metadata element. * * These are referenced by ordinary metadata (`NoYes` appears * 48 times in CustTable.xml alone, and EDT NoYesId reports `Enum Type: NoYes`) * but they have no `AxEnum/*.xml` anywhere, so no metadata-backed lookup can * ever prove them: not the C# bridge (`IMetadataProvider.Enums` does not carry * them), not the SQLite symbol index (it indexes AOT XML), not a disk probe. * * Treating "absent from the AOT" as "does not exist" produced two failures, both * confirmed live on 2026-08-24: * * 1. `validate_code(mode="references", codeType="xml-table")` reported * `NoYes` as a hard ERROR — "Enum NoYes not found in * the symbol index" — under "Fix errors before writing — these will cause * compiler failures". An agent obeying that edits correct metadata, and * `search` offers it NoYesBlank / DefaultNoYes / NoYesCombo to "correct" to. * Those enums are real, so the result compiles clean and means the wrong * thing. * 2. `get_object_info(objectType="enum", name="NoYes")` answered "not found via * bridge, symbol index, or on disk" and advised searching other spellings, * running update_symbol_index on `NoYes.xml`, and checking * D365FO_CUSTOM_PACKAGES_PATH. None of that can ever succeed: there is no * file to index. Meanwhile the EDT reader hands the agent the name `NoYes` * in the first place — a loop with no exit. * * The X++ reference resolver already knew this (resolveReferences.ts allow-listed * 'noyes' and 'exception' for exactly this reason), which is why X++ using * `NoYes::Yes` validated cleanly while the XML path hard-errored on the same * enum. This module is that knowledge in one place, so the next path to need it * does not have to rediscover it. * * MEMBERSHIP IS EVIDENCE-BASED, not remembered: every name below was checked * against the complete set of 8,220 `AxEnum/*.xml` basenames in * K:\AosService\PackagesLocalDirectory (metamodel 7.0.7996.33) and is absent * from all of them. */ /** A kernel enum, and the value names it is used with. */ export interface KernelEnum { /** Canonical casing, for rendering. */ name: string; /** * Value names as OBSERVED in shipped X++/metadata under * PackagesLocalDirectory. Deliberately not claimed to be exhaustive — it is * what the product itself uses. Omitted where a scan found no usage, rather * than filled in from memory. */ values?: string[]; } /** Lowercase names, for the allow-lists that already work in lowercase. */ export declare const KERNEL_ENUM_NAMES: ReadonlySet; /** Is `name` an enum the runtime defines rather than the AOT? Case-insensitive. */ export declare function isKernelEnum(name: string | null | undefined): boolean; /** The entry for `name`, or undefined when it is not a kernel enum. */ export declare function getKernelEnum(name: string | null | undefined): KernelEnum | undefined; /** * The answer a reader should give instead of "not found". * * States the one thing the caller has to know — there is nothing to index, and * references to it are valid — so the reply cannot be read as "this name is * wrong, go find the right one". */ export declare function describeKernelEnum(name: string): string | null; //# sourceMappingURL=kernelEnums.d.ts.map