منبع حقیقت، محتوا، انتشار و رسانه · فصل ۴ — Media Library، Factory، FFmpeg، Workbench و QA · 166
Media Factory Recipes و Deterministic Transforms
محتوا یا media تولید میکند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمیبیند. موضوع جاری: «Media Factory Recipes و Deterministic Transforms». میتواند «Media Factory Recipes و Deterministic Transforms» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
خلاصهٔ درس
محتوا یا media تولید میکند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمیبیند. موضوع جاری: «Media Factory Recipes و Deterministic Transforms».
میتواند «Media Factory Recipes و Deterministic Transforms» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
خروجی این درس
میتواند «Media Factory Recipes و Deterministic Transforms» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
پیشنیازها
1. یک preset ثابت، recipe ثابت نیست
نامی مثل web-final فقط یک label است. اگر ورودی، نسخه ابزار، encoder، پارامتر یا metadata تغییر کند، همان label نمیتواند reproducibility را ثابت کند. در این درس هر transform باید یک recipe_id و recipe_version قابل ممیزی داشته باشد.
2. مرز مالکیت CON-015
CON-015 قرارداد recipe و شواهد reproducibility را میبندد. رکورد authoritative رسانه و rights در CON-014 است؛ جزئیات command در CON-016؛ lineage شاخههای خلاقه در CON-017؛ و مجوز انتشار در CON-018/CON-022. خروجی این درس فقط درباره transform قابل بازسازی ادعا میکند.
3. exact input را با digest ببند
Filename، path یا thumbnail هویت byte-level نیستند. recipe باید input_asset_ref و input_digest را ثبت کند. اگر digest ورودی عوض شود، lineage خروجی جدید است؛ overwrite کردن derivative قدیمی trace را از بین میبرد.
4. tool build و environment را بخشی از recipe بدان
tool_id، tool_version، container image یا environment fingerprint باید ثبت شوند. یک command یکسان روی build یا hardware path متفاوت میتواند خروجی متفاوت بدهد؛ تفاوت باید typed شود، نه اینکه پشت همان preset مخفی بماند.
5. operation sequence ترتیب دارد
Resize→crop با crop→resize یک recipe نیست. عملیات باید بهترتیب و با parameter set دقیق ثبت شوند. تغییر حتی یک parameter باید یا recipe version جدید بسازد یا بهصورت drift رد شود.
6. randomness باید policy داشته باشد
اگر transform شامل seed، sampling یا encoder behavior وابسته به randomness است، seed_or_randomness_policy باید NONE، FIXED یا صریحاً UNDECLARED باشد. حالت نامعلوم اجازه ادعای determinism نمیدهد.
7. metadata و clock میتوانند byteها را تغییر دهند
Creation time، encoder tag یا metadata متغیر میتواند digest خروجی را عوض کند، حتی وقتی تصویر/صدا از نظر فنی مشابه است. recipe باید مشخص کند metadata volatile حذف، ثابت یا در equivalence policy نادیده گرفته میشود.
8. output spec قبل از اجرا تعریف میشود
ابعاد، container، codec family، sample rate یا سایر propertyهای موردنیاز باید پیش از run در output_spec ثبت شوند. بعد از اجرا، observed output با این contract مقایسه میشود؛ «فایل باز شد» معیار کافی نیست.
9. byte determinism یک ادعای اثباتی است
فقط وقتی repeat run با bindings یکسان و policy کنترلشده digest یکسان میدهد، میتوان byte_deterministic=true را ثبت کرد. استفاده از -bitexact یا command تکراری بهتنهایی جای evidence run را نمیگیرد.
10. bounded equivalence با byte identity فرق دارد
گاهی خروجیهای byte-different از نظر technical و semantic در محدوده قابل قبولاند. در این حالت decision باید BOUNDED_EQUIVALENCE_ONLY باشد و policy دقیق بگوید چه تفاوتهایی مجازند؛ نباید آن را byte determinism نامید.
11. derivation را به run متصل کن
هر derivative جدید باید به input entity، recipe version و reproducibility_run_id متصل شود. PROV میتواند lineage entity/activity را بیان کند؛ اما deterministic بودن را خود شواهد recipe/run باید نشان دهند.
12. drift را تایپ کن
INPUT_DRIFT، TOOL_DRIFT، ENVIRONMENT_DRIFT، RECIPE_DRIFT، RANDOMNESS_UNBOUND و METADATA_TIME_DRIFT کمک میکنند failure قابل اقدام باشد. یک PASS/FAIL مبهم برای factory کافی نیست.
13. Matrix شواهد: declared در برابر observed
برای هر run، bindingهای declared و observed را کنار هم بگذار: input digest، tool/environment، operations/parameters، randomness، metadata policy، output digest و equivalence result. decision فقط از همین evidence ساخته میشود.
14. Lab: هشت fixture و 64 assertion
Lab هشت سناریوی synthetic دارد: baseline byte-identical، parameter drift بدون version bump، build/hardware جدید، metadata timestamp، input digest تغییرکرده، randomness نامعلوم، bounded equivalence و transfer نسخه جدید. evaluator برای هر case هشت خروجی مستقل میسنجد.
15. Transfer: digest جدید، build جدید، timestamp جدید
در transfer، یک input digest عوض میشود، tool build جدید pin میشود و metadata timestamp وارد میشود. شما باید نشان دهید کدام تغییر recipe version جدید میخواهد، کدام فقط bounded equivalence است و کجا باید BLOCK یا DEFER شود. خروجی قبلی هرگز مرجع تصمیم جدید نیست.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
AF1 formative
Name the CON-015 owned artifact and one adjacent outcome it does not own.
AF2 formative
Why does a stable preset name fail to prove reproducibility after a parameter change?
AF3 formative
When must a byte-different output be labeled bounded equivalence rather than deterministic?
AS1 application
Build a recipe/evidence pack for a supplied synthetic transform run.
AS2 diagnosis
Diagnose a run with a changed tool build and unchanged preset name.
AS3 decision
Issue BYTE_DETERMINISM_VERIFIED, BOUNDED_EQUIVALENCE_ONLY, BLOCK, or DEFER with evidence.
AS4 transfer
Rebuild the decision after input digest, tool build, and timestamp policy change.
AS5 reflection
State the strongest supported claim, one unsupported claim, and one residual risk.
ملاکهای ارزیابی (rubric)
- Identity and binding: exact input digest, recipe version, tool build, environment, operations, and parameters are explicit.
- Negative states: drift and UNKNOWN states are preserved rather than coerced into success.
- Determinism boundary: byte identity is never inferred from command text or preset name alone.
- Equivalence: any non-byte claim is constrained by an explicit equivalence policy.
- Transfer: the changed context is re-evaluated from new evidence.
منابع و تازگی
مطالعهٔ موارد (case studies)
تصاویر درس
فایلهای آزمایشگاه
Inspect the eight synthetic cases and implement evaluate_recipe(record) in starter.py. Your result should preserve unknown/drift states, distinguish byte identity from bounded equivalence, and never treat a preset name or rerun alone as proof.