Distributable Path frameworks, installable via the Path: Add framework command from any Path installation.
A user runs Path: Add framework, picks a framework from the index, and Path downloads each declared file into their space. No manual copying, no hand-encoding YAML.
A Framework is the externally-defined standards: HCPC publishes the CPD standards, AdvanceHE publishes PSF, UoL publishes the TSPP descriptors. The framework is the what — the rules of the game.
A Path is your specific instance of pursuing recognition under that framework. It has a status, a target date, your own claims, your own timeline. The Path is the who and when — you, this attempt, this cycle.
A bundle in this registry installs both:
- Framework files (
standards/<slug>.md,criteria/<slug>-*.md) — shared documentation; criterion pages query claims byframework, not by Path slug, so they're reusable across multiple Path instances. - A Path scaffold (
paths/<slug>.md,paths/<slug>-coverage.md) — a starter Path tied to that framework, ready for the user to edit.
Most users have one Path per framework and never think about the distinction. But the architecture supports more:
- A user re-applying after a failed attempt creates a second Path against the same framework — the criterion pages and standards stay shared; only the new
paths/scaffold is added. - A user starting a new revalidation cycle creates a fresh dated Path (
hcpc-cpd-2026,hcpc-cpd-2028); the framework files are not re-installed.
The Path scaffold in each bundle is just a starter. Users can rename, duplicate, or branch it. The framework files are stable across instances.
path-frameworks/
├── index.json Registry — lists all available frameworks
├── README.md This file
└── <slug>/ One folder per framework
├── info.json Bundle manifest: version, files list, entry page
├── paths/<slug>.md
├── paths/<slug>-coverage.md
├── standards/<slug>.md
└── criteria/<slug>-*.md
The index.json is the entry point. It lists each framework with its slug, name, regulator, description, and current version. Path's installer fetches index.json first, presents a picker, then fetches <slug>/info.json to discover which files to install.
{
"frameworks": [
{
"slug": "advance-he-d4",
"name": "AdvanceHE Principal Fellowship (PFHEA, D4)",
"regulator": "AdvanceHE",
"description": "UK Professional Standards Framework — Descriptor 4",
"version": "2024.1"
}
]
}{
"slug": "advance-he-d4",
"name": "AdvanceHE Principal Fellowship (PFHEA, D4)",
"version": "2024.1",
"regulator": "AdvanceHE",
"description": "UK Professional Standards Framework — Descriptor 4",
"source": "https://www.advance-he.ac.uk/.../psf",
"entry_page": "paths/advance-he-d4",
"files": [
"paths/advance-he-d4.md",
"paths/advance-he-d4-coverage.md",
"standards/advance-he-d4.md",
"criteria/d4-1.md",
"criteria/d4-2.md",
"criteria/d4-3.md",
"criteria/d4-4.md"
]
}entry_page is opened automatically after install. files are fetched relative to <slug>/ and written into the user's space at the same relative path (with .md removed for space.writePage).
YYYY.N — year of publication, dot, increment within that year. Bump version in both index.json and the framework's own info.json whenever any bundled file changes. Path's Path: Check framework updates command compares the user's installed version against the registry and prompts to pull when they differ.
- Create
<slug>/and add the bundle files (paths, criteria, standards as markdown). - Add an
info.jsonwith the file list. - Add the framework to
index.json. - Open a PR.
The slug is the framework's identifier across the user's space — it appears in page paths, the path: field on claims, and the paths: list on CPD entries. Choose carefully; renaming after publication breaks every installed instance.