diff --git a/data/knowledge/evidence-registry.json b/data/knowledge/evidence-registry.json new file mode 100644 index 0000000..0e6a4c3 --- /dev/null +++ b/data/knowledge/evidence-registry.json @@ -0,0 +1,142 @@ +{ + "version": "0.1.0", + "updatedAt": "2026-07-20", + "policy": { + "officialLevel": "A", + "pendingLevel": "A-PENDING", + "requiredFields": [ + "id", + "vendor", + "product", + "documentTitle", + "sourceUrl", + "verifiedAt", + "appliesToVersion", + "status" + ], + "ruleAr": "لا تصنف أي وظيفة على أنها A قبل تسجيل رابط الوثيقة وعنوانها والإصدار وتاريخ التحقق." + }, + "records": [ + { + "id": "cubase-import-audio-file", + "vendor": "Steinberg", + "product": "Cubase Pro", + "documentTitle": "Importing Audio Files", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "15.x", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "cubase-tempo-detection", + "vendor": "Steinberg", + "product": "Cubase Pro", + "documentTitle": "Tempo Detection Panel", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "15.x", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "cubase-musical-mode", + "vendor": "Steinberg", + "product": "Cubase Pro", + "documentTitle": "Musical Mode", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "15.x", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "cubase-audio-alignment", + "vendor": "Steinberg", + "product": "Cubase Pro", + "documentTitle": "Audio Alignment Panel", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "15.x", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "cubase-separate-stems", + "vendor": "Steinberg", + "product": "Cubase Pro", + "documentTitle": "Separating Stems", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "15.x", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-upload-timeline", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Upload and arrange audio in Studio", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-manual-bpm", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Project tempo and Manual BPM", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-time-signature", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Grid and time signature behavior", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-remove-fx", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Remove FX", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-warp-markers", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Warp Markers", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + }, + { + "id": "suno-studio-export", + "vendor": "Suno", + "product": "Suno Studio", + "documentTitle": "Multitrack and WAV export", + "sourceUrl": "", + "verifiedAt": null, + "appliesToVersion": "1.2", + "status": "pending", + "temporaryReliability": "A-PENDING" + } + ] +} diff --git a/data/knowledge/manifest.json b/data/knowledge/manifest.json new file mode 100644 index 0000000..416eaf7 --- /dev/null +++ b/data/knowledge/manifest.json @@ -0,0 +1,52 @@ +{ + "version": "0.1.0", + "updatedAt": "2026-07-20", + "files": [ + { + "id": "reliability", + "path": "data/knowledge/reliability.json", + "required": true, + "rootArray": "levels", + "uniqueKey": "id" + }, + { + "id": "evidence-registry", + "path": "data/knowledge/evidence-registry.json", + "required": true, + "rootArray": "records", + "uniqueKey": "id" + }, + { + "id": "workflow-stages", + "path": "data/knowledge/workflow-stages.json", + "required": true, + "rootArray": "stages", + "uniqueKey": "id" + }, + { + "id": "musical-roles", + "path": "data/knowledge/musical-roles.json", + "required": true, + "rootArray": "roles", + "uniqueKey": "id" + } + ], + "validation": { + "requiredTopLevelFields": ["version", "updatedAt"], + "allowedReliability": ["A", "A-PENDING", "B", "C", "D"], + "officialEvidenceRule": { + "whenReliability": "A", + "requiredEvidenceStatus": "verified" + }, + "workflowRules": { + "stageOrderStartsAt": 1, + "stageOrderMustBeContinuous": true, + "gateRequired": true + }, + "roleRules": { + "purposeRequired": true, + "timingClassRequired": true, + "prohibitionsRequired": true + } + } +} diff --git a/data/knowledge/musical-roles.json b/data/knowledge/musical-roles.json new file mode 100644 index 0000000..c6b0ab0 --- /dev/null +++ b/data/knowledge/musical-roles.json @@ -0,0 +1,116 @@ +{ + "version": "0.1.0", + "updatedAt": "2026-07-20", + "ruleAr": "اختر الوظيفة قبل الآلة. الآلة الواحدة يمكن أن تؤدي أدوارًا مختلفة ولا تثبت فائدتها داخل التوزيع.", + "roles": [ + { + "id": "guide", + "labelAr": "Guide", + "purposeAr": "تثبيت اللحن والبنية والوقفات مؤقتًا.", + "timingClass": "structural", + "promptGuards": ["clear complete phrases", "real section length", "clear phrase endings"], + "prohibitions": ["long reverb", "delay", "dense harmony", "fills inside vocal gaps"], + "reliability": "B" + }, + { + "id": "foundation", + "labelAr": "Foundation", + "purposeAr": "بناء القاعدة المنخفضة والهارمونية وربط البيز بجسم التوزيع.", + "timingClass": "support", + "promptGuards": ["low density", "slow harmonic movement", "no attention-seeking contour"], + "prohibitions": ["lead melody", "vocal imitation", "ornamental runs"], + "reliability": "B" + }, + { + "id": "groove", + "labelAr": "Groove", + "purposeAr": "تثبيت النبض والحركة وتوضيح بنية الأقسام.", + "timingClass": "continuous-variable", + "promptGuards": ["clear pulse", "section-aware fills", "space under vocal"], + "prohibitions": ["constant peak density", "fills without destination", "duplicate rhythmic function"], + "reliability": "B" + }, + { + "id": "accompaniment", + "labelAr": "Accompaniment", + "purposeAr": "دعم الغناء هارمونيًا أو إيقاعيًا دون تقليد اللحن.", + "timingClass": "support", + "promptGuards": ["supports guide", "subordinate phrasing", "controlled density"], + "prohibitions": ["vocal melody doubling", "second lead", "continuous ornamentation"], + "reliability": "B" + }, + { + "id": "pad-bed", + "labelAr": "Pad / Bed", + "purposeAr": "ملء الخلفية ببطء وإدارة العمق والاتساع.", + "timingClass": "sustained", + "promptGuards": ["slow attack", "controlled release", "sparse note changes", "section-limited use"], + "prohibitions": ["lead contour", "rhythmic pulse unless requested", "full-song continuous high bed"], + "reliability": "B" + }, + { + "id": "fill", + "labelAr": "Fill", + "purposeAr": "جواب قصير داخل فراغ حقيقي بعد نهاية الجملة.", + "timingClass": "gap-only", + "entryRule": "after-complete-vocal-phrase", + "exitRule": "before-next-vocal-entry", + "maximumLengthBars": 2, + "promptGuards": ["one short answer", "intentional silence", "distinct from vocal melody"], + "prohibitions": ["continuous solo", "vocal overlap", "melody doubling", "unrelated accompaniment"], + "reliability": "B" + }, + { + "id": "lazim", + "labelAr": "Lazim", + "purposeAr": "جملة هوية قصيرة مكتملة وقابلة للتكرار بين الأقسام أو داخل Hook.", + "timingClass": "motif", + "promptGuards": ["short", "memorable", "repeatable", "clear start and end", "maqam compatible"], + "prohibitions": ["vocal melody copy", "long solo", "unclear ending", "constant repetition"], + "reliability": "B" + }, + { + "id": "counter-line", + "labelAr": "Counter Line", + "purposeAr": "خط مستقل يتحرك حول اللحن من دون منافسته.", + "timingClass": "intermittent-support", + "promptGuards": ["independent contour", "restricted register", "low density", "phrase-aware movement"], + "prohibitions": ["unison doubling", "second lead", "continuous movement under every word"], + "reliability": "B" + }, + { + "id": "transition", + "labelAr": "Transition", + "purposeAr": "نقل المستمع إلى قسم جديد وتوجيه الحركة نحو حدث محدد.", + "timingClass": "boundary", + "promptGuards": ["short gesture", "clear destination", "ends on section boundary"], + "prohibitions": ["new theme", "long tail", "transition without destination"], + "reliability": "B" + }, + { + "id": "lift", + "labelAr": "Lift", + "purposeAr": "رفع الكثافة أو الطاقة لفترة محددة في الذروة.", + "timingClass": "section-limited", + "promptGuards": ["controlled rise", "limited duration", "supports existing leader"], + "prohibitions": ["full-song activation", "new competing melody", "uncontrolled low-frequency buildup"], + "reliability": "B" + }, + { + "id": "texture", + "labelAr": "Texture", + "purposeAr": "إضافة ملمس صوتي دون جملة موسيقية واضحة.", + "timingClass": "decorative", + "promptGuards": ["subtle", "non-melodic", "section-specific", "low attention"], + "prohibitions": ["lead melody", "obvious riser unless requested", "continuous masking layer"], + "reliability": "B" + } + ], + "invalidGenericDescriptions": [ + "oriental instruments", + "full strings", + "arabic accompaniment", + "emotional orchestra", + "cinematic iraqi music" + ] +} diff --git a/data/knowledge/reliability.json b/data/knowledge/reliability.json new file mode 100644 index 0000000..83aa254 --- /dev/null +++ b/data/knowledge/reliability.json @@ -0,0 +1,53 @@ +{ + "version": "0.1.0", + "updatedAt": "2026-07-20", + "levels": [ + { + "id": "A", + "labelAr": "موثق رسميًا", + "descriptionAr": "وظيفة أو إجراء مثبت في وثائق المنتج الحالية ومسجل في evidence-registry.json.", + "requiresEvidence": true, + "decisionRule": "May be presented as an available product capability only when the evidence record is verified." + }, + { + "id": "B", + "labelAr": "قاعدة هندسية ثابتة", + "descriptionAr": "مبدأ إنتاج أو هندسة صوت قابل للتكرار ولا يعتمد على نتيجة توليد واحدة.", + "requiresEvidence": false, + "decisionRule": "May be used as a workflow rule, warning or stage gate." + }, + { + "id": "C", + "labelAr": "نتيجة توليدية", + "descriptionAr": "النتيجة تعتمد على فحص الملف الناتج؛ صحة البرومبت لا تثبت صلاحية التراك.", + "requiresEvidence": false, + "decisionRule": "Must require audition and accept/reject review before production use." + }, + { + "id": "D", + "labelAr": "مرفوض", + "descriptionAr": "افتراض غير قابل للتحقق أو نتيجة لا تصلح للإنتاج.", + "requiresEvidence": false, + "decisionRule": "Must not pass a workflow gate." + }, + { + "id": "A-PENDING", + "labelAr": "بانتظار التحقق الرسمي", + "descriptionAr": "ادعاء منسوب إلى وثائق رسمية لكن سجل المصدر غير مكتمل أو لم يراجع للإصدار الحالي.", + "requiresEvidence": true, + "decisionRule": "Must not be displayed as verified until its evidence status becomes verified." + } + ], + "generationPolicy": { + "reliability": "C", + "pipeline": [ + "prompt", + "generation", + "solo-audition", + "context-audition", + "technical-inspection", + "accept-or-reject" + ], + "ruleAr": "لا يعتمد التراك لأن وصف البرومبت صحيح. يعتمد فقط بعد سماعه منفردًا وداخل التوزيع وفحصه فنيًا." + } +} diff --git a/data/knowledge/workflow-stages.json b/data/knowledge/workflow-stages.json new file mode 100644 index 0000000..d9b59b7 --- /dev/null +++ b/data/knowledge/workflow-stages.json @@ -0,0 +1,123 @@ +{ + "version": "0.1.0", + "updatedAt": "2026-07-20", + "principleAr": "التوزيع هو تحديد من يقود، من يدعم، من يجيب، ومتى يصمت الجميع.", + "stages": [ + { + "id": "song-brief", + "order": 1, + "labelAr": "بطاقة العمل", + "purposeAr": "تثبيت هوية الأغنية والزمن والمقام قبل التوليد.", + "requiredFields": ["songName", "tempo", "timeSignature", "maqam", "duration", "guideType", "mainLeadRole"], + "gate": { + "type": "required-fields", + "messageAr": "لا يمكن تخطيط التوزيع قبل تثبيت السرعة والميزان والمقام والمدة ووظيفة العنصر القائد." + }, + "reliability": "B" + }, + { + "id": "structure", + "order": 2, + "labelAr": "البنية وخريطة الأقسام", + "purposeAr": "تحديد الأقسام وحدودها وكثافتها والعنصر القائد في كل قسم.", + "requiredFields": ["sections"], + "checks": ["nonOverlappingBars", "sectionLeaderDefined", "densityDefined"], + "gate": { + "type": "checks-pass", + "messageAr": "صحح حدود الأقسام وحدد القائد والكثافة قبل إنشاء التراكات." + }, + "reliability": "B" + }, + { + "id": "track-plan", + "order": 3, + "labelAr": "خطة التراكات", + "purposeAr": "تحويل احتياجات التوزيع إلى تراكات ذات وظائف محددة.", + "requiredFields": ["tracks"], + "checks": ["singleRolePerTrack", "timingRuleDefined", "priorityDefined", "noGenericTrackDescriptions"], + "gate": { + "type": "checks-pass", + "messageAr": "كل تراك يجب أن يملك وظيفة واحدة وقاعدة دخول وخروج واضحة." + }, + "reliability": "B" + }, + { + "id": "suno-reference", + "order": 4, + "labelAr": "مرجع Suno", + "purposeAr": "تجهيز Guide واضح وخفيف يثبت اللحن والزمن وطول الأقسام.", + "requiredFields": ["referenceFile", "referenceTempo", "referenceStart"], + "checks": ["tempoMatchesBrief", "referenceNotClipped", "referenceNotOverArranged"], + "gate": { + "type": "checks-pass", + "messageAr": "ملف الرفع يجب أن يكون واضحًا وغير مزدحم ومتوافقًا مع بطاقة العمل." + }, + "reliability": "B" + }, + { + "id": "prompt-builder", + "order": 5, + "labelAr": "بناء البرومبت", + "purposeAr": "تجميع الوظيفة وهوية الآلة والتوقيت والكثافة والمنع في برومبت واحد.", + "requiredFields": ["trackRole", "instrument", "timingBehavior", "density", "excludes"], + "checks": ["roleGuardApplied", "instrumentalVocalGuardApplied", "fullPromptGenerated"], + "gate": { + "type": "checks-pass", + "messageAr": "لا ترسل البرومبت قبل تحديد الدور والتوقيت والممنوعات." + }, + "reliability": "C" + }, + { + "id": "generation-review", + "order": 6, + "labelAr": "مراجعة النتائج", + "purposeAr": "فحص كل Take منفردًا ومع الجايد وقبول المادة الصالحة فقط.", + "requiredFields": ["takes"], + "checks": ["soloAuditionComplete", "contextAuditionComplete", "technicalInspectionComplete", "decisionRecorded"], + "gate": { + "type": "accepted-take-required", + "messageAr": "لا ينتقل التراك إلى Cubase قبل وجود Take مقبول ومكتمل الفحص." + }, + "reliability": "C" + }, + { + "id": "cubase-handoff", + "order": 7, + "labelAr": "تسليم Cubase", + "purposeAr": "توحيد التسمية ونقطة البداية والسرعة ومجلدات الاستيراد.", + "requiredFields": ["sampleRate", "bitDepth", "commonStart", "importManifest"], + "checks": ["acceptedTakesOnly", "sampleRateConsistent", "tempoConsistent", "commonStartDefined"], + "gate": { + "type": "checks-pass", + "messageAr": "صحح Manifest ونقطة البداية وتناسق السرعة قبل الاستيراد." + }, + "reliability": "B" + }, + { + "id": "arrangement-mix", + "order": 8, + "labelAr": "التوزيع والمكس الأولي", + "purposeAr": "إدارة الزمن والتردد والصورة والعمق مع الحفاظ على مساحة الفوكال.", + "requiredFields": ["sectionReviews", "staticMixReview"], + "checks": ["vocalSpaceAvailable", "monoCheckComplete", "densityVariesBySection", "noDuplicateRoles"], + "gate": { + "type": "checks-pass", + "messageAr": "لا تنتقل للتصدير مع ازدحام وظيفي أو فشل Mono أو غياب مساحة الفوكال." + }, + "reliability": "B" + }, + { + "id": "final-qa-export", + "order": 9, + "labelAr": "التحقق والتصدير", + "purposeAr": "إغلاق المشاكل الفنية وإنتاج المكس والـStems بإصدارات واضحة.", + "requiredFields": ["qaChecklist", "exportManifest", "versionName"], + "checks": ["noCriticalChecksOpen", "stemsShareBoundaries", "versionNamingValid", "rejectedFilesExcluded"], + "gate": { + "type": "checks-pass", + "messageAr": "لا يمكن إعلان المشروع Final مع فحص حرج مفتوح." + }, + "reliability": "B" + } + ] +}