Tether
Lost-and-found lifecycle design for matching, custody, handover, and audit trails — four independent state machines with humans in the loop.
Design thesis
tether documents how mature lost-and-found systems separate moderation, matching intent, claim authorization, and physical custody. The docs/DESIGN.md spec in the repo is the source of truth: system proposes pairings; staff accept or reject; custody never duplicates digital status.
Four lifecycles
Reports handle moderation (pending → approved | rejected). Matches pair one lost and one found report (proposed → accepted). Claims authorize handover (initiated → verified → completed). Items track physical custody (with_finder ↔ in_custody → returned | disposed).
Principles
- System proposes, humans accept — automation never finalizes a match
- Physical custody tracked separately from digital intent
- Tag IDs formatted
SITE-YYYYMMDD-NNNNfor shelf labeling - Finder-holds vs surrender-to-facility paths at report creation
class MatchRead(BaseModel):
lost_report_id: str
found_report_id: str
score: float
status: MatchStatus # proposed | accepted | rejected | superseded | withdrawn
scoring_version: int = 1