Learning Roadmap release

Learning Roadmap (LearningRoadmap, a free Store/Plugin with app: true) turns the project a learner wants to build into a personal curriculum. Six project-first questions produce a saved plan of real courses with a reason, the relevant lessons, a concrete outcome and an S/M/L capability size for each stop. The plan lives at {viewer}/LearningRoadmap/Plan, reads the learner's existing course progress, and reopens the exact lesson or exercise they last touched. Production target: memex.meshweaver.cloud, public link /LearningRoadmap.

Built by Astra (Codex) on 9–11 September 2026 as Plugins #1625, finished and polished by Claude on 11 September at the maintainer's request. Course-owned learning metadata (topics, milestones, sizes) landed as Education #313 and Reinsurance #193 the same day.

What ships

Piece Where Notes
The app root and cover LearningRoadmap/index.json free, entryPoint and installPaths = LearningRoadmap/Plan, requires Edu@^1.9.0
The plan template LearningRoadmap/Plan.json nodeType: Edu/LearningJourney, workflowVersion: 1; the Store copies it into the learner's home
The questionnaire and plan page Edu/LearningJourney/Source/LearningRoadmapViews.cs one question per screen; Step moves only on Continue/Back
The recommender Edu/LearningJourney/Source/LearningJourneyContent.cs project-led matching against each course's content.learning
Progress projection Edu/LearningJourney/Source/LearningRoadmapProgress.cs read-only over {viewer}/_Progress and _Install; never a second store
Catalog call-to-action and course sizes Edu/CourseCatalog/Source/CourseCatalogLayoutAreas.cs replaces the withdrawn self-assessment link (#1643)
The onboarding step src/MeshWeaver.Courses/LearningPath/LearningPathStep.cs see Onboarding below
Learner guide LearningRoadmap/Guide.md public segment of the app

Decisions

Onboarding

Onboarding is one flow (maintainer, 11 September): the Connections checklist a new chat opens with (Microsoft 365, Teams, Gmail, WhatsApp, …) is the single onboarding surface, and the educational journey is a step inside it. There is no standalone card in the portal. The step's rule ships in the Edu module as LearningPathStep.ObserveDestination: the app cover while the learner has no plan, their own unfinished plan while one exists, nothing once roadmapCreated is set or the portal does not carry the app. LearningPathStepSource registers it as an IChatNudgeSource (MeshWeaver.AI.Nudges, landed with Connections #1670) from CoursesExtensions.AddCourses: id step-learning-path, Order 20 after "Connect your accounts", DoneWhenChosen = false, English with a German translation. Edu 1.10 requires AI@^1.8.0 for it. The portal GUI deliberately does not reference the AI engine, so the source lives in the Edu module.

Putting it on a mesh

Node content deploys through GitSync; the MeshWeaver.Courses assembly deploys through the modules job on a main push. Never hand-create a Space.

  1. Edu (existing, content.version 1.8 → 1.9): git_hub_sync update on Edu, then confirm Edu/LearningJourney and Edu/CourseCatalog are back at compilationStatus: Ok with the new source versions.

  2. LearningRoadmap (new): create a Store/Provision request — the only field you write is requestedAction:

    {
      "id": "LearningRoadmap",
      "namespace": "Admin/Provision",
      "name": "Provision LearningRoadmap",
      "nodeType": "Store/Provision",
      "content": {
        "$type": "ProvisionContent",
        "packageId": "LearningRoadmap",
        "repositoryUrl": "https://github.com/Systemorph/MeshWeaver.Plugins",
        "branch": "main",
        "requestedAction": "Provision"
      }
    }
    

    Omit subdirectory (SystemInstall appends the package id itself). Watch content.state go Requested → Running → Done with no error and a final Compile types: Completed log line.

  3. Course roots (Education and Reinsurance repos): git_hub_sync update on each course Space so its root carries content.learning; the recommender falls back to names and descriptions without it, with plainer stops.

  4. Access: the package is pre-installed (preInstalled: true, since 1.1): the gate writes _Policy publicRead: true, the whole partition is readable by everyone, and the Store's standard-pack sweep copies Plan into every user's home WITHOUT minting a per-user entitlement or _Access grant. @LearningRoadmap/_Access/* therefore holds only Anonymous/Public Viewer and nothing else; a person appearing there is a defect, not an install. (1.0 was merely free, and a free-but-gated package makes the standard-pack sweep enrol every existing user — 60+ Viewer + Commenter grants and entitlement records were minted on memex at 01:12 UTC on 12 September before this was corrected.)

Verifying a release

As an ordinary signed-in learner who owns no course:

The browser walk that automates this is e2e/learning-journey.spec.ts (RUN_LEARNING_JOURNEY=1, a fresh learner session, E2E_USER_ID); see e2e/README.md.

History

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.