import { z } from 'astro/zod'; /** * Zod schemas + enum constants for book content collections. * * All Zod schemas live in this single file (single `astro/zod` import) so * tsup's DTS bundler doesn't traverse Zod's dual CJS/ESM package multiple * times — rollup-plugin-dts can't resolve Zod v4's `default` export when * the same Zod import appears in multiple entry-graph files. * * Per-profile organization lives at src/profiles/.ts which imports * these schemas as values + declares the inferred chapter type + the * route/style defaults. See ~/.claude/plans/address-and-finish-moonlit-shell.md. * * Imports `z` from `astro/zod` (a real module re-export) so schemas can * be constructed at package-load time outside an Astro runtime context. * `defineBookSchemas` in schemas-entry.ts wraps these into Astro * `defineCollection` calls at the consumer's content-config load time. */ declare const toolSlugs: readonly ["claude-code", "gemini-cli", "codex-cli", "cross-tool"]; declare const volatilityLevels: readonly ["stable-principle", "architectural-pattern", "feature-surface"]; declare const sourceTiers: readonly ["T1-official", "T2-release-notes", "T3-practitioner", "T4-conjecture"]; declare const changeKinds: readonly ["added", "removed", "changed", "deprecated"]; declare const patternCategories: readonly ["safety", "scale", "context", "interaction", "extension", "other"]; declare const academicParts: readonly ["foundations", "ssm-core", "beyond-ssm", "integration", "synthesis"]; declare const chapterStatus: readonly ["implemented", "chapter_only", "reading_only", "prose_only", "code_only", "scaffolded", "planned"]; declare const layoutModes: readonly ["default", "wide"]; declare const citationBackstops: readonly ["research-kb", "manual", "unverified"]; declare const provenanceObject: z.ZodObject<{ ai_tools: z.ZodDefault>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>; declare const provenanceSchema: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; declare const academicChapterSchema: z.ZodObject<{ week: z.ZodNumber; part: z.ZodEnum<{ foundations: "foundations"; "ssm-core": "ssm-core"; "beyond-ssm": "beyond-ssm"; integration: "integration"; synthesis: "synthesis"; }>; title: z.ZodString; slug: z.ZodOptional; layout: z.ZodOptional>; status: z.ZodEnum<{ implemented: "implemented"; chapter_only: "chapter_only"; reading_only: "reading_only"; prose_only: "prose_only"; code_only: "code_only"; scaffolded: "scaffolded"; planned: "planned"; }>; roadmap_lines: z.ZodOptional>; code_path: z.ZodOptional; tests_path: z.ZodOptional; notebook_path: z.ZodOptional; description: z.ZodOptional; draft: z.ZodDefault; author: z.ZodOptional; published: z.ZodOptional; updated: z.ZodOptional; tags: z.ZodDefault>; image: z.ZodOptional; provenance: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strip>; declare const toolsChapterSchema: z.ZodObject<{ title: z.ZodString; slug: z.ZodOptional; layout: z.ZodOptional>; part: z.ZodNumber; chapter: z.ZodNumber; volatility: z.ZodEnum<{ "stable-principle": "stable-principle"; "architectural-pattern": "architectural-pattern"; "feature-surface": "feature-surface"; }>; tools_compared: z.ZodArray>; last_verified: z.ZodDate; sources: z.ZodDefault>; description: z.ZodOptional; draft: z.ZodDefault; updated: z.ZodOptional; author: z.ZodOptional; published: z.ZodOptional; tags: z.ZodDefault>; image: z.ZodOptional; provenance: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strip>; /** Minimal profile currently aliases the tools schema. */ declare const minimalChapterSchema: z.ZodObject<{ title: z.ZodString; slug: z.ZodOptional; layout: z.ZodOptional>; part: z.ZodNumber; chapter: z.ZodNumber; volatility: z.ZodEnum<{ "stable-principle": "stable-principle"; "architectural-pattern": "architectural-pattern"; "feature-surface": "feature-surface"; }>; tools_compared: z.ZodArray>; last_verified: z.ZodDate; sources: z.ZodDefault>; description: z.ZodOptional; draft: z.ZodDefault; updated: z.ZodOptional; author: z.ZodOptional; published: z.ZodOptional; tags: z.ZodDefault>; image: z.ZodOptional; provenance: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strip>; /** * Research-portfolio source tiers (v3.5.0, closes issue #6). * * Lighter shape than the tools-profile `sourceTiers` enum (`'T1-official'` etc.) * — research portfolios cite primary sources inline per-chapter, so short * `'T1'`/`'T2'` is more compact and readable. Semantics overlap (T1 = official * primary, T2 = secondary, T3 = practitioner / community, T4 = conjecture). */ declare const sourceTiersResearch: readonly ["T1", "T2", "T3", "T4"]; /** * Course-notes profile schema (v3.3.0, closes issue #4). Designed for * course-derived study notes (DLAI, Coursera, Manning, ...). Key fields: * - `course`/`instructor`/`source_url` — attribution * - `learning_outcomes` — structured Bloom-tag-ready outcomes * - `tags` — freeform string array (NOT tools_compared enum) */ declare const courseNotesChapterSchema: z.ZodObject<{ title: z.ZodString; slug: z.ZodOptional; layout: z.ZodOptional>; chapter: z.ZodNumber; part: z.ZodDefault; description: z.ZodOptional; course: z.ZodOptional; instructor: z.ZodOptional; source_url: z.ZodOptional; learning_outcomes: z.ZodDefault>>; tags: z.ZodDefault>; last_verified: z.ZodDate; volatility: z.ZodDefault>; sources: z.ZodDefault>; draft: z.ZodDefault; author: z.ZodOptional; published: z.ZodOptional; updated: z.ZodOptional; image: z.ZodOptional; provenance: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strip>; /** * Research-portfolio profile schema (v3.5.0, closes issue #6). * * Union of academic + tools field shapes, modernized: uses `tags` (freeform * string array) instead of `tools_compared` (CLI-enum, doesn't fit research * content). Designed for research-portfolio books that need BOTH academic- * style structure (week/part/status, math/BibTeX/Theorem support via the * `katex: true` profile flag) AND tools-style provenance (volatility class, * tier-tagged sources, last_verified freshness signal). * * Reference (forthcoming) consumer: prompt-injection-portfolio. * * Hierarchy fields are all optional — chapters can use academic-style * (`week` + part-enum string) OR tools-style (`chapter` + part-number) OR * minimal (just title). The route templates dispatch on which is set. * * Sources are STRUCTURED INLINE (each chapter cites primary sources directly) * rather than referencing a sources collection — saves cross-file lookup + * matches research-paper citation conventions. Tier shorthand T1/T2/T3/T4 * (per sourceTiersResearch) over the tools-profile long form. */ declare const researchPortfolioChapterSchema: z.ZodObject<{ title: z.ZodString; slug: z.ZodOptional; layout: z.ZodOptional>; description: z.ZodOptional; part: z.ZodOptional>; week: z.ZodOptional; chapter: z.ZodOptional; status: z.ZodOptional>; freshness: z.ZodOptional>; volatility: z.ZodOptional>; tags: z.ZodDefault>; sources: z.ZodDefault; url: z.ZodString; label: z.ZodString; }, z.core.$strip>>>; last_verified: z.ZodDate; updated: z.ZodOptional; draft: z.ZodDefault; author: z.ZodOptional; published: z.ZodOptional; image: z.ZodOptional; provenance: z.ZodOptional>; prompts_archive: z.ZodOptional; decisions_log: z.ZodOptional; audit_history: z.ZodDefault>>; citation_backstop: z.ZodOptional>; }, z.core.$strict>>; }, z.core.$strip>; type AcademicChapter = z.infer; type ToolsChapter = z.infer; type MinimalChapter = z.infer; type CourseNotesChapter = z.infer; type ResearchPortfolioChapter = z.infer; type Provenance = z.infer; declare const sourcesSchema: z.ZodObject<{ url: z.ZodString; title: z.ZodString; author: z.ZodOptional; publish_date: z.ZodOptional; captured_at: z.ZodDate; content_hash: z.ZodOptional; tier: z.ZodEnum<{ "T1-official": "T1-official"; "T2-release-notes": "T2-release-notes"; "T3-practitioner": "T3-practitioner"; "T4-conjecture": "T4-conjecture"; }>; tool: z.ZodEnum<{ "claude-code": "claude-code"; "gemini-cli": "gemini-cli"; "codex-cli": "codex-cli"; "cross-tool": "cross-tool"; }>; perma_cc: z.ZodOptional>; local_cache: z.ZodOptional>; }, z.core.$strip>; declare const changelogSchema: z.ZodObject<{ tool: z.ZodEnum<{ "claude-code": "claude-code"; "gemini-cli": "gemini-cli"; "codex-cli": "codex-cli"; "cross-tool": "cross-tool"; }>; versions: z.ZodDefault; note: z.ZodString; source_key: z.ZodOptional; }, z.core.$strip>>>; }, z.core.$strip>>>; }, z.core.$strip>; declare const patternsSchema: z.ZodObject<{ name: z.ZodString; description: z.ZodOptional; category: z.ZodOptional>; convergence_date: z.ZodOptional>; }, z.core.$strip>; declare const questionTypes: readonly ["mcq", "free", "cloze"]; declare const bloomLevels: readonly ["remember", "understand", "apply", "analyze", "evaluate", "create"]; declare const questionDifficulties: readonly ["1", "2", "3", "4"]; declare const questionSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<{ mcq: "mcq"; free: "free"; cloze: "cloze"; }>; chapter: z.ZodUnion; part: z.ZodOptional>; domain: z.ZodString; bloom_level: z.ZodOptional>; objective_id: z.ZodOptional; difficulty: z.ZodOptional>; options: z.ZodOptional; text: z.ZodOptional; }, z.core.$strict>>>; answer: z.ZodOptional; draft: z.ZodDefault; tags: z.ZodDefault>; }, z.core.$strict>; /** * Per-type invariants for a question. Attached as `.superRefine(refineQuestion)` * at collection-registration time (schemas-entry.ts) so `questionSchema` itself * stays a bare ZodObject Astro + consumers can `.extend()`. Exported so the unit * test can exercise the refined form directly. */ declare function refineQuestion(q: z.infer, ctx: z.RefinementCtx): void; /** * The questions collection schema AS REGISTERED: the flat `questionSchema` * composed with the per-type `refineQuestion` invariants. This is the canonical * form — `schemas-entry.ts` registers it and the unit tests exercise it. * Registering the bare `questionSchema` (exported only for `.extend()`) would * silently drop every per-type check, so prefer this value. */ declare const refinedQuestionSchema: z.ZodObject<{ id: z.ZodString; type: z.ZodEnum<{ mcq: "mcq"; free: "free"; cloze: "cloze"; }>; chapter: z.ZodUnion; part: z.ZodOptional>; domain: z.ZodString; bloom_level: z.ZodOptional>; objective_id: z.ZodOptional; difficulty: z.ZodOptional>; options: z.ZodOptional; text: z.ZodOptional; }, z.core.$strict>>>; answer: z.ZodOptional; draft: z.ZodDefault; tags: z.ZodDefault>; }, z.core.$strict>; type Question = z.infer; type QuestionType = (typeof questionTypes)[number]; type BloomLevel = (typeof bloomLevels)[number]; declare const glossarySchema: z.ZodObject<{ term: z.ZodString; aliases: z.ZodDefault>; domain: z.ZodOptional; see: z.ZodDefault>; tags: z.ZodDefault>; draft: z.ZodDefault; }, z.core.$strict>; type GlossaryTerm = z.infer; export { type AcademicChapter as A, type BloomLevel as B, type CourseNotesChapter as C, toolsChapterSchema as D, volatilityLevels as E, type GlossaryTerm as G, type MinimalChapter as M, type Provenance as P, type Question as Q, type ResearchPortfolioChapter as R, type ToolsChapter as T, type QuestionType as a, academicChapterSchema as b, academicParts as c, bloomLevels as d, changeKinds as e, changelogSchema as f, chapterStatus as g, citationBackstops as h, courseNotesChapterSchema as i, glossarySchema as j, patternsSchema as k, layoutModes as l, minimalChapterSchema as m, provenanceObject as n, provenanceSchema as o, patternCategories as p, questionDifficulties as q, questionSchema as r, questionTypes as s, refineQuestion as t, refinedQuestionSchema as u, researchPortfolioChapterSchema as v, sourceTiers as w, sourceTiersResearch as x, sourcesSchema as y, toolSlugs as z };