Skip to content

Profile Data: Accomplishments, Experience & Community

Chazona Baum edited this page Jun 24, 2026 · 1 revision

Relevant source files

This section details how Lodestar parses the user's career history, achievements, and community involvement from the vault's profile/ directory. These entities provide the "Candidate Side" of the alignment equation, used by the scoring engine to determine seniority fit and by the LLM to generate qualitative alignment dossiers.

Data Flow: Vault to Profile Entities

Profile data is stored as Markdown files with YAML frontmatter. The system uses a standard pattern of reading all files in a subdirectory, splitting the frontmatter from the body, and mapping the resulting data into Rust structs.

Profile Parsing Architecture

The following diagram illustrates the relationship between the physical vault files and the code entities used for scoring and alignment.

Profile Data Mapping

flowchart LR
    subgraph subGraph2 ["Logic & Consumers"]
        I["total_months_experience()"]
        J["seniority_fit()"]
        K["Alignment Prompt Builder"]
    end
    subgraph subGraph1 ["Rust Entities (Code Entity Space)"]
        E["Experience struct"]
        F["Accomplishment struct"]
        G["Community struct"]
        H["Positioning String"]
    end
    subgraph subGraph0 ["Vault Storage (Natural Language Space)"]
        A["profile/experience/*.md"]
        B["profile/accomplishments/*.md"]
        C["profile/community/*.md"]
        D["profile/positioning.md"]
    end
    A --> E
    B --> F
    C --> G
    D --> H
    E --> I
    I --> J
    E --> K
    F --> K
    G --> K
    H --> K
Loading

Sources:src-tauri/src/profile.rs#125-161src-tauri/src/experience.rs#10-24src-tauri/src/community.rs#9-18src-tauri/src/fit.rs#94-158


Career Experience & YOE Calculation

The Experience entity represents a professional role. It captures structured data (dates, company, title) and unstructured prose (the note body), which often contains a ## Summary or ## Progression section src-tauri/src/experience.rs#10-24

Experience Struct

Field Type Description
slug String The filename (without extension).
is_current bool True if the role is ongoing. Inferred if end_date is missing src-tauri/src/experience.rs#52-55
competencies Vec<String> List of skill slugs with wikilinks ([[skill]]) stripped src-tauri/src/experience.rs#57
body String The Markdown prose after the frontmatter src-tauri/src/experience.rs#23

The Experience Envelope

Lodestar calculates Years of Experience (YOE) using an "envelope" strategy rather than summing individual segments. This prevents over-counting due to overlapping roles (e.g., a side project during a full-time job) or under-counting due to gaps.

  • total_months_experience: Finds the earliest_start and latest_end across all parsed experiences. If a role is_current, it uses the current date as the end src-tauri/src/experience.rs#96-127
  • Formula: (latest.year - earliest.year) * 12 + (latest.month - earliest.month)src-tauri/src/experience.rs#124-126
  • Consumer: This total is passed to seniority_fit in fit.rs, where it acts as a "YOE Reducer" to scale down the seniority score if the candidate's total months are less than the job's yoe_minsrc-tauri/src/fit.rs#144-157

Sources:src-tauri/src/experience.rs#87-127src-tauri/src/fit.rs#94-99


Accomplishments & Competencies

Accomplishments represent specific achievements or projects. Unlike experiences, which are chronological, accomplishments are categorical and demonstrate specific competencies.

Accomplishment Struct

Community Involvement

The Community entity mirrors the Experience pattern but is stored in profile/community/*.md. It tracks organizations, roles, and relevance_tagssrc-tauri/src/community.rs#9-18 Like accomplishments, these notes are used as context for qualitative alignment rather than hard scoring.

Sources:src-tauri/src/profile.rs#128-161src-tauri/src/community.rs#30-42


Positioning & Wikilink Stripping

Positioning Narrative

The file profile/positioning.md contains the user's high-level career narrative. The read_positioning function discards all frontmatter and returns only the trimmed body text src-tauri/src/profile.rs#166-171 This serves as the "Executive Summary" in LLM prompts.

Wikilink Stripping

Because the vault is designed for Obsidian, many fields contain wikilinks (e.g., demonstrates: [[Rust]]). The profile parsers utilize a utility to strip these markers during ingestion to ensure the internal logic (like competency matching) operates on clean slugs.

Wikilink Processing Logic

flowchart LR
    subgraph subGraph2 ["Clean Slugs"]
        S1["rust"]
        S2["distributed-systems"]
    end
    subgraph note_strip_wikilink_ ["note::strip_wikilink()"]
        P1["Regex: #91;#91;(.*?)#93;#93;"]
    end
    subgraph subGraph0 ["Raw Vault Input"]
        R1["#91;#91;Rust#93;#93;"]
        R2["#91;#91;Distributed Systems#93;#93;"]
    end
    R1 --> P1
    R2 --> P1
    P1 --> S1
    P1 --> S2
Loading

Sources:src-tauri/src/profile.rs#151src-tauri/src/experience.rs#57src-tauri/src/note.rs#115-119 (referenced via logic)

Clone this wiki locally