Skip to content

symfonic.devtools.ownership.validate

validate

Ownership-manifest validation rules (T1.2.7).

Rules enforced:

  • missing-ownership: a task rostered in the wave being scheduled has no manifest row or an empty exclusive_write.
  • advisory-scheduled: a row for the scheduled wave is only advisory; advisory rows never authorise scheduling.
  • unapproved-authority: a row claims authoritative status for a wave the gate has not approved — speculative later-wave rows must stay advisory.
  • write-overlap: two concurrently-ready tasks (same authoritative wave, neither ordered after the other by transitive handoff, neither complete) hold overlapping exclusive-write globs.
  • roster-mismatch / unknown-handoff / unknown-wave: referential integrity between rows, wave rosters, and handoff edges.

validate_manifest

validate_manifest(manifest: OwnershipManifest, wave: str | None = None) -> list[OwnershipViolation]

Validate manifest for scheduling wave (default: its scheduled wave).

Source code in src/symfonic/devtools/ownership/validate.py
def validate_manifest(
    manifest: OwnershipManifest, wave: str | None = None
) -> list[OwnershipViolation]:
    """Validate *manifest* for scheduling *wave* (default: its scheduled wave)."""
    scheduled = wave or manifest.scheduled_wave
    violations: list[OwnershipViolation] = []
    violations.extend(_referential_rules(manifest))
    violations.extend(_authority_rules(manifest))
    violations.extend(_scheduled_wave_rules(manifest, scheduled))
    violations.extend(_overlap_rules(manifest))
    return violations