@ombedzi/osscv
v0.1.0
Published
Open Source CV: Jinja templates, genesis snapshots, and HNSW doctoring verification
Maintainers
Readme
osscv - Open Source CV
Auditable TypeScript library for generating, rendering, and verifying Open Source CVs (public GitHub evidence only, not traditional resumes).
- Jinja-syntax templates via Nunjucks (
templates/cv.jinja) - Genesis snapshots with section embeddings and SHA-256 content hash
- HNSW nearest-neighbor doctoring checks against configurable thresholds
- Ports and adapters so embedders, indexes, PDF engines, and LLM hosts stay swappable
Used in production by Gitwork.
Design
| Layer | Role |
|-------|------|
| domain/ | Pure parse, sectionize, hash, score, model policy |
| ports/ | Embedder, VectorIndex, TemplateRenderer, PdfExporter, CvGenerator |
| adapters/ | Hashing embedder, HNSW, Nunjucks, HTML to PDF |
| application/ | OssCvService facade + createOssCvService factory |
Schema (OSS only)
basics- identity, summary, location (full country name), GitHub handle/avatarskills- skill groups + keywordsrepos- public repositories with summaries (no invented repos)oss- notable contribution impact
No employers, job history, or education sections.
Algorithms
- Sectionize -
basics.summary,skills, eachrepos.*/oss.* - Genesis - immutable
{ document, model, promptVersion, contentHash, sections[] } - Embed - injectable; default
HashingEmbedder(384-d, portable) - Verify - HNSW (or exact for N≤64); fail if mean
< 0.82, any section< 0.65, inventedrepos.*, or untrusted model - Structural diff - JSON path added/removed/changed for UI
Trusted models
See TRUSTED_CV_MODELS in src/domain/models.ts. Genesis from other models is marked untrusted and fails verify.
Usage
npm install @ombedzi/osscv nunjucksimport { createOssCvService, parseOssCvDocument } from "@ombedzi/osscv";
const svc = createOssCvService();
const document = parseOssCvDocument(cvJson);
const genesis = await svc.createGenesis({
document,
model: "Cursor default",
});
const result = await svc.verify({ genesis, candidate: editedJson });
const html = await svc.renderHtml(genesis.document, undefined, {
liveProfileUrl: "https://gitwork.getuigen.dev/login",
gitworkHomeUrl: "https://gitwork.getuigen.dev",
osscvRepoUrl: "https://github.com/darula-hpp/osscv",
});
const pdf = await svc.renderPdf(document);Publish
npm rejects the unscoped name osscv (too similar to osenv). Publish as @ombedzi/osscv:
npm install
npm run build
npm run pack:check
npm run publish:npmprepublishOnly runs tests + build automatically before publish.
Security
This package contains no API keys, tokens, or credentials. Host apps inject LLM/MCP and database adapters separately.
License
MIT
