oc-dash-forge — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited oc-dash-forge (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Dashboard and dense-information UI designer. Takes data (from data-architect handoff, upstream spec, or direct input) and produces:
Scope: Design and prototype. Not production data wiring, not backend. Prototype uses mock data that looks realistic.
Entry command: /oc-data-forge (or aliases /oc-dash-forge, /dashforge). Sub-commands use /df-* prefix.
DASH FORGE COMMANDS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Entry: /oc-data-forge (shows this menu)
CORE FLOW
/oc-df-intake Understand users, decisions, data, density requirements
/oc-df-archetype Pick archetype (exec / ops / analyst) with defense
/oc-df-layout Information architecture + grid + component inventory
/oc-df-tokens Design tokens (color semantics, density scale, type ramp)
/oc-df-prototype Build working React prototype with mock data
/oc-df-spec-only Skip prototype — produce design spec only
/oc-df-full Run all phases end-to-end
UTILITIES
/oc-df-audit Quality checks (density, legibility, chart fit, a11y)
/oc-df-status Checkpoint progress
/oc-df-resume Resume from last checkpoint
/df-reset Archive and restart
/oc-df-variants Generate 2-3 layout variants for user to choose
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━/oc-df-full behaviorRuns all phases with one gate:
/oc-df-audit silentlyUser interrupts with "pause" or "change X" to revert to manual control.
/oc-df-spec-only behaviorSkip Phase 3 (prototype). Run phases 0–2, then generate a spec document covering:
Use when the user already has a frontend team and only needs the design, or when iterating on the design before committing to a prototype build.
oc-dash-forge can run standalone OR be invoked by /oc-ux-engineer or /oc-app-architect mid-flow. In both cases:
oc-dash-forge.checkpoint.json to {project-dir}/.checkpoints/sub_skill_invocations entry pointing at the oc-dash-forge checkpoint/status in either skill reads both and surfaces combined progressOn invocation, oc-dash-forge inherits:
| From | Read | Use in |
|---|---|---|
data-architect-handoff.md | Schema, top-10 analytics, platform | Phase 0 intake (what data exists) |
| oc-ux-engineer tokens file | Color/type/spacing tokens | Phase 2 (as constraints, specialize inside) |
| oc-app-architect style book | Brand palette, component patterns | Phase 2 (align tokens with app) |
| parent spec.md | User persona, decision context | Phase 0 intake (shortcut) |
At end of Phase 2, oc-dash-forge writes tokens.ts in the handoff bundle with this format (consumable by oc-ux-engineer):
export const dashboardTokens = {
color: {
neutral: { /* scale */ },
accent: { primary: "#..." },
state: { success: "#...", warning: "#...", danger: "#...", info: "#..." },
series: ["#...", "#...", /* ≤7 colors, colorblind-safe */],
},
density: {
archetype: "exec" | "ops" | "analyst",
kpiFontSize: number,
bodyFontSize: number,
tilePaddingPx: number,
gutterPx: number,
},
type: {
display: { size: number, weight: number },
headline: { size: number, weight: number },
body: { size: number, weight: number },
caption: { size: number, weight: number },
},
chart: {
// recommended defaults for the archetype
gridlineColor: string,
axisLabelColor: string,
tooltipStyle: object,
},
};oc-ux-engineer reads this to update its living component library.
| Use oc-dash-forge when | Use oc-ux-engineer when |
|---|---|
| Screen is primarily data display | Screen is primarily forms / workflow / content |
| ≥3 charts or ≥5 KPIs on the same view | General app UI |
| User mentions "dashboard", "BI", "analytics", "report" | User mentions "app", "page", "component library" |
| Dense info needs scannability design | Design system / token work |
| Upstream is data-architect or a data source | Upstream is discovery / spec |
If both apply (e.g., a data-heavy feature in a larger app), oc-dash-forge handles the dashboard surface and hands component tokens back to oc-ux-engineer for app-wide consistency.
Phase 0: Intake (adaptive — skim upstream, ask gaps)
↓
Phase 1: Archetype Pick (exec / ops / analyst, defend)
↓
Phase 2: Layout + Tokens (IA, grid, density, semantic color)
↓
Phase 3: React Prototype (archetype-routed viz stack, mock data)
↓
Phase 4: Handoff (spec + prototype + integration notes)Before asking anything, check for upstream context:
data-architect-handoff.md in the project dir? Read it — schema, analytics top 10, platform are all relevant./oc-ux-engineer? Read its design spec / tokens for consistency./oc-app-architect? Read the spec + style book.Skim what exists. Only ask what you don't already know.
| Context | Questions |
|---|---|
| Upstream rich (data-architect + oc-ux-engineer context) | 2–4 |
| Some upstream (one handoff doc or spec) | 4–7 |
| Standalone, data source known | 7–10 |
| Standalone, data unclear | 10–15, iterate |
Save intake to checkpoint.
Read `references/archetypes.md` for full patterns.
| Archetype | Users | Density | Decisions | Stack |
|---|---|---|---|---|
| Exec | C-suite, senior leaders | Low — large type, few KPIs | Strategic, monthly | Tremor |
| Ops | Operators, on-call, support | High — small type, many tiles | Tactical, real-time | Recharts |
| Analyst | Data analysts, PMs, researchers | Variable, drill-heavy | Investigative | D3 + Recharts |
ARCHETYPE: [Exec / Ops / Analyst]
WHY THIS, NOT THE ALTERNATIVES
- [2–3 reasons tied to users + decisions + viewing context]
- Runner-up: [archetype] — lost because [specific reason]
DENSITY TARGET
- [Low / Medium / High] — typical tile count, type scale
VIZ STACK
- [Tremor / Recharts / D3+Recharts]
INTERACTION MODEL
- [Passive display / Filter + drill / Full exploration]Hybrid rule: If users span multiple archetypes (e.g., exec views ops dashboard), build for the primary user and provide a "simplified" or "detail" toggle. Don't design a dashboard that tries to serve two archetypes at full fidelity — it always compromises both.
Read `references/design-principles.md` for density rules, scannability hierarchy, color semantics. Read `references/chart-selection.md` for data-shape → chart-type decisions.
Color semantics (not aesthetic — semantic):
| Token | Role | Use |
|---|---|---|
color.neutral.* | Chrome, text, grid | 90% of ink |
color.accent | Primary series | Reserve for what needs attention |
color.success / warning / danger | State | Reserve for actual states |
color.series.* | Categorical palette | ≤7 colors, tested for colorblindness |
Density scale (text + spacing):
Type ramp: 4 steps max (KPI / headline / body / caption)
Read `references/react-patterns.md` for stack-specific boilerplate and mock-data patterns.
| Archetype | Primary | Supplement | Why |
|---|---|---|---|
| Exec | Tremor | — | Tremor's opinionated components match exec density; fast build |
| Ops | Recharts | Tailwind for tiles | Recharts handles real-time updates well; flexible for dense layouts |
| Analyst | D3 | Recharts for standard charts | D3 for custom drill/zoom/linked views; Recharts where standard suffices |
[1,2,3]. Use plausible ranges from the domain.create_file to /mnt/user-data/outputs/ with .tsx extensionmock-data.ts or inline constantSingle artifact for oc-app-architect Phase 6 to build against:
{project-dir}/dash-forge-handoff/
├── spec.md ← design spec + tokens + component inventory
├── prototype.tsx ← React prototype
├── mock-data.ts ← mock data
└── integration-notes.md ← how to wire to real data sourceTell user: "Hand this to /oc-app-architect Phase 6 for build (which decomposes sprints internally)."
Runs on demand and automatically before /oc-df-prototype completion.
| Check | Pass criteria |
|---|---|
| Archetype defense | Pick ties to ≥2 intake answers, runner-up named |
| Primary question | Dashboard answers 1 clear question, stated in the spec |
| Density fits archetype | Tile count, KPI font size, body font size within archetype range (see archetypes.md) |
| Color semantics | Every color token has a named role (chrome/state/accent/series), not just a swatch |
| Chart fit | Every chart matches data shape per chart-selection.md; no anti-patterns |
| Colorblind safe | No red/green-only distinctions; palette tested against deuteranopia |
| ≤7 series per chart | Or explicit binning note with "+N others" tail |
| Drill paths declared | Every interactive tile has a declared drill behavior (none/modal/page) |
| Mock data realism | Passes all four: (1) named entities not "A/B/C", (2) plausible value ranges for the domain, (3) non-uniform distribution with outliers/gaps, (4) row count matches chart type minimums in react-patterns.md |
| Type ramp | ≤5 sizes across the whole dashboard |
| Spacing on scale | All padding/gutter values from 4/8/12/16/24/32/48/64 |
| Contrast | Body text ≥4.5:1, large text ≥3:1 (spot-check 3 tiles minimum) |
| Screen reader | Charts have <title>/<desc> or accompanying data table |
Critical failures block /oc-df-prototype completion.
Every phase output follows:
═══ EXEC SUMMARY ═══
[3–5 bullets, 30-second read]
═══ FULL DETAIL ═══
[Everything the reader needs]Location: {project-dir}/.checkpoints/oc-dash-forge.checkpoint.json Default if unset: /home/claude/dash-forge-session/
Read `references/checkpoint-schema.md` for schema.
Write on: phase end, mid-phase intake, user pause, before destructive ops. Read on: first action each session, before any phase command, on /oc-df-status or /oc-df-resume.
| Phase | Status |
|---|---|
| 0 — Intake | ✅ complete |
| 1 — Archetype | ✅ complete |
| 2 — Layout + Tokens | 🟡 in progress |
| 3 — Prototype | ⚪ not started |
| 4 — Handoff | ⚪ not started |
Large artifacts (prototype file, full spec) stored as file pointers, not inline in checkpoint.
console.error on color contrast and nobody notices. ┌──────────────┐
data-architect ──handoff──►│ oc-dash-forge │──handoff──► oc-app-architect (Phase 6 build)
└──────────────┘
▲
│ routes when UI is data-heavy
┌──────┴───────┐
│ oc-ux-engineer │
└──────────────┘
▲
│ calls during Phase 3 Design
┌──────┴───────┐
│ oc-app-architect│
└──────────────┘Dashboard work is bursty: a single oc-dash-forge run produces a substantial handoff bundle (design spec + prototype + component inventory + integration notes). v1.2 makes that bundle linkable from the PM tool so oc-app-architect's build phase + reviewers can find it without grepping the repo. See oc-integrations-engineer for the canonical PM-MCP patterns.
When /oc-data-forge (or /oc-dash-forge) completes, post:
Dashboard handoff: {archetype} ({Exec / Ops / Analyst})
Layout: {grid-summary}
Components: {N total} ({M new})
Charts: {chart-types-used}
Mock-data fixtures: {fixture-count}
Prototype: dash-forge-handoff/prototype.tsx
Integration notes: dash-forge-handoff/integration-notes.md
/oc-df-audit: PASS (or FAIL: {summary})If routed-from oc-ux-engineer (the typical path), reply on the same ticket where oc-ux-engineer's "Routed to oc-dash-forge" comment lives. The thread reads end-to-end.
The archetype pick (Exec vs Ops vs Analyst) is an architectural decision. v1.2 records it as a structured comment alongside the handoff so the next reviewer can see why the dashboard looks the way it does:
Archetype: {choice}
Reason: {one-line — usually about the user persona's task shape}
Rejected: {alternatives}, because {reason}./oc-df-audit failuresIf /oc-df-audit fails, post the failure summary on the ticket before the handoff comment, so the ticket reflects the current state. The handoff comment posts only after audit passes.
unparented; the user can link it manually if needed.
references/archetypes.md — Exec / Ops / Analyst patterns (Phase 1)references/design-principles.md — Tufte, Few, density, color semantics (Phase 2)references/chart-selection.md — Data shape → chart type decision tree (Phase 2)references/react-patterns.md — Tremor / Recharts / D3 boilerplate (Phase 3)references/checkpoint-schema.md — Checkpoint JSON schemareferences/example-walkthrough.md — Complete worked example (ops archetype, all phases)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.