/**
 * Slugify a human name into a kebab-case id. Used as a deterministic fallback
 * when a persona lacks an explicit id field.
 *
 * @param {string} name
 * @returns {string}
 */
export function slugify(name: string): string;
/**
 * Plan the output tree.
 *
 * @param {Object} inputs
 * @param {Array<unknown>} inputs.personas
 * @param {FeatureArea[]} inputs.areas
 * @param {string} [inputs.outputDirRelative]
 * @returns {StructurePlan}
 */
export function planStructure({ personas, areas, outputDirRelative }: {
    personas: Array<unknown>;
    areas: FeatureArea[];
    outputDirRelative?: string | undefined;
}): StructurePlan;
/**
 * Compact marker that the LLM agent will consume to make the D-04
 * variant-vs-shared decision per feature. Pure data — we do NOT call the
 * LLM here; the rubric prompt composition lives in the SKILL.md body.
 *
 * @param {PlannedFeatureDoc} feature
 * @param {PlannedPersona[]} personas
 * @returns {{ feature_id: string, candidate_personas: PlannedPersona[], shared_path: string, variant_paths: Record<string, string> }}
 */
export function buildVariantDecisionInput(feature: PlannedFeatureDoc, personas: PlannedPersona[]): {
    feature_id: string;
    candidate_personas: PlannedPersona[];
    shared_path: string;
    variant_paths: Record<string, string>;
};
export type FeatureArea = import("./features-reader.mjs").FeatureArea;
export type FeatureGroup = import("./features-reader.mjs").FeatureGroup;
export type PersonaTier = "primary" | "secondary" | "tertiary";
export type PlannedPersona = {
    id: string;
    name: string;
    tier: PersonaTier;
    /**
     * relative path: `{persona}/README.md`
     */
    landing_path: string;
};
export type PlannedFeatureDoc = {
    area: string;
    /**
     * group id when feature-as-group; area when area-level leaf
     */
    feature_id: string;
    feature_name: string;
    wiring: "wired" | "stubbed";
    /**
     * D-03 "Coming soon" marker
     */
    is_stub: boolean;
    /**
     * relative path when rendered as shared: `_shared/{area}/{feature}.md`
     */
    shared_path: string;
    /**
     * persona-id → relative path for variant rendering
     */
    variant_paths: Record<string, string>;
    /**
     * persona ids this doc belongs to (primary+secondary wired; primary-only stub)
     */
    included_personas: string[];
    /**
     * persona ids that reference this doc via their skeleton (no dedicated page)
     */
    tertiary_personas: string[];
};
export type PlannedArea = {
    /**
     * area id (e.g. "terminals")
     */
    area: string;
    route?: string | undefined;
    feature_count_wired: number;
    feature_count_stubbed: number;
    feature_count_unwired_omitted: number;
    features: PlannedFeatureDoc[];
};
export type StructurePlan = {
    /**
     * always `docs/product` unless overridden
     */
    output_dir_relative: string;
    personas: PlannedPersona[];
    areas: PlannedArea[];
    tertiary_skeletons: Array<{
        persona_id: string;
        area: string;
        path: string;
    }>;
    persona_landings: Array<{
        persona_id: string;
        path: string;
    }>;
    /**
     * `docs/product/README.md`
     */
    nav_index_path: string;
    totals: {
        areas: number;
        features_documented: number;
        stubs_included: number;
        features_omitted_unwired: number;
    };
};
//# sourceMappingURL=structure-planner.d.mts.map