-
Notifications
You must be signed in to change notification settings - Fork 0
decisions
This document records the planning conversation so far from start to finish, including the product clarifications, locked implementation decisions, and the GitHub reference research that followed.
The initial spec established traccia as:
- a local-first CLI
- an evidence-backed skill tree
- incremental, file-by-file ingestion
- immutable raw sources
- explainable skill claims
- optional profile/wiki output downstream of the graph
The early build plan already favored:
- Python first
- narrow, reviewable phases
- evidence extraction before graph or scoring sophistication
- correctness and provenance before UI polish
The project is not job-searching oriented.
The correct framing is:
- reflective self-profile archiving
- skill-graph-first
- evidence-backed self-understanding
This means:
- the main artifact is the skill graph
- profile outputs are downstream reflections of the graph
- recruiter or resume-style ranking logic is not a core product goal
This became a hard architectural rule:
- each file is parsed, segmented, and synthesized independently first
- first-pass extraction uses only the current file and file-local metadata
- cross-file aggregation happens later in canonicalization, scoring, and rendering
This was locked specifically to avoid a corpus-level omniscient summarizer in the critical path.
A broader whole-person archive vision was acknowledged, but MVP and v1 remain skill-graph-first.
Current decision:
- broader non-skill material may be ingested
- in MVP it is only modeled lightly as auxiliary metadata or facets
- it does not become first-class scored graph nodes
This preserves the long-term archive direction without collapsing the product into a vague identity graph.
- SQLite is the canonical derived state.
- Markdown and JSON are projections.
- The system keeps current state plus append-only run history and provenance.
- local canonical nodes plus aliases are the backbone
- external taxonomies such as ESCO or O*NET are optional references
- taxonomy should enrich, not dominate, the graph
- auto-create only from strong evidence or repeated high-signal mentions
- weak candidates go to review
- consumption-led evidence may contribute to awareness and learning
- consumption-led evidence is capped at
L2 -
L3+requires stronger action evidence such as implementation, debugging, ownership, teaching, or equivalent artifact-backed proof
For MVP:
-
prerequisite_ofis curated-only - allowed sources are imported curated taxonomy or explicit human curation
- model suggestions may enter review, but not the canonical graph directly
MVP now includes:
- CLI
- minimal read-only custom graph browser
- Obsidian-friendly markdown export
Obsidian is an export and browsing target, not the primary interactive graph product.
The planning conversation kept full profile outputs in MVP, but under strict gates:
- downstream from the graph only
- accepted or high-confidence non-sensitive claims only
- no raw excerpts by default
- every claim traceable to graph nodes and evidence
- pluggable model runtime
- local storage always
- API-default extraction backend for MVP
- local models remain a supported path, not a blocker
The current intended flow is:
- ingest one file
- parse and preserve spans
- extract evidence from only that file
- validate strict JSON
- canonicalize against existing node catalog
- update person-state scoring
- update graph projections
- update markdown, JSON, profile exports, and append-only log
Important implication:
- no cross-file context at extraction time
- no direct profile writing from raw files
- no prerequisite hallucination path in MVP
For long directory ingests, live graph refreshes may be batched without changing extraction semantics.
Decision:
- extraction remains source-scoped and chunk-scoped
- every accepted evidence item is stored separately before graph recompute
- graph recompute reads stored evidence from SQLite and compares candidate skills against the current catalog
- batching controls only when the rendered graph projection is refreshed
- the system must not replace multiple materials with one lossy batch summary before skill inference
Reasoning:
- source-scoped extraction prevents an early graph mistake from biasing later extraction
- per-source evidence preserves provenance, quotes, timestamps, and reviewability
- batched graph refreshes spend model quota on new evidence before repeated scoring of near-identical intermediate graphs
- final output quality depends on the complete stored evidence set, not on how often intermediate graph files were rendered
The GitHub research confirmed that there is no strong open-source exact match for traccia.
What exists today is stronger in two adjacent categories:
- LLM wiki / knowledge-compilation systems
- graph-report tools
The obvious "skill graph" repos are mostly the wrong domain because they are:
- resume-driven
- job-fit-oriented
- onboarding or learning-path systems
| Repo | Role | Decision |
|---|---|---|
atomicmemory/llm-wiki-compiler |
closest conceptual seed | borrow architecture heavily |
swarmclawai/swarmvault |
provenance and review donor | borrow selected subsystems only |
SamurAIGPT/llm-wiki-agent |
repo and export convention donor | borrow conventions, not engine |
nashsu/llm_wiki |
polished product and queue UX donor | borrow UI ideas only |
safishamsi/graphify |
graph packaging and certainty-label donor | borrow graph semantics and reporting |
Lum1104/Understand-Anything |
graph reporting donor | borrow graph patterns only |
RoninATX/Human-Skill-Tree |
visual motif | UI reference only |
nshadov/personal-skill-tree |
visual motif | UI reference only |
NickSaulnier/SkillGraph and similar repos |
hiring / job-fit anti-reference | do not build from |
saxenauts/persona / hanig/engram
|
whole-person archive caution references | read for warnings, not as a base |
The strongest current recommendation is:
- build
tracciafrom scratch - borrow patterns rather than forking a repo
- treat
atomicmemory/llm-wiki-compileras the closest conceptual parent - treat
swarmvaultas the richest donor for provenance, approvals, and graph/report patterns - treat graph UI examples as separate reference material, not as a product foundation
These defaults are intentionally conservative until a golden corpus exists. They are configurable where the implementation already exposes config, and should be treated as v1 defaults rather than universal claims about skill measurement.
- Strong-evidence auto-create threshold:
thresholds.strong_evidence_auto_create = 0.85. - Review floor:
thresholds.review_confidence_floor = 0.6. - Consumption-only ceiling:
thresholds.consumption_max_level = 2; weak or ambient evidence may show awareness and interest, but it cannot independently imply demonstrated competence. - Recency score is currently stepwise: 0-90 days =>
1.0/active, 91-180 days =>0.7/warming, 181-365 days =>0.4/stale, older =>0.15/historical. - Source reliability is encoded through
SourceCategory,EvidenceType,SignalClass, and the support-score tables. Artifact-backed implementation/debug/design evidence receives the strongest weight; platform activity, metadata-only traces, self-presentation, and ambient interest receive the weakest weight. - Auxiliary non-skill context remains source/evidence metadata in v1. It is not promoted to scored graph nodes.
-
topicandskillremain distinct in storage throughSkillKind. The current UI may render them together when that is simpler, but graph exports preserve the distinction.
The conversation narrowed the project substantially.
What traccia is now:
- a local-first reflective self-profile archive
- centered on a skill graph
- driven by file-by-file evidence extraction
- backed by SQLite as canonical state
- explainable, reviewable, and provenance-heavy
- exportable to markdown, JSON, a minimal graph browser, and a cited reflective profile set
What it is not:
- a resume scorer
- a recruiter tool
- a generic whole-person identity graph
- a corpus-level summarizer that jumps straight to conclusions
The archive boundary widened again after the initial build:
- Reddit exports
- Google exports
- Twitter/X exports
- AI conversation exports
- social media profiles
- and other personal data exports are now in scope as inputs
This does not change the core product into an undifferentiated identity graph. The updated stance is:
The system should preserve broad digital traces without allowing them to inflate competence claims.
Therefore the model is now conceptually split into four layers:
- canonical skill graph
- evidence layer
- person skill overlay
- identity overlay
Two distinct questions must be represented:
- "How deep is the demonstrated competence?"
- "How central is this to the person's recurring self and long-term practice?"
This means current mastery and core-self centrality must not collapse into one score.
The following are useful but weak by default:
- search history
- bookmarks
- follows / likes / reposts
- short social posts
- profile bios
- AI chats without surrounding artifact evidence
These may support:
- awareness
- interest
- identity context
- review hints
They must not independently drive high skill levels.
Node pages should eventually answer:
- where this skill fits
- when it first appeared
- when it was first strongly demonstrated
- when it peaked
- how current it is
- what it connects to
- how deep the competence is
- how central it is to the person's overall self-model