منبع حقیقت، محتوا، انتشار و رسانه · فصل ۲ — Page/Version/Block، Forms، SEO و Rollback · 158
Website Workspace: Page/Version/Block/Navigation/Release
محتوا یا media تولید میکند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمیبیند. موضوع جاری: «Website Workspace: Page/Version/Block/Navigation/Release». میتواند «Website Workspace: Page/Version/Block/Navigation/Release» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
Website Workspace: Page, Version, Block, Navigation, and Release — en-US
خلاصهٔ درس
محتوا یا media تولید میکند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمیبیند. موضوع جاری: «Website Workspace: Page/Version/Block/Navigation/Release».
میتواند «Website Workspace: Page/Version/Block/Navigation/Release» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
خروجی این درس
میتواند «Website Workspace: Page/Version/Block/Navigation/Release» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.
پیشنیازها
1. «صفحه» را یک ردیف mutable فرض نکن
اگر content، ترتیب blockها، جایگاه navigation و release state همه روی یک row قابلویرایش زندگی کنند، بعد از چند edit دیگر نمیتوانی ثابت کنی release دیروز دقیقاً چه چیزی بوده است. این درس workspace را به identity پایدار، version immutable و projectionهای جدا تقسیم میکند.
2. مرز مالکیت CON-007
CON-007 مدل Page/Version/Block/Navigation/Release را مالک است. CON-006 مسیرهای locale، CON-008 فرم intake، CON-009 canonical/redirect و CON-010 rollback/monitoring را مالکاند. این درس نباید آن outcomeها را جذب کند.
3. Page ID پایدار، Page Version immutable
page_id مثل P-42 identity منطقی صفحه است. هر state قابل انتشار باید page_version_id تازه مثل PV-8 داشته باشد. اگر publishable state عوض شد، overwrite کردن PV-7 ممنوع است؛ نسخه جدید باید parent/supersedes خود را ثبت کند.
4. از Git فقط الگوی version در برابر pointer را بگیر
مستندات رسمی Git تاریخ پروژه را مجموعهای از snapshotهای commit توصیف میکنند و refها را pointerهای نامدار به object identity میدانند که میتوانند جابهجا شوند. این یک الگوی ذهنی مفید است؛ MAKNOW ادعا نمیکند Page Version همان Git commit است.
5. Snapshot باید binding محتوایی داشته باشد
هر page_version_id باید snapshot_digest داشته باشد و به ordered block-instance referenceهای دقیق bind شود. timestamp یا نام draft کافی نیست، چون دو state متفاوت ممکن است نام یا زمان مشابه داشته باشند.
6. Block Instance را از Block Payload جدا کن
یک block instance باید identity، type و payload ref/digest مشخص داشته باشد. همان payload میتواند در چند context استفاده شود، اما ترتیب instanceها بخشی از snapshot صفحه است. reorder بدون تغییر payload هم publishable state را عوض میکند و version جدید میخواهد.
7. payload مفقود را با «آخرین نسخه موجود» جایگزین نکن
اگر release تاریخی به payload immutable اشاره میکند و آن dependency حذف شده است، reconstruction باید fail شود. انتخاب خودکار newest payload تاریخ را بازنویسی میکند و تصمیم audit را جعلی میسازد.
8. Provenance را به derivation وصل کن
W3C PROV بین Entity، Activity و Agent فرق میگذارد و wasDerivedFrom را برای derivation دارد. در این درس میتوانی نسخه جدید را به parent version و activity تغییر bind کنی؛ PROV vocabulary میدهد، نه schema اختصاصی MAKNOW.
9. Navigation یک projection نسخهدار است
جای page در navigation را داخل snapshot محتوا بهصورت field mutable پنهان نکن. navigation_projection_id باید node، parent و order را برای یک projection مشخص نگه دارد تا move امروز، navigation release دیروز را پاک نکند.
10. Release هم projection است، نه synonym نسخه صفحه
release_id و release_projection_id باید مجموعه exact page versionها و navigation projection مورد استفاده را ثبت کنند. Release pointer میتواند به release تازه حرکت کند، اما historical release نباید mutate شود.
11. Mutable ref فقط convenience است
workspace_draft، branch-like name یا «current release» میتواند حرکت کند. authority تاریخی از immutable IDs و digestها میآید، نه از label جاری. حرکت pointer به نسخه قدیمی، identity نسخهها را عوض نمیکند.
12. Reconstruction یک test است
برای هر release مهم باید بتوانی از recordها همان page version، همان block order، همان payload digests و همان navigation membership را بازسازی کنی. اگر یک dependency یا projection گم است، state باید BLOCK_* یا UNKNOWN بماند.
13. مثال منفی: content ثابت، navigation عوض شده
اگر bytes صفحه تغییر نکرده ولی node از /docs به /learn منتقل شده، page snapshot میتواند همان باشد اما navigation projection جدید لازم است. overwrite کردن navigation قدیمی باعث میشود release قبلی دیگر بازسازیپذیر نباشد.
14. Transfer: reorder + payload replacement + nav move
برای P-42 دو block را reorder کن، payload یک hero را عوض کن و navigation node را جابهجا کن. PV-8 و projection/release تازه بساز؛ سپس ثابت کن release قبلی هنوز block order و nav membership اصلی خود را reconstruct میکند.
15. خروجی قابل ممیزی
Website Workspace Version Graph & Release Projection v1 باید Page ID، Page Version، Parent، Snapshot Digest، Block Instance/Type/Payload Ref-Digest/Order، Navigation Projection/Node/Parent/Order، Release ID/Projection/Pointer، Supersedes، Reconstruction Result، Projection Validation، Decision، Reason و Provenance را نگه دارد. RELEASE_PROJECTION_READY فقط برای evidence بستهشده همان fixture معتبر است.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
Q1 concept
Q2 diagnosis
Q3 diagnosis
Q4 transfer
ملاکهای ارزیابی (rubric)
- Identity/version: stable page identity and immutable page versions are explicit.
- Exact binding: block instances, payload digests, order, navigation projection, and release membership are exact.
- Negative states: missing/stale/unbound evidence is not coerced into success.
- Reconstruction: a prior release remains independently reconstructable.
- Transfer: changed context is rebuilt from new evidence, not copied.
منابع و تازگی
مطالعهٔ موارد (case studies)
فایلهای آزمایشگاه
Inspect the eight synthetic workspace fixtures and implement evaluate(case) in starter.py. Keep page identity separate from immutable versions, preserve exact block dependencies and historical navigation/release projections, and fail closed when a released dependency cannot be reconstructed. Expected final labels are intentionally not provided.