@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.
@@ -857,9 +857,170 @@ var csta_k12_2017_default = {
857
857
  ]
858
858
  };
859
859
 
860
+ // src/standards/data/acm-ieee-cs2023.json
861
+ var acm_ieee_cs2023_default = {
862
+ manifest: {
863
+ id: "acm-ieee-cs2023",
864
+ name: "ACM/IEEE-CS/AAAI Computer Science Curricula 2023 (CS2023)",
865
+ specVersion: "1.0",
866
+ contentVersion: "2023.1",
867
+ subject: "computing",
868
+ languages: ["en"],
869
+ gradeModel: {
870
+ type: "grades",
871
+ range: [9, 16]
872
+ },
873
+ provenance: {
874
+ sourceRef: "ACM/IEEE-CS/AAAI Computer Science Curricula 2023 - cs2023.org",
875
+ sourceUrl: "https://cs2023.org",
876
+ license: "ACM / IEEE Computer Society (cited verbatim for curriculum alignment)",
877
+ importedBy: "platform",
878
+ importedAt: "2026-09-11T00:00:00.000Z"
879
+ },
880
+ trust: "verified"
881
+ },
882
+ statements: [
883
+ {
884
+ id: "CS2023-SDF-01",
885
+ gradeBand: [9, 14],
886
+ texts: {
887
+ en: "Design, implement, test, and debug programs using basic computation, standard conditional and iterative structures, and functions."
888
+ },
889
+ classifications: [
890
+ { axis: "Knowledge Area", value: "Software Development Fundamentals (SDF)" },
891
+ { axis: "Core Tier", value: "Tier-1 Core" }
892
+ ],
893
+ bloomHint: { process: "Apply" },
894
+ keywords: ["algorithms", "control structures", "functions", "variables", "debugging", "programming", "implementation"],
895
+ sourceRef: "CS2023, Software Development Fundamentals, Program Construction",
896
+ provenance: { method: "source_official" }
897
+ },
898
+ {
899
+ id: "CS2023-SDF-02",
900
+ gradeBand: [9, 14],
901
+ texts: {
902
+ en: "Apply fundamental data structures (arrays, lists, stacks, queues, hash maps) to represent collections of data and solve algorithmic problems."
903
+ },
904
+ classifications: [
905
+ { axis: "Knowledge Area", value: "Software Development Fundamentals (SDF)" },
906
+ { axis: "Core Tier", value: "Tier-1 Core" }
907
+ ],
908
+ bloomHint: { process: "Apply" },
909
+ keywords: ["data structures", "arrays", "lists", "hash maps", "collections", "stacks", "queues"],
910
+ sourceRef: "CS2023, Software Development Fundamentals, Fundamental Data Structures",
911
+ provenance: { method: "source_official" }
912
+ },
913
+ {
914
+ id: "CS2023-AL-01",
915
+ gradeBand: [10, 16],
916
+ texts: {
917
+ en: "Analyze and compare the time and space complexity of fundamental algorithms using asymptotic notation (Big-O)."
918
+ },
919
+ classifications: [
920
+ { axis: "Knowledge Area", value: "Algorithms and Complexity (AL)" },
921
+ { axis: "Core Tier", value: "Tier-1 Core" }
922
+ ],
923
+ bloomHint: { process: "Analyze" },
924
+ keywords: ["complexity", "big-o", "efficiency", "sorting", "searching", "asymptotic", "runtime"],
925
+ sourceRef: "CS2023, Algorithms and Complexity, Basic Analysis",
926
+ provenance: { method: "source_official" }
927
+ },
928
+ {
929
+ id: "CS2023-SE-01",
930
+ gradeBand: [9, 16],
931
+ texts: {
932
+ en: "Decompose complex problems into modular software components applying principles of abstraction, encapsulation, and separation of concerns."
933
+ },
934
+ classifications: [
935
+ { axis: "Knowledge Area", value: "Software Engineering (SE)" },
936
+ { axis: "Core Tier", value: "Tier-1 Core" }
937
+ ],
938
+ bloomHint: { process: "Create" },
939
+ keywords: ["modularity", "abstraction", "software design", "refactoring", "encapsulation", "architecture"],
940
+ sourceRef: "CS2023, Software Engineering, Software Design and Architecture",
941
+ provenance: { method: "source_official" }
942
+ },
943
+ {
944
+ id: "CS2023-SEC-01",
945
+ gradeBand: [9, 16],
946
+ texts: {
947
+ en: "Incorporate defensive programming and fundamental cybersecurity principles (least privilege, input validation, secure data handling) into software development."
948
+ },
949
+ classifications: [
950
+ { axis: "Knowledge Area", value: "Security (SEC)" },
951
+ { axis: "Core Tier", value: "Tier-1 Core" }
952
+ ],
953
+ bloomHint: { process: "Apply" },
954
+ keywords: ["security", "defensive programming", "input validation", "cybersecurity", "vulnerabilities"],
955
+ sourceRef: "CS2023, Security, Secure Software Development",
956
+ provenance: { method: "source_official" }
957
+ },
958
+ {
959
+ id: "CS2023-AI-01",
960
+ gradeBand: [10, 16],
961
+ texts: {
962
+ en: "Formulate machine learning tasks, prepare training and evaluation datasets, and evaluate model performance using standard metrics."
963
+ },
964
+ classifications: [
965
+ { axis: "Knowledge Area", value: "Artificial Intelligence (AI)" },
966
+ { axis: "Core Tier", value: "Tier-2 Core" }
967
+ ],
968
+ bloomHint: { process: "Evaluate" },
969
+ keywords: ["artificial intelligence", "machine learning", "dataset", "evaluation", "model", "accuracy"],
970
+ sourceRef: "CS2023, Artificial Intelligence, Machine Learning Fundamentals",
971
+ provenance: { method: "source_official" }
972
+ }
973
+ ],
974
+ mappings: [
975
+ {
976
+ statementId: "CS2023-SDF-01",
977
+ targetRef: "ontora:PROGRAM_CONSTRUCTION",
978
+ kind: "covers",
979
+ confidence: 0.95,
980
+ provenance: { method: "source_official" }
981
+ },
982
+ {
983
+ statementId: "CS2023-SDF-02",
984
+ targetRef: "ontora:DATA_STRUCTURES",
985
+ kind: "covers",
986
+ confidence: 0.95,
987
+ provenance: { method: "source_official" }
988
+ },
989
+ {
990
+ statementId: "CS2023-AL-01",
991
+ targetRef: "ontora:ALGORITHM_COMPLEXITY",
992
+ kind: "covers",
993
+ confidence: 0.95,
994
+ provenance: { method: "source_official" }
995
+ },
996
+ {
997
+ statementId: "CS2023-SE-01",
998
+ targetRef: "ontora:SOFTWARE_ARCHITECTURE",
999
+ kind: "covers",
1000
+ confidence: 0.95,
1001
+ provenance: { method: "source_official" }
1002
+ },
1003
+ {
1004
+ statementId: "CS2023-SEC-01",
1005
+ targetRef: "ontora:DEFENSIVE_PROGRAMMING",
1006
+ kind: "covers",
1007
+ confidence: 0.95,
1008
+ provenance: { method: "source_official" }
1009
+ },
1010
+ {
1011
+ statementId: "CS2023-AI-01",
1012
+ targetRef: "ontora:MACHINE_LEARNING",
1013
+ kind: "covers",
1014
+ confidence: 0.95,
1015
+ provenance: { method: "source_official" }
1016
+ }
1017
+ ]
1018
+ };
1019
+
860
1020
  // src/standards/bundledPacks.ts
