@thanh01.pmt/domain-kit 0.3.0 → 0.4.0
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/README.md +42 -11
- package/dist/{chunk-Y7MRFFDJ.mjs → chunk-HILSUZOF.mjs} +3 -3
- package/dist/{chunk-Y7MRFFDJ.mjs.map → chunk-HILSUZOF.mjs.map} +1 -1
- package/dist/{chunk-MCHHEBH3.mjs → chunk-LZQLLAYP.mjs} +5 -5
- package/dist/{chunk-MCHHEBH3.mjs.map → chunk-LZQLLAYP.mjs.map} +1 -1
- package/dist/{chunk-MSRKUZLY.mjs → chunk-PKUEOSZ3.mjs} +23 -2
- package/dist/chunk-PKUEOSZ3.mjs.map +1 -0
- package/dist/{chunk-LKSVTRQE.mjs → chunk-QJF4QCBJ.mjs} +28 -3
- package/dist/chunk-QJF4QCBJ.mjs.map +1 -0
- package/dist/curriculumFeedEmitter-6IK6PFDH.mjs +4 -0
- package/dist/{curriculumFeedEmitter-FYAWMPE6.mjs.map → curriculumFeedEmitter-6IK6PFDH.mjs.map} +1 -1
- package/dist/{curriculumFeedSchema-C8ZP3XMi.d.ts → curriculumFeedSchema-B66H3gEV.d.cts} +140 -0
- package/dist/{curriculumFeedSchema-C8ZP3XMi.d.cts → curriculumFeedSchema-B66H3gEV.d.ts} +140 -0
- package/dist/feed/index.cjs +46 -0
- package/dist/feed/index.cjs.map +1 -1
- package/dist/feed/index.d.cts +1 -1
- package/dist/feed/index.d.ts +1 -1
- package/dist/feed/index.mjs +2 -2
- package/dist/graph/index.cjs +1 -0
- package/dist/graph/index.d.cts +1 -1
- package/dist/graph/index.d.ts +1 -1
- package/dist/graph/index.mjs +1 -1
- package/dist/{hybridGraphPipeline-NZAWAPt_.d.ts → hybridGraphPipeline-DXQDbBEj.d.ts} +14 -2
- package/dist/{hybridGraphPipeline-BhFyh3cm.d.cts → hybridGraphPipeline-dT-bio-3.d.cts} +14 -2
- package/dist/index.cjs +47 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +4 -4
- package/dist/pipeline/index.cjs +46 -0
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.d.cts +2 -2
- package/dist/pipeline/index.d.ts +2 -2
- package/dist/pipeline/index.mjs +4 -4
- package/dist/schemas/index.cjs +21 -0
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +1 -1
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-LKSVTRQE.mjs.map +0 -1
- package/dist/chunk-MSRKUZLY.mjs.map +0 -1
- package/dist/curriculumFeedEmitter-FYAWMPE6.mjs +0 -4
package/dist/index.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ export { i as ArchEdgeSchema, A as ArchNodeSchema, x as ArchitectureDetail, j as
|
|
|
2
2
|
export { b as Concept, d as ConceptCategory, c as ConceptCategorySchema, m as ConceptIntroduction, i as ConceptIntroductionSchema, C as ConceptSchema, l as DevelopmentPhase, D as DevelopmentPhaseSchema, j as HybridGraph, H as HybridGraphSchema, g as KnowledgeGraph, K as KnowledgeGraphSchema, f as LearningPathStep, L as LearningPathStepSchema, a as ProblemType, P as ProblemTypeSchema, k as ProjectConceptLink, h as ProjectConceptLinkSchema, e as SubjectInfo, S as SubjectInfoSchema } from './hybridGraphSchema-nrUeSwpU.cjs';
|
|
3
3
|
export { ExperimentProcedureSchema, GrammarRuleSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, LanguageConceptExtension, LanguageConceptExtensionSchema, MathConceptExtension, MathConceptExtensionSchema, MathTheoremSchema, ScienceConceptExtension, ScienceConceptExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.cjs';
|
|
4
4
|
export { a as DetectionConfidenceSchema, e as DomainCategory, D as DomainCategorySchema, c as DomainProfile, b as DomainProfileSchema, g as GraphType, G as GraphTypeSchema, d as InputType, I as InputTypeSchema, f as LearningMode, L as LearningModeSchema } from './domainProfileSchema-CwT3Ffsw.cjs';
|
|
5
|
-
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-
|
|
5
|
+
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-B66H3gEV.cjs';
|
|
6
6
|
export { C as CppParseResult, P as PythonParseResult, S as SwiftParseResult, T as TsParseResult, f as mergeCppResults, d as mergePythonResults, m as mergeSwiftResults, b as mergeTsResults, e as parseCppFile, c as parsePythonFile, p as parseSwiftFile, a as parseTsFile } from './cpp-CZUPqJt9.cjs';
|
|
7
7
|
export { P as ParsedSyllabus, a as SyllabusTopic, S as SyllabusUnit, p as parseSyllabus } from './syllabusParser-MSX1fEzW.cjs';
|
|
8
8
|
export { K as Keyword, S as SourceContext, e as extractKeywords } from './keywordExtractor-BxlGRMHC.cjs';
|
|
@@ -10,7 +10,7 @@ export { FileRelevanceScore, scoreByContent, scoreByPath, scoreFiles, selectRele
|
|
|
10
10
|
export { DetectDomainOptions, DetectInputTypeOptions, DetectLearningModeOptions, DomainDetectionResult, InputTypeDetectionResult, LearningModeDetectionResult, detectDomain, detectInputType, detectLearningMode } from './detector/index.cjs';
|
|
11
11
|
export { D as DetectDomainProfileOptions, d as detectDomainProfile } from './domainProfileDetector-bzugdQmS.cjs';
|
|
12
12
|
export { CIO_CODE_RE, CONCEPT_CODE_RE, DepthLayerAudit, ExtractOverviewOptions, ExtractScaffoldOptions, ExtractStepsOptions, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, cioActionSlug, cioCode, conceptCodeFromName, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, sioCode, standardStatement, techTagFor, uloCode } from './graph/index.cjs';
|
|
13
|
-
export { H as Hallucination,
|
|
13
|
+
export { H as Hallucination, j as HybridGraphPipelineOptions, k as HybridGraphPipelineResult, K as KnowledgeGraphPipelineOptions, a as KnowledgeGraphPipelineResult, f as KnowledgeGraphVerificationReport, V as VerifyOptions, i as auditPhasePlan, e as auditSyllabusCoverage, c as breakPrerequisiteCycles, d as detectPrerequisiteCycles, h as generateHybridGraph, g as generateKnowledgeGraph, b as verifyKnowledgeGraph, v as verifyProjectGraph } from './hybridGraphPipeline-dT-bio-3.cjs';
|
|
14
14
|
export { C as ConceptMapping, E as EscalateOptions, e as escalateAndMapConcepts } from './conceptEscalator-ltRLtPhf.cjs';
|
|
15
15
|
export { ConceptMatch, ProposedConcept, ResolveConceptsOptions, ResolveConceptsResult, ResolvedConcept, resolveConcepts } from './concepts/index.cjs';
|
|
16
16
|
export { AssembleOptions, AssembledMilestone, AssembledPhase, AssembledRoadmap, assembleRoadmap } from './assembly/index.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { i as ArchEdgeSchema, A as ArchNodeSchema, x as ArchitectureDetail, j as
|
|
|
2
2
|
export { b as Concept, d as ConceptCategory, c as ConceptCategorySchema, m as ConceptIntroduction, i as ConceptIntroductionSchema, C as ConceptSchema, l as DevelopmentPhase, D as DevelopmentPhaseSchema, j as HybridGraph, H as HybridGraphSchema, g as KnowledgeGraph, K as KnowledgeGraphSchema, f as LearningPathStep, L as LearningPathStepSchema, a as ProblemType, P as ProblemTypeSchema, k as ProjectConceptLink, h as ProjectConceptLinkSchema, e as SubjectInfo, S as SubjectInfoSchema } from './hybridGraphSchema-nrUeSwpU.js';
|
|
3
3
|
export { ExperimentProcedureSchema, GrammarRuleSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, LanguageConceptExtension, LanguageConceptExtensionSchema, MathConceptExtension, MathConceptExtensionSchema, MathTheoremSchema, ScienceConceptExtension, ScienceConceptExtensionSchema, ShapeSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, WiringSchema } from './schemas/index.js';
|
|
4
4
|
export { a as DetectionConfidenceSchema, e as DomainCategory, D as DomainCategorySchema, c as DomainProfile, b as DomainProfileSchema, g as GraphType, G as GraphTypeSchema, d as InputType, I as InputTypeSchema, f as LearningMode, L as LearningModeSchema } from './domainProfileSchema-CwT3Ffsw.js';
|
|
5
|
-
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-
|
|
5
|
+
export { g as CurriculumFeed, C as CurriculumFeedSchema, i as FeedEdge, c as FeedEdgeSchema, j as FeedGrouping, d as FeedGroupingSchema, F as FeedKeywordsSchema, h as FeedNode, b as FeedNodeSchema, f as FeedPhase, e as FeedPhaseSchema, a as FeedScaffoldCandidateSchema, v as validateCurriculumFeed } from './curriculumFeedSchema-B66H3gEV.js';
|
|
6
6
|
export { C as CppParseResult, P as PythonParseResult, S as SwiftParseResult, T as TsParseResult, f as mergeCppResults, d as mergePythonResults, m as mergeSwiftResults, b as mergeTsResults, e as parseCppFile, c as parsePythonFile, p as parseSwiftFile, a as parseTsFile } from './cpp-CZUPqJt9.js';
|
|
7
7
|
export { P as ParsedSyllabus, a as SyllabusTopic, S as SyllabusUnit, p as parseSyllabus } from './syllabusParser-MSX1fEzW.js';
|
|
8
8
|
export { K as Keyword, S as SourceContext, e as extractKeywords } from './keywordExtractor-DU5XRN8-.js';
|
|
@@ -10,7 +10,7 @@ export { FileRelevanceScore, scoreByContent, scoreByPath, scoreFiles, selectRele
|
|
|
10
10
|
export { DetectDomainOptions, DetectInputTypeOptions, DetectLearningModeOptions, DomainDetectionResult, InputTypeDetectionResult, LearningModeDetectionResult, detectDomain, detectInputType, detectLearningMode } from './detector/index.js';
|
|
11
11
|
export { D as DetectDomainProfileOptions, d as detectDomainProfile } from './domainProfileDetector-DHb1T0zB.js';
|
|
12
12
|
export { CIO_CODE_RE, CONCEPT_CODE_RE, DepthLayerAudit, ExtractOverviewOptions, ExtractScaffoldOptions, ExtractStepsOptions, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, cioActionSlug, cioCode, conceptCodeFromName, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, sioCode, standardStatement, techTagFor, uloCode } from './graph/index.js';
|
|
13
|
-
export { H as Hallucination,
|
|
13
|
+
export { H as Hallucination, j as HybridGraphPipelineOptions, k as HybridGraphPipelineResult, K as KnowledgeGraphPipelineOptions, a as KnowledgeGraphPipelineResult, f as KnowledgeGraphVerificationReport, V as VerifyOptions, i as auditPhasePlan, e as auditSyllabusCoverage, c as breakPrerequisiteCycles, d as detectPrerequisiteCycles, h as generateHybridGraph, g as generateKnowledgeGraph, b as verifyKnowledgeGraph, v as verifyProjectGraph } from './hybridGraphPipeline-DXQDbBEj.js';
|
|
14
14
|
export { C as ConceptMapping, E as EscalateOptions, e as escalateAndMapConcepts } from './conceptEscalator-YfMKIKCZ.js';
|
|
15
15
|
export { ConceptMatch, ProposedConcept, ResolveConceptsOptions, ResolveConceptsResult, ResolvedConcept, resolveConcepts } from './concepts/index.js';
|
|
16
16
|
export { AssembleOptions, AssembledMilestone, AssembledPhase, AssembledRoadmap, assembleRoadmap } from './assembly/index.js';
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import './chunk-R57WTNXW.mjs';
|
|
2
|
-
export { runDomainPipeline, runHybridGraphPipeline, runKnowledgeGraphPipeline, runProjectGraphPipeline } from './chunk-
|
|
3
|
-
export { emitCurriculumFeed } from './chunk-
|
|
2
|
+
export { runDomainPipeline, runHybridGraphPipeline, runKnowledgeGraphPipeline, runProjectGraphPipeline } from './chunk-LZQLLAYP.mjs';
|
|
3
|
+
export { emitCurriculumFeed } from './chunk-QJF4QCBJ.mjs';
|
|
4
4
|
export { ArchEdgeSchema, ArchNodeSchema, ArchitectureDetailSchema, CapabilitySchema, ConceptCategorySchema, ConceptIntroductionSchema, ConceptSchema, DataIntegrationSchema, DecompositionSchema, DetectionConfidenceSchema, DevelopmentPhaseSchema, DevelopmentStageSchema, DomainCategorySchema, DomainProfileSchema, ExperienceComponentSchema, ExperienceSchema, ExperimentProcedureSchema, FeatureSchema, GrammarRuleSchema, GraphTypeSchema, HardwareFeatureExtensionSchema, HardwareStepSchema, HardwareTaskExtensionSchema, HardwareTechStackExtensionSchema, HybridGraphSchema, ImplementationSchema, InputTypeSchema, JourneySchema, JourneyStepSchema, KnowledgeGraphSchema, LanguageConceptExtensionSchema, LearningModeSchema, LearningPathStepSchema, MathConceptExtensionSchema, MathTheoremSchema, MilestoneDecompositionSchema, MissingGapSchema, NavigationSchema, ProblemTypeSchema, ProductGoalSchema, ProductSchema, ProductUserSchema, ProjectConceptLinkSchema, ProjectGraphSchema, ProjectInfoSchema, RequirementSchema, ScienceConceptExtensionSchema, ScreenSchema, ShapeSchema, StepEffortSchema, StepOutcomeSchema, StepSchema, SubjectInfoSchema, TaskEffortSchema, TaskOutcomeSchema, TaskSchema, TechDebtSchema, TechStackSchema, ThreeDesignFeatureExtensionSchema, ThreeDesignTaskExtensionSchema, ThreeDesignTechStackExtensionSchema, UiStateSchema, WiringSchema } from './chunk-VCPIWJ7R.mjs';
|
|
5
|
-
export { CurriculumFeedSchema, FeedEdgeSchema, FeedGroupingSchema, FeedKeywordsSchema, FeedNodeSchema, FeedPhaseSchema, FeedScaffoldCandidateSchema, validateCurriculumFeed } from './chunk-
|
|
5
|
+
export { CurriculumFeedSchema, FeedEdgeSchema, FeedGroupingSchema, FeedKeywordsSchema, FeedNodeSchema, FeedPhaseSchema, FeedScaffoldCandidateSchema, validateCurriculumFeed } from './chunk-PKUEOSZ3.mjs';
|
|
6
6
|
import './chunk-IJZUV7N3.mjs';
|
|
7
7
|
export { mergeCppResults, mergePythonResults, mergeSwiftResults, mergeTsResults, parseCppFile, parsePythonFile, parseSwiftFile, parseTsFile } from './chunk-DRVOV5ZD.mjs';
|
|
8
8
|
export { scoreByContent, scoreByPath, scoreFiles, selectRelevantFiles } from './chunk-RKRNOVKO.mjs';
|
|
@@ -10,7 +10,7 @@ export { extractKeywords } from './chunk-XMHKWHVK.mjs';
|
|
|
10
10
|
import './chunk-7XGWW6CB.mjs';
|
|
11
11
|
export { detectDomain, detectDomainProfile, detectInputType, detectLearningMode } from './chunk-BL5NBKPH.mjs';
|
|
12
12
|
import './chunk-ZKLT27T4.mjs';
|
|
13
|
-
export { CIO_CODE_RE, CONCEPT_CODE_RE, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, auditSyllabusCoverage, breakPrerequisiteCycles, cioActionSlug, cioCode, conceptCodeFromName, detectPrerequisiteCycles, escalateAndMapConcepts, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, generateHybridGraph, generateKnowledgeGraph, sioCode, standardStatement, techTagFor, uloCode, verifyKnowledgeGraph, verifyProjectGraph } from './chunk-
|
|
13
|
+
export { CIO_CODE_RE, CONCEPT_CODE_RE, LEARNER_CLAUSE, SIO_CODE_RE, ULO_CODE_RE, assignConceptCodes, auditDepthLayers, auditPhasePlan, auditSyllabusCoverage, breakPrerequisiteCycles, cioActionSlug, cioCode, conceptCodeFromName, detectPrerequisiteCycles, escalateAndMapConcepts, extractFeatureSteps, extractFeatureStepsBatched, extractProjectOverview, extractScaffold, generateHybridGraph, generateKnowledgeGraph, sioCode, standardStatement, techTagFor, uloCode, verifyKnowledgeGraph, verifyProjectGraph } from './chunk-HILSUZOF.mjs';
|
|
14
14
|
export { parseSyllabus } from './chunk-T4Y2DE2W.mjs';
|
|
15
15
|
import './chunk-KMYENICQ.mjs';
|
|
16
16
|
export { resolveConcepts } from './chunk-KNDBODUQ.mjs';
|
package/dist/pipeline/index.cjs
CHANGED
|
@@ -88,6 +88,27 @@ var init_curriculumFeedSchema = __esm({
|
|
|
88
88
|
references: zod.z.array(zod.z.object({ file: zod.z.string().min(1), evidence: zod.z.string().default("") })).default([]),
|
|
89
89
|
feature_id: zod.z.string().nullable().default(null),
|
|
90
90
|
concept_ref: zod.z.string().nullable().default(null),
|
|
91
|
+
// P52/T2.1: outcome.user_visible projected from the ProjectGraph step — the
|
|
92
|
+
// tangible checkpoint the session-cutting planner aims for (empty when the
|
|
93
|
+
// step declares no user-visible result). Concepts carry '' by default.
|
|
94
|
+
user_visible_deliverable: zod.z.string().default(""),
|
|
95
|
+
// P52/T3.1 — depth-reconcile inputs (optional/defaulted so old feeds
|
|
96
|
+
// validate unchanged):
|
|
97
|
+
// • depth_variants: minutes to teach this node at each depth level.
|
|
98
|
+
// ULO (know-it-exists) ≤ CIO (mechanism) ≤ SIO (implementation). All 3
|
|
99
|
+
// required so a downgrade never turns an anchor teach into a zero.
|
|
100
|
+
// • depth_scaffold_candidates: parallel to scaffold_candidates but
|
|
101
|
+
// acts on DEPTH (e.g. SIO→CIO) instead of lesson time.
|
|
102
|
+
// • is_core: concept is a Master-Tree core concept — reconciler must
|
|
103
|
+
// never downgrade it; escalate instead.
|
|
104
|
+
depth_variants: zod.z.object({ ulo: zod.z.number().int().nonnegative(), cio: zod.z.number().int().nonnegative(), sio: zod.z.number().int().nonnegative() }).optional(),
|
|
105
|
+
depth_scaffold_candidates: zod.z.array(zod.z.object({
|
|
106
|
+
from_depth: zod.z.enum(["ulo", "cio", "sio"]),
|
|
107
|
+
to_depth: zod.z.enum(["ulo", "cio", "sio"]),
|
|
108
|
+
minutes_saved: zod.z.number().int().nonnegative(),
|
|
109
|
+
reason: zod.z.string().default("")
|
|
110
|
+
})).optional(),
|
|
111
|
+
is_core: zod.z.boolean().default(false),
|
|
91
112
|
// Progressive-completion bookkeeping (feed v2, additive):
|
|
92
113
|
// phase_id = development phase that introduces/uses this node;
|
|
93
114
|
// introduce_aspect = how the phase teaches a concept node (first intro, advanced
|
|
@@ -172,6 +193,10 @@ function feedNodeFromStep(step, featureId) {
|
|
|
172
193
|
references: arr(step.files).map((f) => ({ file: str(f), evidence: "step file" })).filter((f) => f.file),
|
|
173
194
|
feature_id: featureId,
|
|
174
195
|
concept_ref: null,
|
|
196
|
+
// P52/T2.1: carry the step's tangible outcome so the planner can cut
|
|
197
|
+
// sessions at user-visible checkpoints instead of raw minute counts.
|
|
198
|
+
user_visible_deliverable: str(step.outcome?.user_visible),
|
|
199
|
+
is_core: false,
|
|
175
200
|
phase_id: "",
|
|
176
201
|
introduce_aspect: null
|
|
177
202
|
};
|
|
@@ -190,6 +215,20 @@ function deriveConceptDepthHint(concept) {
|
|
|
190
215
|
if (str(concept.cio) || prereqs.length >= 1) return "cio";
|
|
191
216
|
return "ulo";
|
|
192
217
|
}
|
|
218
|
+
function deriveDepthInputs(minutes, depth) {
|
|
219
|
+
const ulo = Math.max(5, Math.round(minutes * 0.35));
|
|
220
|
+
const cio = Math.max(ulo + 5, Math.round(minutes * 0.65));
|
|
221
|
+
const sio = Math.max(cio + 5, minutes);
|
|
222
|
+
const variants = { ulo, cio, sio };
|
|
223
|
+
const candidates = [];
|
|
224
|
+
if (depth === "sio") {
|
|
225
|
+
candidates.push({ from_depth: "sio", to_depth: "cio", minutes_saved: sio - cio, reason: "SIO implementation practice deferred \u2014 CIO mechanism suffices for downstream consumers" });
|
|
226
|
+
}
|
|
227
|
+
if (depth === "cio" || depth === "sio") {
|
|
228
|
+
candidates.push({ from_depth: depth, to_depth: "ulo", minutes_saved: (depth === "sio" ? sio : cio) - ulo, reason: "Mechanism deferred \u2014 ULO awareness suffices (know-it-exists); never below the ULO floor" });
|
|
229
|
+
}
|
|
230
|
+
return { depth_variants: variants, depth_scaffold_candidates: candidates };
|
|
231
|
+
}
|
|
193
232
|
function feedNodeFromConcept(concept) {
|
|
194
233
|
const id = str(concept.id);
|
|
195
234
|
const pts = arr(concept.problem_types).map((p) => str(p.bloom_level, "Understand")).filter((b) => b in BLOOM_RANK).sort((a, b) => BLOOM_RANK[a] - BLOOM_RANK[b]);
|
|
@@ -219,6 +258,10 @@ function feedNodeFromConcept(concept) {
|
|
|
219
258
|
references,
|
|
220
259
|
feature_id: null,
|
|
221
260
|
concept_ref: id,
|
|
261
|
+
user_visible_deliverable: "",
|
|
262
|
+
// concepts are taught, not shipped — checkpoints live on product steps
|
|
263
|
+
...deriveDepthInputs(Math.max(0, Math.round(num(concept.estimated_minutes, 15))), deriveConceptDepthHint(concept)),
|
|
264
|
+
is_core: false,
|
|
222
265
|
phase_id: "",
|
|
223
266
|
introduce_aspect: null
|
|
224
267
|
};
|
|
@@ -325,6 +368,8 @@ function emitFromHybrid(hybrid, opts) {
|
|
|
325
368
|
prevNode.concept_codes = [str(c.code) || cid];
|
|
326
369
|
prevNode.keywords = { all: strs(c.keywords), new: [], prerequisite: [] };
|
|
327
370
|
prevNode.scaffolding = { scaffold_candidates: [], core_value_minutes: 0 };
|
|
371
|
+
prevNode.depth_variants = { ulo: prevNode.estimated_minutes, cio: prevNode.estimated_minutes, sio: prevNode.estimated_minutes };
|
|
372
|
+
prevNode.depth_scaffold_candidates = [];
|
|
328
373
|
nodes.push(prevNode);
|
|
329
374
|
conceptOrder.push(prevNode.id);
|
|
330
375
|
continue;
|
|
@@ -349,6 +394,7 @@ function emitFromHybrid(hybrid, opts) {
|
|
|
349
394
|
node.name = str(c.name, cid) + " (advanced)";
|
|
350
395
|
node.phase_id = pid;
|
|
351
396
|
node.introduce_aspect = "advanced";
|
|
397
|
+
node.depth_scaffold_candidates = [{ from_depth: "sio", to_depth: "cio", minutes_saved: Math.round(node.estimated_minutes * 0.3), reason: "advanced revisit may drop to CIO recap without breaking first-teach chain" }];
|
|
352
398
|
node.estimated_minutes = Math.max(15, Math.round(node.estimated_minutes * 0.5));
|
|
353
399
|
node.concept_codes = [str(c.code) || cid];
|
|
354
400
|
edges.push({ from: cid, to: revisitId, kind: "knowledge", reason: "advanced revisit of " + cid + " at phase " + pid });
|