# Complete constructed preservation decisions

All seven CSV rows and six cases are teaching inputs, not account observations. recorded_at is the declared record/review time; observation_state says whether a value was supplied as observed, unavailable or not inspected.

H1-video: publication and record timestamps are 220 days apart. The two official help bodies state 180 and 365 days for video categories. Age 220 lies between those numbers. The value was not inspected and is empty. Decision: not_inspected_not_zero. Current availability stays unknown. Neither conflicting source establishes recovery or loss.

H2-social and H2-demo refer to the same fictional post at 220 days. A reaction total 12 is supplied as observed; its value is retained. Demographics are supplied as unavailable with an empty value. Decision for that row: unavailable_reason_unknown. The 180-day demographic guidance does not prove the actual reason. The total cannot reconstruct a missing country or job breakdown.

H3-impressions: a post-specific snapshot records 200 at day 30, while the requested claim needs day 7. Decision: requested_age_not_observed. Preserve 200 at 30 days; do not infer or interpolate a day 7 count. The exercise does not fetch an earlier snapshot.

H4-zero: the input explicitly records 0 at day 7 with observation_state observed. Decision: declared_snapshot_preserved. Zero stays different from the missing values in H1/H2. The zero is fictional and is not a reader/customer result.

H5-age: value 5 is supplied for members reached but publication_at is empty. Preserve the declared value and scope; ageDays is null. Decision: age_claim_unverified_snapshot_value_preserved. Do not invent a date or attach the count to a common observation age.

H6-reached: value 53 is supplied as observed at 410 days, beyond the 400-day guidance number. Preserve the supplied snapshot and flag its position relative to guidance. The local fixture does not establish that native access exists at that age for anyone, refute the help or force an actually supplied value into missing. Policy comparison and observation state answer different questions.

The checker computes timestamp differences with explicit zones and rejects duplicate records, an unobserved field carrying a count, naive timestamps and observations before publication. It does not infer availability from age or turn two calendar years into 730 days. Run python3 check.py with existing Python 3 after extracting. For real work use the blank private record and actual authorized sources; no reminders, exports, account operations or studies are created.
