Hi — thanks for open-sourcing this, the prerequisite graph is genuinely useful.
While exploring the data I ran a small consistency check and wanted to flag a few edges for your review. I'm not certain these are errors — you'd know the source curricula far better than I do, and some may well be intentional — but they share a pattern that seemed worth a second look.
What I checked
For every dependency topicId depends on prerequisiteId, I compared the two topics' age ranges. I flagged edges where the prerequisite's age range sits entirely above the topic's (prerequisite.ageRangeStart > topic.ageRangeEnd) — meaning there's no age at which a learner would have the prerequisite before reaching the topic that depends on it.
Reproducible:
import topics from './data/topics.json' with { type: 'json' };
import deps from './data/dependencies.json' with { type: 'json' };
const byId = new Map(topics.topics.map(t => [t.id, t]));
const flagged = deps.dependencies.filter(d => {
const t = byId.get(d.topicId), p = byId.get(d.prerequisiteId);
return p && t && p.ageRangeStart > t.ageRangeEnd; // prereq range fully above topic range
});
Note: a broader check (prereq.ageRangeStart > topic.ageRangeStart) returns 56, but 51 of those have overlapping ranges and are very likely just approximate age labeling — I don't think those are worth your time. The 5 below are the ones where the ranges are fully disjoint.
The 5 flagged edges
All 5 are soft edges. In several, the reason text describes the prerequisite as reinforcing or supporting the dependent topic, which reads more like enrichment than a prerequisite — consistent with (but not proof of) a reversed edge. Format is prerequisite (age) → depended-on-by → topic (age), then the verbatim reason.
1. Nets of 3-D Shapes (8–11) → Edges, vertices, and faces (6–7)
reason: "Counting edges, vertices, and faces is reinforced by analysing nets, where each face is visible as a separate 2-D shape"
2. Drawing Force Diagrams (7–12) → Pushes & Pulls (5–6)
reason: "Understanding pushes and pulls as forces is supported by the arrow representation of magnitude and direction"
3. Reading Distance-Time Graphs (10–13) → Predicting Motion Patterns (8–9)
reason: "Making and recording measurements of motion to predict future motion uses distance-time graph representation"
4. Material Properties Vocabulary (9–11) → Choosing the Right Material (6–8)
reason: "Comparing suitability of materials for uses requires property vocabulary to articulate why one material is better than another"
5. Reviewing Own Writing (8–10) → Responding to Writing Feedback (5–7)
reason: "Re-reading your own writing to check it makes sense and has the intended effect is the practical application of the writing self-evaluation habit"
Possible interpretations (for each, you'd know which applies)
- the edge direction is reversed (the "prerequisite" is actually the later, enriching skill), or
- one of the two age ranges is mislabeled, or
- it's an intended soft/forward-looking link and working as designed.
Happy to open a PR if any of these turn out to be edges you'd like flipped or re-aged — just let me know which, since I didn't want to guess at fixes. Thanks again for releasing this.
Hi — thanks for open-sourcing this, the prerequisite graph is genuinely useful.
While exploring the data I ran a small consistency check and wanted to flag a few edges for your review. I'm not certain these are errors — you'd know the source curricula far better than I do, and some may well be intentional — but they share a pattern that seemed worth a second look.
What I checked
For every dependency
topicId depends on prerequisiteId, I compared the two topics' age ranges. I flagged edges where the prerequisite's age range sits entirely above the topic's (prerequisite.ageRangeStart > topic.ageRangeEnd) — meaning there's no age at which a learner would have the prerequisite before reaching the topic that depends on it.Reproducible:
Note: a broader check (
prereq.ageRangeStart > topic.ageRangeStart) returns 56, but 51 of those have overlapping ranges and are very likely just approximate age labeling — I don't think those are worth your time. The 5 below are the ones where the ranges are fully disjoint.The 5 flagged edges
All 5 are
softedges. In several, thereasontext describes the prerequisite as reinforcing or supporting the dependent topic, which reads more like enrichment than a prerequisite — consistent with (but not proof of) a reversed edge. Format is prerequisite (age) → depended-on-by → topic (age), then the verbatim reason.1. Nets of 3-D Shapes (8–11) → Edges, vertices, and faces (6–7)
reason: "Counting edges, vertices, and faces is reinforced by analysing nets, where each face is visible as a separate 2-D shape"
2. Drawing Force Diagrams (7–12) → Pushes & Pulls (5–6)
reason: "Understanding pushes and pulls as forces is supported by the arrow representation of magnitude and direction"
3. Reading Distance-Time Graphs (10–13) → Predicting Motion Patterns (8–9)
reason: "Making and recording measurements of motion to predict future motion uses distance-time graph representation"
4. Material Properties Vocabulary (9–11) → Choosing the Right Material (6–8)
reason: "Comparing suitability of materials for uses requires property vocabulary to articulate why one material is better than another"
5. Reviewing Own Writing (8–10) → Responding to Writing Feedback (5–7)
reason: "Re-reading your own writing to check it makes sense and has the intended effect is the practical application of the writing self-evaluation habit"
Possible interpretations (for each, you'd know which applies)
Happy to open a PR if any of these turn out to be edges you'd like flipped or re-aged — just let me know which, since I didn't want to guess at fixes. Thanks again for releasing this.