861
1021
  var BUNDLED_PACK_RECORDS = {
862
- "csta-k12-2017": csta_k12_2017_default
1022
+ "csta-k12-2017": csta_k12_2017_default,
1023
+ "acm-ieee-cs2023": acm_ieee_cs2023_default
863
1024
  };
864
1025
  var BUNDLED_STANDARDS_PACK_IDS = Object.keys(BUNDLED_PACK_RECORDS).sort();
865
1026
  var parsedPackCache = /* @__PURE__ */ new Map();
@@ -886,6 +1047,36 @@ function resolveStandardsPacks(packIds) {
886
1047
  }
887
1048
  return packs;
888
1049
  }
1050
+ function findStandardStatement(statementIdOrRef) {
1051
+ if (!statementIdOrRef) return null;
1052
+ const [packPrefix, ...rest] = statementIdOrRef.split(":");
1053
+ const targetId = rest.length > 0 ? rest.join(":") : statementIdOrRef;
1054
+ const packs = resolveStandardsPacks(BUNDLED_STANDARDS_PACK_IDS);
1055
+ for (const pack of packs) {
1056
+ if (rest.length > 0 && pack.manifest.id !== packPrefix) continue;
1057
+ const stmt = pack.statements.find((s) => s.id.toLowerCase() === targetId.toLowerCase());
1058
+ if (stmt) {
1059
+ const description = stmt.texts["en"] || Object.values(stmt.texts)[0] || "";
1060
+ const category = stmt.classifications && stmt.classifications.length > 0 ? stmt.classifications.map((c) => c.value).join(", ") : void 0;
1061
+ const gradeBand = Array.isArray(stmt.gradeBand) ? stmt.gradeBand[0] === stmt.gradeBand[1] ? String(stmt.gradeBand[0]) : `${stmt.gradeBand[0]}-${stmt.gradeBand[1]}` : void 0;
1062
+ return {
1063
+ packId: pack.manifest.id,
1064
+ packTitle: pack.manifest.name,
1065
+ statementId: stmt.id,
1066
+ description,
1067
+ category,
1068
+ gradeBand
1069
+ };
1070
+ }
1071
+ }
1072
+ return null;
1073
+ }
1074
+ var 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;
1075
+ function extractStandardRefs(text) {
1076
+ if (!text) return [];
1077
+ const matches = Array.from(text.matchAll(STANDARD_REF_REGEX)).map((m) => m[0]);
1078
+ return Array.from(new Set(matches));
1079
+ }
889
1080
 
