{"file":"docs/seed/Minimum_Database_Model.txt","start":1,"end":141,"lines":[{"number":1,"text":"Minimal database model"},{"number":2,"text":"owners"},{"number":3,"text":"id"},{"number":4,"text":"tenant_id"},{"number":5,"text":"username"},{"number":6,"text":"email"},{"number":7,"text":"email_verified_at"},{"number":8,"text":"password_hash"},{"number":9,"text":"scope                  system | tenant"},{"number":10,"text":"provisioning_source"},{"number":11,"text":"status"},{"number":12,"text":"created_at"},{"number":13,"text":"owner_sessions"},{"number":14,"text":"id"},{"number":15,"text":"owner_id"},{"number":16,"text":"token_hash"},{"number":17,"text":"created_at"},{"number":18,"text":"last_seen_at"},{"number":19,"text":"expires_at"},{"number":20,"text":"step_up_at"},{"number":21,"text":"revoked_at"},{"number":22,"text":"tenants"},{"number":23,"text":"id"},{"number":24,"text":"display_name"},{"number":25,"text":"status"},{"number":26,"text":"created_at"},{"number":27,"text":"frozen_at"},{"number":28,"text":"logical_keys"},{"number":29,"text":"id"},{"number":30,"text":"credential_id"},{"number":31,"text":"tenant_id"},{"number":32,"text":"parent_key_id"},{"number":33,"text":"created_by_owner_id"},{"number":34,"text":"created_by_key_id"},{"number":35,"text":"key_type"},{"number":36,"text":"label"},{"number":37,"text":"status"},{"number":38,"text":"bootstrap_mode"},{"number":39,"text":"activated_at"},{"number":40,"text":"suspended_at"},{"number":41,"text":"revoked_at"},{"number":42,"text":"created_at"},{"number":43,"text":""},{"number":44,"text":"Use one parent per logical Key in the MVP. Multiple-parent or graph delegation can be introduced later."},{"number":45,"text":""},{"number":46,"text":"key_components"},{"number":47,"text":"id"},{"number":48,"text":"logical_key_id"},{"number":49,"text":"purpose                 authentication | delegation | authorship | box"},{"number":50,"text":"version"},{"number":51,"text":"algorithm"},{"number":52,"text":"public_key"},{"number":53,"text":"fingerprint"},{"number":54,"text":"status"},{"number":55,"text":"valid_from"},{"number":56,"text":"valid_until"},{"number":57,"text":"compromised_at"},{"number":58,"text":"retired_at"},{"number":59,"text":""},{"number":60,"text":"Retain old public components so historical signatures remain verifiable."},{"number":61,"text":""},{"number":62,"text":"key_policy_versions"},{"number":63,"text":"id"},{"number":64,"text":"logical_key_id"},{"number":65,"text":"version"},{"number":66,"text":"canonical_policy"},{"number":67,"text":"policy_hash"},{"number":68,"text":"created_by_owner_id"},{"number":69,"text":"created_by_key_id"},{"number":70,"text":"created_at"},{"number":71,"text":"superseded_at"},{"number":72,"text":""},{"number":73,"text":"Policies are immutable. A change creates a new policy version."},{"number":74,"text":""},{"number":75,"text":"claim_slots"},{"number":76,"text":"id"},{"number":77,"text":"logical_key_id"},{"number":78,"text":"component_purpose"},{"number":79,"text":"claim_token_hash"},{"number":80,"text":"confirmation_code_hash"},{"number":81,"text":"destination_hint"},{"number":82,"text":"expires_at"},{"number":83,"text":"claimed_at"},{"number":84,"text":"cancelled_at"},{"number":85,"text":"registered_public_key"},{"number":86,"text":"used_nonces"},{"number":87,"text":"logical_key_id"},{"number":88,"text":"nonce_hash"},{"number":89,"text":"used_at"},{"number":90,"text":"expires_at"},{"number":91,"text":""},{"number":92,"text":"Unique constraint:"},{"number":93,"text":""},{"number":94,"text":"(logical_key_id, nonce_hash)"},{"number":95,"text":"authored_objects"},{"number":96,"text":"id"},{"number":97,"text":"tenant_id"},{"number":98,"text":"logical_key_id"},{"number":99,"text":"object_type"},{"number":100,"text":"content_digest"},{"number":101,"text":"canonical_metadata"},{"number":102,"text":"author_signature"},{"number":103,"text":"auth_component_version"},{"number":104,"text":"author_component_version"},{"number":105,"text":"created_at"},{"number":106,"text":"withdrawn_at"},{"number":107,"text":"events"},{"number":108,"text":"id"},{"number":109,"text":"tenant_id"},{"number":110,"text":"actor_kind"},{"number":111,"text":"actor_id"},{"number":112,"text":"subject_kind"},{"number":113,"text":"subject_id"},{"number":114,"text":"action"},{"number":115,"text":"decision"},{"number":116,"text":"reason_code"},{"number":117,"text":"canonical_details"},{"number":118,"text":"previous_event_hash"},{"number":119,"text":"event_hash"},{"number":120,"text":"created_at"},{"number":121,"text":""},{"number":122,"text":"The hash chain makes rewriting more detectable, but it should not be advertised as tamper-proof while an administrator controlling the database can rewrite the entire chain."},{"number":123,"text":""},{"number":124,"text":"alerts"},{"number":125,"text":"id"},{"number":126,"text":"tenant_id"},{"number":127,"text":"logical_key_id"},{"number":128,"text":"severity"},{"number":129,"text":"type"},{"number":130,"text":"details"},{"number":131,"text":"created_at"},{"number":132,"text":"acknowledged_at"},{"number":133,"text":"resolved_at"},{"number":134,"text":"outbox"},{"number":135,"text":"id"},{"number":136,"text":"message_type"},{"number":137,"text":"destination"},{"number":138,"text":"payload"},{"number":139,"text":"attempt_count"},{"number":140,"text":"next_attempt_at"},{"number":141,"text":"sent_at"}]}