SDM
SDM · live example

Java Developer → Senior

Real artifacts from the reference repository: a competency graph, a certification level, machine-checked coverage, and a generated export. One source of truth, everything else is derived.

1 Ontology
→
2 Profile
→
3 Coverage
→
4 Export

01 Ontology — 13 skills in the graph, 8 in scope

Nodes of any kind in a single graph. Each skill is a YAML file — id, name, description, optional links to other nodes.

ontology/skills/core-java.yaml

Core Java

JVM, types, OOP, collections, concurrency, lambdas, Stream API, exceptions, annotations.

ontology/skills/spring-framework.yaml

Spring Framework

IoC/DI, Spring Boot, MVC, REST, security, transactions, JDBC/JPA, testing.

ontology/skills/spring-ai.yaml

Spring AI

ChatClient, models, advisors, tool calling, embeddings, vector stores, structured output.

# ontology/skills/core-java.yaml
id: core-java
name: Core Java
description: JVM, типы данных, ООП, коллекции, многопоточность…
depends_on: []
related_to: []
databases testing devops architecture langchain4j +5 more in the graph

02 Profile — java-developer · senior · threshold 0.7

A profile selects from the ontology and sets a threshold. A level states the requirement per skill: skill · depth · weight. Weights sum to 1 — the level is a target, computed, not described.

SkillDepthWeight
core-java0.90.25
spring-framework0.90.25
spring-ai0.70.1
langchain4j0.60.1
databases0.90.1
testing0.90.1
architecture0.90.05
devops0.90.05
# certifications/levels/senior.yaml
level: senior  threshold: 0.7
requirements:
  - skill: core-java  depth: 0.9  weight: 0.25
  - skill: spring-framework  depth: 0.9  weight: 0.25
  - skill: spring-ai  depth: 0.7  weight: 0.1
  - … 5 more …

03 Coverage — checked by machine, gaps are fixed

The gap set is computed by a fixed definition — identical across all implementations. Here: 32 questions in the library, checked against each skill's required depth.

SkillQuestionsDepthStatus
core-java30.9
ok
spring-framework50.9
ok
spring-ai40.7
ok
langchain4j40.60 → need 0.6
ok
databases40.9
ok
testing50.9
ok
architecture50.63 → need 0.9
thin
devops40.63 → need 0.9
thin
Work items are generated, not guessed. Same ontology + profile → same gap set in any implementation.
→ Add questions with difficulty ≥ 0.63 for architecture and devops.

04 Export — test-java-developer-senior.json

Everything derived is generated: a test package for agents and external systems, one artifact, no hand-written reports.

{
  schemaVersion: "sdm.export.test/v1",
  profile: "java-developer", level: "senior", threshold: 0.7,
  requirements: [ /* 8 skills · depth · weight */ ],
  questions: [ /* 32 questions · 3 types */ ]
}
32 questions 8 skills threshold 70% 12 glossary terms
This is one export flavor. The same specs generate other outputs: export matrix, export kit, export learning --format course, export mermaid — the presentation layer is fully open.