890
1081
  exports.BUNDLED_STANDARDS_PACK_IDS = BUNDLED_STANDARDS_PACK_IDS;
891
1082
  exports.BloomHintSchema = BloomHintSchema;
@@ -897,11 +1088,14 @@ exports.FrameworkStatementSchema = FrameworkStatementSchema;
897
1088
  exports.GradeBandSchema = GradeBandSchema;
898
1089
  exports.MappingKindSchema = MappingKindSchema;
899
1090
  exports.RecordProvenanceSchema = RecordProvenanceSchema;
1091
+ exports.STANDARD_REF_REGEX = STANDARD_REF_REGEX;
900
1092
  exports.StandardsRegistryAdapter = StandardsRegistryAdapter;
901
1093
  exports.buildStandardStackMarkdown = buildStandardStackMarkdown;
902
1094
  exports.buildStandardsContext = buildStandardsContext;
903
1095
  exports.buildStandardsContextBlock = buildStandardsContextBlock;
904
1096
  exports.evaluateStandardsCoverage = evaluateStandardsCoverage;
1097
+ exports.extractStandardRefs = extractStandardRefs;
1098
+ exports.findStandardStatement = findStandardStatement;
905
1099
  exports.lintFrameworkPack = lintFrameworkPack;
906
1100
  exports.resolveStandardsPacks = resolveStandardsPacks;
907
1101
  exports.selectStatementsForLesson = selectStatementsForLesson;