Problem
The journalism-investigation plugin needs its own relationship types (10 pairs) registered with Pyrite's relationship registry, and field validators for each entry type.
Scope
Relationship Types (10 bidirectional pairs)
| Forward | Inverse |
|---------|---------|
| `member_of` | `has_member` |
| `owns` | `owned_by` |
| `funded_by` | `funds` |
| `sourced_from` | `sources` |
| `corroborates` | `corroborated_by` |
| `contradicts` | `contradicted_by` |
| `investigated_by` | `investigated` |
| `beneficial_owner_of` | `beneficially_owned_by` |
| `transacted_with` | `received_transaction_from` |
| `party_to` | `has_party` |
Note: `member_of`/`has_member` and `funded_by`/`funds` overlap with Cascade's existing types. Need to handle gracefully (shared definition or plugin precedence).
Validators
`investigation_event`: requires `date`, `title`; warns if no `sources`
`transaction`: requires `date`, `title`, `sender`, `receiver`; warns if no `amount`
`legal_action`: requires `date`, `title`, `case_type`, `jurisdiction`
`asset`: requires `title`, `asset_type`
`account`: requires `title`, `account_type`
`document_source`: requires `title`, `reliability`
`ownership`: requires `owner`, `asset`
`membership`: requires `person`, `organization`
`funding`: requires `source`, `recipient`
`claim`: requires `title`, `status`; warns if no evidence links
`evidence`: requires `title`, `source_document`Acceptance Criteria
All 10 relationship pairs registered and bidirectional
Validators run on save, produce clear error messages
No conflicts with Cascade relationship types (shared or namespaced)
`pyrite qa validate` catches missing required fields