Spun off from Codex review of #11.
Two fail-soft patterns around the sidecar path: field:
src/framedex/query.py: when emitting results, path = rec.get("path") or rec.get("_sidecar_path", ""). If path is missing/empty, query silently prints the sidecar's .description.md path as if it were the video path — pipes like fdx-query ... | xargs ffplay would then break in a confusing way.
src/framedex/master_index.py: a missing path is tolerated as "" and the clip gets bucketed under trip "(unknown)" without a warning.
For a queryable KB, a record without a usable path is broken — surfacing it loudly (warn or skip with a message) is better than producing wrong-looking output silently.
Decision needed: warn-and-skip vs raise. Probably warn-and-skip so one bad sidecar doesn't kill a whole query, but with a visible stderr line.
No work scheduled yet — tracking only.
Spun off from Codex review of #11.
Two fail-soft patterns around the sidecar
path:field:src/framedex/query.py: when emitting results,path = rec.get("path") or rec.get("_sidecar_path", ""). Ifpathis missing/empty, query silently prints the sidecar's.description.mdpath as if it were the video path — pipes likefdx-query ... | xargs ffplaywould then break in a confusing way.src/framedex/master_index.py: a missingpathis tolerated as""and the clip gets bucketed under trip"(unknown)"without a warning.For a queryable KB, a record without a usable
pathis broken — surfacing it loudly (warn or skip with a message) is better than producing wrong-looking output silently.Decision needed: warn-and-skip vs raise. Probably warn-and-skip so one bad sidecar doesn't kill a whole query, but with a visible stderr line.
No work scheduled yet — tracking only.