برنامه‌ریزی، تحلیل و عملیات پلتفرم · فصل ۴ — Adapter، Capability، Shadow/Direct Publish و Quota · 215

Account Health, Quota و Platform Rate Limits

داده و event دارد اما آن‌ها را به مدل تصمیم، attention، experiment یا platform policy قابل توضیح تبدیل نمی‌کند. موضوع جاری: «Account Health, Quota و Platform Rate Limits». می‌تواند برای «Account Health, Quota و Platform Rate Limits» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.

Account Health, Quota and Platform Rate Limits — en-US

خلاصهٔ درس

داده و event دارد اما آن‌ها را به مدل تصمیم، attention، experiment یا platform policy قابل توضیح تبدیل نمی‌کند. موضوع جاری: «Account Health, Quota و Platform Rate Limits».

می‌تواند برای «Account Health, Quota و Platform Rate Limits» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.

خروجی این درس

می‌تواند برای «Account Health, Quota و Platform Rate Limits» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.

پیش‌نیازها

1. مسئله: هر 403 یا 429 یک Retry ساده نیست

یک Worker ممکن است سه خطای ظاهراً شبیه ببیند: GitHub-like rate limit، YouTube quotaExceeded و یک authorization failure. اگر هر سه را «retryable» بداند، می‌تواند quota را بیشتر بسوزاند، throttling را تشدید کند یا خطای دسترسی را پنهان کند. خروجی این درس Account Health & Quota Guardrail Ledger v1 است.

2. مرز درس

PLN-024 فقط Account/Auth/Permission/Restriction و Quota/Rate-limit evidence را به action محدود تبدیل می‌کند. تراکنش Publish درس PLN-023 و Persona Model درس PLN-025 خارج از Scope هستند. هیچ API واقعی فراخوانی نمی‌شود و هیچ Credential واقعی لازم نیست.

3. FACT خارجی و MAKNOW DESIGN

GitHub REST API در مستند فعلی Primary و Secondary rate limit را جدا می‌کند، status headerهای Primary limit را برمی‌گرداند و برای rate-limit می‌تواند 403 یا 429 بدهد. YouTube Data API نیز quotaExceeded را به‌عنوان quota error جدا ثبت می‌کند و در 2026 granular quota bucket را برای بعضی methodها شروع کرده است. اما taxonomy سلامت و actionهای این Ledger، MAKNOW DESIGN هستند.

4. Account Identity را قبل از Error Class ببند

با account_id و platform_id شروع کن. یک header یا status بدون اینکه بدانیم مربوط به کدام account/project/integration است قابل تصمیم‌گیری نیست. Evidence باید به همان هویت محدود باشد؛ signal یک account را به account دیگر تعمیم نده.

5. Auth، Permission و Restriction سه چیز متفاوت‌اند

auth_state می‌گوید Credential معتبر است یا نه. permission_state می‌گوید principal مجاز به operation هست یا نه. account_restriction_state محدودیت policy/account-level را نگه می‌دارد. Auth منقضی → REAUTH_REQUIRED. Permission یا policy block را نباید quota exhaustion نامید.

6. Quota Model باید Provider-specific باشد

quota_model و quota_bucket دقیقاً نشان می‌دهند limit کجا اعمال می‌شود: global، resource-specific، method-specific یا secondary throttle. یک مدل جهانی برای همه Providerها نساز. اگر Provider bucket را عوض کند، نتیجه قبلی باید invalid شود.

7. Operation و Cost را همراه Bucket ثبت کن

method_or_operation و quota_cost باید در همان Evidence row باشند. در YouTube امروز search.list و videos.insert bucketهای granular خودشان را دارند؛ همین مثال نشان می‌دهد cost/bucket می‌تواند با revisionهای Provider عوض شود. Cost قدیمی را بدون Freshness check استفاده نکن.

8. Remaining، Reset و Retry-After نقش‌های متفاوت دارند

remaining_value ظرفیت باقی‌مانده را نشان می‌دهد؛ reset_at زمان reset یک window را؛ retry_after delay صریح Provider را. GitHub برای primary exhaustion به reset و برای secondary limit در صورت وجود به Retry-After اشاره می‌کند. از این signalها action می‌سازیم، نه از یک backoff ثابت جهانی.

9. HTTP Status به‌تنهایی Oracle نیست

403 می‌تواند rate limit، authorization یا policy مشکل باشد. 429 هم context و recovery signal می‌خواهد. بنابراین http_status باید کنار provider_error_code، auth/permission state و rate-limit class دیده شود. اگر classification مبهم است، AMBIGUOUS یا BLOCKED بهتر از retry خوش‌بینانه است.

10. Freshness و Provenance بخشی از Health هستند

evidence_retrieved_at و provenance_ref تزئینی نیستند. Quota value، method cost و provider policy می‌توانند عوض شوند. Evidence قدیمی یا بی‌منبع اجازه ALLOW ندارد؛ اول باید refresh شود.

11. Health State و Allowed Action را جدا نگه دار

health_state توصیف وضعیت evidence است؛ allowed_action رفتار بعدی را محدود می‌کند. نمونه‌ها: HEALTHY → ALLOW، RATE_LIMITED → DEFER_UNTIL_RESET، AUTH_REQUIRED → REAUTH_REQUIRED، PERMISSION_BLOCKED → POLICY_REVIEW، QUOTA_EXHAUSTED → QUOTA_REVIEW و evidence ناقص → BLOCKED.

12. Baseline — سه Failure با سه مسیر متفاوت

