/**
 * Entity-type guards for schema registration and storage.
 *
 * Two independent checks run whenever a new entity_type is introduced (via
 * `register_schema`, `update_schema_incremental`, or implicit auto-creation
 * in `storeStructuredInternal`):
 *
 * 1. Forbidden-pattern guard (this file, `isForbiddenTestArtifactType`)
 *    Rejects type names that match "test artifact" regexes — patterns users
 *    almost always create by accident in tests or CLI experiments and then
 *    never clean up. Defaults are intentionally narrow (numeric suffix
 *    required) so that real types like `test_case` are not caught. Users can
 *    widen or narrow via `NEOTOMA_FORBIDDEN_TYPE_PATTERNS` and allow
 *    specific names via `NEOTOMA_ALLOWED_TEST_TYPES`.
 *
 * 2. Plural-form guard (this file, `isLikelyPluralType`)
 *    Rejects names that are conventionally plural (`posts`, `contacts`),
 *    nudging callers toward singular `post`, `contact`. Irregular plurals
 *    (`news`, `data`, `analytics`) and user-allowlisted names via
 *    `NEOTOMA_ALLOWED_PLURAL_TYPES` are exempt.
 *
 * Both guards can be bypassed for a specific call with `force: true`, e.g.
 * when the user really does want `test_type_123` or `songs`.
 *
 * Behaviour:
 *   - development (NODE_ENV !== "production"): warn, never throw.
 *   - production: throw with an actionable message unless `force: true`.
 */
export interface EntityTypeGuardResult {
    reason: "forbidden_test_artifact" | "looks_plural" | null;
    message: string;
    suggestion?: string;
}
export declare function checkForbiddenTestArtifactType(entityType: string): EntityTypeGuardResult;
/**
 * Minimal singularization heuristic (reverses common English pluralization).
 * Not perfect, but good enough to catch `posts`, `contacts`, `meeting_notes`,
 * `songs` while leaving irregular forms like `analytics`, `news` untouched.
 */
export declare function suggestSingular(entityType: string): string | null;
export declare function checkPluralEntityType(entityType: string): EntityTypeGuardResult;
export interface EntityTypeGuardOptions {
    force?: boolean;
    context?: string;
}
/**
 * Apply both guards. In production mode a violation throws. In development
 * mode it emits a warning and allows the operation to proceed, so callers
 * are not blocked by accidental typos while iterating.
 */
export declare function enforceEntityTypeGuards(entityType: string, options?: EntityTypeGuardOptions): void;
//# sourceMappingURL=entity_type_guard.d.ts.map