Skip to content

Possible reversed edges / age-label mismatches: 5 prerequisite dependencies where the prerequisite's age range sits entirely above the topic it unlocks #5

Description

@modeselektr

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions