You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Four sample repos that exercise the scan pipeline's cross-repo feature detection, skill profiling, code location tracking — plus an end-to-end test suite that drives the UI of the running app.
Repos
Repo
Type
Port
Modules
taskflow-api
FastAPI backend
9001
auth, tasks, notifications, billing
taskflow-worker
Python background jobs
—
auth, notifications, reminders, billing
taskflow-web
Vue 3 frontend
9002
auth, tasks, notifications, billing
taskflow-qa
Playwright + Cucumber BDD e2e suite
—
drives taskflow-web at 9002 via taskflow-api at 9001
Setup Git History
The sample repos need git commit history with different authors for skill profile testing. Run the setup script first:
cd examples
bash setup-git-history.sh
This creates proper git repos with 4 authors and ~6 commits each.
Quick Start
# 1. APIcd examples/taskflow-api
python -m venv .venv &&source .venv/bin/activate
pip install -r requirements.txt
python -m src.create_db
uvicorn src.main:app --reload --port 9001
# 2. Worker (separate terminal)cd examples/taskflow-worker
python -m venv .venv &&source .venv/bin/activate
pip install -r requirements.txt
python -m src.main
# 3. Frontend (separate terminal)cd examples/taskflow-web
npm install
npm run dev -- --port 9002
# 4. QA suite (optional — once 9001/9002 are up)cd examples/taskflow-qa
npm install
npm test# Playwright + Cucumber against the running web app
Testing the Scan Pipeline
Start Bodhiorchard (uvicorn on default port 8000)
In Settings > Repositories, add the 3 source repos (the QA suite isn't a scan target):
/path/to/examples/taskflow-api
/path/to/examples/taskflow-worker
/path/to/examples/taskflow-web
Map branches (main/main for all)
Click Full Rescan
What to Verify
Check
Expected
Features extracted
~4-6 cross-repo features (Auth, Tasks, Notifications, Billing, Reminders)
Feature grouping
All notification code = 1 "Notifications" feature, not 3 separate ones
Repo links
Each feature linked to correct repos via knowledge_to_repo
code_locations per repo
Junction table has different paths per repo for same feature
Skill profiles
4 authors with feature_id populated
Embeddings
Zero NULL embeddings on active features
SQL Verification Queries
-- Features with repo linksSELECTki.title, tr.nameas repo
FROM knowledge_items ki
JOIN knowledge_to_repo ktr ONki.id=ktr.knowledge_idJOIN tracked_repositories tr ONktr.repo_id=tr.idWHEREki.is_activeANDki.category='feature_registry'ORDER BYki.title;
-- Per-repo code_locations on junction tableSELECTki.title, tr.name, ktr.code_locationsFROM knowledge_to_repo ktr
JOIN knowledge_items ki ONktr.knowledge_id=ki.idJOIN tracked_repositories tr ONktr.repo_id=tr.idWHEREki.is_active;
-- Skill profiles with feature linksSELECTu.name, sp.module, sp.skill_score, sp.touch_count, ki.titleas feature
FROM skill_profiles sp
JOIN users u ONsp.user_id=u.idLEFT JOIN knowledge_items ki ONsp.feature_id=ki.id;
-- Orphan check (should be 0)SELECTcount(*) FROM knowledge_items ki
LEFT JOIN knowledge_to_repo ktr ONki.id=ktr.knowledge_idWHEREktr.id IS NULLANDki.is_activeANDki.category='feature_registry';
-- Embedding check (should be 0)SELECTcount(*) FROM knowledge_items
WHERE embedding IS NULLAND is_active AND category ='feature_registry';