//! Port: read the *content composition* of an issue — every named
//! part that belongs to it (`index`, companions, attachments) and
//! every cross-reference between parts.
//!
//! Distinct from [`IssueRepository`]: that port speaks
//! [`Issue`](crate::domain::model::issue::Issue) (parsed frontmatter,
//! validated fields). This one speaks *content set*: which parts
//! exist, which parts reference which. The vocabulary is
//! backend-agnostic — a filesystem adapter materialises parts as
//! files, but a SQLite or git-objects adapter would project rows or
//! blobs to the same shape.
use crateIssueRef;
/// All content parts belonging to an issue, plus their outgoing
/// references. `parts` enumerates every local identifier (canonical
/// `index`, companions, attachments). `references` lists, for each
/// part that contains references, the targets it points at.