/** A definition in a game-owned namespace, located in its authored document. */ export interface ContentEntry { kind: string; id: string; path: string; } /** A located reference; namespaces can express game-owned roles such as questgiver. */ export interface ContentReference extends ContentEntry { contentId: string; /** Optional game-declared relationship, such as the quests offered by this particular giver. */ allowedIds?: readonly string[]; } /** A repairable authoring issue. Paths are caller document locations, usually JSON Pointers. */ export interface ContentIssue { code: string; severity: "error" | "warning"; path: string; contentId?: string; referenceId?: string; message: string; repair: string; } /** * Index definitions once and check references in input order, without mutating the catalog. * Namespace strings and roles are game-owned; identical ids in different namespaces are valid. * Typed input must be decoded before calling. Work is O(definitions + references + allowed ids). * * @capability content-reference-validation locate duplicate content ids and broken references across game-owned catalog namespaces with repair guidance */ export declare function validateContentReferences(entries: readonly ContentEntry[], references: readonly ContentReference[]): ContentIssue[]; /** A possible source or action; all required facts must be reachable to provide its facts. */ export interface ContentProgressionRule { id: string; path: string; requires: readonly string[]; provides: readonly string[]; } /** A game-declared availability requirement, located at the content that needs it. */ export interface ContentProgressionRequirement { id: string; path: string; contentId: string; } /** Explicit possible sources; opaque fact strings may represent items, unlocks or skill milestones. */ export interface ContentProgressionInput { initial: readonly string[]; rules: readonly ContentProgressionRule[]; required?: readonly ContentProgressionRequirement[]; /** True only when the game declares all possible sources; otherwise blocked routes are warnings. */ closedWorld?: boolean; } /** Potential availability and diagnostics in deterministic input/traversal order. */ export interface ContentProgressionResult { reachable: string[]; reachableRules: string[]; issues: ContentIssue[]; } /** * Check declared potential progression using a dependency queue in O(facts + rules + edges). * Alternatives are separate rules; every requirement within one rule is necessary. * Seeded cycles are valid. An unseeded cycle is blocked only under the declared sources. * Facts describe possible availability, not quantities, consumption, mutually exclusive choices, * chronology, station proximity or economic balance. Encode those constraints in game-owned rules * or playtests. Skill training caps must be explicitly translated into attainable milestones. * This is offline authoring analysis, not a quest engine or a per-frame catalog scan. * * @capability content-progression-validation diagnose unavailable sources and blocked cross-content progression under explicit game-owned rules without rejecting intentional seeded cycles */ export declare function validateContentProgression(input: ContentProgressionInput): ContentProgressionResult;