{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://hollow.zerodata.top/schemas/handoff.schema.json","title":"HOLLOW local handoff v1: draft or completed","type":"object","additionalProperties":true,"description":"Local task context, not an upload, identity proof, permission grant or verified fact. Drafts may leave task, owner and recorded_at empty.","required":["$schema","format","status","task","owner","recorded_at","archive_snapshot","references","verified_observations","hypotheses","open_questions","next_actions","privacy"],"properties":{"$schema":{"const":"https://hollow.zerodata.top/schemas/handoff.schema.json"},"format":{"const":"hollow.handoff.v1"},"status":{"enum":["draft","completed"]},"purpose":{"type":"string","minLength":1,"pattern":"\\S"},"task":{"type":"string"},"owner":{"type":"string"},"recorded_at":{"anyOf":[{"const":""},{"type":"string","format":"date-time"}]},"archive_snapshot":{"type":"string","format":"uri","pattern":"^https://[^/?#]+/snapshots/[a-f0-9]{64}\\.json$"},"references":{"type":"array","items":{"type":"object","additionalProperties":true,"required":["url","sha256","bytes"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https://"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"bytes":{"type":"integer","minimum":1},"id":{"type":"string","pattern":"^[a-z][a-z0-9-]*$"},"version":{"type":"integer","minimum":1},"label":{"type":"string","minLength":1,"pattern":"\\S"}}}},"verified_observations":{"type":"array","items":{"type":"string","minLength":1,"pattern":"\\S"}},"hypotheses":{"type":"array","items":{"type":"string","minLength":1,"pattern":"\\S"}},"open_questions":{"type":"array","items":{"type":"string","minLength":1,"pattern":"\\S"}},"next_actions":{"type":"array","items":{"type":"string","minLength":1,"pattern":"\\S"}},"privacy":{"type":"string","minLength":1,"pattern":"\\S"}},"allOf":[{"if":{"properties":{"status":{"const":"completed"}},"required":["status"]},"then":{"properties":{"task":{"type":"string","minLength":1,"pattern":"\\S"},"owner":{"type":"string","minLength":1,"pattern":"\\S"},"recorded_at":{"type":"string","minLength":1,"format":"date-time"}}}}]}
