loom (the orientation core) joins kb articles to code entities so orient() can say "this doc covers that file". The article struct already stores where an article came from (source_path / source_docs), but neither kb search --json nor kb show --json emits those fields — so loom has to mine the article prose for path-shaped and identifier-shaped tokens and match them heuristically (loom#10).
Including the source fields in both JSON outputs would let loom join article → source path → entity exactly, no mining and no false positives.
Scope: serialization only — add the existing struct fields to the two JSON encoders. No index or search changes.
loom (the orientation core) joins kb articles to code entities so orient() can say "this doc covers that file". The article struct already stores where an article came from (source_path / source_docs), but neither
kb search --jsonnorkb show --jsonemits those fields — so loom has to mine the article prose for path-shaped and identifier-shaped tokens and match them heuristically (loom#10).Including the source fields in both JSON outputs would let loom join article → source path → entity exactly, no mining and no false positives.
Scope: serialization only — add the existing struct fields to the two JSON encoders. No index or search changes.