Extract Obsidian wikilinks into editable Project Candidate seed files #4

Closed
opened 2026-06-14 10:21:20 +00:00 by liang · 1 comment
Owner

Parent

Parent PRD: #2

What to build

Build the Obsidian work-log Project Candidate extractor. Within the configured work-log scope, every wikilink should become a Project Candidate by splitting the link text on the first whitespace: the first token is the Project code and the remaining text is a Project Alias. The output is an editable seed artifact the user can batch confirm, reject, merge, rename, and enrich before database import.

Acceptance criteria

  • The extractor reads the work-log scope and treats every wikilink as a Project Candidate, including non-PRJ code formats.
  • Seed output includes Project code, Project Alias when present, occurrence count, and editable confirmation fields for later import.
  • Seed output omits evidence paths and excerpts.
  • Duplicate Project codes are aggregated in a predictable way and the most recent alias can be identified for later Project Title selection.
  • Automated tests cover PRJ-style codes, non-PRJ codes, aliases, missing aliases, duplicates, and occurrence counts.

Blocked by

## Parent Parent PRD: #2 ## What to build Build the Obsidian work-log Project Candidate extractor. Within the configured work-log scope, every wikilink should become a Project Candidate by splitting the link text on the first whitespace: the first token is the Project code and the remaining text is a Project Alias. The output is an editable seed artifact the user can batch confirm, reject, merge, rename, and enrich before database import. ## Acceptance criteria - [ ] The extractor reads the work-log scope and treats every wikilink as a Project Candidate, including non-PRJ code formats. - [ ] Seed output includes Project code, Project Alias when present, occurrence count, and editable confirmation fields for later import. - [ ] Seed output omits evidence paths and excerpts. - [ ] Duplicate Project codes are aggregated in a predictable way and the most recent alias can be identified for later Project Title selection. - [ ] Automated tests cover PRJ-style codes, non-PRJ codes, aliases, missing aliases, duplicates, and occurrence counts. ## Blocked by - #3
Author
Owner

Implemented issue #4.

Summary:

  • Added services.project_seed_extractor.extract_project_candidate_seed.
  • Extracts every Obsidian wikilink in the work-log scope as a Project Candidate, including non-PRJ formats.
  • Splits first token as Project code, remaining text as Project Alias, aggregates duplicates, tracks occurrence count, chooses latest alias as default title, and writes editable JSON without evidence paths/excerpts.

Verification: .venv/bin/pytest tests/test_project_seed_extractor.py -q -> passed.

Implemented issue #4. Summary: - Added `services.project_seed_extractor.extract_project_candidate_seed`. - Extracts every Obsidian wikilink in the work-log scope as a Project Candidate, including non-PRJ formats. - Splits first token as Project code, remaining text as Project Alias, aggregates duplicates, tracks occurrence count, chooses latest alias as default title, and writes editable JSON without evidence paths/excerpts. Verification: `.venv/bin/pytest tests/test_project_seed_extractor.py -q` -> passed.
liang closed this issue 2026-06-14 10:54:21 +00:00
Sign in to join this conversation.
No labels
ready-for-agent
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
liang/sales-ai#4
No description provided.