-
Notifications
You must be signed in to change notification settings - Fork 0
Profile Data: Accomplishments, Experience & Community
Relevant source files
- src-tauri/src/community.rs
- src-tauri/src/experience.rs
- src-tauri/src/fit.rs
- src-tauri/src/pipeline/filter.rs
- src-tauri/src/pipeline/mod.rs
- src-tauri/src/profile.rs
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.
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.
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
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
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
| 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 |
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 theearliest_startandlatest_endacross all parsed experiences. If a roleis_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_fitinfit.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'syoe_minsrc-tauri/src/fit.rs#144-157
Sources:src-tauri/src/experience.rs#87-127src-tauri/src/fit.rs#94-99
Accomplishments represent specific achievements or projects. Unlike experiences, which are chronological, accomplishments are categorical and demonstrate specific competencies.
-
headline: A short summary of the achievement src-tauri/src/profile.rs#130 -
demonstrates: A list of competency slugs. The parser usesnote::strip_wikilinkto convert[[Distributed Systems]]intodistributed-systemssrc-tauri/src/profile.rs#151 -
body: The full narrative of the accomplishment, used by the LLM in thealignmentstep to provide evidence for why a candidate fits a role src-tauri/src/profile.rs#132
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
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.
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
Sources:src-tauri/src/profile.rs#151src-tauri/src/experience.rs#57src-tauri/src/note.rs#115-119 (referenced via logic)