در fixture، GitHub-like primary limit با remaining صفر تا reset باید defer شود؛ YouTube quotaExceeded باید وارد quota review شود؛ credential منقضی باید reauth شود. یک worker که هر سه را exponential retry کند، boundary درس را شکسته است.

case_idplatformauthpermissionbucketremainingstatusprovider_errorhealth_stateallowed_actionrecheck_at
github_healthy_allowgithubVALIDALLOWEDcore4200200NoneHEALTHYALLOW2026-09-16T09:00:00Z
github_primary_defergithubVALIDALLOWEDcore0403rate_limit_exceededRATE_LIMITEDDEFER_UNTIL_RESET2026-09-16T09:00:00Z
github_secondary_retry_aftergithubVALIDALLOWEDsecondary-contentNone429secondary_rate_limitRATE_LIMITEDDEFER_UNTIL_RESET2026-09-16T08:02:00Z
expired_auth_reauththird-platformEXPIREDUNKNOWNNoneNone403invalid_tokenAUTH_REQUIREDREAUTH_REQUIREDAFTER_REAUTH
permission_policy_reviewthird-platformVALIDDENIEDdefault900403insufficient_permissionsPERMISSION_BLOCKEDPOLICY_REVIEWAFTER_PERMISSION_REVIEW
youtube_quota_reviewyoutubeVALIDALLOWEDshared-other-endpoints0403quotaExceededQUOTA_EXHAUSTEDQUOTA_REVIEW2026-09-17T07:00:00Z
stale_or_untrusted_blockyoutubeVALIDALLOWEDall-methods9000200NoneUNKNOWNBLOCKEDREFRESH_EVIDENCE_NOW
transfer_granular_bucketyoutubeVALIDALLOWEDsearch.list78200NoneHEALTHYALLOW2026-09-17T07:00:00Z

13. Shortcutهای خطرناک

  1. 403 را همیشه quota بدانی. ۲) قبل از Retry-After یا reset دوباره request بدهی. ۳) remaining/reset قدیمی را معتبر فرض کنی. ۴) authorization failure را با خرید quota حل کنی. ۵) بعد از granular شدن یک method، هنوز global bucket قبلی را Oracle بگیری.

14. Transfer — Operation وارد Bucket جدا شده است

در Transfer، operation search.list دیگر از bucket global قبلی مصرف نمی‌کند. Ledger باید quota_bucket، quota_cost، remaining_value و recheck_at را از evidence جدید دوباره بسازد. نتیجه baseline قابل کپی نیست: ممکن است global pool exhausted باشد ولی method-specific bucket هنوز اجازه ALLOW بدهد.

15. Lab، Assessment و Freshness

در lab/PLN-024-LAB1/learner/ دستور python run_checks.py را اجرا کن. هشت Fixture مسیرهای ALLOW، DEFER، REAUTH، POLICY_REVIEW، QUOTA_REVIEW، STALE، UNKNOWN و Transfer را پوشش می‌دهند. منابع GitHub و YouTube در 2026-09-16 دوباره بررسی شده‌اند؛ هر تغییر در package قفل‌شده نیازمند version جدید است.

ارزیابی

پاسخ‌نامه‌ی این درس در بسته‌ی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار می‌فرستد.

Q1 boundary

lesson ✗AI ✗notes ✗

Q2 application

lesson ✗AI ✗notes ✗

Q3 retry

lesson ✗AI ✗notes ✗

Q4 auth

lesson ✗AI ✗notes ✗

Q5 freshness

lesson ✗AI ✗notes ✗

Q6 transfer

lesson ✗AI ✗notes ✗
ملاک‌های ارزیابی (rubric)
  • Scope: keeps account/quota health separate from publishing and persona outcomes.
  • Provider fact vs design: identifies GitHub/YouTube facts and MAKNOW-designed states separately.
  • Health dimensions: distinguishes auth, permission, account restriction, quota and rate limits.
  • Quota model: binds method/operation, bucket, cost, remaining and reset evidence.
  • Recovery: uses Retry-After/reset evidence when supplied rather than a universal retry rule.
  • Freshness/provenance: refuses ALLOW on stale or untraceable decisive evidence.
  • Bounded action: chooses only ALLOW / DEFER_UNTIL_RESET / REAUTH_REQUIRED / POLICY_REVIEW / QUOTA_REVIEW / BLOCKED.
  • Transfer: recomputes a changed granular bucket from new evidence.

منابع و تازگی

Rate limits for the REST API — GitHub Docs
·
Current primary/secondary rate-limit headers and recovery guidance for GitHub REST API.
YouTube Data API — Errors
·
Current quotaExceeded and authorization-error semantics.
YouTube Data API — Revision History
·
2026 transition toward granular quota buckets for selected methods.
YouTube Data API — Quota Calculator
·
Current method costs and quota-bucket examples.

مطالعهٔ موارد (case studies)

فایل‌های آزمایشگاه

کاملاً آفلاین است؛ API Key و Network لازم نیست.

  1. فایل fixtures/cases.json را بررسی کن.
  2. در evaluator.py ترتیب Provenance/Freshness، Auth، Restriction/Permission و Quota/Rate را ببین.
  3. python run_checks.py را اجرا کن.
  4. هر بار فقط یک Field تعیین‌کننده را تغییر بده و علت تغییر Action را توضیح بده.

Starter شامل Oracle پنهان نیست؛ هر State باید از Evidence قابل مشاهده دفاع شود.