docs: add feature ideas catalog, time-decay scoring plan, and timeline issue doc
Ideas catalog (docs/ideas/): 25 feature concept documents covering future lore capabilities including bottleneck detection, churn analysis, expert scoring, collaboration patterns, milestone risk, knowledge silos, and more. Each doc includes motivation, implementation sketch, data requirements, and dependencies on existing infrastructure. README.md provides an overview and SYSTEM-PROPOSAL.md presents the unified analytics vision. Plans (plans/): Time-decay expert scoring design with four rounds of review feedback exploring decay functions, scoring algebra, and integration points with the existing who-expert pipeline. Issue doc (docs/issues/001): Documents the timeline pipeline bug where EntityRef was missing project context, causing ambiguous cross-project references during the EXPAND stage. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
120
docs/ideas/experts.md
Normal file
120
docs/ideas/experts.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Who Knows About X?
|
||||
|
||||
- **Command:** `lore experts <path-or-topic>`
|
||||
- **Confidence:** 92%
|
||||
- **Tier:** 1
|
||||
- **Status:** proposed
|
||||
- **Effort:** medium — two query paths (file-based, topic-based)
|
||||
|
||||
## What
|
||||
|
||||
Given a file path, find people who have authored MRs touching that file, left
|
||||
DiffNotes on that file, or discussed issues referencing that file. Given a topic
|
||||
string, use search to find relevant entities then extract the active participants.
|
||||
|
||||
## Why
|
||||
|
||||
"Who should I ask about the auth module?" is one of the most common questions in
|
||||
large teams. This answers it empirically from actual contribution and review data.
|
||||
No guessing, no out-of-date wiki pages.
|
||||
|
||||
## Data Required
|
||||
|
||||
All exists today:
|
||||
- `mr_file_changes` (new_path, merge_request_id) — who changed the file
|
||||
- `notes` (position_new_path, author_username) — who reviewed the file
|
||||
- `merge_requests` (author_username) — MR authorship
|
||||
- `documents` + search pipeline — for topic-based queries
|
||||
- `discussions` + `notes` — for participant extraction
|
||||
|
||||
## Implementation Sketch
|
||||
|
||||
### Path Mode: `lore experts src/auth/`
|
||||
|
||||
```
|
||||
1. Query mr_file_changes WHERE new_path LIKE 'src/auth/%'
|
||||
2. Join merge_requests to get author_username for each MR
|
||||
3. Query notes WHERE position_new_path LIKE 'src/auth/%'
|
||||
4. Collect all usernames with activity counts
|
||||
5. Rank by: MR authorship (weight 3) + DiffNote authorship (weight 2) + discussion participation (weight 1)
|
||||
6. Apply recency decay (recent activity weighted higher)
|
||||
```
|
||||
|
||||
### Topic Mode: `lore experts "authentication timeout"`
|
||||
|
||||
```
|
||||
1. Run existing hybrid search for the topic
|
||||
2. Collect top N document results
|
||||
3. For each document, extract author_username
|
||||
4. For each document's entity, query discussions and collect note authors
|
||||
5. Rank by frequency and recency
|
||||
```
|
||||
|
||||
### SQL (Path Mode)
|
||||
|
||||
```sql
|
||||
-- Authors who changed files matching pattern
|
||||
SELECT mr.author_username, COUNT(*) as changes, MAX(mr.merged_at) as last_active
|
||||
FROM mr_file_changes mfc
|
||||
JOIN merge_requests mr ON mfc.merge_request_id = mr.id
|
||||
WHERE mfc.new_path LIKE ?1
|
||||
AND mr.state = 'merged'
|
||||
GROUP BY mr.author_username
|
||||
ORDER BY changes DESC;
|
||||
|
||||
-- Reviewers who commented on files matching pattern
|
||||
SELECT n.author_username, COUNT(*) as reviews, MAX(n.created_at) as last_active
|
||||
FROM notes n
|
||||
WHERE n.position_new_path LIKE ?1
|
||||
AND n.note_type = 'DiffNote'
|
||||
AND n.is_system = 0
|
||||
GROUP BY n.author_username
|
||||
ORDER BY reviews DESC;
|
||||
```
|
||||
|
||||
## Human Output Format
|
||||
|
||||
```
|
||||
Experts for: src/auth/
|
||||
|
||||
alice 12 changes, 8 reviews (last active 3d ago) [top contributor]
|
||||
bob 3 changes, 15 reviews (last active 1d ago) [top reviewer]
|
||||
charlie 5 changes, 2 reviews (last active 2w ago)
|
||||
dave 1 change, 0 reviews (last active 3mo ago) [stale]
|
||||
```
|
||||
|
||||
## Robot Mode Output
|
||||
|
||||
```json
|
||||
{
|
||||
"ok": true,
|
||||
"data": {
|
||||
"query": "src/auth/",
|
||||
"query_type": "path",
|
||||
"experts": [
|
||||
{
|
||||
"username": "alice",
|
||||
"changes": 12,
|
||||
"reviews": 8,
|
||||
"discussions": 3,
|
||||
"score": 62,
|
||||
"last_active": "2025-01-25T10:00:00Z",
|
||||
"role": "top_contributor"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Downsides
|
||||
|
||||
- Historical data may be stale (people leave teams, change roles)
|
||||
- Path mode requires `mr_file_changes` to be populated (Gate 4 ingestion)
|
||||
- Topic mode quality depends on search quality
|
||||
- Doesn't account for org chart / actual ownership
|
||||
|
||||
## Extensions
|
||||
|
||||
- `lore experts --since 90d` — recency filter
|
||||
- `lore experts --min-activity 3` — noise filter
|
||||
- Combine with `lore silos` to highlight when an expert is the ONLY expert
|
||||
Reference in New Issue
Block a user