Detection finding¶
A DetectionFinding is derived state referencing stable notebook/page IDs. Findings may span consecutive pages (e.g. a poem continuing across pages).
Finding object (v1)¶
Field |
Required |
Notes |
|---|---|---|
|
yes |
UUID hex; stable across review edits |
|
yes |
Detector identity |
|
yes |
Detector version at detection time |
|
yes |
Canonical |
|
yes |
Inclusive; |
|
yes |
Inclusive |
|
yes |
e.g. |
|
yes |
0–1 |
|
yes |
|
|
no |
Schema-specific (e.g. optional |
|
no |
|
|
no |
Same shape as start_boundary |
|
yes |
|
|
yes |
|
|
yes |
Hash of inputs used |
|
yes |
ISO-8601 UTC |
|
yes |
ISO-8601 UTC |
|
yes |
|
|
no |
|
Index¶
The published artifact for (notebook_id, detector_id) contains a findings[] array. Individual findings are not separate authoritative files in v1.
Cross-page spans¶
One finding may have
start_page_id != end_page_id.Partial-page boundaries are optional hints for human review.
Aggregation merges overlapping window observations deterministically (see detection-run-storage.md).
Per-page Accept / Reject records
page_reviewswithout changing the detector span. Rejected pages lose the finding tag; accepted pages keep it. Finding-level Accept remaining approves every span page that is not already rejected.Finding-level
review_statusis derived: all span pages rejected →rejected; every span page reviewed and at least one accepted →approved; otherwiseunreviewed.
Identity rules¶
Use
page_id,notebook_id,finding_id— never filesystem paths or filenames as identity.
Review carry-forward¶
On a successful republish for the same detector, preserve approved / rejected and page_reviews when the new finding matches a prior published finding on span identity (finding_type, start_page_id, end_page_id, tag_slug). tag_slug is empty except for the names detector (per-name findings on one page). Unmatched new findings start as unreviewed. Prior reviews without a match are dropped with the old published set.