منبع حقیقت، محتوا، انتشار و رسانه · فصل ۳ — Localization، Derivative و Campaign Dependency · 164

Calendar and Campaign Dependency Graphs

Design and verify a campaign calendar dependency graph that gives schedule items stable identity and revision semantics, binds them to exact content/derivative inputs and publication windows, models typed prerequisite edges, and computes READY/WAITING/BLOCKED/STALE states without treating a calendar timestamp as proof that campaign dependencies are satisfied. می‌تواند «Calendar و Campaign Dependencies» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

Calendar و Campaign Dependencies — fa-IR

Lesson summary

Design and verify a campaign calendar dependency graph that gives schedule items stable identity and revision semantics, binds them to exact content/derivative inputs and publication windows, models typed prerequisite edges, and computes READY/WAITING/BLOCKED/STALE states without treating a calendar timestamp as proof that campaign dependencies are satisfied.

می‌تواند «Calendar و Campaign Dependencies» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

This lesson produces

می‌تواند «Calendar و Campaign Dependencies» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

Who it is for

Foundation

Use a guided lesson-specific evidence matrix and one worked negative case.

Repair

Re-run only the failed owned dimension with a smaller deterministic synthetic fixture.

Experienced

Start from mixed authority/policy/evidence records; require explicit trade-offs and provenance.

Prerequisites

1. A calendar tells you when, not whether the launch is ready

Reaching 09:00 means a time trigger occurred. It does not prove that the required content version, derivative, approval, rights window, or channel handoff is satisfied. Time is one evidence dimension, never a substitute for dependency state.

2. The owned CON-013 boundary

CON-013 owns campaign/event identity, schedule revision, and the publication dependency graph. CON-011 owns localization semantics, CON-012 owns content/derivative lineage, and CON-010 owns public rollback evidence. Keeping these boundaries explicit prevents the calendar from becoming an ambiguous source of all authority.

3. UID and SEQUENCE have different jobs

In iCalendar, UID provides component identity while SEQUENCE identifies the revision sequence. The same UID with a newer sequence means an earlier dependency snapshot cannot be assumed current without reevaluation.

4. DTSTART and DTEND are time-window semantics only

DTSTART defines the event start and DTEND is the non-inclusive end for VEVENT when present. These fields do not prove approval, rights, or version compatibility. Calendar semantics are not campaign publication policy.

5. Normalize timezone-aware schedules to comparable instants

Moving a launch across time zones can change the local clock representation while preserving the intended absolute instant. Readiness must not rely on naive local-time string comparison; schedule evidence must be timezone-aware and normalizable.

6. Bind the dependency snapshot to the exact schedule revision

Each calendar revision should reference an exact snapshot of content version, derivative, locale, approval, rights window, and channel handoff. If the sequence changes but the snapshot still reflects the previous revision, the state is stale.

7. Keep edge types explicit: HARD versus RECOMMENDED

An unresolved HARD prerequisite blocks or waits the release. A missing RECOMMENDED dependency can produce a warning and may remain release-ready only when campaign policy explicitly permits it. Promoting an edge to HARD is a real policy change and requires recomputation.

8. Content and derivatives must align to the required version

If the campaign package requires version 22 but the Persian derivative still points to version 21, file existence is irrelevant. The dependency must expose a stale/version-mismatch state.

9. Approval must bind to the same artifact/revision

Approval for an older content version or different derivative is not current approval. approval_ref must trace to the active dependency snapshot; missing binding remains UNKNOWN/WAITING rather than being coerced into PASS.

10. A rights window may open after calendar start

If the event starts at 09:00 but the rights window starts at 10:00, reaching the calendar start does not create usage rights. The campaign remains blocked or waiting until the rights evidence becomes valid.

11. Channel handoff is a real dependency

Sending a package to a channel is not the same as receiving acknowledgement. If email, social, or CMS handoff acknowledgement is a HARD prerequisite and is missing, the campaign is not release-ready.

12. PROV is useful for traceable relationships

PROV-O provides Entity, Activity, Agent, and relations such as wasDerivedFrom for provenance. That vocabulary can trace dependency evidence, but it does not prescribe campaign critical-path logic or launch authorization.

13. Do not collapse typed states

READY, WAITING, BLOCKED, and STALE require explicit reasons. UNKNOWN is not READY, and one green badge is not a substitute for every evidence dimension. The decision must be reversible back to matrix rows.

14. Lab: eight fixtures and 64 assertions

The lab tests baseline readiness, a stale derivative, a closed rights window, unacknowledged handoff, a timezone move preserving the instant, a stale sequence snapshot, a missing recommended dependency, and a transfer that promotes that dependency to HARD. Eight independent outputs are checked per case.

15. Transfer: never copy the earlier decision

Move the launch to a new timezone-aware window, increment the event sequence, replace one derivative version, and promote one recommended dependency to HARD. Recompute readiness from the new snapshot; the previous decision is history, not an answer key.

Assessment

There is no answer key in this lesson pack; answer it yourself and mark honestly. "Needs review" sends the lesson to your review queue.

AF1 boundary

Explain why calendar start time is not publication-readiness proof.

lesson ✗AI ✗notes ✗

AF2 diagnosis

Campaign requires v22 while one localized derivative remains v21. Name the typed state and decision.

lesson ✗AI ✗notes ✗

AF3 time

Explain why a timezone move must compare normalized instants rather than local clock strings.

lesson ✗AI ✗notes ✗

AS1 application

Build the Campaign Calendar Dependency Graph & Readiness Matrix for the supplied fixtures.

lesson ✗AI ✗notes ✗

AS2 transfer

Promote a recommended edge to HARD after sequence increment and recompute readiness.

lesson ✗AI ✗notes ✗
Assessment rubric

A sufficient submission: (1) keeps UID/revision/schedule distinct, (2) binds exact content/derivative/approval/rights/handoff evidence, (3) preserves typed stale/unknown/waiting states, (4) distinguishes HARD from RECOMMENDED edges, and (5) recomputes transfer rather than copying a prior decision.

References & freshness

RFC 5545: Internet Calendaring and Scheduling Core Object Specification (iCalendar)
·
UID, SEQUENCE, DTSTART/DTEND and timezone/calendar component semantics only; not MAKNOW campaign-readiness policy.
PROV-O: The PROV Ontology
·
Provenance vocabulary and derivation relationships only; not campaign critical-path or authorization policy.

Case studies

SIMPLE

EDGE

WRONG_APPROACH

TRANSFER

Lab files

Inspect the eight synthetic campaign snapshots and implement evaluate_campaign(record) in starter.py. Keep calendar revision, normalized schedule, exact content/derivative version, approval, rights window, handoff, and edge type as separate evidence. Recompute from each snapshot; do not copy the previous decision.