@thanh01.pmt/curriculum-kit 1.4.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/ai/index.cjs +3 -1
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +4 -0
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.mjs +3 -1
- package/dist/ai/index.mjs.map +1 -1
- package/dist/index.cjs +471 -139
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -4
- package/dist/index.d.ts +11 -4
- package/dist/index.mjs +469 -140
- package/dist/index.mjs.map +1 -1
- package/dist/pipeline/index.cjs +3 -1
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.mjs +3 -1
- package/dist/pipeline/index.mjs.map +1 -1
- package/dist/schemas/index.cjs +3 -1
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +20 -0
- package/dist/schemas/index.d.ts +20 -0
- package/dist/schemas/index.mjs +3 -1
- package/dist/schemas/index.mjs.map +1 -1
- package/dist/standards/index.cjs +195 -1
- package/dist/standards/index.cjs.map +1 -1
- package/dist/standards/index.d.cts +20 -1
- package/dist/standards/index.d.ts +20 -1
- package/dist/standards/index.mjs +193 -2
- package/dist/standards/index.mjs.map +1 -1
- package/dist/workflow/index.cjs +222 -21
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.mjs +222 -21
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +21 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/standards/frameworkPackSchema.ts","../../src/standards/standardsContextInjector.ts","../../src/standards/standardsCoverageGate.ts","../../src/standards/standardsRegistryAdapter.ts","../../src/standards/standardStackGenerator.ts","../../src/standards/data/csta-k12-2017.json","../../src/standards/bundledPacks.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * Framework Pack Schema v1.0 — Standards Registry interchange contract.\n *\n * A Framework Pack is a self-contained, schema-validated data bundle describing\n * ONE educational standard/framework (CSTA K-12, NGSS, GDPT 2018, an org's\n * internal standard, ...) in the lowest common denominator that virtually every\n * framework can map onto: a flat list of atomized statements + optional\n * classifications + optional mappings to the Ontora knowledge tree.\n *\n * Design invariants (see docs/ideas/2026-08-29-standards-registry-framework-pack.md):\n * - I1 Pack is DATA, never code. Importing a pack NEVER mutates the Ontora\n * Master Tree — mappings are reference bridges, resolved (not written).\n * - I2 Canonical statement text (verbatim) is immutable ground truth. Derived\n * fields (translations, keywords, bloom hints) carry their own provenance.\n * - I3 IDs are stable forever: keep the official source ID when present, else\n * mint once from content identity (never from row position).\n * - I4 gradeBand is canonical numeric (gradeModel normalizes grades/ages/bands).\n * - I5 Mappings use namespaced targets (ontora:CODE, csta:1B-AP-10, ...) and are\n * OPTIONAL — a pack with zero mappings still works (statement-only mode).\n * - I6 Everything is versioned: specVersion (this contract) vs contentVersion\n * (the framework's own content). Published content versions are immutable.\n */\n\n// ─── Shared primitives ───────────────────────────────────────────────────────\n\n/** Two-axis Bloom hint (Anderson & Krathwohl). Matches Ontora's dual-axis usage. */\nexport const BloomHintSchema = z.object({\n process: z\n .enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'])\n .describe('Cognitive process axis'),\n knowledge: z\n .enum(['FACTUAL', 'CONCEPTUAL', 'PROCEDURAL', 'METACOGNITIVE'])\n .optional()\n .describe('Knowledge dimension axis (optional — most source standards do not tag it)'),\n});\n\n/** How a record entered the pack — drives trust & review requirements. */\nexport const RecordProvenanceSchema = z.object({\n method: z\n .enum(['source_official', 'ai_draft', 'minted_from_content', 'human', 'crosswalk', 'imported'])\n .describe('source_official = copied from an authoritative machine-readable source; ai_draft = LLM-extracted, REQUIRES human review before activation; minted_from_content = ID synthesized because source has none; crosswalk = derived by the curriculum-crosswalk skill'),\n reviewedBy: z.string().optional().describe('Person/agent that approved this record (required for ai_draft records before activation)'),\n reviewedAt: z.string().optional().describe('ISO-8601 timestamp of review'),\n note: z.string().optional().describe('Free-form provenance note'),\n});\n\n/** Numeric grade band, canonical. [6, 6] = single grade 6; [6, 8] = band. */\nexport const GradeBandSchema = z\n .array(z.number().int().min(-1).max(30), { message: 'gradeBand must be [minGrade, maxGrade] integers' })\n .length(2)\n .refine(([min, max]) => min <= max, { message: 'gradeBand min must be <= max' })\n .describe('Canonical numeric grade band. -1 = kindergarten/pre-primary. Framework-specific models (VN grades, US bands, ages) normalize into this scale via manifest.gradeModel');\n\n/** Optional free-form classification axes (strand, NGSS dimension, \"Chủ đề\", ...). */\nexport const ClassificationSchema = z.object({\n axis: z.string().describe('Axis label, e.g. \"strand\", \"dimension\", \"Chủ đề\"'),\n value: z.string().describe('Value on that axis, e.g. \"AP\", \"Disciplinary Core Idea\", \"Thuật toán\"'),\n});\n\n// ─── Manifest ────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackManifestSchema = z.object({\n /** Immutable pack identifier. Never reused, never renamed. */\n id: z\n .string()\n .min(3)\n .regex(/^[a-z0-9][a-z0-9._-]*$/, 'pack id must be kebab/lowercase-safe (a-z 0-9 . _ -)')\n .describe('Immutable pack identifier, e.g. \"csta-k12-2017\", \"gdpt-2018-tin-hoc\", \"abc-tin-hoc\"'),\n name: z.string().min(1).describe('Human-readable framework name'),\n specVersion: z.literal('1.0').describe('Version of THIS pack contract (not the content)'),\n contentVersion: z\n .string()\n .min(1)\n .describe('Content version of the framework inside this pack. Bump on any content change; published versions are immutable'),\n subject: z.string().describe('Primary subject domain, e.g. \"computing\", \"science\", \"mathematics\"'),\n languages: z.array(z.string().min(2)).min(1).describe('BCP-47 language codes present in statement texts, e.g. [\"vi\"], [\"en\",\"vi\"]'),\n gradeModel: z.object({\n type: z.enum(['grades', 'ages', 'bands']).describe('grades = school grades (canonical numbers); ages = years old; bands = named developmental bands'),\n range: GradeBandSchema.describe('Overall grade range covered by the framework'),\n /** Optional normalization table when type != \"grades\" (e.g. band \"6-8\" -> [6,8]). */\n normalization: z\n .array(\n z.object({\n from: z.string().describe('Source label, e.g. \"level 6-8\" or \"11-13 years\"'),\n to: GradeBandSchema,\n })\n )\n .optional()\n .describe('Explicit label -> numeric band conversion table. Required when type != \"grades\"'),\n }),\n provenance: z.object({\n sourceRef: z.string().describe('Citation of the official source, e.g. \"Thông tư 32/2018/TT-BGDĐT\" or a URL'),\n sourceUrl: z.string().optional().describe('Canonical URL of the source document or live registry'),\n license: z.string().describe('License / usage rights of the source text'),\n importedBy: z.string().describe('Who produced this pack, e.g. \"platform\" or \"org:abc\"'),\n importedAt: z.string().describe('ISO-8601 timestamp'),\n originalFileHash: z.string().optional().describe('SHA-256 of the original uploaded file, for source provenance'),\n }),\n trust: z.enum(['verified', 'org']).default('org').describe('verified = platform-curated; org = self-served by an org. Generation accepts both; compliance reporting counts verified only'),\n});\n\n// ─── Statement ───────────────────────────────────────────────────────────────\n\nexport const FrameworkStatementSchema = z.object({\n /** Canonical, forever-stable statement ID (see invariant I3). */\n id: z\n .string()\n .min(2)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/, 'statement id must not contain whitespace or separators beyond . _ : -')\n .describe('Statement ID. Official source ID when present (e.g. \"1B-AP-10\"); otherwise minted once from content identity. Namespaced at query time by the pack id, never stored with prefix duplication'),\n /** Optional hierarchical parent within the SAME pack (GDPT competence → requirement, CSTA strand → statement, ...). */\n parentId: z.string().optional().describe('Parent statement id within this pack, when the source framework is hierarchical'),\n gradeBand: GradeBandSchema,\n /** Verbatim canonical text per language. The FIRST / primary language text is judge ground truth (invariant I2). */\n texts: z\n .record(z.string().min(2), z.string().min(1))\n .refine((t) => Object.keys(t).length > 0, { message: 'texts must contain at least one language entry' })\n .describe('Verbatim statement text per BCP-47 language key, e.g. {\"vi\": \"Yêu cầu cần đạt...\"}. NEVER paraphrase into these fields'),\n classifications: z.array(ClassificationSchema).optional().default([]).describe('Optional taxonomy axes from the source framework (strands, dimensions, themes...)'),\n bloomHint: BloomHintSchema.optional().describe('Optional Bloom dual-axis hint — a HINT for generation, never a binding claim about the source'),\n keywords: z.array(z.string()).optional().default([]).describe('Retrieval keywords (topic terms). Used by standards retrieval AND by crosswalk theme matching — keep them dense'),\n sourceRef: z.string().optional().describe('Precise citation within the source, e.g. \"Trang 24, Môn Tin học lớp 6\"'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Mapping bridge (pack → Ontora interlingua) ─────────────────────────────\n\nexport const MappingKindSchema = z.enum(['covers', 'partial', 'extends']).describe('covers = the statement is fully taught when the concept is covered (ONLY \"covers\" counts toward compliance coverage); partial = overlaps partially; extends = statement goes beyond the concept');\n\nexport const FrameworkMappingSchema = z.object({\n statementId: z.string().describe('Must reference a statement id in this pack'),\n /** Namespaced target. Grammar: <namespace>:<ID>. e.g. \"ontora:WHILE_LOOP\", \"ontora:PROBLEM_DECOMPOSITION\". Resolved against the target registry at intake — unknown targets FAIL validation. */\n targetRef: z.string().refine((v) => /^[a-z][a-z0-9]*:[A-Za-z0-9][A-Za-z0-9._-]*$/.test(v), 'targetRef must be \"<namespace>:<ID>\", e.g. \"ontora:FOR_LOOP\"'),\n kind: MappingKindSchema,\n confidence: z.number().min(0).max(1).describe('0-1 confidence of this mapping'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackSchema = z.object({\n manifest: FrameworkPackManifestSchema,\n statements: z.array(FrameworkStatementSchema).min(1).describe('Atomized statements of the framework'),\n mappings: z.array(FrameworkMappingSchema).optional().default([]).describe('Optional bridges to the Ontora knowledge tree (statement-only packs are fully functional)'),\n});\n\nexport type FrameworkPack = z.infer<typeof FrameworkPackSchema>;\nexport type FrameworkPackManifest = z.infer<typeof FrameworkPackManifestSchema>;\nexport type FrameworkStatement = z.infer<typeof FrameworkStatementSchema>;\nexport type FrameworkMapping = z.infer<typeof FrameworkMappingSchema>;\nexport type MappingKind = z.infer<typeof MappingKindSchema>;\nexport type RecordProvenance = z.infer<typeof RecordProvenanceSchema>;\n\n// ─── Pack lint (beyond field-level Zod checks) ───────────────────────────────\n\nexport interface PackLintIssue {\n severity: 'ERROR' | 'WARNING';\n code: string;\n message: string;\n /** statement id or manifest path the issue refers to */\n ref?: string;\n}\n\n/** Minimum token-overlap ratio for the fuzzy duplicate warning. */\nconst DUP_OVERLAP_RATIO = 0.8;\n\n/**\n * Deterministic structural lint over an already schema-valid pack.\n * Pure function: no I/O, no LLM. Mirrors the ontora validator philosophy —\n * assembly/validation is code, research/judgment is model.\n */\nexport function lintFrameworkPack(pack: FrameworkPack): PackLintIssue[] {\n const issues: PackLintIssue[] = [];\n const statements = pack.statements;\n const ids = new Set<string>();\n\n for (const s of statements) {\n // L1 duplicate ids\n if (ids.has(s.id)) {\n issues.push({ severity: 'ERROR', code: 'DUP_ID', message: `Duplicate statement id \"${s.id}\"`, ref: s.id });\n }\n ids.add(s.id);\n }\n\n for (const s of statements) {\n // L2 parent existence\n if (s.parentId && !ids.has(s.parentId)) {\n issues.push({ severity: 'ERROR', code: 'PARENT_MISSING', message: `parentId \"${s.parentId}\" does not exist in this pack`, ref: s.id });\n }\n // L3 empty-ish text\n for (const [lang, text] of Object.entries(s.texts)) {\n if (!text || text.trim().length < 8) {\n issues.push({ severity: 'ERROR', code: 'TEXT_TOO_SHORT', message: `\"${lang}\" text is empty or shorter than 8 characters`, ref: s.id });\n }\n }\n // L4 grade band sanity: empty band inside manifest range is fine, but warn outside manifest range\n const [min, max] = s.gradeBand;\n const [gMin, gMax] = pack.manifest.gradeModel.range;\n if (min < gMin || max > gMax) {\n issues.push({ severity: 'WARNING', code: 'BAND_OUT_OF_RANGE', message: `gradeBand [${min},${max}] falls outside manifest range [${gMin},${gMax}]`, ref: s.id });\n }\n // L5 ai_draft without reviewer\n if (s.provenance.method === 'ai_draft' && !s.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: 'ai_draft record has no reviewedBy — human review required before activation', ref: s.id });\n }\n // L6 keywords recommended\n if (!s.keywords || s.keywords.length === 0) {\n issues.push({ severity: 'WARNING', code: 'NO_KEYWORDS', message: 'No keywords — statement will be hard to retrieve and to crosswalk', ref: s.id });\n }\n }\n\n // L7 fuzzy duplicate texts (same language)\n const seen = new Map<string, string>();\n for (const s of statements) {\n const primaryLang = pack.manifest.languages[0];\n const text = s.texts[primaryLang];\n if (!text) continue;\n const norm = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s]/gu, ' ').split(/\\s+/).filter((w) => w.length > 2).sort().join(' ');\n if (!norm) continue;\n const prev = seen.get(norm);\n if (prev !== undefined) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_EXACT', message: `Text is token-identical to statement \"${prev}\"`, ref: s.id });\n } else {\n // token-overlap fuzzy pass (O(n^2) avoided via sorted-token key bucketing)\n for (const [otherNorm, otherId] of seen.entries()) {\n const a = new Set(norm.split(' '));\n const b = new Set(otherNorm.split(' '));\n let inter = 0;\n for (const w of a) if (b.has(w)) inter++;\n const ratio = inter / Math.max(a.size, b.size);\n if (ratio >= DUP_OVERLAP_RATIO) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_FUZZY', message: `Text ~${Math.round(ratio * 100)}% overlapping with statement \"${otherId}\"`, ref: s.id });\n break;\n }\n }\n seen.set(norm, s.id);\n }\n }\n\n // L8 mapping integrity\n for (const m of pack.mappings ?? []) {\n if (!ids.has(m.statementId)) {\n issues.push({ severity: 'ERROR', code: 'MAP_STATEMENT_MISSING', message: `mapping references unknown statementId \"${m.statementId}\"`, ref: m.statementId });\n }\n if (m.provenance.method === 'ai_draft' && !m.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: `mapping to ${m.targetRef} is ai_draft without reviewedBy`, ref: m.statementId });\n }\n if (m.kind === 'covers' && m.confidence < 0.5) {\n issues.push({ severity: 'WARNING', code: 'COVERS_LOW_CONFIDENCE', message: `kind=\"covers\" with confidence ${m.confidence} < 0.5 — consider \"partial\"`, ref: m.statementId });\n }\n }\n\n return issues;\n}\n\nexport interface PackValidationResult {\n valid: boolean;\n schemaErrors: string[];\n lint: PackLintIssue[];\n stats: {\n statements: number;\n mappings: number;\n coveredStatements: number;\n statementOnlyStatements: number;\n gradeRange: [number, number];\n };\n}\n\n/**\n * Full validation: Zod schema → deterministic lint.\n * Does NOT resolve ontora targets (network/DB concern, layered separately).\n */\nexport function validateFrameworkPack(input: unknown): PackValidationResult {\n const parsed = FrameworkPackSchema.safeParse(input);\n if (!parsed.success) {\n return {\n valid: false,\n schemaErrors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),\n lint: [],\n stats: { statements: 0, mappings: 0, coveredStatements: 0, statementOnlyStatements: 0, gradeRange: [0, 0] },\n };\n }\n const pack = parsed.data;\n const lint = lintFrameworkPack(pack);\n const covered = new Set((pack.mappings ?? []).map((m) => m.statementId));\n const bands = pack.statements.map((s) => s.gradeBand);\n return {\n valid: lint.every((i) => i.severity !== 'ERROR'),\n schemaErrors: [],\n lint,\n stats: {\n statements: pack.statements.length,\n mappings: pack.mappings?.length ?? 0,\n coveredStatements: covered.size,\n statementOnlyStatements: pack.statements.length - covered.size,\n gradeRange: [Math.min(...bands.flat()), Math.max(...bands.flat())],\n },\n };\n}\n","import type { FrameworkPack, FrameworkStatement } from './frameworkPackSchema';\n\n/**\n * Standards Context Injector — Grounding layer (tầng 1 của cơ chế bám chuẩn).\n *\n * Selects the standard statements RELEVANT to a lesson (by grade band overlap +\n * keyword/concept match) and renders them as a prompt context block containing\n * VERBATIM canonical text. The model must SEE the real standard text — prompt\n * labels like \"operating under CSTA\" are exactly the anti-pattern this replaces.\n *\n * Pure function: pack data in, markdown block out. No I/O, no LLM.\n */\n\nexport interface StandardsSelectionInput {\n /** Packs adopted by the org / course (already validated + activated). */\n packs: FrameworkPack[];\n /** Lesson grade level or band, canonical numeric (single grade or [min,max]). */\n gradeBand: [number, number] | number;\n /** Lesson topic text: title + concept names + keywords. Matched against statement keywords + texts. */\n topicText: string;\n /** Optional explicit ontora concept codes for the lesson (concept_code from MilestoneInput). */\n conceptCodes?: string[];\n /** Hard cap on injected statements to protect the context budget. */\n maxStatements?: number;\n}\n\nexport interface SelectedStatement {\n packId: string;\n statement: FrameworkStatement;\n score: number;\n matchedBy: Array<'band' | 'keyword' | 'concept' | 'text'>;\n}\n\nconst DEFAULT_MAX_STATEMENTS = 20;\n\nfunction normalizeBand(band: [number, number] | number): [number, number] {\n return Array.isArray(band) ? band : [band, band];\n}\n\nfunction tokenize(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}\\s]/gu, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 2)\n );\n}\n\n/**\n * Rank + select statements for a lesson.\n * Scoring: band overlap is a GATE (statements outside the grade are dropped),\n * keyword/concept/text overlap is the ranking signal.\n */\nexport function selectStatementsForLesson(input: StandardsSelectionInput): SelectedStatement[] {\n const max = input.maxStatements ?? DEFAULT_MAX_STATEMENTS;\n const lessonBand = normalizeBand(input.gradeBand);\n const lessonTokens = tokenize(input.topicText);\n const conceptSet = new Set((input.conceptCodes ?? []).map((c) => c.toUpperCase().trim()).filter(Boolean));\n\n const candidates: SelectedStatement[] = [];\n\n for (const pack of input.packs) {\n for (const statement of pack.statements) {\n // Band gate: must overlap the lesson band\n const [sMin, sMax] = statement.gradeBand;\n const overlaps = Math.max(sMin, lessonBand[0]) <= Math.min(sMax, lessonBand[1]);\n if (!overlaps) continue;\n\n const matchedBy: SelectedStatement['matchedBy'] = ['band'];\n let score = 1;\n\n // Keyword match (primary signal — keywords are REQUIRED to be dense by pack lint)\n const kwTokens = new Set(statement.keywords.map((k) => k.toLowerCase()));\n let kwHits = 0;\n for (const t of lessonTokens) if (kwTokens.has(t)) kwHits++;\n if (kwHits > 0) {\n matchedBy.push('keyword');\n score += 2 + kwHits * 0.5;\n }\n\n // Concept code match (statement keyword equals an ontora concept code)\n if (conceptSet.size > 0) {\n for (const k of statement.keywords) {\n if (conceptSet.has(k.toUpperCase().replace(/\\s+/g, '_'))) {\n matchedBy.push('concept');\n score += 3;\n break;\n }\n }\n }\n\n // Raw text-token overlap (fallback signal)\n let textHits = 0;\n for (const lang of Object.keys(statement.texts)) {\n const st = tokenize(statement.texts[lang]);\n for (const t of lessonTokens) if (st.has(t)) textHits++;\n }\n if (textHits >= 2) {\n matchedBy.push('text');\n score += Math.min(2, textHits * 0.2);\n }\n\n if (score > 1) candidates.push({ packId: pack.manifest.id, statement, score, matchedBy });\n }\n }\n\n return candidates.sort((a, b) => b.score - a.score).slice(0, max);\n}\n\n/**\n * Render the STANDARDS CONTEXT prompt block (verbatim statements + binding rules).\n * Mirrors the shape of the proven CUMULATIVE CONTEXT block in lessonMasterPrompt.\n */\nexport function buildStandardsContextBlock(selected: SelectedStatement[], opts?: { language?: string }): string {\n if (selected.length === 0) return '';\n\n const lang = opts?.language;\n const rows = selected\n .map(({ packId, statement }) => {\n const text = (lang && statement.texts[lang]) || Object.values(statement.texts)[0];\n const band = statement.gradeBand[0] === statement.gradeBand[1] ? `L${statement.gradeBand[0]}` : `L${statement.gradeBand[0]}-L${statement.gradeBand[1]}`;\n return `- [${packId}:${statement.id} | ${band}] \"${text}\"`;\n })\n .join('\\n');\n\n return [\n '# STANDARDS CONTEXT (SOURCE OF TRUTH — VERBATIM STATEMENTS)',\n '',\n 'The statements below are COPIED VERBATIM from official/framework standard documents adopted for this course.',\n 'They are BINDING targets, not suggestions:',\n '- Every Learning Objective you write MUST be anchored to one or more statement IDs above via standardRefs.',\n '- You MUST use ONLY statement IDs from this list. NEVER invent, paraphrase IDs, or cite standards not present here.',\n '- The statement TEXT is the required destination: activities and assessments must demonstrably lead a learner to it.',\n '- The statement is the DESTINATION, not a script: you may extend beyond it, but you may not skip or contradict it.',\n '',\n '## Statement list',\n rows,\n ].join('\\n');\n}\n\n/**\n * One-call convenience: packs + lesson info → context block (empty string if nothing matches).\n */\nexport function buildStandardsContext(\n input: StandardsSelectionInput & { language?: string }\n): { block: string; selected: SelectedStatement[] } {\n const selected = selectStatementsForLesson(input);\n return { block: buildStandardsContextBlock(selected, { language: input.language }), selected };\n}\n","import type { FrameworkPack } from './frameworkPackSchema';\n\n/**\n * Standards Coverage Gate — Verification layer (tầng 3 của cơ chế bám chuẩn).\n *\n * Deterministic coverage matrix across the generation chain:\n * standard statement → learning objective → lesson activities → quiz questions\n *\n * Philosophy: \"bám chuẩn\" must be enforced by CODE, not by prompt goodwill.\n * A statement mapped with kind=\"covers\" that has no LO / no activity / no\n * assessment = a compliance hole, reported with an actionable repair hint.\n *\n * Pure function over already-generated artifacts. No LLM, no I/O.\n */\n\nexport interface CoverageGateInput {\n packs: FrameworkPack[];\n /** Learning objectives as generated (code + optional standardRefs anchoring). */\n objectives: Array<{\n code: string;\n standardRefs?: string[];\n conceptRefs?: string[];\n }>;\n /** activitySequence rows of the lesson (lo codes link activities to LOs). Optional: omitted when no structured activity-LO linkage is available. */\n activities?: Array<{ seq?: number; lo: string[] }>;\n /** Quiz questions; each links to assessment objectives → alignedLO. */\n quizQuestions: Array<{ alignedLO?: string; alignedAO?: string }>;\n /** Assessment objectives table (AO → alignedLO). Questions may reference AOs only. */\n assessmentObjectives?: Array<{ aoCode: string; alignedLO: string }>;\n}\n\nexport interface StatementCoverageRow {\n packId: string;\n statementId: string;\n statementText: string;\n status: 'COVERED' | 'PARTIAL' | 'UNCOVERED' | 'UNMAPPED';\n objectives: string[];\n hasActivity: boolean;\n hasAssessment: boolean;\n issues: string[];\n}\n\nexport interface CoverageGateReport {\n verdict: 'PASS' | 'WARN' | 'FAIL';\n coveragePct: number;\n rows: StatementCoverageRow[];\n summary: string;\n rawMarkdownReport: string;\n}\n\n/** statementRef formats accepted in standardRefs: \"1B-AP-10\" or \"csta-k12-2017:1B-AP-10\". */\nfunction resolveStatementRef(ref: string, packs: FrameworkPack[]): { pack: FrameworkPack; statementId: string } | null {\n const [head, ...rest] = ref.split(':');\n const candidatePacks = rest.length > 0 ? packs.filter((p) => p.manifest.id === head) : packs;\n const statementId = rest.length > 0 ? rest.join(':') : ref;\n for (const p of candidatePacks) {\n if (p.statements.some((s) => s.id === statementId)) return { pack: p, statementId };\n }\n return null;\n}\n\nexport function evaluateStandardsCoverage(input: CoverageGateInput): CoverageGateReport {\n const rows: StatementCoverageRow[] = [];\n\n // AO → LO resolution map\n const aoToLo = new Map<string, string>();\n for (const ao of input.assessmentObjectives ?? []) aoToLo.set(ao.aoCode, ao.alignedLO);\n\n // LO → covered statements (explicit anchors)\n const loToRefs = new Map<string, Set<string>>();\n for (const lo of input.objectives) {\n loToRefs.set(lo.code, new Set(lo.standardRefs ?? []));\n }\n\n // LOs actually taught (activities) and assessed (quiz, via direct alignedLO or AO table)\n const taughtLOs = new Set<string>();\n for (const act of input.activities ?? []) for (const lo of act.lo) taughtLOs.add(lo);\n const assessedLOs = new Set<string>();\n for (const q of input.quizQuestions) {\n if (q.alignedLO) assessedLOs.add(q.alignedLO);\n if (q.alignedAO) {\n const lo = aoToLo.get(q.alignedAO);\n if (lo) assessedLOs.add(lo);\n }\n }\n\n for (const pack of input.packs) {\n const mappingByStatement = new Map<string, string>();\n for (const m of pack.mappings ?? []) {\n // first mapping wins for kind resolution; \"covers\" beats \"partial\" beats \"extends\"\n const prev = mappingByStatement.get(m.statementId);\n if (!prev || (prev !== 'covers' && m.kind === 'covers') || (prev === 'extends' && m.kind !== 'extends')) {\n mappingByStatement.set(m.statementId, m.kind);\n }\n }\n\n for (const statement of pack.statements) {\n const refFull = `${pack.manifest.id}:${statement.id}`;\n const issues: string[] = [];\n\n // Objectives anchored to this statement\n const los = input.objectives\n .filter((lo) => (lo.standardRefs ?? []).some((r) => r === statement.id || r === refFull))\n .map((lo) => lo.code);\n\n const kind = mappingByStatement.get(statement.id);\n const hasMapping = kind !== undefined;\n const isComplianceRelevant = kind === 'covers';\n\n const hasActivity = los.some((lo) => taughtLOs.has(lo));\n const hasAssessment = los.some((lo) => assessedLOs.has(lo));\n\n let status: StatementCoverageRow['status'];\n if (!hasMapping) status = 'UNMAPPED';\n else if (!isComplianceRelevant) status = 'PARTIAL';\n else if (los.length > 0 && hasActivity && hasAssessment) status = 'COVERED';\n else status = 'UNCOVERED';\n\n if (status === 'UNCOVERED') {\n if (los.length === 0) issues.push('No learning objective anchors this statement (missing standardRefs).');\n else {\n if (!hasActivity) issues.push(`Anchored LO(s) ${los.join(', ')} have no activity in lesson flow.`);\n if (!hasAssessment) issues.push(`Anchored LO(s) ${los.join(', ')} are not measured by any quiz question.`);\n }\n }\n\n rows.push({\n packId: pack.manifest.id,\n statementId: statement.id,\n statementText: Object.values(statement.texts)[0] ?? '',\n status,\n objectives: los,\n hasActivity,\n hasAssessment,\n issues,\n });\n }\n }\n\n // Unresolvable refs (typo / hallucinated IDs) — reported as issues on no row\n for (const lo of input.objectives) {\n for (const r of lo.standardRefs ?? []) {\n if (!resolveStatementRef(r, input.packs)) {\n rows.push({\n packId: '(unresolved)',\n statementId: r,\n statementText: '',\n status: 'UNCOVERED',\n objectives: [lo.code],\n hasActivity: false,\n hasAssessment: false,\n issues: [`standardRef \"${r}\" does not exist in any adopted pack — likely a hallucinated or stale ID`],\n });\n }\n }\n }\n\n const complianceRows = rows.filter((r) => r.status !== 'UNMAPPED' && r.status !== 'PARTIAL');\n const covered = complianceRows.filter((r) => r.status === 'COVERED').length;\n const coveragePct = complianceRows.length === 0 ? 100 : Math.round((covered / complianceRows.length) * 100);\n const unresolvedCount = rows.filter((r) => r.packId === '(unresolved)').length;\n\n const verdict: CoverageGateReport['verdict'] =\n unresolvedCount > 0 || coveragePct < 60 ? 'FAIL' : coveragePct < 100 ? 'WARN' : 'PASS';\n\n const lines: string[] = [\n '# Standards Coverage Report',\n '',\n `- Verdict: **${verdict}**`,\n `- Compliance coverage: **${coveragePct}%** (${covered}/${complianceRows.length} \"covers\" statements fully taught + assessed)`,\n `- Unresolved standardRefs: ${unresolvedCount}`,\n '',\n '| Pack | Statement | Status | LOs | Activity | Assessment |',\n '|---|---|---|---|---|---|',\n ...rows.map(\n (r) =>\n `|${r.packId}|${r.statementId}|${r.status}|${r.objectives.join(', ') || '—'}|${r.hasActivity ? '✓' : '✗'}|${r.hasAssessment ? '✓' : '✗'}|`\n ),\n ];\n const issueLines = rows.filter((r) => r.issues.length > 0).flatMap((r) => r.issues.map((i) => `- [${r.packId}:${r.statementId}] ${i}`));\n if (issueLines.length > 0) lines.push('', '## Issues', ...issueLines);\n\n return {\n verdict,\n coveragePct,\n rows,\n summary: `Standards coverage ${coveragePct}% — verdict ${verdict}`,\n rawMarkdownReport: lines.join('\\n'),\n };\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport {\n FrameworkPackSchema,\n type FrameworkPack,\n type FrameworkMapping,\n type FrameworkStatement,\n} from './frameworkPackSchema';\n\n/**\n * Standards Registry Adapter — Supabase-backed runtime plane for Framework Packs.\n *\n * Read path (generation): loadPacksForCourse() → FrameworkPack[] hydrated from\n * standards_frameworks + standards_statements + standards_mappings (+ overrides\n * applied with resolution order override > pack-embedded, 'retired' removes).\n * Write path (intake): importPack() persists a validated pack; adopt/deprecate\n * manage lifecycle. Write access uses a service-role client (intake runs\n * server-side); RLS governs client-side reads.\n */\n\nexport interface StandardsRegistryConfig {\n supabaseUrl?: string;\n supabaseServiceRoleKey?: string;\n supabaseAnonKey?: string;\n client?: SupabaseClient;\n}\n\nexport interface HydratedPack extends FrameworkPack {\n /** DB id of the standards_frameworks row */\n dbId: string;\n status: 'draft' | 'active' | 'deprecated';\n organizationCode: string | null;\n}\n\nexport interface ImportPackResult {\n frameworkDbId: string;\n statementsInserted: number;\n mappingsInserted: number;\n}\n\nexport class StandardsRegistryAdapter {\n private client: SupabaseClient;\n\n constructor(config: StandardsRegistryConfig = {}) {\n if (config.client) {\n this.client = config.client;\n return;\n }\n const url = config.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL || '';\n const key =\n config.supabaseServiceRoleKey ||\n process.env.SUPABASE_SERVICE_ROLE_KEY ||\n config.supabaseAnonKey ||\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ||\n '';\n if (!url || !key) {\n throw new Error('StandardsRegistryAdapter: Supabase URL/key missing (pass client or env).');\n }\n this.client = createClient(url, key);\n }\n\n // ─── Intake (write path — service role) ───────────────────────────────────\n\n /** Persist a schema-validated pack as a new framework (status=draft). */\n async importPack(pack: FrameworkPack, opts?: { organizationCode?: string | null; createdBy?: string; originalFilePath?: string }): Promise<ImportPackResult> {\n const parsed = FrameworkPackSchema.safeParse(pack);\n if (!parsed.success) {\n throw new Error('importPack: pack failed schema validation: ' + parsed.error.issues.map((i) => i.path.join('.') + ': ' + i.message).join('; '));\n }\n const p = parsed.data;\n\n const { data: fw, error: fwErr } = await this.client\n .from('standards_frameworks')\n .insert({\n pack_id: p.manifest.id,\n content_version: p.manifest.contentVersion,\n name: p.manifest.name,\n spec_version: p.manifest.specVersion,\n subject: p.manifest.subject,\n languages: p.manifest.languages,\n grade_model: p.manifest.gradeModel,\n provenance: p.manifest.provenance,\n trust: p.manifest.trust,\n status: 'draft',\n organization_code: opts?.organizationCode ?? (p.manifest.trust === 'verified' ? null : p.manifest.provenance.importedBy?.replace(/^org:/, '') || null),\n original_file_path: opts?.originalFilePath ?? null,\n created_by: opts?.createdBy ?? null,\n })\n .select('id')\n .single();\n if (fwErr) throw new Error('importPack: framework insert failed: ' + fwErr.message);\n\n const frameworkId = fw.id as string;\n\n const statementRows = p.statements.map((s: FrameworkStatement) => ({\n framework_id: frameworkId,\n statement_id: s.id,\n parent_statement_id: s.parentId ?? null,\n grade_min: s.gradeBand[0],\n grade_max: s.gradeBand[1],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloom_hint: s.bloomHint ?? null,\n keywords: s.keywords ?? [],\n source_ref: s.sourceRef ?? null,\n provenance: s.provenance,\n }));\n\n const { error: stErr, count: stCount } = await this.client\n .from('standards_statements')\n .insert(statementRows, { count: 'exact' });\n if (stErr) throw new Error('importPack: statement insert failed: ' + stErr.message);\n\n let mappingCount = 0;\n if (p.mappings && p.mappings.length > 0) {\n const mappingRows = p.mappings.map((m: FrameworkMapping) => ({\n framework_id: frameworkId,\n statement_id: m.statementId,\n target_ref: m.targetRef,\n kind: m.kind,\n confidence: m.confidence,\n provenance: m.provenance,\n }));\n const { error: mpErr, count: mpCount } = await this.client\n .from('standards_mappings')\n .insert(mappingRows, { count: 'exact' });\n if (mpErr) throw new Error('importPack: mapping insert failed: ' + mpErr.message);\n mappingCount = mpCount ?? mappingRows.length;\n }\n\n return { frameworkDbId: frameworkId, statementsInserted: stCount ?? statementRows.length, mappingsInserted: mappingCount };\n }\n\n /** Activate a draft framework (immutable version is now live). */\n async activatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'active' })\n .eq('id', frameworkDbId)\n .eq('status', 'draft');\n if (error) throw new Error('activatePack failed: ' + error.message);\n }\n\n async deprecatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'deprecated' })\n .eq('id', frameworkDbId);\n if (error) throw new Error('deprecatePack failed: ' + error.message);\n }\n\n async adoptPack(frameworkDbId: string, organizationCode: string, adoptedBy?: string): Promise<void> {\n const { error } = await this.client.from('standards_org_adoptions').upsert(\n { framework_id: frameworkDbId, organization_code: organizationCode, adopted_by: adoptedBy ?? null },\n { onConflict: 'organization_code,framework_id' }\n );\n if (error) throw new Error('adoptPack failed: ' + error.message);\n }\n\n // ─── Runtime (read path — generation) ─────────────────────────────────────\n\n /**\n * Load all packs usable by an org: platform packs (verified, org IS NULL) +\n * org packs + org adoptions. Hydrated into the same FrameworkPack shape the\n * in-memory Phase-1 components consume (injector / coverage gate / judge).\n */\n async loadPacksForOrg(organizationCode: string | null): Promise<HydratedPack[]> {\n // Visible frameworks = platform (org NULL, active) OR org-owned OR adopted\n let query = this.client\n .from('standards_frameworks')\n .select('*, standards_org_adoptions(organization_code)')\n .eq('status', 'active');\n const { data: frameworks, error } = await query;\n if (error) throw new Error('loadPacksForOrg: ' + error.message);\n\n const visible = (frameworks ?? []).filter((f: any) => {\n const own = f.organization_code && organizationCode && f.organization_code === organizationCode;\n const global = !f.organization_code;\n const adopted = organizationCode && (f.standards_org_adoptions ?? []).some((a: any) => a.organization_code === organizationCode);\n return global || own || adopted;\n });\n\n if (visible.length === 0) return [];\n\n const ids = visible.map((f: any) => f.id);\n const [{ data: statements, error: stErr }, { data: mappings, error: mpErr }, { data: overrides, error: ovErr }] = await Promise.all([\n this.client.from('standards_statements').select('*').in('framework_id', ids),\n this.client.from('standards_mappings').select('*').in('framework_id', ids),\n this.client.from('standards_mapping_overrides').select('*').in('framework_id', ids),\n ]);\n if (stErr) throw new Error('loadPacksForOrg statements: ' + stErr.message);\n\n const overridesByFw = new Map<string, any[]>();\n for (const o of overrides ?? []) {\n const list = overridesByFw.get(o.framework_id) ?? [];\n list.push(o);\n overridesByFw.set(o.framework_id, list);\n }\n\n return visible.map((f: any) => {\n const stmts = (statements ?? [])\n .filter((s: any) => s.framework_id === f.id)\n .map((s: any) => ({\n id: s.statement_id,\n parentId: s.parent_statement_id ?? undefined,\n gradeBand: [s.grade_min, s.grade_max] as [number, number],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloomHint: s.bloom_hint ?? undefined,\n keywords: s.keywords ?? [],\n sourceRef: s.source_ref ?? undefined,\n provenance: s.provenance ?? { method: 'imported' },\n }));\n\n // Resolution order: override (unless retired) > pack-embedded\n const ov = overridesByFw.get(f.id) ?? [];\n const retired = new Set(ov.filter((o: any) => o.kind === 'retired').map((o: any) => o.statement_id + '|' + o.target_ref));\n const embedded: FrameworkMapping[] = (mappings ?? [])\n .filter((m: any) => m.framework_id === f.id)\n .map((m: any) => ({\n statementId: m.statement_id,\n targetRef: m.target_ref,\n kind: m.kind,\n confidence: Number(m.confidence),\n provenance: m.provenance ?? { method: 'imported' },\n }));\n const overlay: FrameworkMapping[] = ov\n .filter((o: any) => o.kind !== 'retired')\n .map((o: any) => ({\n statementId: o.statement_id,\n targetRef: o.target_ref,\n kind: o.kind,\n confidence: Number(o.confidence),\n provenance: { method: 'human', reviewedBy: o.created_by ?? 'overlay', note: o.note ?? undefined },\n }));\n\n const bridge = new Map<string, FrameworkMapping>();\n for (const m of embedded) bridge.set(m.statementId + '|' + m.targetRef, m);\n for (const m of overlay) bridge.set(m.statementId + '|' + m.targetRef, m);\n const finalMappings = [...bridge.values()].filter((m) => !retired.has(m.statementId + '|' + m.targetRef));\n\n const hydrated = FrameworkPackSchema.safeParse({\n manifest: {\n id: f.pack_id,\n name: f.name,\n specVersion: f.spec_version || '1.0',\n contentVersion: f.content_version,\n subject: f.subject,\n languages: f.languages,\n gradeModel: f.grade_model,\n provenance: f.provenance,\n trust: f.trust,\n },\n statements: stmts,\n mappings: finalMappings,\n });\n if (!hydrated.success) {\n throw new Error('loadPacksForOrg: hydrated pack \"' + f.pack_id + '\" failed schema: ' + hydrated.error.issues[0]?.message);\n }\n\n return { ...hydrated.data, dbId: f.id, status: f.status, organizationCode: f.organization_code ?? null } as HydratedPack;\n });\n }\n}\n","import type { FrameworkPack } from '../standards/frameworkPackSchema';\n\n/**\n * Deterministic STANDARD_STACK.md generator (Phase 2).\n *\n * Replaces the old anti-pattern where @researcher was asked to \"cite authentic\n * standards\" from memory (hallucinated IDs). The SOT document is now RENDERED\n * from the Standards Registry packs adopted for the course — verbatim statements,\n * canonical IDs, zero LLM involvement.\n */\nexport interface StandardStackOptions {\n projectId: string;\n packs: FrameworkPack[];\n /** Overall course grade band (canonical numeric) for coverage scoping. */\n courseGradeBand?: [number, number];\n language?: string;\n}\n\nfunction bandLabel(band: readonly number[]): string {\n return band[0] === band[1] ? `L${band[0]}` : `L${band[0]}–L${band[1]}`;\n}\n\nexport function buildStandardStackMarkdown(opts: StandardStackOptions): string {\n const { projectId, packs, courseGradeBand, language } = opts;\n const lines: string[] = [];\n\n lines.push('---');\n lines.push(`id: \"${projectId.toUpperCase()}-STANDARD-STACK\"`);\n lines.push(`title: \"Standard Stack: ${projectId}\"`);\n lines.push('type: \"STANDARD_STACK\"');\n lines.push('phase: \"P1\"');\n lines.push('version: \"v2.0-deterministic\"');\n lines.push(`generatedAt: \"${new Date().toISOString()}\"`);\n lines.push('source: \"Standards Registry (deterministic render — not LLM-generated)\"');\n lines.push('---');\n lines.push('');\n lines.push('# STANDARD STACK — Hệ tiêu chuẩn tham chiếu');\n lines.push('');\n\n if (packs.length === 0) {\n lines.push('> ⚠️ No Framework Pack adopted for this course. Generation will run WITHOUT standards grounding');\n lines.push('> (no statement anchoring, no Standards Alignment judge dimension, no coverage gate).');\n lines.push('> Import a pack via the Standards Registry before generating for standards-bound courses.');\n return lines.join('\\n');\n }\n\n for (const pack of packs) {\n const m = pack.manifest;\n lines.push(`## ${m.name}`);\n lines.push('');\n lines.push(`- **Pack ID:** \\`${m.id}\\` (content ${m.contentVersion}, contract v${m.specVersion})`);\n lines.push(`- **Trust:** ${m.trust} — ${m.trust === 'verified' ? 'platform-curated' : 'org-imported'}`);\n lines.push(`- **Nguồn:** ${m.provenance.sourceRef}${m.provenance.sourceUrl ? ' (' + m.provenance.sourceUrl + ')' : ''}`);\n lines.push(`- **License:** ${m.provenance.license}`);\n lines.push(`- **Grade range (manifest):** ${bandLabel(m.gradeModel.range)}`);\n lines.push('');\n lines.push('### Statements (verbatim — binding targets)');\n lines.push('');\n lines.push('| ID | Band | Text (verbatim) | Keywords |');\n lines.push('|---|---|---|---|');\n\n const statements = courseGradeBand\n ? pack.statements.filter((s) => Math.max(s.gradeBand[0], courseGradeBand[0]) <= Math.min(s.gradeBand[1], courseGradeBand[1]))\n : pack.statements;\n\n for (const s of statements) {\n const text = (language && s.texts[language]) || Object.values(s.texts)[0];\n const mapped = (pack.mappings ?? []).filter((mp) => mp.statementId === s.id);\n const mapNote = mapped.length > 0 ? ` → ${mapped.map((mp) => mp.targetRef + ' (' + mp.kind + ')').join(', ')}` : '';\n lines.push(`| \\`${s.id}\\` | ${bandLabel(s.gradeBand)} | ${text.replace(/\\|/g, '\\\\|')} | ${(s.keywords || []).join(', ')}${mapNote ? ' |' + mapNote : ' |'}`);\n }\n lines.push('');\n }\n\n lines.push('---');\n lines.push('');\n lines.push('*Document rendered deterministically from the Standards Registry. Statement texts are COPIED VERBATIM from the cited sources and are binding for generation, judging, and coverage reporting.*');\n return lines.join('\\n');\n}\n","{\n \"manifest\": {\n \"id\": \"csta-k12-2017\",\n \"name\": \"CSTA K-12 Computer Science Standards (2017)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2017.1\",\n \"subject\": \"computing\",\n \"languages\": [\n \"en\"\n ],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [\n 3,\n 12\n ]\n },\n \"provenance\": {\n \"sourceRef\": \"CSTA K-12 Computer Science Standards, Revised 2017 - csteachers.org\",\n \"sourceUrl\": \"https://www.csteachers.org/page/standards\",\n \"license\": \"CC BY-NC-SA 4.0 (cited verbatim for alignment use)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-08-29T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"1B-AP-08\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Demonstrate that programs can be combined with other programs to create new solutions.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"combine\",\n \"programs\",\n \"composition\",\n \"reuse\",\n \"modules\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-10\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Create programs that include sequences, events, loops, and conditionals.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\",\n \"knowledge\": \"PROCEDURAL\"\n },\n \"keywords\": [\n \"sequence\",\n \"events\",\n \"loops\",\n \"conditionals\",\n \"control structures\",\n \"for\",\n \"while\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-11\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Analyze\"\n },\n \"keywords\": [\n \"decomposition\",\n \"subproblems\",\n \"problem breakdown\",\n \"algorithm\",\n \"divide\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-12\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Modify, remix, or include portions of other programs in one's own work to develop something new or add more advanced features.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\"\n },\n \"keywords\": [\n \"remix\",\n \"modify\",\n \"iterate\",\n \"extend programs\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-15\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Evaluate\"\n },\n \"keywords\": [\n \"test\",\n \"debug\",\n \"errors\",\n \"troubleshooting\",\n \"fix\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-IC-21\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Use public domain or creative commons media, and refrain from copying or using material created by others without permission.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Impacts of Computing\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"copyright\",\n \"creative commons\",\n \"public domain\",\n \"digital citizenship\",\n \"license\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Impacts of Computing\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:FOR_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:WHILE_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-11\",\n \"targetRef\": \"ontora:PROBLEM_DECOMPOSITION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-08\",\n \"targetRef\": \"ontora:EVENT_BASED_PROGRAMMING\",\n \"kind\": \"partial\",\n \"confidence\": 0.7,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-15\",\n \"targetRef\": \"ontora:TROUBLESHOOTING_STEPS\",\n \"kind\": \"covers\",\n \"confidence\": 0.9,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n }\n ]\n}\n","import { FrameworkPackSchema, type FrameworkPack } from './frameworkPackSchema';\n\nimport csta2017 from './data/csta-k12-2017.json';\n\n/**\n * Bundled Standards Packs — dữ liệu chuẩn kèm sẵn trong kit (user chọn trong Composer\n * Project Settings → Gates → Standards Packs; Composer truyền standardsPackIds xuống).\n * Pack mới: thêm file JSON validate theo FrameworkPackSchema vào src/standards/data/ rồi đăng ký aquí.\n */\nconst BUNDLED_PACK_RECORDS: Record<string, unknown> = {\n 'csta-k12-2017': csta2017,\n};\n\n/** Pack ids mà kit đóng gói sẵn (để UI settings hiển thị đúng danh sách khả dụng). */\nexport const BUNDLED_STANDARDS_PACK_IDS: string[] = Object.keys(BUNDLED_PACK_RECORDS).sort();\n\nconst parsedPackCache = new Map<string, FrameworkPack>();\n\n/**\n * Resolve danh sách pack id → FrameworkPack[] đã validate. Id không biết được bỏ qua (log warn),\n * config sai không bao giờ làm pipeline chết.\n */\nexport function resolveStandardsPacks(packIds: string[] | undefined | null): FrameworkPack[] {\n if (!packIds || packIds.length === 0) return [];\n const packs: FrameworkPack[] = [];\n for (const id of packIds) {\n if (parsedPackCache.has(id)) {\n packs.push(parsedPackCache.get(id) as FrameworkPack);\n continue;\n }\n const raw = BUNDLED_PACK_RECORDS[id];\n if (!raw) {\n console.warn(`[standards] pack '${id}' không tồn tại trong kit — bỏ qua.`);\n continue;\n }\n const parsed = FrameworkPackSchema.safeParse(raw);\n if (!parsed.success) {\n console.warn(`[standards] pack '${id}' fail schema — bỏ qua:`, parsed.error.issues[0]?.message);\n continue;\n }\n parsedPackCache.set(id, parsed.data);\n packs.push(parsed.data);\n }\n return packs;\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/standards/frameworkPackSchema.ts","../../src/standards/standardsContextInjector.ts","../../src/standards/standardsCoverageGate.ts","../../src/standards/standardsRegistryAdapter.ts","../../src/standards/standardStackGenerator.ts","../../src/standards/data/csta-k12-2017.json","../../src/standards/data/acm-ieee-cs2023.json","../../src/standards/bundledPacks.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from 'zod';\n\n/**\n * Framework Pack Schema v1.0 — Standards Registry interchange contract.\n *\n * A Framework Pack is a self-contained, schema-validated data bundle describing\n * ONE educational standard/framework (CSTA K-12, NGSS, GDPT 2018, an org's\n * internal standard, ...) in the lowest common denominator that virtually every\n * framework can map onto: a flat list of atomized statements + optional\n * classifications + optional mappings to the Ontora knowledge tree.\n *\n * Design invariants (see docs/ideas/2026-08-29-standards-registry-framework-pack.md):\n * - I1 Pack is DATA, never code. Importing a pack NEVER mutates the Ontora\n * Master Tree — mappings are reference bridges, resolved (not written).\n * - I2 Canonical statement text (verbatim) is immutable ground truth. Derived\n * fields (translations, keywords, bloom hints) carry their own provenance.\n * - I3 IDs are stable forever: keep the official source ID when present, else\n * mint once from content identity (never from row position).\n * - I4 gradeBand is canonical numeric (gradeModel normalizes grades/ages/bands).\n * - I5 Mappings use namespaced targets (ontora:CODE, csta:1B-AP-10, ...) and are\n * OPTIONAL — a pack with zero mappings still works (statement-only mode).\n * - I6 Everything is versioned: specVersion (this contract) vs contentVersion\n * (the framework's own content). Published content versions are immutable.\n */\n\n// ─── Shared primitives ───────────────────────────────────────────────────────\n\n/** Two-axis Bloom hint (Anderson & Krathwohl). Matches Ontora's dual-axis usage. */\nexport const BloomHintSchema = z.object({\n process: z\n .enum(['Remember', 'Understand', 'Apply', 'Analyze', 'Evaluate', 'Create'])\n .describe('Cognitive process axis'),\n knowledge: z\n .enum(['FACTUAL', 'CONCEPTUAL', 'PROCEDURAL', 'METACOGNITIVE'])\n .optional()\n .describe('Knowledge dimension axis (optional — most source standards do not tag it)'),\n});\n\n/** How a record entered the pack — drives trust & review requirements. */\nexport const RecordProvenanceSchema = z.object({\n method: z\n .enum(['source_official', 'ai_draft', 'minted_from_content', 'human', 'crosswalk', 'imported'])\n .describe('source_official = copied from an authoritative machine-readable source; ai_draft = LLM-extracted, REQUIRES human review before activation; minted_from_content = ID synthesized because source has none; crosswalk = derived by the curriculum-crosswalk skill'),\n reviewedBy: z.string().optional().describe('Person/agent that approved this record (required for ai_draft records before activation)'),\n reviewedAt: z.string().optional().describe('ISO-8601 timestamp of review'),\n note: z.string().optional().describe('Free-form provenance note'),\n});\n\n/** Numeric grade band, canonical. [6, 6] = single grade 6; [6, 8] = band. */\nexport const GradeBandSchema = z\n .array(z.number().int().min(-1).max(30), { message: 'gradeBand must be [minGrade, maxGrade] integers' })\n .length(2)\n .refine(([min, max]) => min <= max, { message: 'gradeBand min must be <= max' })\n .describe('Canonical numeric grade band. -1 = kindergarten/pre-primary. Framework-specific models (VN grades, US bands, ages) normalize into this scale via manifest.gradeModel');\n\n/** Optional free-form classification axes (strand, NGSS dimension, \"Chủ đề\", ...). */\nexport const ClassificationSchema = z.object({\n axis: z.string().describe('Axis label, e.g. \"strand\", \"dimension\", \"Chủ đề\"'),\n value: z.string().describe('Value on that axis, e.g. \"AP\", \"Disciplinary Core Idea\", \"Thuật toán\"'),\n});\n\n// ─── Manifest ────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackManifestSchema = z.object({\n /** Immutable pack identifier. Never reused, never renamed. */\n id: z\n .string()\n .min(3)\n .regex(/^[a-z0-9][a-z0-9._-]*$/, 'pack id must be kebab/lowercase-safe (a-z 0-9 . _ -)')\n .describe('Immutable pack identifier, e.g. \"csta-k12-2017\", \"gdpt-2018-tin-hoc\", \"abc-tin-hoc\"'),\n name: z.string().min(1).describe('Human-readable framework name'),\n specVersion: z.literal('1.0').describe('Version of THIS pack contract (not the content)'),\n contentVersion: z\n .string()\n .min(1)\n .describe('Content version of the framework inside this pack. Bump on any content change; published versions are immutable'),\n subject: z.string().describe('Primary subject domain, e.g. \"computing\", \"science\", \"mathematics\"'),\n languages: z.array(z.string().min(2)).min(1).describe('BCP-47 language codes present in statement texts, e.g. [\"vi\"], [\"en\",\"vi\"]'),\n gradeModel: z.object({\n type: z.enum(['grades', 'ages', 'bands']).describe('grades = school grades (canonical numbers); ages = years old; bands = named developmental bands'),\n range: GradeBandSchema.describe('Overall grade range covered by the framework'),\n /** Optional normalization table when type != \"grades\" (e.g. band \"6-8\" -> [6,8]). */\n normalization: z\n .array(\n z.object({\n from: z.string().describe('Source label, e.g. \"level 6-8\" or \"11-13 years\"'),\n to: GradeBandSchema,\n })\n )\n .optional()\n .describe('Explicit label -> numeric band conversion table. Required when type != \"grades\"'),\n }),\n provenance: z.object({\n sourceRef: z.string().describe('Citation of the official source, e.g. \"Thông tư 32/2018/TT-BGDĐT\" or a URL'),\n sourceUrl: z.string().optional().describe('Canonical URL of the source document or live registry'),\n license: z.string().describe('License / usage rights of the source text'),\n importedBy: z.string().describe('Who produced this pack, e.g. \"platform\" or \"org:abc\"'),\n importedAt: z.string().describe('ISO-8601 timestamp'),\n originalFileHash: z.string().optional().describe('SHA-256 of the original uploaded file, for source provenance'),\n }),\n trust: z.enum(['verified', 'org']).default('org').describe('verified = platform-curated; org = self-served by an org. Generation accepts both; compliance reporting counts verified only'),\n});\n\n// ─── Statement ───────────────────────────────────────────────────────────────\n\nexport const FrameworkStatementSchema = z.object({\n /** Canonical, forever-stable statement ID (see invariant I3). */\n id: z\n .string()\n .min(2)\n .regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/, 'statement id must not contain whitespace or separators beyond . _ : -')\n .describe('Statement ID. Official source ID when present (e.g. \"1B-AP-10\"); otherwise minted once from content identity. Namespaced at query time by the pack id, never stored with prefix duplication'),\n /** Optional hierarchical parent within the SAME pack (GDPT competence → requirement, CSTA strand → statement, ...). */\n parentId: z.string().optional().describe('Parent statement id within this pack, when the source framework is hierarchical'),\n gradeBand: GradeBandSchema,\n /** Verbatim canonical text per language. The FIRST / primary language text is judge ground truth (invariant I2). */\n texts: z\n .record(z.string().min(2), z.string().min(1))\n .refine((t) => Object.keys(t).length > 0, { message: 'texts must contain at least one language entry' })\n .describe('Verbatim statement text per BCP-47 language key, e.g. {\"vi\": \"Yêu cầu cần đạt...\"}. NEVER paraphrase into these fields'),\n classifications: z.array(ClassificationSchema).optional().default([]).describe('Optional taxonomy axes from the source framework (strands, dimensions, themes...)'),\n bloomHint: BloomHintSchema.optional().describe('Optional Bloom dual-axis hint — a HINT for generation, never a binding claim about the source'),\n keywords: z.array(z.string()).optional().default([]).describe('Retrieval keywords (topic terms). Used by standards retrieval AND by crosswalk theme matching — keep them dense'),\n sourceRef: z.string().optional().describe('Precise citation within the source, e.g. \"Trang 24, Môn Tin học lớp 6\"'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Mapping bridge (pack → Ontora interlingua) ─────────────────────────────\n\nexport const MappingKindSchema = z.enum(['covers', 'partial', 'extends']).describe('covers = the statement is fully taught when the concept is covered (ONLY \"covers\" counts toward compliance coverage); partial = overlaps partially; extends = statement goes beyond the concept');\n\nexport const FrameworkMappingSchema = z.object({\n statementId: z.string().describe('Must reference a statement id in this pack'),\n /** Namespaced target. Grammar: <namespace>:<ID>. e.g. \"ontora:WHILE_LOOP\", \"ontora:PROBLEM_DECOMPOSITION\". Resolved against the target registry at intake — unknown targets FAIL validation. */\n targetRef: z.string().refine((v) => /^[a-z][a-z0-9]*:[A-Za-z0-9][A-Za-z0-9._-]*$/.test(v), 'targetRef must be \"<namespace>:<ID>\", e.g. \"ontora:FOR_LOOP\"'),\n kind: MappingKindSchema,\n confidence: z.number().min(0).max(1).describe('0-1 confidence of this mapping'),\n provenance: RecordProvenanceSchema,\n});\n\n// ─── Root ────────────────────────────────────────────────────────────────────\n\nexport const FrameworkPackSchema = z.object({\n manifest: FrameworkPackManifestSchema,\n statements: z.array(FrameworkStatementSchema).min(1).describe('Atomized statements of the framework'),\n mappings: z.array(FrameworkMappingSchema).optional().default([]).describe('Optional bridges to the Ontora knowledge tree (statement-only packs are fully functional)'),\n});\n\nexport type FrameworkPack = z.infer<typeof FrameworkPackSchema>;\nexport type FrameworkPackManifest = z.infer<typeof FrameworkPackManifestSchema>;\nexport type FrameworkStatement = z.infer<typeof FrameworkStatementSchema>;\nexport type FrameworkMapping = z.infer<typeof FrameworkMappingSchema>;\nexport type MappingKind = z.infer<typeof MappingKindSchema>;\nexport type RecordProvenance = z.infer<typeof RecordProvenanceSchema>;\n\n// ─── Pack lint (beyond field-level Zod checks) ───────────────────────────────\n\nexport interface PackLintIssue {\n severity: 'ERROR' | 'WARNING';\n code: string;\n message: string;\n /** statement id or manifest path the issue refers to */\n ref?: string;\n}\n\n/** Minimum token-overlap ratio for the fuzzy duplicate warning. */\nconst DUP_OVERLAP_RATIO = 0.8;\n\n/**\n * Deterministic structural lint over an already schema-valid pack.\n * Pure function: no I/O, no LLM. Mirrors the ontora validator philosophy —\n * assembly/validation is code, research/judgment is model.\n */\nexport function lintFrameworkPack(pack: FrameworkPack): PackLintIssue[] {\n const issues: PackLintIssue[] = [];\n const statements = pack.statements;\n const ids = new Set<string>();\n\n for (const s of statements) {\n // L1 duplicate ids\n if (ids.has(s.id)) {\n issues.push({ severity: 'ERROR', code: 'DUP_ID', message: `Duplicate statement id \"${s.id}\"`, ref: s.id });\n }\n ids.add(s.id);\n }\n\n for (const s of statements) {\n // L2 parent existence\n if (s.parentId && !ids.has(s.parentId)) {\n issues.push({ severity: 'ERROR', code: 'PARENT_MISSING', message: `parentId \"${s.parentId}\" does not exist in this pack`, ref: s.id });\n }\n // L3 empty-ish text\n for (const [lang, text] of Object.entries(s.texts)) {\n if (!text || text.trim().length < 8) {\n issues.push({ severity: 'ERROR', code: 'TEXT_TOO_SHORT', message: `\"${lang}\" text is empty or shorter than 8 characters`, ref: s.id });\n }\n }\n // L4 grade band sanity: empty band inside manifest range is fine, but warn outside manifest range\n const [min, max] = s.gradeBand;\n const [gMin, gMax] = pack.manifest.gradeModel.range;\n if (min < gMin || max > gMax) {\n issues.push({ severity: 'WARNING', code: 'BAND_OUT_OF_RANGE', message: `gradeBand [${min},${max}] falls outside manifest range [${gMin},${gMax}]`, ref: s.id });\n }\n // L5 ai_draft without reviewer\n if (s.provenance.method === 'ai_draft' && !s.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: 'ai_draft record has no reviewedBy — human review required before activation', ref: s.id });\n }\n // L6 keywords recommended\n if (!s.keywords || s.keywords.length === 0) {\n issues.push({ severity: 'WARNING', code: 'NO_KEYWORDS', message: 'No keywords — statement will be hard to retrieve and to crosswalk', ref: s.id });\n }\n }\n\n // L7 fuzzy duplicate texts (same language)\n const seen = new Map<string, string>();\n for (const s of statements) {\n const primaryLang = pack.manifest.languages[0];\n const text = s.texts[primaryLang];\n if (!text) continue;\n const norm = text.toLowerCase().replace(/[^\\p{L}\\p{N}\\s]/gu, ' ').split(/\\s+/).filter((w) => w.length > 2).sort().join(' ');\n if (!norm) continue;\n const prev = seen.get(norm);\n if (prev !== undefined) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_EXACT', message: `Text is token-identical to statement \"${prev}\"`, ref: s.id });\n } else {\n // token-overlap fuzzy pass (O(n^2) avoided via sorted-token key bucketing)\n for (const [otherNorm, otherId] of seen.entries()) {\n const a = new Set(norm.split(' '));\n const b = new Set(otherNorm.split(' '));\n let inter = 0;\n for (const w of a) if (b.has(w)) inter++;\n const ratio = inter / Math.max(a.size, b.size);\n if (ratio >= DUP_OVERLAP_RATIO) {\n issues.push({ severity: 'WARNING', code: 'DUP_TEXT_FUZZY', message: `Text ~${Math.round(ratio * 100)}% overlapping with statement \"${otherId}\"`, ref: s.id });\n break;\n }\n }\n seen.set(norm, s.id);\n }\n }\n\n // L8 mapping integrity\n for (const m of pack.mappings ?? []) {\n if (!ids.has(m.statementId)) {\n issues.push({ severity: 'ERROR', code: 'MAP_STATEMENT_MISSING', message: `mapping references unknown statementId \"${m.statementId}\"`, ref: m.statementId });\n }\n if (m.provenance.method === 'ai_draft' && !m.provenance.reviewedBy) {\n issues.push({ severity: 'ERROR', code: 'AI_DRAFT_UNREVIEWED', message: `mapping to ${m.targetRef} is ai_draft without reviewedBy`, ref: m.statementId });\n }\n if (m.kind === 'covers' && m.confidence < 0.5) {\n issues.push({ severity: 'WARNING', code: 'COVERS_LOW_CONFIDENCE', message: `kind=\"covers\" with confidence ${m.confidence} < 0.5 — consider \"partial\"`, ref: m.statementId });\n }\n }\n\n return issues;\n}\n\nexport interface PackValidationResult {\n valid: boolean;\n schemaErrors: string[];\n lint: PackLintIssue[];\n stats: {\n statements: number;\n mappings: number;\n coveredStatements: number;\n statementOnlyStatements: number;\n gradeRange: [number, number];\n };\n}\n\n/**\n * Full validation: Zod schema → deterministic lint.\n * Does NOT resolve ontora targets (network/DB concern, layered separately).\n */\nexport function validateFrameworkPack(input: unknown): PackValidationResult {\n const parsed = FrameworkPackSchema.safeParse(input);\n if (!parsed.success) {\n return {\n valid: false,\n schemaErrors: parsed.error.issues.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`),\n lint: [],\n stats: { statements: 0, mappings: 0, coveredStatements: 0, statementOnlyStatements: 0, gradeRange: [0, 0] },\n };\n }\n const pack = parsed.data;\n const lint = lintFrameworkPack(pack);\n const covered = new Set((pack.mappings ?? []).map((m) => m.statementId));\n const bands = pack.statements.map((s) => s.gradeBand);\n return {\n valid: lint.every((i) => i.severity !== 'ERROR'),\n schemaErrors: [],\n lint,\n stats: {\n statements: pack.statements.length,\n mappings: pack.mappings?.length ?? 0,\n coveredStatements: covered.size,\n statementOnlyStatements: pack.statements.length - covered.size,\n gradeRange: [Math.min(...bands.flat()), Math.max(...bands.flat())],\n },\n };\n}\n","import type { FrameworkPack, FrameworkStatement } from './frameworkPackSchema';\n\n/**\n * Standards Context Injector — Grounding layer (tầng 1 của cơ chế bám chuẩn).\n *\n * Selects the standard statements RELEVANT to a lesson (by grade band overlap +\n * keyword/concept match) and renders them as a prompt context block containing\n * VERBATIM canonical text. The model must SEE the real standard text — prompt\n * labels like \"operating under CSTA\" are exactly the anti-pattern this replaces.\n *\n * Pure function: pack data in, markdown block out. No I/O, no LLM.\n */\n\nexport interface StandardsSelectionInput {\n /** Packs adopted by the org / course (already validated + activated). */\n packs: FrameworkPack[];\n /** Lesson grade level or band, canonical numeric (single grade or [min,max]). */\n gradeBand: [number, number] | number;\n /** Lesson topic text: title + concept names + keywords. Matched against statement keywords + texts. */\n topicText: string;\n /** Optional explicit ontora concept codes for the lesson (concept_code from MilestoneInput). */\n conceptCodes?: string[];\n /** Hard cap on injected statements to protect the context budget. */\n maxStatements?: number;\n}\n\nexport interface SelectedStatement {\n packId: string;\n statement: FrameworkStatement;\n score: number;\n matchedBy: Array<'band' | 'keyword' | 'concept' | 'text'>;\n}\n\nconst DEFAULT_MAX_STATEMENTS = 20;\n\nfunction normalizeBand(band: [number, number] | number): [number, number] {\n return Array.isArray(band) ? band : [band, band];\n}\n\nfunction tokenize(text: string): Set<string> {\n return new Set(\n text\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}\\s]/gu, ' ')\n .split(/\\s+/)\n .filter((w) => w.length > 2)\n );\n}\n\n/**\n * Rank + select statements for a lesson.\n * Scoring: band overlap is a GATE (statements outside the grade are dropped),\n * keyword/concept/text overlap is the ranking signal.\n */\nexport function selectStatementsForLesson(input: StandardsSelectionInput): SelectedStatement[] {\n const max = input.maxStatements ?? DEFAULT_MAX_STATEMENTS;\n const lessonBand = normalizeBand(input.gradeBand);\n const lessonTokens = tokenize(input.topicText);\n const conceptSet = new Set((input.conceptCodes ?? []).map((c) => c.toUpperCase().trim()).filter(Boolean));\n\n const candidates: SelectedStatement[] = [];\n\n for (const pack of input.packs) {\n for (const statement of pack.statements) {\n // Band gate: must overlap the lesson band\n const [sMin, sMax] = statement.gradeBand;\n const overlaps = Math.max(sMin, lessonBand[0]) <= Math.min(sMax, lessonBand[1]);\n if (!overlaps) continue;\n\n const matchedBy: SelectedStatement['matchedBy'] = ['band'];\n let score = 1;\n\n // Keyword match (primary signal — keywords are REQUIRED to be dense by pack lint)\n const kwTokens = new Set(statement.keywords.map((k) => k.toLowerCase()));\n let kwHits = 0;\n for (const t of lessonTokens) if (kwTokens.has(t)) kwHits++;\n if (kwHits > 0) {\n matchedBy.push('keyword');\n score += 2 + kwHits * 0.5;\n }\n\n // Concept code match (statement keyword equals an ontora concept code)\n if (conceptSet.size > 0) {\n for (const k of statement.keywords) {\n if (conceptSet.has(k.toUpperCase().replace(/\\s+/g, '_'))) {\n matchedBy.push('concept');\n score += 3;\n break;\n }\n }\n }\n\n // Raw text-token overlap (fallback signal)\n let textHits = 0;\n for (const lang of Object.keys(statement.texts)) {\n const st = tokenize(statement.texts[lang]);\n for (const t of lessonTokens) if (st.has(t)) textHits++;\n }\n if (textHits >= 2) {\n matchedBy.push('text');\n score += Math.min(2, textHits * 0.2);\n }\n\n if (score > 1) candidates.push({ packId: pack.manifest.id, statement, score, matchedBy });\n }\n }\n\n return candidates.sort((a, b) => b.score - a.score).slice(0, max);\n}\n\n/**\n * Render the STANDARDS CONTEXT prompt block (verbatim statements + binding rules).\n * Mirrors the shape of the proven CUMULATIVE CONTEXT block in lessonMasterPrompt.\n */\nexport function buildStandardsContextBlock(selected: SelectedStatement[], opts?: { language?: string }): string {\n if (selected.length === 0) return '';\n\n const lang = opts?.language;\n const rows = selected\n .map(({ packId, statement }) => {\n const text = (lang && statement.texts[lang]) || Object.values(statement.texts)[0];\n const band = statement.gradeBand[0] === statement.gradeBand[1] ? `L${statement.gradeBand[0]}` : `L${statement.gradeBand[0]}-L${statement.gradeBand[1]}`;\n return `- [${packId}:${statement.id} | ${band}] \"${text}\"`;\n })\n .join('\\n');\n\n return [\n '# STANDARDS CONTEXT (SOURCE OF TRUTH — VERBATIM STATEMENTS)',\n '',\n 'The statements below are COPIED VERBATIM from official/framework standard documents adopted for this course.',\n 'They are BINDING targets, not suggestions:',\n '- Every Learning Objective you write MUST be anchored to one or more statement IDs above via standardRefs.',\n '- You MUST use ONLY statement IDs from this list. NEVER invent, paraphrase IDs, or cite standards not present here.',\n '- The statement TEXT is the required destination: activities and assessments must demonstrably lead a learner to it.',\n '- The statement is the DESTINATION, not a script: you may extend beyond it, but you may not skip or contradict it.',\n '',\n '## Statement list',\n rows,\n ].join('\\n');\n}\n\n/**\n * One-call convenience: packs + lesson info → context block (empty string if nothing matches).\n */\nexport function buildStandardsContext(\n input: StandardsSelectionInput & { language?: string }\n): { block: string; selected: SelectedStatement[] } {\n const selected = selectStatementsForLesson(input);\n return { block: buildStandardsContextBlock(selected, { language: input.language }), selected };\n}\n","import type { FrameworkPack } from './frameworkPackSchema';\n\n/**\n * Standards Coverage Gate — Verification layer (tầng 3 của cơ chế bám chuẩn).\n *\n * Deterministic coverage matrix across the generation chain:\n * standard statement → learning objective → lesson activities → quiz questions\n *\n * Philosophy: \"bám chuẩn\" must be enforced by CODE, not by prompt goodwill.\n * A statement mapped with kind=\"covers\" that has no LO / no activity / no\n * assessment = a compliance hole, reported with an actionable repair hint.\n *\n * Pure function over already-generated artifacts. No LLM, no I/O.\n */\n\nexport interface CoverageGateInput {\n packs: FrameworkPack[];\n /** Learning objectives as generated (code + optional standardRefs anchoring). */\n objectives: Array<{\n code: string;\n standardRefs?: string[];\n conceptRefs?: string[];\n }>;\n /** activitySequence rows of the lesson (lo codes link activities to LOs). Optional: omitted when no structured activity-LO linkage is available. */\n activities?: Array<{ seq?: number; lo: string[] }>;\n /** Quiz questions; each links to assessment objectives → alignedLO. */\n quizQuestions: Array<{ alignedLO?: string; alignedAO?: string }>;\n /** Assessment objectives table (AO → alignedLO). Questions may reference AOs only. */\n assessmentObjectives?: Array<{ aoCode: string; alignedLO: string }>;\n}\n\nexport interface StatementCoverageRow {\n packId: string;\n statementId: string;\n statementText: string;\n status: 'COVERED' | 'PARTIAL' | 'UNCOVERED' | 'UNMAPPED';\n objectives: string[];\n hasActivity: boolean;\n hasAssessment: boolean;\n issues: string[];\n}\n\nexport interface CoverageGateReport {\n verdict: 'PASS' | 'WARN' | 'FAIL';\n coveragePct: number;\n rows: StatementCoverageRow[];\n summary: string;\n rawMarkdownReport: string;\n}\n\n/** statementRef formats accepted in standardRefs: \"1B-AP-10\" or \"csta-k12-2017:1B-AP-10\". */\nfunction resolveStatementRef(ref: string, packs: FrameworkPack[]): { pack: FrameworkPack; statementId: string } | null {\n const [head, ...rest] = ref.split(':');\n const candidatePacks = rest.length > 0 ? packs.filter((p) => p.manifest.id === head) : packs;\n const statementId = rest.length > 0 ? rest.join(':') : ref;\n for (const p of candidatePacks) {\n if (p.statements.some((s) => s.id === statementId)) return { pack: p, statementId };\n }\n return null;\n}\n\nexport function evaluateStandardsCoverage(input: CoverageGateInput): CoverageGateReport {\n const rows: StatementCoverageRow[] = [];\n\n // AO → LO resolution map\n const aoToLo = new Map<string, string>();\n for (const ao of input.assessmentObjectives ?? []) aoToLo.set(ao.aoCode, ao.alignedLO);\n\n // LO → covered statements (explicit anchors)\n const loToRefs = new Map<string, Set<string>>();\n for (const lo of input.objectives) {\n loToRefs.set(lo.code, new Set(lo.standardRefs ?? []));\n }\n\n // LOs actually taught (activities) and assessed (quiz, via direct alignedLO or AO table)\n const taughtLOs = new Set<string>();\n for (const act of input.activities ?? []) for (const lo of act.lo) taughtLOs.add(lo);\n const assessedLOs = new Set<string>();\n for (const q of input.quizQuestions) {\n if (q.alignedLO) assessedLOs.add(q.alignedLO);\n if (q.alignedAO) {\n const lo = aoToLo.get(q.alignedAO);\n if (lo) assessedLOs.add(lo);\n }\n }\n\n for (const pack of input.packs) {\n const mappingByStatement = new Map<string, string>();\n for (const m of pack.mappings ?? []) {\n // first mapping wins for kind resolution; \"covers\" beats \"partial\" beats \"extends\"\n const prev = mappingByStatement.get(m.statementId);\n if (!prev || (prev !== 'covers' && m.kind === 'covers') || (prev === 'extends' && m.kind !== 'extends')) {\n mappingByStatement.set(m.statementId, m.kind);\n }\n }\n\n for (const statement of pack.statements) {\n const refFull = `${pack.manifest.id}:${statement.id}`;\n const issues: string[] = [];\n\n // Objectives anchored to this statement\n const los = input.objectives\n .filter((lo) => (lo.standardRefs ?? []).some((r) => r === statement.id || r === refFull))\n .map((lo) => lo.code);\n\n const kind = mappingByStatement.get(statement.id);\n const hasMapping = kind !== undefined;\n const isComplianceRelevant = kind === 'covers';\n\n const hasActivity = los.some((lo) => taughtLOs.has(lo));\n const hasAssessment = los.some((lo) => assessedLOs.has(lo));\n\n let status: StatementCoverageRow['status'];\n if (!hasMapping) status = 'UNMAPPED';\n else if (!isComplianceRelevant) status = 'PARTIAL';\n else if (los.length > 0 && hasActivity && hasAssessment) status = 'COVERED';\n else status = 'UNCOVERED';\n\n if (status === 'UNCOVERED') {\n if (los.length === 0) issues.push('No learning objective anchors this statement (missing standardRefs).');\n else {\n if (!hasActivity) issues.push(`Anchored LO(s) ${los.join(', ')} have no activity in lesson flow.`);\n if (!hasAssessment) issues.push(`Anchored LO(s) ${los.join(', ')} are not measured by any quiz question.`);\n }\n }\n\n rows.push({\n packId: pack.manifest.id,\n statementId: statement.id,\n statementText: Object.values(statement.texts)[0] ?? '',\n status,\n objectives: los,\n hasActivity,\n hasAssessment,\n issues,\n });\n }\n }\n\n // Unresolvable refs (typo / hallucinated IDs) — reported as issues on no row\n for (const lo of input.objectives) {\n for (const r of lo.standardRefs ?? []) {\n if (!resolveStatementRef(r, input.packs)) {\n rows.push({\n packId: '(unresolved)',\n statementId: r,\n statementText: '',\n status: 'UNCOVERED',\n objectives: [lo.code],\n hasActivity: false,\n hasAssessment: false,\n issues: [`standardRef \"${r}\" does not exist in any adopted pack — likely a hallucinated or stale ID`],\n });\n }\n }\n }\n\n const complianceRows = rows.filter((r) => r.status !== 'UNMAPPED' && r.status !== 'PARTIAL');\n const covered = complianceRows.filter((r) => r.status === 'COVERED').length;\n const coveragePct = complianceRows.length === 0 ? 100 : Math.round((covered / complianceRows.length) * 100);\n const unresolvedCount = rows.filter((r) => r.packId === '(unresolved)').length;\n\n const verdict: CoverageGateReport['verdict'] =\n unresolvedCount > 0 || coveragePct < 60 ? 'FAIL' : coveragePct < 100 ? 'WARN' : 'PASS';\n\n const lines: string[] = [\n '# Standards Coverage Report',\n '',\n `- Verdict: **${verdict}**`,\n `- Compliance coverage: **${coveragePct}%** (${covered}/${complianceRows.length} \"covers\" statements fully taught + assessed)`,\n `- Unresolved standardRefs: ${unresolvedCount}`,\n '',\n '| Pack | Statement | Status | LOs | Activity | Assessment |',\n '|---|---|---|---|---|---|',\n ...rows.map(\n (r) =>\n `|${r.packId}|${r.statementId}|${r.status}|${r.objectives.join(', ') || '—'}|${r.hasActivity ? '✓' : '✗'}|${r.hasAssessment ? '✓' : '✗'}|`\n ),\n ];\n const issueLines = rows.filter((r) => r.issues.length > 0).flatMap((r) => r.issues.map((i) => `- [${r.packId}:${r.statementId}] ${i}`));\n if (issueLines.length > 0) lines.push('', '## Issues', ...issueLines);\n\n return {\n verdict,\n coveragePct,\n rows,\n summary: `Standards coverage ${coveragePct}% — verdict ${verdict}`,\n rawMarkdownReport: lines.join('\\n'),\n };\n}\n","import { createClient, type SupabaseClient } from '@supabase/supabase-js';\nimport {\n FrameworkPackSchema,\n type FrameworkPack,\n type FrameworkMapping,\n type FrameworkStatement,\n} from './frameworkPackSchema';\n\n/**\n * Standards Registry Adapter — Supabase-backed runtime plane for Framework Packs.\n *\n * Read path (generation): loadPacksForCourse() → FrameworkPack[] hydrated from\n * standards_frameworks + standards_statements + standards_mappings (+ overrides\n * applied with resolution order override > pack-embedded, 'retired' removes).\n * Write path (intake): importPack() persists a validated pack; adopt/deprecate\n * manage lifecycle. Write access uses a service-role client (intake runs\n * server-side); RLS governs client-side reads.\n */\n\nexport interface StandardsRegistryConfig {\n supabaseUrl?: string;\n supabaseServiceRoleKey?: string;\n supabaseAnonKey?: string;\n client?: SupabaseClient;\n}\n\nexport interface HydratedPack extends FrameworkPack {\n /** DB id of the standards_frameworks row */\n dbId: string;\n status: 'draft' | 'active' | 'deprecated';\n organizationCode: string | null;\n}\n\nexport interface ImportPackResult {\n frameworkDbId: string;\n statementsInserted: number;\n mappingsInserted: number;\n}\n\nexport class StandardsRegistryAdapter {\n private client: SupabaseClient;\n\n constructor(config: StandardsRegistryConfig = {}) {\n if (config.client) {\n this.client = config.client;\n return;\n }\n const url = config.supabaseUrl || process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL || '';\n const key =\n config.supabaseServiceRoleKey ||\n process.env.SUPABASE_SERVICE_ROLE_KEY ||\n config.supabaseAnonKey ||\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ||\n '';\n if (!url || !key) {\n throw new Error('StandardsRegistryAdapter: Supabase URL/key missing (pass client or env).');\n }\n this.client = createClient(url, key);\n }\n\n // ─── Intake (write path — service role) ───────────────────────────────────\n\n /** Persist a schema-validated pack as a new framework (status=draft). */\n async importPack(pack: FrameworkPack, opts?: { organizationCode?: string | null; createdBy?: string; originalFilePath?: string }): Promise<ImportPackResult> {\n const parsed = FrameworkPackSchema.safeParse(pack);\n if (!parsed.success) {\n throw new Error('importPack: pack failed schema validation: ' + parsed.error.issues.map((i) => i.path.join('.') + ': ' + i.message).join('; '));\n }\n const p = parsed.data;\n\n const { data: fw, error: fwErr } = await this.client\n .from('standards_frameworks')\n .insert({\n pack_id: p.manifest.id,\n content_version: p.manifest.contentVersion,\n name: p.manifest.name,\n spec_version: p.manifest.specVersion,\n subject: p.manifest.subject,\n languages: p.manifest.languages,\n grade_model: p.manifest.gradeModel,\n provenance: p.manifest.provenance,\n trust: p.manifest.trust,\n status: 'draft',\n organization_code: opts?.organizationCode ?? (p.manifest.trust === 'verified' ? null : p.manifest.provenance.importedBy?.replace(/^org:/, '') || null),\n original_file_path: opts?.originalFilePath ?? null,\n created_by: opts?.createdBy ?? null,\n })\n .select('id')\n .single();\n if (fwErr) throw new Error('importPack: framework insert failed: ' + fwErr.message);\n\n const frameworkId = fw.id as string;\n\n const statementRows = p.statements.map((s: FrameworkStatement) => ({\n framework_id: frameworkId,\n statement_id: s.id,\n parent_statement_id: s.parentId ?? null,\n grade_min: s.gradeBand[0],\n grade_max: s.gradeBand[1],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloom_hint: s.bloomHint ?? null,\n keywords: s.keywords ?? [],\n source_ref: s.sourceRef ?? null,\n provenance: s.provenance,\n }));\n\n const { error: stErr, count: stCount } = await this.client\n .from('standards_statements')\n .insert(statementRows, { count: 'exact' });\n if (stErr) throw new Error('importPack: statement insert failed: ' + stErr.message);\n\n let mappingCount = 0;\n if (p.mappings && p.mappings.length > 0) {\n const mappingRows = p.mappings.map((m: FrameworkMapping) => ({\n framework_id: frameworkId,\n statement_id: m.statementId,\n target_ref: m.targetRef,\n kind: m.kind,\n confidence: m.confidence,\n provenance: m.provenance,\n }));\n const { error: mpErr, count: mpCount } = await this.client\n .from('standards_mappings')\n .insert(mappingRows, { count: 'exact' });\n if (mpErr) throw new Error('importPack: mapping insert failed: ' + mpErr.message);\n mappingCount = mpCount ?? mappingRows.length;\n }\n\n return { frameworkDbId: frameworkId, statementsInserted: stCount ?? statementRows.length, mappingsInserted: mappingCount };\n }\n\n /** Activate a draft framework (immutable version is now live). */\n async activatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'active' })\n .eq('id', frameworkDbId)\n .eq('status', 'draft');\n if (error) throw new Error('activatePack failed: ' + error.message);\n }\n\n async deprecatePack(frameworkDbId: string): Promise<void> {\n const { error } = await this.client\n .from('standards_frameworks')\n .update({ status: 'deprecated' })\n .eq('id', frameworkDbId);\n if (error) throw new Error('deprecatePack failed: ' + error.message);\n }\n\n async adoptPack(frameworkDbId: string, organizationCode: string, adoptedBy?: string): Promise<void> {\n const { error } = await this.client.from('standards_org_adoptions').upsert(\n { framework_id: frameworkDbId, organization_code: organizationCode, adopted_by: adoptedBy ?? null },\n { onConflict: 'organization_code,framework_id' }\n );\n if (error) throw new Error('adoptPack failed: ' + error.message);\n }\n\n // ─── Runtime (read path — generation) ─────────────────────────────────────\n\n /**\n * Load all packs usable by an org: platform packs (verified, org IS NULL) +\n * org packs + org adoptions. Hydrated into the same FrameworkPack shape the\n * in-memory Phase-1 components consume (injector / coverage gate / judge).\n */\n async loadPacksForOrg(organizationCode: string | null): Promise<HydratedPack[]> {\n // Visible frameworks = platform (org NULL, active) OR org-owned OR adopted\n let query = this.client\n .from('standards_frameworks')\n .select('*, standards_org_adoptions(organization_code)')\n .eq('status', 'active');\n const { data: frameworks, error } = await query;\n if (error) throw new Error('loadPacksForOrg: ' + error.message);\n\n const visible = (frameworks ?? []).filter((f: any) => {\n const own = f.organization_code && organizationCode && f.organization_code === organizationCode;\n const global = !f.organization_code;\n const adopted = organizationCode && (f.standards_org_adoptions ?? []).some((a: any) => a.organization_code === organizationCode);\n return global || own || adopted;\n });\n\n if (visible.length === 0) return [];\n\n const ids = visible.map((f: any) => f.id);\n const [{ data: statements, error: stErr }, { data: mappings, error: mpErr }, { data: overrides, error: ovErr }] = await Promise.all([\n this.client.from('standards_statements').select('*').in('framework_id', ids),\n this.client.from('standards_mappings').select('*').in('framework_id', ids),\n this.client.from('standards_mapping_overrides').select('*').in('framework_id', ids),\n ]);\n if (stErr) throw new Error('loadPacksForOrg statements: ' + stErr.message);\n\n const overridesByFw = new Map<string, any[]>();\n for (const o of overrides ?? []) {\n const list = overridesByFw.get(o.framework_id) ?? [];\n list.push(o);\n overridesByFw.set(o.framework_id, list);\n }\n\n return visible.map((f: any) => {\n const stmts = (statements ?? [])\n .filter((s: any) => s.framework_id === f.id)\n .map((s: any) => ({\n id: s.statement_id,\n parentId: s.parent_statement_id ?? undefined,\n gradeBand: [s.grade_min, s.grade_max] as [number, number],\n texts: s.texts,\n classifications: s.classifications ?? [],\n bloomHint: s.bloom_hint ?? undefined,\n keywords: s.keywords ?? [],\n sourceRef: s.source_ref ?? undefined,\n provenance: s.provenance ?? { method: 'imported' },\n }));\n\n // Resolution order: override (unless retired) > pack-embedded\n const ov = overridesByFw.get(f.id) ?? [];\n const retired = new Set(ov.filter((o: any) => o.kind === 'retired').map((o: any) => o.statement_id + '|' + o.target_ref));\n const embedded: FrameworkMapping[] = (mappings ?? [])\n .filter((m: any) => m.framework_id === f.id)\n .map((m: any) => ({\n statementId: m.statement_id,\n targetRef: m.target_ref,\n kind: m.kind,\n confidence: Number(m.confidence),\n provenance: m.provenance ?? { method: 'imported' },\n }));\n const overlay: FrameworkMapping[] = ov\n .filter((o: any) => o.kind !== 'retired')\n .map((o: any) => ({\n statementId: o.statement_id,\n targetRef: o.target_ref,\n kind: o.kind,\n confidence: Number(o.confidence),\n provenance: { method: 'human', reviewedBy: o.created_by ?? 'overlay', note: o.note ?? undefined },\n }));\n\n const bridge = new Map<string, FrameworkMapping>();\n for (const m of embedded) bridge.set(m.statementId + '|' + m.targetRef, m);\n for (const m of overlay) bridge.set(m.statementId + '|' + m.targetRef, m);\n const finalMappings = [...bridge.values()].filter((m) => !retired.has(m.statementId + '|' + m.targetRef));\n\n const hydrated = FrameworkPackSchema.safeParse({\n manifest: {\n id: f.pack_id,\n name: f.name,\n specVersion: f.spec_version || '1.0',\n contentVersion: f.content_version,\n subject: f.subject,\n languages: f.languages,\n gradeModel: f.grade_model,\n provenance: f.provenance,\n trust: f.trust,\n },\n statements: stmts,\n mappings: finalMappings,\n });\n if (!hydrated.success) {\n throw new Error('loadPacksForOrg: hydrated pack \"' + f.pack_id + '\" failed schema: ' + hydrated.error.issues[0]?.message);\n }\n\n return { ...hydrated.data, dbId: f.id, status: f.status, organizationCode: f.organization_code ?? null } as HydratedPack;\n });\n }\n}\n","import type { FrameworkPack } from '../standards/frameworkPackSchema';\n\n/**\n * Deterministic STANDARD_STACK.md generator (Phase 2).\n *\n * Replaces the old anti-pattern where @researcher was asked to \"cite authentic\n * standards\" from memory (hallucinated IDs). The SOT document is now RENDERED\n * from the Standards Registry packs adopted for the course — verbatim statements,\n * canonical IDs, zero LLM involvement.\n */\nexport interface StandardStackOptions {\n projectId: string;\n packs: FrameworkPack[];\n /** Overall course grade band (canonical numeric) for coverage scoping. */\n courseGradeBand?: [number, number];\n language?: string;\n}\n\nfunction bandLabel(band: readonly number[]): string {\n return band[0] === band[1] ? `L${band[0]}` : `L${band[0]}–L${band[1]}`;\n}\n\nexport function buildStandardStackMarkdown(opts: StandardStackOptions): string {\n const { projectId, packs, courseGradeBand, language } = opts;\n const lines: string[] = [];\n\n lines.push('---');\n lines.push(`id: \"${projectId.toUpperCase()}-STANDARD-STACK\"`);\n lines.push(`title: \"Standard Stack: ${projectId}\"`);\n lines.push('type: \"STANDARD_STACK\"');\n lines.push('phase: \"P1\"');\n lines.push('version: \"v2.0-deterministic\"');\n lines.push(`generatedAt: \"${new Date().toISOString()}\"`);\n lines.push('source: \"Standards Registry (deterministic render — not LLM-generated)\"');\n lines.push('---');\n lines.push('');\n lines.push('# STANDARD STACK — Hệ tiêu chuẩn tham chiếu');\n lines.push('');\n\n if (packs.length === 0) {\n lines.push('> ⚠️ No Framework Pack adopted for this course. Generation will run WITHOUT standards grounding');\n lines.push('> (no statement anchoring, no Standards Alignment judge dimension, no coverage gate).');\n lines.push('> Import a pack via the Standards Registry before generating for standards-bound courses.');\n return lines.join('\\n');\n }\n\n for (const pack of packs) {\n const m = pack.manifest;\n lines.push(`## ${m.name}`);\n lines.push('');\n lines.push(`- **Pack ID:** \\`${m.id}\\` (content ${m.contentVersion}, contract v${m.specVersion})`);\n lines.push(`- **Trust:** ${m.trust} — ${m.trust === 'verified' ? 'platform-curated' : 'org-imported'}`);\n lines.push(`- **Nguồn:** ${m.provenance.sourceRef}${m.provenance.sourceUrl ? ' (' + m.provenance.sourceUrl + ')' : ''}`);\n lines.push(`- **License:** ${m.provenance.license}`);\n lines.push(`- **Grade range (manifest):** ${bandLabel(m.gradeModel.range)}`);\n lines.push('');\n lines.push('### Statements (verbatim — binding targets)');\n lines.push('');\n lines.push('| ID | Band | Text (verbatim) | Keywords |');\n lines.push('|---|---|---|---|');\n\n const statements = courseGradeBand\n ? pack.statements.filter((s) => Math.max(s.gradeBand[0], courseGradeBand[0]) <= Math.min(s.gradeBand[1], courseGradeBand[1]))\n : pack.statements;\n\n for (const s of statements) {\n const text = (language && s.texts[language]) || Object.values(s.texts)[0];\n const mapped = (pack.mappings ?? []).filter((mp) => mp.statementId === s.id);\n const mapNote = mapped.length > 0 ? ` → ${mapped.map((mp) => mp.targetRef + ' (' + mp.kind + ')').join(', ')}` : '';\n lines.push(`| \\`${s.id}\\` | ${bandLabel(s.gradeBand)} | ${text.replace(/\\|/g, '\\\\|')} | ${(s.keywords || []).join(', ')}${mapNote ? ' |' + mapNote : ' |'}`);\n }\n lines.push('');\n }\n\n lines.push('---');\n lines.push('');\n lines.push('*Document rendered deterministically from the Standards Registry. Statement texts are COPIED VERBATIM from the cited sources and are binding for generation, judging, and coverage reporting.*');\n return lines.join('\\n');\n}\n","{\n \"manifest\": {\n \"id\": \"csta-k12-2017\",\n \"name\": \"CSTA K-12 Computer Science Standards (2017)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2017.1\",\n \"subject\": \"computing\",\n \"languages\": [\n \"en\"\n ],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [\n 3,\n 12\n ]\n },\n \"provenance\": {\n \"sourceRef\": \"CSTA K-12 Computer Science Standards, Revised 2017 - csteachers.org\",\n \"sourceUrl\": \"https://www.csteachers.org/page/standards\",\n \"license\": \"CC BY-NC-SA 4.0 (cited verbatim for alignment use)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-08-29T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"1B-AP-08\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Demonstrate that programs can be combined with other programs to create new solutions.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"combine\",\n \"programs\",\n \"composition\",\n \"reuse\",\n \"modules\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-10\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Create programs that include sequences, events, loops, and conditionals.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\",\n \"knowledge\": \"PROCEDURAL\"\n },\n \"keywords\": [\n \"sequence\",\n \"events\",\n \"loops\",\n \"conditionals\",\n \"control structures\",\n \"for\",\n \"while\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-11\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Decompose (break down) problems into smaller, manageable subproblems to facilitate the program development process.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Analyze\"\n },\n \"keywords\": [\n \"decomposition\",\n \"subproblems\",\n \"problem breakdown\",\n \"algorithm\",\n \"divide\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-12\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Modify, remix, or include portions of other programs in one's own work to develop something new or add more advanced features.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Create\"\n },\n \"keywords\": [\n \"remix\",\n \"modify\",\n \"iterate\",\n \"extend programs\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-AP-15\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Test and debug (identify and fix errors) a program or algorithm to ensure it runs as intended.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Algorithms & Programming\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Evaluate\"\n },\n \"keywords\": [\n \"test\",\n \"debug\",\n \"errors\",\n \"troubleshooting\",\n \"fix\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Algorithms & Programming\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n },\n {\n \"id\": \"1B-IC-21\",\n \"gradeBand\": [\n 6,\n 8\n ],\n \"texts\": {\n \"en\": \"Use public domain or creative commons media, and refrain from copying or using material created by others without permission.\"\n },\n \"classifications\": [\n {\n \"axis\": \"strand\",\n \"value\": \"Impacts of Computing\"\n }\n ],\n \"bloomHint\": {\n \"process\": \"Apply\"\n },\n \"keywords\": [\n \"copyright\",\n \"creative commons\",\n \"public domain\",\n \"digital citizenship\",\n \"license\"\n ],\n \"sourceRef\": \"CSTA K-12 2017, Level 1B (Grades 6-8), Impacts of Computing\",\n \"provenance\": {\n \"method\": \"source_official\"\n }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:FOR_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-10\",\n \"targetRef\": \"ontora:WHILE_LOOP\",\n \"kind\": \"covers\",\n \"confidence\": 0.85,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-11\",\n \"targetRef\": \"ontora:PROBLEM_DECOMPOSITION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": {\n \"method\": \"human\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-08\",\n \"targetRef\": \"ontora:EVENT_BASED_PROGRAMMING\",\n \"kind\": \"partial\",\n \"confidence\": 0.7,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n },\n {\n \"statementId\": \"1B-AP-15\",\n \"targetRef\": \"ontora:TROUBLESHOOTING_STEPS\",\n \"kind\": \"covers\",\n \"confidence\": 0.9,\n \"provenance\": {\n \"method\": \"ai_draft\",\n \"reviewedBy\": \"thanh01pmt\"\n }\n }\n ]\n}\n","{\n \"manifest\": {\n \"id\": \"acm-ieee-cs2023\",\n \"name\": \"ACM/IEEE-CS/AAAI Computer Science Curricula 2023 (CS2023)\",\n \"specVersion\": \"1.0\",\n \"contentVersion\": \"2023.1\",\n \"subject\": \"computing\",\n \"languages\": [\"en\"],\n \"gradeModel\": {\n \"type\": \"grades\",\n \"range\": [9, 16]\n },\n \"provenance\": {\n \"sourceRef\": \"ACM/IEEE-CS/AAAI Computer Science Curricula 2023 - cs2023.org\",\n \"sourceUrl\": \"https://cs2023.org\",\n \"license\": \"ACM / IEEE Computer Society (cited verbatim for curriculum alignment)\",\n \"importedBy\": \"platform\",\n \"importedAt\": \"2026-09-11T00:00:00.000Z\"\n },\n \"trust\": \"verified\"\n },\n \"statements\": [\n {\n \"id\": \"CS2023-SDF-01\",\n \"gradeBand\": [9, 14],\n \"texts\": {\n \"en\": \"Design, implement, test, and debug programs using basic computation, standard conditional and iterative structures, and functions.\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Software Development Fundamentals (SDF)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-1 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Apply\" },\n \"keywords\": [\"algorithms\", \"control structures\", \"functions\", \"variables\", \"debugging\", \"programming\", \"implementation\"],\n \"sourceRef\": \"CS2023, Software Development Fundamentals, Program Construction\",\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"id\": \"CS2023-SDF-02\",\n \"gradeBand\": [9, 14],\n \"texts\": {\n \"en\": \"Apply fundamental data structures (arrays, lists, stacks, queues, hash maps) to represent collections of data and solve algorithmic problems.\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Software Development Fundamentals (SDF)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-1 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Apply\" },\n \"keywords\": [\"data structures\", \"arrays\", \"lists\", \"hash maps\", \"collections\", \"stacks\", \"queues\"],\n \"sourceRef\": \"CS2023, Software Development Fundamentals, Fundamental Data Structures\",\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"id\": \"CS2023-AL-01\",\n \"gradeBand\": [10, 16],\n \"texts\": {\n \"en\": \"Analyze and compare the time and space complexity of fundamental algorithms using asymptotic notation (Big-O).\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Algorithms and Complexity (AL)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-1 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Analyze\" },\n \"keywords\": [\"complexity\", \"big-o\", \"efficiency\", \"sorting\", \"searching\", \"asymptotic\", \"runtime\"],\n \"sourceRef\": \"CS2023, Algorithms and Complexity, Basic Analysis\",\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"id\": \"CS2023-SE-01\",\n \"gradeBand\": [9, 16],\n \"texts\": {\n \"en\": \"Decompose complex problems into modular software components applying principles of abstraction, encapsulation, and separation of concerns.\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Software Engineering (SE)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-1 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Create\" },\n \"keywords\": [\"modularity\", \"abstraction\", \"software design\", \"refactoring\", \"encapsulation\", \"architecture\"],\n \"sourceRef\": \"CS2023, Software Engineering, Software Design and Architecture\",\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"id\": \"CS2023-SEC-01\",\n \"gradeBand\": [9, 16],\n \"texts\": {\n \"en\": \"Incorporate defensive programming and fundamental cybersecurity principles (least privilege, input validation, secure data handling) into software development.\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Security (SEC)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-1 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Apply\" },\n \"keywords\": [\"security\", \"defensive programming\", \"input validation\", \"cybersecurity\", \"vulnerabilities\"],\n \"sourceRef\": \"CS2023, Security, Secure Software Development\",\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"id\": \"CS2023-AI-01\",\n \"gradeBand\": [10, 16],\n \"texts\": {\n \"en\": \"Formulate machine learning tasks, prepare training and evaluation datasets, and evaluate model performance using standard metrics.\"\n },\n \"classifications\": [\n { \"axis\": \"Knowledge Area\", \"value\": \"Artificial Intelligence (AI)\" },\n { \"axis\": \"Core Tier\", \"value\": \"Tier-2 Core\" }\n ],\n \"bloomHint\": { \"process\": \"Evaluate\" },\n \"keywords\": [\"artificial intelligence\", \"machine learning\", \"dataset\", \"evaluation\", \"model\", \"accuracy\"],\n \"sourceRef\": \"CS2023, Artificial Intelligence, Machine Learning Fundamentals\",\n \"provenance\": { \"method\": \"source_official\" }\n }\n ],\n \"mappings\": [\n {\n \"statementId\": \"CS2023-SDF-01\",\n \"targetRef\": \"ontora:PROGRAM_CONSTRUCTION\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"statementId\": \"CS2023-SDF-02\",\n \"targetRef\": \"ontora:DATA_STRUCTURES\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"statementId\": \"CS2023-AL-01\",\n \"targetRef\": \"ontora:ALGORITHM_COMPLEXITY\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"statementId\": \"CS2023-SE-01\",\n \"targetRef\": \"ontora:SOFTWARE_ARCHITECTURE\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"statementId\": \"CS2023-SEC-01\",\n \"targetRef\": \"ontora:DEFENSIVE_PROGRAMMING\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n },\n {\n \"statementId\": \"CS2023-AI-01\",\n \"targetRef\": \"ontora:MACHINE_LEARNING\",\n \"kind\": \"covers\",\n \"confidence\": 0.95,\n \"provenance\": { \"method\": \"source_official\" }\n }\n ]\n}\n","import { FrameworkPackSchema, type FrameworkPack } from './frameworkPackSchema';\n\nimport csta2017 from './data/csta-k12-2017.json';\nimport acmCs2023 from './data/acm-ieee-cs2023.json';\n\n/**\n * Bundled Standards Packs — dữ liệu chuẩn kèm sẵn trong kit (user chọn trong Composer\n * Project Settings → Gates → Standards Packs; Composer truyền standardsPackIds xuống).\n * Pack mới: thêm file JSON validate theo FrameworkPackSchema vào src/standards/data/ rồi đăng ký aquí.\n */\nconst BUNDLED_PACK_RECORDS: Record<string, unknown> = {\n 'csta-k12-2017': csta2017,\n 'acm-ieee-cs2023': acmCs2023,\n};\n\n/** Pack ids mà kit đóng gói sẵn (để UI settings hiển thị đúng danh sách khả dụng). */\nexport const BUNDLED_STANDARDS_PACK_IDS: string[] = Object.keys(BUNDLED_PACK_RECORDS).sort();\n\nconst parsedPackCache = new Map<string, FrameworkPack>();\n\n/**\n * Resolve danh sách pack id → FrameworkPack[] đã validate. Id không biết được bỏ qua (log warn),\n * config sai không bao giờ làm pipeline chết.\n */\nexport function resolveStandardsPacks(packIds: string[] | undefined | null): FrameworkPack[] {\n if (!packIds || packIds.length === 0) return [];\n const packs: FrameworkPack[] = [];\n for (const id of packIds) {\n if (parsedPackCache.has(id)) {\n packs.push(parsedPackCache.get(id) as FrameworkPack);\n continue;\n }\n const raw = BUNDLED_PACK_RECORDS[id];\n if (!raw) {\n console.warn(`[standards] pack '${id}' không tồn tại trong kit — bỏ qua.`);\n continue;\n }\n const parsed = FrameworkPackSchema.safeParse(raw);\n if (!parsed.success) {\n console.warn(`[standards] pack '${id}' fail schema — bỏ qua:`, parsed.error.issues[0]?.message);\n continue;\n }\n parsedPackCache.set(id, parsed.data);\n packs.push(parsed.data);\n }\n return packs;\n}\n\n/**\n * Tìm statement theo id (ví dụ \"1B-AP-10\" hoặc \"csta-k12-2017:1B-AP-10\") trong tất cả các pack kèm sẵn.\n */\nexport function findStandardStatement(statementIdOrRef: string): {\n packId: string;\n packTitle: string;\n statementId: string;\n description: string;\n category?: string;\n gradeBand?: string;\n} | null {\n if (!statementIdOrRef) return null;\n const [packPrefix, ...rest] = statementIdOrRef.split(':');\n const targetId = rest.length > 0 ? rest.join(':') : statementIdOrRef;\n const packs = resolveStandardsPacks(BUNDLED_STANDARDS_PACK_IDS);\n\n for (const pack of packs) {\n if (rest.length > 0 && pack.manifest.id !== packPrefix) continue;\n const stmt = pack.statements.find((s) => s.id.toLowerCase() === targetId.toLowerCase());\n if (stmt) {\n const description = stmt.texts['en'] || Object.values(stmt.texts)[0] || '';\n const category = stmt.classifications && stmt.classifications.length > 0\n ? stmt.classifications.map((c) => c.value).join(', ')\n : undefined;\n const gradeBand = Array.isArray(stmt.gradeBand)\n ? (stmt.gradeBand[0] === stmt.gradeBand[1] ? String(stmt.gradeBand[0]) : `${stmt.gradeBand[0]}-${stmt.gradeBand[1]}`)\n : undefined;\n\n return {\n packId: pack.manifest.id,\n packTitle: pack.manifest.name,\n statementId: stmt.id,\n description,\n category,\n gradeBand,\n };\n }\n }\n return null;\n}\n\n/**\n * Biểu thức chính quy phát hiện mã chuẩn giáo dục (CSTA K-12 từ 1A đến 3B bao gồm Level 2, và ACM/IEEE CS2023).\n */\nexport const STANDARD_REF_REGEX = /\\b(?:(?:csta-k12-2017|acm-ieee-cs2023):)?(?:[1-3][A-B]?-[A-Z]{2}-\\d{2}|CS2023-[A-Z0-9_-]+)\\b/gi;\n\n/**\n * Trích xuất toàn bộ các standard statement ref duy nhất từ văn bản.\n */\nexport function extractStandardRefs(text: string | undefined | null): string[] {\n if (!text) return [];\n const matches = Array.from(text.matchAll(STANDARD_REF_REGEX)).map((m) => m[0]);\n return Array.from(new Set(matches));\n}"]}
|