ontoref/ontology/schemas/career.ncl

122 lines
5.2 KiB
Plaintext
Raw Normal View History

# Career schema — typed artifacts for skills, work history, talks, positioning, and publication.
# All types include `linked_nodes` referencing IDs from .ontology/core.ncl.
# This creates the DAG connection between career artifacts and the ontology.
#
# Output: .ontology/career.ncl exports to JSON → Nu script generates YAML for cv_repo.
# ── Skill ────────────────────────────────────────────────────────────────────
let proficiency_tier_type = [| 'Expert, 'Advanced, 'Intermediate, 'Foundational |] in
let skill_type = {
id | String,
name | String,
tier | proficiency_tier_type,
proficiency | Number,
years | Number | default = 0,
linked_nodes | Array String | default = [],
evidence | Array String | default = [],
note | String | default = "",
} in
# ── Work Experience ───────────────────────────────────────────────────────────
let work_experience_type = {
id | String,
company | String,
company_url | String | default = "",
position | String,
date_start | String,
date_end | String | default = "present",
location | String | default = "",
description | String | default = "",
achievements | Array String | default = [],
tools | Array String | default = [],
linked_nodes | Array String | default = [],
} in
# ── Talk / Activity ───────────────────────────────────────────────────────────
let talk_status_type = [| 'Idea, 'Proposed, 'Accepted, 'Delivered, 'Archived |] in
let talk_type = {
id | String,
title | String,
event | String,
date | String | default = "",
location | String | default = "",
description | String | default = "",
slides_url | String | default = "",
video_url | String | default = "",
repository | String | default = "",
status | talk_status_type,
linked_nodes | Array String | default = [],
} in
# ── Positioning Strategy ──────────────────────────────────────────────────────
let positioning_type = {
id | String,
name | String,
core_message | String,
target | String,
linked_nodes | Array String | default = [],
note | String | default = "",
} in
# ── Company Target ─────────────────────────────────────────────────────────────
let company_status_type = [| 'Active, 'Watching, 'Inactive, 'Applied, 'Closed |] in
let company_target_type = {
id | String,
name | String,
url | String | default = "",
status | company_status_type,
fit_signals | Array String | default = [],
linked_nodes | Array String | default = [],
note | String | default = "",
} in
# ── Publication Card ──────────────────────────────────────────────────────────
# Project cards for blog grid, CV, and proposals.
# project_node references a node ID in .ontology/core.ncl.
let project_pub_status_type = [| 'Active, 'Beta, 'Maintenance, 'Archived, 'Stealth |] in
# Career overlay for a project card.
# project_node references the canonical card in the portfolio repo.
# Only career-specific fields live here — display metadata lives in portfolio/projects/{id}/card.ncl.
let publication_card_type = {
project_node | String,
featured | Bool | default = false,
sort_order | Number | default = 0,
# Optional overrides — when career context needs a different tagline than the portfolio card
tagline_override | String | default = "",
} in
# ── Root export ───────────────────────────────────────────────────────────────
{
ProficiencyTier = proficiency_tier_type,
TalkStatus = talk_status_type,
CompanyStatus = company_status_type,
ProjectPubStatus = project_pub_status_type,
Skill = skill_type,
WorkExperience = work_experience_type,
Talk = talk_type,
Positioning = positioning_type,
CompanyTarget = company_target_type,
PublicationCard = publication_card_type,
CareerConfig = {
skills | Array skill_type | default = [],
experiences | Array work_experience_type | default = [],
talks | Array talk_type | default = [],
positioning | Array positioning_type | default = [],
companies | Array company_target_type | default = [],
publications | Array publication_card_type | default = [],
},
}