/** * saga.add — link a member Epic to a Saga via `parent_id` containment. * * After T10638 (E10.W5), Saga membership uses canonical `parent_id` * containment rather than `task_relations.type='groups'`. Sagas are * identified by `type='saga'` (ADR-083 §2.5), not by label. * * Validates that: * - the saga task exists and has `type='saga'` * - the epic task exists and has `type='epic'` * - the epic is NOT already parented to another saga (idempotent re-add ok) * - the epic candidate is NOT itself a saga (ADR-073 §1.2 invariant I7) * * Returns an EngineResult — the dispatch layer wraps it in a LAFS envelope. * * @task T10124 * @task T10120 * @task T10118 — wire I7 enforcement gate * @task T10638 — E10.W5 type='saga' + parent_id containment * @epic T10208 * @epic T10209 — E-SAGA-ENFORCEMENT * @saga T10538 — SG-PM-CORE-V2 * @see ADR-073-above-epic-naming.md §1 * @see ADR-083-saga-as-tasktype.md §2.5 */ import { type EngineResult } from '../engine-result.js'; /** Input parameters for {@link sagaAdd}. */ export interface SagaAddParams { /** Saga task ID (must have `type='saga'`). */ sagaId: string; /** Epic task ID to link (must have `type='epic'`). */ epicId: string; } /** Result payload for {@link sagaAdd}. */ export interface SagaAddResult { sagaId: string; epicId: string; added: boolean; } /** * Link an Epic into a Saga as a member via `parent_id` containment. * Validates saga/epic preconditions per ADR-073 §1 + ADR-083 §2.5. * * @param projectRoot - Absolute path to the project root. * @param params - sagaId + epicId to link. */ export declare function sagaAdd(projectRoot: string, params: SagaAddParams): Promise>; //# sourceMappingURL=add.d.ts.map