
CRUMB
Generative Game Studio · Demo
من فكرة لعبة في سطر واحد إلى مسوّدة قابلة للعب، مع عمل الوكلاء ظاهرًا ومتاحًا للتدخل.
CRUMB إطار تشغيل لاستوديو متعدد الوكلاء لنمذجة الألعاب الخفيفة.
CRUMB vocabulary
- spec
- build
- artifact
- qa check
- ac predicate
- verifier
- routing
- circuit breaker
- budget
- intervention
- transcript
- anti-deception
- studio
Spec: planner-lead · goal · question.socratic · step.design · spec · spec.update · acceptance_criteria · researcher · step.research.video · step.research_plan · ac_predicates · D1 spec_fit · research_plan_violationBuild: builder · build · spawn · sandwich.assembled.md · --append-system-prompt · agent-workspace · buildBuilderInputBundle · Phaser CDN · JuiceManager · PER_SPAWN_TIMEOUT_MS · juice_manager_missingArtifact: artifact.created · sha256 · artifacts/game.html · artifacts/game/index.html · pickEntry · artifact-watcher · version.released · manifest.toml · loc_own_bytes · VersionsQA Check: Phaser CDN · pickEntry · loc_own_bytes · qa_check · runQaCheck · qa.result · exec_exit_code · lint_passed · first_interaction · cross_browser_smoke · PLAYWRIGHT SMOKE · runtime_progress · qa-check-effect@v1 · QA_CHECK_TIMEOUT_MS · D2 exec · D6 portability · ac_results · ac_pass_count · deterministic · PASS WITHOUT EXEC · runtime_stalled_under_input · runtime_player_below_ground · forged_qa_result_attemptAC Predicate: acceptance_criteria · ACPredicateItem · predicate_js · runACInteractive · ac_predicates · ac_results · ac_pass_count · ACPredicateLedgerItem · verify_pass_with_ac_failureVerifier: D2 exec · D6 portability · verifier · judge.score · CourtEval · grader · critic · defender · regrader · step.judge · D1 spec_fit · verifier-llm · combineDimScore · PARTIAL · deviation · suggested_change · user_approve_partial · self_bias_risk_same_provider · cross_provider · buildVerifierInputBundle · ScorecardRouting: spawn · routeOnVerdict · verdict_pass · deviation · Critical · Important · Minor · suggested_change · rollback · handoff.rollback · sandwich_append · dispatch · adapter_swapped · user.veto · reduce(state, event)Circuit Breaker: circuit_breaker · CIRCUIT_OPEN_AT · adapter_override · adapter_swapped · circuit_open_auto_respawn · builder_circuit_open · claude-local · probeAdapter · adapter_substituted · intended_model · /swap · /reset-circuitBudget: spec.update · QA_CHECK_TIMEOUT_MS · builder_circuit_open · RESPEC_MAX · VERIFY_MAX · too_many_verify · TOKEN_BUDGET_HARD · token_exhausted · ratchet_revert · adaptive_stop · STUCK_THRESHOLD · budget_exhausted · PER_SPAWN_TIMEOUT_MSIntervention: PARTIAL · sandwich_append · STUCK_THRESHOLD · user.intervene · user.veto · user.approve · user.pause · user_approve_partial · ack · inbox.txt · parseInboxLine · /swap · /reset-circuit · consumed_intervene_ids · /api/sessions/:id/inboxTranscript: version.released · qa.result · qa-check-effect@v1 · dispatch · adapter_substituted · intended_model · ack · consumed_intervene_ids · transcript.jsonl · TranscriptWriter · ULID · O_APPEND · message.schema.json · reduce(state, event) · PURE REDUCER · REPLAY · replay_end_offset · CrumbState · parent_event_id · deterministic · audit_violations · applyEventFirewall · useTranscriptStream · otel.jsonlAnti-Deception: step.research_plan · buildBuilderInputBundle · JuiceManager · verify_pass_with_ac_failure · checkAntiDeception · PASS WITHOUT EXEC · self_bias_risk_same_provider · cross_provider · research_plan_violation · juice_manager_missing · runtime_stalled_under_input · runtime_player_below_ground · audit_violations · applyEventFirewall · forged_qa_result_attempt · buildVerifierInputBundleStudio: @crumb/studio · /api/stream · text/event-stream · useTranscriptStream · dockview-react · Pipeline · Scorecard · Waterfall · Versions · /api/sessions/:id/inbox · otel.jsonl
الوكلاء الذين يبنون اللعبة، بمعزل عن الأدلة التي تحكم عليها.
عرض استوديو محلي يمرّر فكرة لعبة من سطر واحد عبر المواصفة والبناء وفحوص التنفيذ. تصل كل خطوة إلى transcript بصيغة JSONL، ويقرر reducer نقي الآثار التالية، ولا ينفّذ الآثار الجانبية إلا الـ dispatcher. ويُفصل QA التنفيذ عن حكم النموذج للاختيار بين النجاح وإعادة التصميم والإصلاح والتوجيه البشري.
اطرح فكرة لعبة في سطر واحد فيتعاون وكلاء Claude Code وCodex وGemini CLI عبر Planner → Builder → QA حتمي → Verifier، بينما يعرض CRUMB Studio الأحداث والتقدم والمُخرَجات ويقبل التدخل باللغة الطبيعية.
عرض تنسخه من المستودع العام وتشغّله محليًا.
من الفكرة إلى اللعب
تصبح الفكرة مواصفةً وبناءً وتشغيلًا لـ QA التنفيذ. وتمر كل خطوة عبر الـ transcript، ولا يستدعي الـ actors بعضهم بعضًا.
فكرة اللعبة · التوجيهتشغيل · حكم: الطرح · التوجيهكتابة أوامر inbox
packages/studioتُدخَل فكرة لعبة من سطر واحد والتوجيه باللغة الطبيعية في Studio، الذي يكتب الأوامر في inbox. ولا يعدّل Studio الـ transcript مباشرة أبدًا.
كتابة أوامر inbox
packages/studioبيانات: أحداث userحلقة الأحداث · replay · tailsrc/loop/coordinator.tsيقرأ الـ coordinator أوامر inbox ويسجّلها في الـ transcript أحداثًا من نوع user.
حلقة الأحداث · replay · tail
src/loop/coordinator.tsتشغيل · حكم: reduce بالترتيبالحالة → الآثار التاليةsrc/reducerتمر الأحداث الحية عبر reduce واحدًا تلو الآخر من طابور، مع الحفاظ على ترتيب آثار كل حدث، أما الـ dispatch نفسه فيعمل بشكل غير متزامن.
الحالة → الآثار التالية
src/reducerتشغيل · حكم: الآثارتنفيذ الآثار · spawn الـ actorssrc/dispatcher/live.tsالـ reducer دالة نقية لا تقرر إلا الحالة والآثار التالية: الـ goal يختار Planner، والـ spec يختار Builder، والـ build يختار qa_check.
actor → إطار التشغيل · النموذج
model-config · presetتشغيل · حكم: إعداد الـ actorsrc/dispatcher/live.tsيُحدَّد أي إطار تشغيل ومزوّد ونموذج يشغّل الـ actor بالترتيب: علم CLI > الإعداد > preset > المحيط > fallback. والـ actor ليس مزوّدًا ثابتًا.
تنفيذ الآثار · spawn الـ actors
src/dispatcher/live.tsتشغيل · حكم: تشغيل PlannerPlanner Lead · المواصفةagent actor · CLIيشغّل الـ dispatcher الـ Planner بمُدخلات مُسقَطة. ويستمر البحث المشروط عبر خطة البحث لدى Planner وتسليم الأدلة، وهو مطوي في هذه الخريطة.
Planner Lead · المواصفة
agent actor · CLIبيانات: spectranscript.jsonl · append-onlysrc/transcriptتصبح مواصفة Planner حدثًا في الـ transcript، ويختار الـ reducer منها Builder. ولا يستدعي الـ actors بعضهم بعضًا.
تنفيذ الآثار · spawn الـ actors
src/dispatcher/live.tsتشغيل · حكم: تشغيل BuilderBuilder · يكتب اللعبةagent actor · CLIيشغّل الـ dispatcher الـ Builder. وإذا ظل الـ actor نفسه يفشل، ينفتح circuit ويبدّل الـ adapter، ويتوقف إن استمرت الإخفاقات.
Builder · يكتب اللعبة
agent actor · CLIبيانات: الملفاتملفات اللعبةartifacts/يكتب Builder ملف الدخول والمصادر والأصول بوصفها مُخرَجات.
Builder · يكتب اللعبة
agent actor · CLIبيانات: سجل البناءtranscript.jsonl · append-onlysrc/transcriptيُسجَّل حدث build وartifact.created في الـ transcript مع هوية المُخرَج.
تنفيذ الآثار · spawn الـ actors
src/dispatcher/live.tsتشغيل · حكم: qa_checkQA التنفيذ · الفحوصdispatcher/qa-runner.tsبعد حدث build، يُصدر الـ reducer أثر qa_check يحمل هوية المُخرَج والبناء وشروط القبول، وينفّذه الـ dispatcher.
ملفات اللعبة
artifacts/بيانات: ما يُشغَّلQA التنفيذ · الفحوصdispatcher/qa-runner.tsيشغّل QA التنفيذ المُخرَج الفعلي بفحوص الشيفرة والمتصفح. ومهلة 120 ثانية الافتراضية قيمة إعداد.
QA التنفيذ · الفحوص
dispatcher/qa-runner.tsبيانات: qa.resulttranscript.jsonl · append-onlysrc/transcriptنجاحًا كان أو إخفاقًا، تُسجَّل النتيجة حدثًا من نوع system qa.result. وحتى إن رمى الفحص استثناءً، تُسجَّل نتيجة بالحقول الفاشلة.
حدّ الثقة في التحقق
QA التنفيذ دليل من تشغيل المُخرَج فعلًا، وVerifier نموذج يحكم على أدلة مُسقَطة. ويوفّق الـ reducer بين الاثنين قبل اختيار المسار التالي.
QA التنفيذ · الفحوص
dispatcher/qa-runner.tsبيانات: qa.resulttranscript.jsonl · append-onlysrc/transcriptنجاحًا كان أو إخفاقًا، تُسجَّل النتيجة حدثًا من نوع system qa.result. وحتى إن رمى الفحص استثناءً، تُسجَّل نتيجة بالحقول الفاشلة.
transcript.jsonl · append-only
src/transcriptبيانات: الأدلة فقطإسقاط مُدخلات الحكمsrc/dispatcher/live.tsتُسقَط مُدخلات Verifier من أحدث goal وspec وbuild وqa.result وartifact.created مع أدلة بحث مختارة. وهذا يضيّق السياق، ولا يُثبت العزل أو انعدام التسرب.
إسقاط مُدخلات الحكم
src/dispatcher/live.tsبيانات: مُدخلات الحكمVerifier · حكم النموذجVerifier actorيشغّل الـ dispatcher الـ Verifier بالمُدخلات المُسقَطة.
Verifier · حكم النموذج
Verifier actorبيانات: judge.scoretranscript.jsonl · append-onlysrc/transcriptيُسجَّل حكم Verifier حدثًا من نوع judge.score. وهو حكم نموذج، لا حقيقة عن التنفيذ.
الحالة → الآثار التالية
src/reducerتشغيل · حكم: الدرجة · أدلة QAمكافحة الخداع · تصحيح الدرجةsrc/validatorعند judge.score، يمرّره الـ reducer إلى فحص مكافحة الخداع مع نتيجة QA ومزوّد Builder وخطة البحث وأدلته.
مكافحة الخداع · تصحيح الدرجة
src/validatorبيانات: الحكم المصحَّحتوجيه الحكمsrc/reducerيصبح PASS بلا تنفيذ ناجح FAIL، وتُصحَّح الدرجة المتعلقة بالتنفيذ من QA الحتمي. أما القواعد الأخرى فتصحيحات مشروطة، لا إثبات عام للصدق.
توجيه الحكم
src/reducerبيانات: انتهىانتهى · PASS أو سبب التوقفsession doneينهي PASS الجلسة بحالة done. وتنتهي توقفات الميزانية والـ circuit أيضًا بحالة done لكنها تحتفظ بسبب التوقف، فـ done ليس دائمًا PASS.
الإخفاق والتوجيه البشري
يذهب PARTIAL إلى شخص، وCritical إلى إعادة التصميم، وImportant أو Minor إلى الإصلاح، وتترك توقفات الميزانية أو الـ circuit سببًا للتوقف.
مكافحة الخداع · تصحيح الدرجة
src/validatorبيانات: الحكم المصحَّحتوجيه الحكمsrc/reducerيصبح PASS بلا تنفيذ ناجح FAIL، وتُصحَّح الدرجة المتعلقة بالتنفيذ من QA الحتمي. أما القواعد الأخرى فتصحيحات مشروطة، لا إثبات عام للصدق.
توجيه الحكم
src/reducerتشغيل · حكم: فحص PARTIALفكرة اللعبة · التوجيهينتظر PARTIAL شخصًا ليفحص.
توجيه الحكم
src/reducerتشغيل · حكم: إعادة التصميم · الإصلاحsrc/dispatcher/live.tsمن بين FAIL وREJECT، يعود Critical إلى Planner لإعادة التصميم، ويذهب Important أو Minor إلى Builder ملاحظاتٍ للإصلاح، وكلها تُنفَّذ آثارًا للـ dispatcher.
توجيه الحكم
src/reducerبيانات: انتهىانتهى · PASS أو سبب التوقفsession doneينهي PASS الجلسة بحالة done. وتنتهي توقفات الميزانية والـ circuit أيضًا بحالة done لكنها تحتفظ بسبب التوقف، فـ done ليس دائمًا PASS.
فكرة اللعبة · التوجيهتشغيل · حكم: الطرح · التوجيهكتابة أوامر inbox
packages/studioتُدخَل فكرة لعبة من سطر واحد والتوجيه باللغة الطبيعية في Studio، الذي يكتب الأوامر في inbox. ولا يعدّل Studio الـ transcript مباشرة أبدًا.
إعادة التشغيل والملاحظة
إعادة بناء الحالة من الـ transcript لا تنفّذ أي آثار، ويقرأ Studio السجل نفسه ليعرضه.
transcript.jsonl · append-only
src/transcriptبيانات: أحداث جديدة · replayحلقة الأحداث · replay · tailsrc/loop/coordinator.tsيتحقق الـ writer من الـ schema، ويعيّن ULID ووقتًا، ويُلحق. وعند الـ replay، تُمرَّر الأحداث الماضية عبر reduce فقط ولا تُنفَّذ آثارها مجددًا.
حلقة الأحداث · replay · tail
src/loop/coordinator.tsتشغيل · حكم: reduce بالترتيبالحالة → الآثار التاليةsrc/reducerتمر الأحداث الحية عبر reduce واحدًا تلو الآخر من طابور، مع الحفاظ على ترتيب آثار كل حدث، أما الـ dispatch نفسه فيعمل بشكل غير متزامن.
transcript.jsonl · append-only
src/transcriptملاحظة · إبلاغ: القراءة · SSEعرض الأحداث · المُخرَجاتpackages/studioيقرأ Studio الـ transcript والمُخرَجات ويعرض التقدم والمقاييس والمُخرَجات عبر SSE. وليس قياسًا عن بُعد يُرسل إلى خدمة بعيدة.
كل الروابط بالسماكة نفسها. اختر مسارًا لإبراز طريقه وحده، مع خطوات مرقّمة.
- خط متصل · اتجاه المُدخلات والنتائج والسجلات
- خط متقطع · تشغيل، حكم، طلب
- نقاط طويلة · الملاحظة والإبلاغ، بمعزل عن الحكم
- خط أسود سميك · المسار المختار، والأرقام تبيّن الترتيب
- مربع · حدّ شيفرة أو حالة، واسمه في الترويسة
- شريحة داخلية · مكوّن من ذلك الحد
- مربع منقّط · خارج ذلك الحد
- إطار برتقالي · حيث يقرر نموذج
- حلقة الأحداث · reducer · dispatcher
- السجلات · الإعداد · المُخرَجات
- الفحوص الحتمية · التصحيح
- Studio · الـ actors
مرسومة من مسارات الشيفرة في الإيداع العام f5e17c0. والـ actors أدوار في بيئة التشغيل، تختلف عن وكلاء البرمجة الذين استُخدموا لبناء هذا المستودع.
- مصدر الحالة
- الـ transcript مصدر الحالة والـ reducer دالة نقية. ولا ينفّذ الآثار الجانبية (تشغيل الـ actors وQA وكتابة الملفات) إلا الـ dispatcher، لذا تعيد إعادة التشغيل بناء الحالة دون آثار.
- ما تغطيه إعادة التشغيل
- تُنتج إعادة التشغيل الحالة نفسها، ولا تجعل توليدات LLM أو سلوك المتصفح والشبكة حتمية.
- ما يغطيه الحكم
- لا يفحص QA التنفيذ إلا الفحوص المضبوطة، ودرجة Verifier قناة واحدة من الأدلة. ولا يقيس أيٌّ منهما كل سلوك اللعبة أو متعتها أو رضا المستخدم.