pub fn dissociate<N: ProjectNode>(
issues: &[N],
issue_selector: u32,
project_id: &str,
) -> Result<ProjectChange, ProjectError>Expand description
Remove an issue’s association with a project.
Drops only the association: it never deletes or modifies the issue (C-004). Dissociating an absent association is an idempotent no-op with no event. The project is not required to exist — removing a stale reference is the repair path C-005 promises — so the only refusal is an unknown issue.
project_id is compared against the stored list verbatim: unlike
associate, a project name is not resolved here. That is deliberate, not
an oversight — the stored entries are ids, and a caller must resolve a name to
an id first (via resolve_project_id). A name therefore matches nothing and
is an inert no-op, which is what keeps the repair path working for an id that
is no longer a valid ProjectId shape or no longer in the registry.