برنامهریزی، تحلیل و عملیات پلتفرم · فصل ۵ — Virtual Cast، Canon Boundary و Repair Workflow · 218
Repair Diagnostics و Isolated Reproduction
داده و event دارد اما آنها را به مدل تصمیم، attention، experiment یا platform policy قابل توضیح تبدیل نمیکند. موضوع جاری: «Repair Diagnostics و Isolated Reproduction». میتواند برای «Repair Diagnostics و Isolated Reproduction» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.
خلاصهٔ درس
داده و event دارد اما آنها را به مدل تصمیم، attention، experiment یا platform policy قابل توضیح تبدیل نمیکند. موضوع جاری: «Repair Diagnostics و Isolated Reproduction».
میتواند برای «Repair Diagnostics و Isolated Reproduction» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.
خروجی این درس
میتواند برای «Repair Diagnostics و Isolated Reproduction» model، signal و guardrail لازم را در یک workflow محدود تعریف و ارزیابی کند.
1. مسئله: Fix کردن در Full System میتواند علت را پنهان کند
وقتی یک Failure را مستقیم در سیستم کامل «درست» میکنیم، ممکن است همزمان چند متغیر عوض شوند و دیگر نفهمیم کدام تغییر واقعاً علت را حذف کرده است. خروجی این درس Isolated Reproduction & Diagnostic Evidence Packet v1 است: یک بستهی تشخیصی که Failing Input، Environment، Oracle، Trace، Suspect Range و Boundary Owner را جدا و قابلممیزی نگه میدارد.
2. مرز درس
PLN-027 مالک Release/Canary نیست؛ آن مرحله متعلق به PLN-028 است. همچنین Canon Boundary درس PLN-026 را جذب نمیکند. اینجا فقط باید Failure را به کوچکترین مرز قابلتکرار برسانیم و مشخص کنیم رفتار مشاهدهشده متعلق به Application/SDK است یا به Model/Network/Sandbox Provider نیاز دارد.
3. FACT خارجی و DESIGN داخلی
git bisect با binary search بین revisionهای معلومِ old/good و new/bad، دامنهی تغییر را کوچک میکند؛ ولی اگر Test Oracle نتواند candidateها را پایدار classify کند، bisect هم نتیجه قابلاتکا نمیدهد. OpenAI Agents SDK Testing نیز test doubleهای deterministic و provider-neutral دارد که رفتار application/SDK را بدون model یا sandbox-provider واقعی تمرین میدهند. این ابزارها رفتار provider واقعی را اثبات نمیکنند. ساختار Packet و Stateهای این درس MAKNOW DESIGN هستند.
4. Incident و Symptom را از Hypothesis جدا کن
incident_id و symptom_id واقعیت مشاهدهشده را نامگذاری میکنند؛ diagnostic_hypothesis فقط توضیح موقت است. اگر Hypothesis عوض شد، Identity حادثه نباید بازنویسی شود. تشخیص خوب از «چه دیدیم؟» شروع میشود، نه از «فکر میکنیم علت چیست؟».
5. Failing Input را Freeze کن
ورودی شکست باید hash یا identity پایدار داشته باشد. اگر Prompt، Tool Input، Attachment یا Event sequence هنگام آزمون تغییر کند، نتیجهی جدید دیگر reproduction همان Failure نیست. failing_input_hash باید با Fixture و Trace پیوند داشته باشد.
6. Environment Fingerprint و Dependency Lock
حداقل Environment باید runtime، dependency lock، config hash، agent-definition hash و tool-contract hash را ثبت کند. تغییر دو dependency در یک مرحله Attribution را خراب میکند. اگر Environment آزمایش با Environment شکست یکی نیست، State موفق صادر نمیشود و نتیجه HOLD میماند.
7. Oracle باید صریح و پایدار باشد
Oracle میگوید چه خروجیای Expected و چه چیزی Actual است. «به نظرم جواب بد است» Oracle نیست. Oracle باید آنقدر deterministic باشد که candidateهای bisect را بهطور قابلتکرار classify کند. Oracle flaky → INCONCLUSIVE.
8. Trace و Fixture، Evidence قابل replay
fixture_id و trace_id باید قابل ردیابی باشند. Trace باید نشان دهد چه callها و state transitionهایی قبل از Failure رخ دادهاند. Fixture باید کمترین داده لازم را حمل کند؛ Copy کردن کل production state هم ریسک حریم خصوصی دارد و هم Diagnosis را شلوغ میکند.
9. Last Known Good و First Bad Candidate
وقتی revision boundary معتبر داریم، last_known_good و first_bad_candidate دامنه suspect_range را شکل میدهند. git bisect برای کوچککردن همین بازه مفید است، اما فقط اگر هر commit قابل build/test باشد و Oracle جواب پایدار بدهد.
10. Boundary Owner را نام ببر
حداقل Ownerهای عملی این درس: APPLICATION_SDK، MODEL_PROVIDER، SANDBOX_PROVIDER، NETWORK/PROTOCOL یا UNKNOWN. اگر scripted test double Failure را reproduce نکند ولی provider واقعی reproduce کند، مرز باید به external/provider منتقل شود؛ offline green test حق ندارد provider را تبرئه کند.
11. Test Double چه چیزی را اثبات میکند؟
Test double برای tool routing، handoff، guardrail، retry، normalized sandbox call و orchestration عالی است. اما lifecycle واقعی sandbox، filesystem fidelity، process execution، resource limit و isolation متعلق به integration test با provider واقعی است. پس SESSION_LOCAL یا offline success را به production/provider proof تبدیل نکن.
12. Baseline — Failure داخل Application/SDK Boundary
Incident INC-517 بعد از dependency upgrade با همان input، همان env fingerprint و Oracle پایدار reproduce میشود. ScriptedModel همان Failure در tool-argument normalization را نشان میدهد؛ last-known-good=r140 و first-bad=r147 است. چون Environment match است، فقط یک متغیر تغییر کرده و Oracle پایدار است، Packet به REPRODUCED میرسد و bisect آماده است.
| case_id | environment | oracle_stable | changed_variables | boundary_owner | state | bisect_ready | integration_required | reason |
|---|---|---|---|---|---|---|---|---|
| baseline | env:py3.13-sdk0.9.4 | True | 1 | APPLICATION_SDK | REPRODUCED | True | False | EVIDENCE_PACKET_CLOSED |
| two_dependencies_changed | env:py3.13-sdk0.9.4 | True | 2 | APPLICATION_SDK | INCONCLUSIVE | False | False | MULTIPLE_VARIABLES_CHANGED |
| provider_double_overclaim | scripted-sandbox:memory | True | 1 | SANDBOX_PROVIDER | EXTERNAL_UNTRUSTED | True | True | SCRIPTED_DOUBLE_CANNOT_PROVE_PROVIDER_BEHAVIOR |
| flaky_oracle | env:py3.13-sdk0.9.4 | False | 1 | APPLICATION_SDK | INCONCLUSIVE | False | False | FLAKY_ORACLE |
| environment_mismatch | env:py3.12-sdk0.8.9 | True | 1 | APPLICATION_SDK | HOLD | True | False | ENVIRONMENT_FINGERPRINT_MISMATCH |
| missing_provenance | env:py3.13-sdk0.9.4 | True | 1 | APPLICATION_SDK | UNKNOWN | True | False | DECISIVE_EVIDENCE_MISSING |
| stale_evidence | env:py3.13-sdk0.9.4 | True | 1 | APPLICATION_SDK | STALE | True | False | STALE_DIAGNOSTIC_EVIDENCE |
| transfer_real_provider | real-sandbox:v7 | True | 1 | SANDBOX_PROVIDER | HOLD | True | True | REAL_PROVIDER_BOUNDARY_REQUIRES_INTEGRATION_REPRO |
13. Shortcutهای خطرناک
- دو dependency را همزمان عوض کنی →
INCONCLUSIVE. ۲) با scripted sandbox نتیجه بگیری provider واقعی سالم/خراب است →EXTERNAL_UNTRUSTED/HOLD. ۳) Oracle flaky را به bisect بدهی → دامنه ظاهراً کوچک میشود ولی causal claim معتبر نیست. ۴) Environment mismatch را نادیده بگیری →HOLD.
14. Transfer — Failure فقط با Sandbox Provider واقعی
در Transfer، scripted test double همهچیز را سبز نشان میدهد ولی همان fixture در sandbox provider واقعی Failure دارد. نتیجه Offline را copy نمیکنیم. boundary_owner به SANDBOX_PROVIDER تغییر میکند، integration_required=true میشود و کوچکترین integration reproduction باید lifecycle/filesystem/process/isolation لازم را با provider واقعی نگه دارد. تا آن زمان State HOLD است.
15. Lab، Assessment و Freshness
در lab/PLN-027-LAB1/learner/ دستور python run_checks.py را اجرا کن. ۸ Fixture شامل Baseline، Two Dependencies Changed، Provider-double Overclaim، Flaky Oracle، Environment Mismatch، Missing Provenance، Stale Evidence و Real-provider Transfer هستند. FACTهای Git و OpenAI Agents SDK در 2026-09-16 دوباره بررسی شدهاند؛ تغییر Canonical Package نیازمند Version جدید است.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
Q1 boundary
Q2 application
Q3 diagnosis
Q4 oracle
Q5 transfer
Q6 authority
ملاکهای ارزیابی (rubric)
Full credit requires: exact lesson boundary; stable failing input/environment identity; explicit expected/actual oracle; correct use of bisect only with stable classification; correct distinction between scripted SDK evidence and real-provider integration evidence; and a typed non-success state when decisive evidence is missing.
منابع و تازگی
مطالعهٔ موارد (case studies)
فایلهای آزمایشگاه
دستور python run_checks.py را اجرا کنید. Fixtureها و evaluator کاملاً قابل مشاهدهاند. توضیح دهید هر Case چرا State خود را میگیرد و اولین Evidence Boundary نیازمند اصلاح چیست. آزمایش کاملاً آفلاین و مصنوعی است و هیچ تماس مدل یا Provider ندارد.