symfonic.devtools.ownership¶
ownership ¶
Task-and-module ownership manifest tooling (T1.2.7).
Loads the rolling ownership manifest
(.agent/team/framework-refactor/evidence/T1.2.7/ownership-manifest.toml)
and validates that the wave being scheduled has gate-approved, exact,
non-overlapping write ownership. Run python -m symfonic.devtools.ownership
from the repository root, or rely on
tests/architecture/test_ownership_manifest.py inside the pytest gate.
ManifestError ¶
Bases: ValueError
The manifest file is structurally invalid.
OwnershipManifest
dataclass
¶
OwnershipManifest(path: Path, authoritative_waves: tuple[str, ...], scheduled_wave: str, waves: dict[str, tuple[str, ...]], tasks: dict[str, TaskRow], plan: str = '')
The parsed rolling manifest: wave rosters plus per-task rows.
OwnershipViolation
dataclass
¶
One validation failure; tasks lists every implicated task ID.
TaskRow
dataclass
¶
TaskRow(task_id: str, wave: str, status: str, title: str = '', agent: str = '', complete: bool = False, current: tuple[str, ...] = (), target: tuple[str, ...] = (), exclusive_write: tuple[str, ...] = (), shared_read: tuple[str, ...] = (), split_points: tuple[str, ...] = (), handoff: tuple[str, ...] = ())
One manifest row: what a plan task may read, write, and hand off.
exclusive_write globs are the only paths the task may create or
modify; shared_read names the read-only contracts it consumes;
handoff lists the task IDs whose outputs it builds on (the plan's
depends_on edges, which also order tasks for the overlap check).
Rows with status advisory are speculative sketches for later waves
and are never treated as authoritative.
load_manifest ¶
Parse path into an :class:OwnershipManifest, or raise ManifestError.
Source code in src/symfonic/devtools/ownership/loader.py
patterns_overlap ¶
validate_manifest ¶
Validate manifest for scheduling wave (default: its scheduled wave).