Overview
Pathway is the presentation layer of the FIT suite. It formats derived data into web pages, CLI output, markdown documents, and agent configuration files.
See the Pathway product page for a high-level overview.
Architecture
Map (data) → Model (derivation) → Presentation (display)
Pathway receives fully derived data from
@forwardimpact/libpathway and formats it for display.
Pathway never performs derivation — it only presents.
Module Structure
products/pathway/src/
├── commands/ # CLI command handlers
├── components/ # Reusable UI components
├── css/ # Stylesheets
├── formatters/ # Output formatting (core layer)
│ ├── agent/ # Agent profile formatters
│ ├── behaviour/ # Behaviour formatters
│ ├── capability/ # Capability formatters
│ ├── checklist/ # Checklist formatters
│ ├── discipline/ # Discipline formatters
│ ├── driver/ # Driver formatters
│ ├── grade/ # Grade formatters
│ ├── job/ # Job definition formatters
│ ├── skill/ # Skill formatters
│ ├── stage/ # Stage formatters
│ └── track/ # Track formatters
├── lib/ # Shared utilities
├── pages/ # Web page modules
└── slides/ # Presentation slides
Formatter Pattern
Every entity has three formatter files:
| File | Purpose | Imports |
|---|---|---|
shared.js |
Pure text transforms (no DOM) | None |
dom.js |
DOM element creation for web UI | shared.js |
markdown.js |
Markdown string generation for CLI/files | shared.js |
Rules
- All presentation logic lives in formatters — pages and commands call formatters, never transform data themselves
- shared.js has no side effects — pure functions only
- dom.js creates elements — returns DOM nodes
- markdown.js returns strings — returns markdown text
Example
// formatters/skill/shared.js
export function formatSkillLevel(level) {
return level.replace(/_/g, " ");
}
// formatters/skill/dom.js
import { formatSkillLevel } from "./shared.js";
export function createSkillBadge(level) {
const span = document.createElement("span");
span.textContent = formatSkillLevel(level);
span.className = `badge badge-${level}`;
return span;
}
// formatters/skill/markdown.js
import { formatSkillLevel } from "./shared.js";
export function skillLevelMarkdown(level) {
return `**${formatSkillLevel(level)}**`;
}
Web Application
The web app is a single-page application that loads data and renders pages client-side.
Pages
| Page | URL Pattern | Displays |
|---|---|---|
| Landing | / |
Overview and navigation |
| Discipline | /discipline/{id} |
Discipline details |
| Job | /job/{discipline}/{grade}/{track} |
Full job definition |
| Skill | /skill/{id} |
Skill details with level descriptions |
| Behaviour | /behaviour/{id} |
Behaviour with maturity descriptions |
| Stage | /stage/{id} |
Lifecycle stage details |
Components
Shared UI components used across pages:
- Skill matrix tables
- Behaviour profile displays
- Navigation elements
- Entity cards and lists
CLI Commands
The fit-pathway CLI provides terminal access to all
derived data.
Entity Browsing
npx fit-pathway skill --list # List all skills
npx fit-pathway discipline --list # List all disciplines
npx fit-pathway grade --list # List all grades
npx fit-pathway track --list # List all tracks
npx fit-pathway behaviour --list # List all behaviours
npx fit-pathway capability --list # List all capabilities
npx fit-pathway stage --list # List all stages
npx fit-pathway driver --list # List all drivers
npx fit-pathway tool --list # List all derived tools
Job Definitions
# Generate a job definition
npx fit-pathway job <discipline> <grade> --track=<track>
# Example
npx fit-pathway job software_engineering L3 --track=platform
Agent Profiles
# Generate agent team for a discipline
npx fit-pathway agent <discipline> --track=<track> --output=./agents
# Output structure:
# ./agents/
# ├── plan.agent.md
# ├── code.agent.md
# ├── review.agent.md
# └── skills/
# ├── SKILL-NAME.md
# └── ...
Templates
Agent output uses Mustache templates:
products/pathway/templates/
├── agent.md.mustache # Agent profile template
├── skill.md.mustache # Skill document template
└── ...
Templates receive derived data and produce markdown files suitable for AI coding assistants (GitHub Copilot, Claude, etc.).
Related Documentation
- Agents — Agent profile derivation
- Reference — File organization and CLI reference
- Core Model — How derivation works