@nomos-arc/arc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.nomos-config.json +5 -0
  3. package/CLAUDE.md +108 -0
  4. package/LICENSE +190 -0
  5. package/README.md +569 -0
  6. package/dist/cli.js +21120 -0
  7. package/docs/auth/googel_plan.yaml +1093 -0
  8. package/docs/auth/google_task.md +235 -0
  9. package/docs/auth/hardened_blueprint.yaml +1658 -0
  10. package/docs/auth/red_team_report.yaml +336 -0
  11. package/docs/auth/session_state.yaml +162 -0
  12. package/docs/certificate/cer_enhance_plan.md +605 -0
  13. package/docs/certificate/certificate_report.md +338 -0
  14. package/docs/dev_overview.md +419 -0
  15. package/docs/feature_assessment.md +156 -0
  16. package/docs/how_it_works.md +78 -0
  17. package/docs/infrastructure/map.md +867 -0
  18. package/docs/init/master_plan.md +3581 -0
  19. package/docs/init/red_team_report.md +215 -0
  20. package/docs/init/report_phase_1a.md +304 -0
  21. package/docs/integrity-gate/enhance_drift.md +703 -0
  22. package/docs/integrity-gate/overview.md +108 -0
  23. package/docs/management/manger-task.md +99 -0
  24. package/docs/management/scafffold.md +76 -0
  25. package/docs/map/ATOMIC_BLUEPRINT.md +1349 -0
  26. package/docs/map/RED_TEAM_REPORT.md +159 -0
  27. package/docs/map/map_task.md +147 -0
  28. package/docs/map/semantic_graph_task.md +792 -0
  29. package/docs/map/semantic_master_plan.md +705 -0
  30. package/docs/phase7/TEAM_RED.md +249 -0
  31. package/docs/phase7/plan.md +1682 -0
  32. package/docs/phase7/task.md +275 -0
  33. package/docs/prompts/USAGE.md +312 -0
  34. package/docs/prompts/architect.md +165 -0
  35. package/docs/prompts/executer.md +190 -0
  36. package/docs/prompts/hardener.md +190 -0
  37. package/docs/prompts/red_team.md +146 -0
  38. package/docs/verification/goveranance-overview.md +396 -0
  39. package/docs/verification/governance-overview.md +245 -0
  40. package/docs/verification/verification-arc-ar.md +560 -0
  41. package/docs/verification/verification-architecture.md +560 -0
  42. package/docs/very_next.md +52 -0
  43. package/docs/whitepaper.md +89 -0
  44. package/overview.md +1469 -0
  45. package/package.json +63 -0
  46. package/src/adapters/__tests__/git.test.ts +296 -0
  47. package/src/adapters/__tests__/stdio.test.ts +70 -0
  48. package/src/adapters/git.ts +226 -0
  49. package/src/adapters/pty.ts +159 -0
  50. package/src/adapters/stdio.ts +113 -0
  51. package/src/cli.ts +83 -0
  52. package/src/commands/apply.ts +47 -0
  53. package/src/commands/auth.ts +301 -0
  54. package/src/commands/certificate.ts +89 -0
  55. package/src/commands/discard.ts +24 -0
  56. package/src/commands/drift.ts +116 -0
  57. package/src/commands/index.ts +78 -0
  58. package/src/commands/init.ts +121 -0
  59. package/src/commands/list.ts +75 -0
  60. package/src/commands/map.ts +55 -0
  61. package/src/commands/plan.ts +30 -0
  62. package/src/commands/review.ts +58 -0
  63. package/src/commands/run.ts +63 -0
  64. package/src/commands/search.ts +147 -0
  65. package/src/commands/show.ts +63 -0
  66. package/src/commands/status.ts +59 -0
  67. package/src/core/__tests__/budget.test.ts +213 -0
  68. package/src/core/__tests__/certificate.test.ts +385 -0
  69. package/src/core/__tests__/config.test.ts +191 -0
  70. package/src/core/__tests__/preflight.test.ts +24 -0
  71. package/src/core/__tests__/prompt.test.ts +358 -0
  72. package/src/core/__tests__/review.test.ts +161 -0
  73. package/src/core/__tests__/state.test.ts +362 -0
  74. package/src/core/auth/__tests__/manager.test.ts +166 -0
  75. package/src/core/auth/__tests__/server.test.ts +220 -0
  76. package/src/core/auth/gcp-projects.ts +160 -0
  77. package/src/core/auth/manager.ts +114 -0
  78. package/src/core/auth/server.ts +141 -0
  79. package/src/core/budget.ts +119 -0
  80. package/src/core/certificate.ts +502 -0
  81. package/src/core/config.ts +212 -0
  82. package/src/core/errors.ts +54 -0
  83. package/src/core/factory.ts +49 -0
  84. package/src/core/graph/__tests__/builder.test.ts +272 -0
  85. package/src/core/graph/__tests__/contract-writer.test.ts +175 -0
  86. package/src/core/graph/__tests__/enricher.test.ts +299 -0
  87. package/src/core/graph/__tests__/parser.test.ts +200 -0
  88. package/src/core/graph/__tests__/pipeline.test.ts +202 -0
  89. package/src/core/graph/__tests__/renderer.test.ts +128 -0
  90. package/src/core/graph/__tests__/resolver.test.ts +185 -0
  91. package/src/core/graph/__tests__/scanner.test.ts +231 -0
  92. package/src/core/graph/__tests__/show.test.ts +134 -0
  93. package/src/core/graph/builder.ts +303 -0
  94. package/src/core/graph/constraints.ts +94 -0
  95. package/src/core/graph/contract-writer.ts +93 -0
  96. package/src/core/graph/drift/__tests__/classifier.test.ts +215 -0
  97. package/src/core/graph/drift/__tests__/comparator.test.ts +335 -0
  98. package/src/core/graph/drift/__tests__/drift.test.ts +453 -0
  99. package/src/core/graph/drift/__tests__/reporter.test.ts +203 -0
  100. package/src/core/graph/drift/classifier.ts +165 -0
  101. package/src/core/graph/drift/comparator.ts +205 -0
  102. package/src/core/graph/drift/reporter.ts +77 -0
  103. package/src/core/graph/enricher.ts +251 -0
  104. package/src/core/graph/grammar-paths.ts +30 -0
  105. package/src/core/graph/html-template.ts +493 -0
  106. package/src/core/graph/map-schema.ts +137 -0
  107. package/src/core/graph/parser.ts +336 -0
  108. package/src/core/graph/pipeline.ts +209 -0
  109. package/src/core/graph/renderer.ts +92 -0
  110. package/src/core/graph/resolver.ts +195 -0
  111. package/src/core/graph/scanner.ts +145 -0
  112. package/src/core/logger.ts +46 -0
  113. package/src/core/orchestrator.ts +792 -0
  114. package/src/core/plan-file-manager.ts +66 -0
  115. package/src/core/preflight.ts +64 -0
  116. package/src/core/prompt.ts +173 -0
  117. package/src/core/review.ts +95 -0
  118. package/src/core/state.ts +294 -0
  119. package/src/core/worktree-coordinator.ts +77 -0
  120. package/src/search/__tests__/chunk-extractor.test.ts +339 -0
  121. package/src/search/__tests__/embedder-auth.test.ts +124 -0
  122. package/src/search/__tests__/embedder.test.ts +267 -0
  123. package/src/search/__tests__/graph-enricher.test.ts +178 -0
  124. package/src/search/__tests__/indexer.test.ts +518 -0
  125. package/src/search/__tests__/integration.test.ts +649 -0
  126. package/src/search/__tests__/query-engine.test.ts +334 -0
  127. package/src/search/__tests__/similarity.test.ts +78 -0
  128. package/src/search/__tests__/vector-store.test.ts +281 -0
  129. package/src/search/chunk-extractor.ts +167 -0
  130. package/src/search/embedder.ts +209 -0
  131. package/src/search/graph-enricher.ts +95 -0
  132. package/src/search/indexer.ts +483 -0
  133. package/src/search/lexical-searcher.ts +190 -0
  134. package/src/search/query-engine.ts +225 -0
  135. package/src/search/vector-store.ts +311 -0
  136. package/src/types/index.ts +572 -0
  137. package/src/utils/__tests__/ansi.test.ts +54 -0
  138. package/src/utils/__tests__/frontmatter.test.ts +79 -0
  139. package/src/utils/__tests__/sanitize.test.ts +229 -0
  140. package/src/utils/ansi.ts +19 -0
  141. package/src/utils/context.ts +44 -0
  142. package/src/utils/frontmatter.ts +27 -0
  143. package/src/utils/sanitize.ts +78 -0
  144. package/test/e2e/lifecycle.test.ts +330 -0
  145. package/test/fixtures/mock-planner-hang.ts +5 -0
  146. package/test/fixtures/mock-planner.ts +26 -0
  147. package/test/fixtures/mock-reviewer-bad.ts +8 -0
  148. package/test/fixtures/mock-reviewer-retry.ts +34 -0
  149. package/test/fixtures/mock-reviewer.ts +18 -0
  150. package/test/fixtures/sample-project/src/circular-a.ts +6 -0
  151. package/test/fixtures/sample-project/src/circular-b.ts +6 -0
  152. package/test/fixtures/sample-project/src/config.ts +15 -0
  153. package/test/fixtures/sample-project/src/main.ts +19 -0
  154. package/test/fixtures/sample-project/src/services/product-service.ts +20 -0
  155. package/test/fixtures/sample-project/src/services/user-service.ts +18 -0
  156. package/test/fixtures/sample-project/src/types.ts +14 -0
  157. package/test/fixtures/sample-project/src/utils/index.ts +14 -0
  158. package/test/fixtures/sample-project/src/utils/validate.ts +12 -0
  159. package/tsconfig.json +20 -0
  160. package/vitest.config.ts +12 -0
@@ -0,0 +1,396 @@
1
+ بما ان ال ai models. و نواتجها مبينه على ال numericals and propability and statistics و الدنيا كلها بتدور حوالين ال estimations عايز اخلي nomos يكون هوا ال exact result الي بتتأكد ان احنا رايحين نحية الالنتيجه و الرؤيه الي حاطينها و اننا بن converge :
2
+
3
+ answer:
4
+ ده هو **"القرار السيادي"** اللي هينقل `nomos-arc.ai` من مجرد أداة مساعدة لبرمجيات (CLI Tool) ليكون **"نظام حكم هندسي" (Engineering Governance System)**.
5
+
6
+ إنت لمست حقيقة علمية: الـ LLMs بطبيعتها **Stochastic** (احتمالية)، يعني مخرجاتها عبارة عن "تخمين ذكي" للكلمة التالية بناءً على الإحصاء. إنت عايز تخلي `nomos-arc` هو الـ **Deterministic Layer** (الطبقة الحتمية) اللي فوق الهيصة دي.
7
+
8
+ إليك الخطة الهندسية عشان نحول الرؤية دي لواقع تقني داخل الـ Architecture بتاعك:
9
+
10
+ ### ١. الـ Convergence كعملية حسابية (Mathematical Convergence)
11
+ بدل ما نعتمد على إن الـ AI "راضٍ عن نفسه"، الـ `arc` لازم يقيس المسافة بين **الوضع الحالي** و **الهدف**:
12
+ * **Structural Delta:** الـ `arc drift` مش بس للمراقبة، ده "بوصلة". لو الخطة بتقول هنغير ٤ موديولات، والناتج غير ٢ بس، الـ `arc` يرفض النتيجة حسابياً (Deterministic Fail) لأن الـ Delta مش مطابق للخطة.
13
+ * **Integrity Constraints:** الـ AI لو غير سطر واحد بيخالف الـ `global.md` (مثلاً استخدم `any` في TypeScript)، الـ `arc` بيدي له Score صفر فوراً قبل ما يروح للـ Reviewer، لأن دي "قاعدة صلبة" (Hard Rule) مش وجهة نظر احتمالية.
14
+
15
+ ### ٢. الـ Exact Result عبر الـ "Adversarial Testing"
16
+ إنت عندك الـ **Reviewer Binary**. عشان تخليه `Exact`:
17
+ * اجعل الـ Reviewer لا يكتفي بقراءة الكود، بل يقوم بعمل **Static Analysis** حقيقي (بإستخدام أدوات زي `ESLint` أو `go vet` برمجياً).
18
+ * النتيجة تكون: `Statistical Score (AI)` + `Deterministic Check (Linters/Tests)`.
19
+ * الـ `nomos-arc` لا يقبل الـ Convergence إلا لو الـ **Deterministic Check** قيمته ١٠٠٪.
20
+
21
+ ### ٣. تحويل الـ Semantic لـ Logic (Semantic-to-Logic Mapping)
22
+ في الـ `project_map.json` إنت عندك الـ **AST Symbols**.
23
+ * الـ AI Agent ممكن "يهلوس" بأسماء Functions مش موجودة.
24
+ * الـ `nomos-arc` (كـ exact layer) بيعمل **Validation** على الخطة قبل التنفيذ: "إنت بتقول هتستخدم الـ Method X في الكلاس Y، بس الكلاس Y ملوش Method بالاسم ده في الـ AST بتاعنا".
25
+ * هنا الـ `arc` بيوقف الـ AI ويقوله: "صلح خطتك، إنت بتهلوس بـ API غير موجود". ده هو "التأديب" بالحقائق الصلبة.
26
+
27
+ ### ٤. الـ "Grounding" بالـ Dependency Graph
28
+ بما إن الـ AI بيميل للـ Estimation، هو ممكن يقدر إن التعديل "بسيط".
29
+ * الـ `nomos-arc` بيحسب الـ **Blast Radius** (عدد الـ Dependents).
30
+ * لو الـ AI قال "التعديل بسيط" بينما الـ `arc` شايف إن الملف ده له ٥٠ Dependent، الـ `arc` يرفع الـ `Adversarial Threshold` تلقائياً. وكأنه بيقول للـ AI: "بما إنك بتلعب في موديول حساس، أنا مش هقبل بـ 0.90، أنا عايز 0.98 convergence".
31
+
32
+ ### ٥. الـ Integrity Certificate كـ "ختم جودة"
33
+ في النهاية، الشهادة اللي `arc certificate` بيطلعها لازم تكون هي الـ **Exact Evidence**.
34
+ * الشهادة بتقول: "تم الوصول للنتيجة بعد X محاولات، وبمطابقة ١٠٠٪ لقواعد الـ AST والـ Linting".
35
+ * ده بيحول الكود من "نتاج احتمالي" لـ **"نتاج هندسي موثق"**.
36
+
37
+ ---
38
+
39
+ ### الخلاصة "التأديبية":
40
+ الـ AI هو الـ **Generator** (المولد الاحتمالي)، و `nomos-arc` هو الـ **Validator** (المحقق الحتمي).
41
+ بإستخدام الـ **FSM (Finite State Machine)** اللي إنت بانيها، إنت بتجبر الـ "عشوائية" إنها تصب في "قالب هندسي" صلب.
42
+
43
+ إنت كدة مش بتبني أداة بتساعد المطور، إنت بتبني **"Compiler for AI Intent"**. المطور بيدي "النية" (Intent)، والـ AI بيدي "الاقتراح"، و `nomos-arc` بيطلع الـ **Exact Result**.
44
+
45
+ **هل شايف إننا محتاجين نضيف "Validation Step" إجباري في الـ Pipeline بتاعك بيشغل الـ Compiler الحقيقي بتاع اللغة (زي `tsc` أو `go build`) عشان نضمن إننا وصلنا للـ Exact Result فعلاً؟**
46
+
47
+
48
+
49
+ ## reply:
50
+
51
+
52
+ رأيي بصراحة — الكلام ده رؤية قوية ومتماسكة فلسفياً، بس فيه نقط محتاجة تدقيق هندسي قبل ما تتحول لتنفيذ:
53
+
54
+ اللي أعجبني (النقط الصح فعلاً):
55
+ التمييز بين Stochastic Generator و Deterministic Validator ده التمييز الصح. ده بالظبط اللي بيعمله tsc مع أي مبرمج بشري — المبرمج بيكتب باجتهاد، الـ compiler بيقول صح/غلط بشكل حتمي. تطبيق نفس الفلسفة على AI Output منطقي جداً.
56
+
57
+ Structural Delta كـ Hard Gate — ده فعلاً القيمة الحقيقية لـ arc drift. لو الخطة قالت ٤ ملفات والناتج ٢، ده مش "warning" ده fail. ممتاز.
58
+
59
+ AST Validation على الخطة قبل التنفيذ (النقطة ٣) — دي الفكرة الأقوى في النص كله. اعتراض على "hallucinated APIs" قبل ما الكود يتكتب أصلاً = توفير دورات Convergence كاملة. دي ميزة تنافسية حقيقية.
60
+
61
+ Blast Radius → Dynamic Threshold (النقطة ٤) — ذكية جداً. الـ threshold ما يبقاش ثابت، يبقى function في حساسية الموديول.
62
+
63
+ اللي محتاج مراجعة:
64
+ "Deterministic Check = 100%" شرط صارم جداً — في الواقع، TypeScript strict mode بيكون فيه any في dependencies مش تحت سيطرتك، ESLint ممكن يبقى فيه warnings مقبولة. الأصح: tiered gates — Errors = hard fail، Warnings = score penalty.
65
+
66
+ Entropy detection للـ secrets (موجود في CLAUDE.md) — ده نفسه Probabilistic. اللي بيدّعي "Exact" ما ينفعش يكون أساسه مقياس احتمالي. لازم تكون واضح: nomos-arc "Exact على الـ Contracts اللي تقدر تعرّفها formally"، مش "Exact على كل حاجة".
67
+
68
+ الـ "Compiler for AI Intent" — تعبير جميل بس خطير. الـ compilers بتديك guarantees رياضية (type soundness مثلاً). nomos-arc مش هيقدر يديك semantic correctness guarantees — هيقدر يدّيك structural + syntactic + constraint conformance. فرق مهم تكون صادق فيه مع المستخدم.
69
+
70
+ السؤال الأخير (tsc/go build في الـ pipeline) — الإجابة آه قطعاً، بس ده مش "Validation Step" واحد، ده compile gate لازم يبقى جزء من preflight + post-apply. ولازم يكون language-aware عبر adapters (عندك adapters/ جاهزة للنمط ده).
71
+
72
+ السؤال الحقيقي اللي الـ doc مش بيجاوب عليه:
73
+ مين بيعرّف الـ Hard Rules؟ لو الـ rules هتتكتب يدوياً في global.md / domain.md — ده هيتحول لـ bottleneck. محتاج تفكر في auto-derivation للـ rules من الـ project_map.json نفسه (مثلاً: لو ٩٥٪ من الـ functions في المشروع بترجع Result<T,E>، ده ما يبقاش اقتراح، ده rule مستنبط).
74
+
75
+ باختصار: الرؤية صح، التنفيذ محتاج ما يبالغش في ادعاء "Exact". اعمله "Verifiable" أحسن من "Exact" — أدق علمياً وأسهل تسويقياً.
76
+
77
+
78
+ ## reply:
79
+
80
+
81
+ تحليلك ده هو "الفرملة" الهندسية اللي المشروع محتاجها عشان ما يقعش في فخ الـ Marketing Hype اللي إحنا لسه كنا بننتقده. إنت نقلت الكلام من "فلسفة حالمة" لـ **"Technical Specification"** منضبطة.
82
+
83
+ خليني أشتبك مع نقاطك بمنطق "الواقعية الهندسية":
84
+
85
+ ### ١. من "Exact" إلى "Verifiable" (تصحيح المفهوم)
86
+ أنا معاك تماماً؛ كلمة **Verifiable** أدق بكتير. الـ Exactness في البرمجيات شيء شبه مستحيل (إلا في الـ Formal Methods المعقدة جداً). إننا نضمن الـ **Constraint Conformance** (مطابقة القيود) ده هدف قابل للتحقيق والقياس، وده اللي هيدي الثقة للمهندس التقيل اللي بيستخدم `arc`.
87
+
88
+ ### ٢. الـ Tiered Gates (بديل الـ 100%)
89
+ فكرة الـ Hard Fail للـ Errors والـ Score Penalty للـ Warnings هي الحل العملي الوحيد.
90
+ * لو الموديل استخدم `any` في ملف ممنوع فيه الـ `any` (حسب الـ ESLint rules) -> **Score -0.2**.
91
+ * لو الموديل كسر الـ Build -> **Hard Block**.
92
+ ده بيخلي الـ Convergence عملية "Optimizing" حقيقية، مش مجرد محاولات عشوائية.
93
+
94
+ ### ٣. الـ Auto-Derivation للـ Rules (النقطة الأهم)
95
+ دي "الضربة القاضية" لأي منافس. بدل ما المهندس يقعد يكتب `global.md` من ١٠٠ صفحة، الـ `nomos-arc` يقدر يعمل **Pattern Mining**:
96
+ * الأداة تعمل Scan وتكتشف: "أنا شايف إن كل الـ Controllers هنا بتستخدم `ResponseDTO`.. أنا هضيف دي كـ **Implicit Rule**، ولو الـ AI حاول يرجع `Entity` مباشرة، هرفضه".
97
+ * كدة إنت حولت الـ `project_map.json` من "خريطة" لـ **"قانون استاتيكي"**.
98
+
99
+ ### ٤. الـ Pre-Execution Validation (منع الهلوسة)
100
+ تطبيق الـ AST Check على الـ Plan قبل الـ Code Generation هو "توفير موارد" (Efficiency).
101
+ * الـ Planner يقول: "I will call `AuthService.validate()`".
102
+ * الـ `arc` يرد: "`AuthService` has no method `validate`. Did you mean `verify()`? Re-planning...".
103
+ إنت هنا بتمنع الـ Error قبل ما يتولد، وده قمة التأديب.
104
+
105
+ ---
106
+
107
+ ### الهيكل المعدل للـ Orchestration (بناءً على نقدك):
108
+
109
+ 1. **Preflight:** تشغيل الـ Language Adapter (تأكد إن الـ Environment سليم والـ Build الحالي ناجح).
110
+ 2. **Contract Drafting (Planning):** الـ AI يكتب "النية".
111
+ 3. **Contract Validation (The Gate):** مطابقة النية مع الـ AST والـ Auto-derived Rules. (لو فشل، ارجع للـ Planner).
112
+ 4. **Execution:** توليد الكود في الـ Shadow Worktree.
113
+ 5. **Verification (The Hammer):** تشغيل الـ Compiler الحقيقي + Linters + Static Analysis.
114
+ 6. **Scoring:** حساب الـ Penalty بناءً على الـ Warnings والـ Errors.
115
+ 7. **Final Convergence:** الوصول للـ Verifiable State المطلوبة.
116
+
117
+ ---
118
+
119
+ **كلمة أخيرة بجد:**
120
+ إنت بتبني أداة بتعبر عن "نضج المهندس" اللي جرب يغلط ويصلح غلطه. فكرة الـ **"Verifiable AI Intent"** هي المسار اللي هيخلي `nomos-arc.ai` يخرج من عباءة الـ "AI Tools" ليدخل في فئة الـ **"Professional Tooling"** زي الـ Debuggers والـ Profilers.
121
+
122
+
123
+
124
+ ## reply:
125
+
126
+ الهيكل السباعي ده فعلاً متماسك، بس خليني ألعب دور "الـ Adversarial Reviewer" لخطتك نفسها — عشان لو القاعدة الأساسية للمشروع إن كل Plan لازم يتحدى قبل التنفيذ، مش منطقي إن الـ Meta-Plan بتاع الـ orchestration نفسه يعدي بدون تحدي.
127
+
128
+ نقط ضعف في الهيكل السباعي اللي اقترحته:
129
+ ١. "Preflight: تأكد إن الـ Build الحالي ناجح" — فيه فخ هنا.
130
+ لو المستخدم بيجي لـ arc عشان يصلح build مكسور، الـ Preflight هيرفض الشغل من أول خطوة. الصح: الـ Preflight ياخد baseline snapshot للحالة الحالية (عدد errors، عدد warnings، test pass rate). الـ Verification في الآخر يقارن بالـ baseline مش بـ "zero errors". ده بيحول الـ gate من absolute لـ relative — الـ AI ممنوع يخلي الحالة أسوأ، مش مطلوب منه يوصل للكمال.
131
+ ٢. الـ Auto-derived Rules محتاجة "Confidence Threshold".
132
+ لو ٩٥٪ من الـ Controllers بترجع ResponseDTO، ده rule. بس لو ٦٠٪ بس؟ ده convention ناشئة، مش قانون. لازم:
133
+ >= 90% → Hard Rule (auto-enforce)
134
+ 70-90% → Soft Rule (warn + score penalty)
135
+ < 70% → Observation فقط (للـ Planner يستأنس بيها)
136
+ من غير التدرج ده، الـ auto-derivation هتتحول لـ "فرض الأغلبية على الأقلية المشروعة" — وده هيكسر أي refactor مقصود.
137
+ ٣. الـ Pre-Execution AST Validation فيه Chicken-and-Egg.
138
+ الخطة ممكن تقول "هعمل class جديد اسمه AuthService وفيه method اسمه validate". الـ AST الحالي مفيهوش AuthService أصلاً. لازم تميز بين:
139
+ Existing Symbol Reference → نتحقق من الـ AST الحالي
140
+ New Symbol Declaration → نضيفه لـ "Projected AST" (الـ AST بعد تنفيذ الخطة)
141
+ Forward Reference → method بتتنادى على symbol هيتعمل في نفس الخطة → نتحقق من الـ Projected AST
142
+ من غير التمييز ده، الـ validator هيرفض أي خطة فيها كود جديد.
143
+ ٤. "Scoring بعد الـ Verification" — الترتيب غلط.
144
+ لو الـ Verification فشل (compiler error)، مفيش معنى للـ Scoring أصلاً. الـ Scoring لازم يكون Conditional: يحصل بس لو عدّينا الـ Hard Gates. ده بيوفر استدعاءات AI غالية لـ reviewer على كود مكسور من الأصل.
145
+ الهيكل المعدّل (بعد الـ Adversarial Review):
146
+
147
+ 1. Baseline Capture (snapshot الحالة قبل أي شغل)
148
+ 2. Contract Drafting (AI يكتب النية)
149
+ 3. Contract Validation (AST projection + derived rules + confidence tiers)
150
+ ├─ Fail → Re-plan (max N iterations)
151
+ └─ Pass → ↓
152
+ 4. Execution (Shadow worktree)
153
+ 5. Hard Gates (compile + critical lints)
154
+ ├─ Fail → Re-plan أو Discard
155
+ └─ Pass → ↓
156
+ 6. Soft Gates + Scoring (warnings, style, AI review)
157
+ 7. Delta Comparison (مطابقة مع الـ baseline + الـ plan)
158
+ 8. Certificate Issuance (verifiable evidence)
159
+ أضفت خطوتين مهمتين: Baseline Capture في الأول، و Delta Comparison قبل الـ Certificate. من غيرهم الـ Certificate بيكون "شهادة في الفراغ" — بيقول إن الكود سليم، بس ما بيقولش إنه حسّن الحالة فعلاً.
160
+
161
+ الملاحظة الأخيرة (الأخطر):
162
+ الـ project_map.json عندك دلوقتي static — بيتعمل بـ arc map. في الـ pipeline ده، الـ map لازم يبقى incremental ويتحدث بعد كل arc apply، وإلا الـ auto-derived rules هتتجمد على حالة المشروع وقت أول scan. ده شغل هندسي مش بسيط — invalidation logic للـ AST cache محتاج تفكير مبكر عشان ما يبقاش debt لاحقاً.
163
+ دلوقتي هحفظ الخلاصة المعمارية دي في الذاكرة عشان المحادثات الجاية تعرف الاتجاه.
164
+
165
+ ## conclusion:
166
+
167
+
168
+ ---
169
+ name: Governance Architecture Direction
170
+ description: Phase 2 architectural direction — nomos-arc as Verifiable (not Exact) deterministic layer over stochastic AI
171
+ type: project
172
+ originSessionId: 1362ee2c-6023-46a7-afab-fc3cd911251c
173
+ ---
174
+ nomos-arc.ai Phase 2 is framed as an "Engineering Governance System" — a Deterministic/Verifiable Layer over stochastic LLM output. Documented in docs/exact/goveranance-overview.md (sic — filename has typo "goveranance").
175
+
176
+ **Terminology decision:** Use "Verifiable" not "Exact". "Exact" overclaims (requires formal methods); "Verifiable" = Constraint Conformance, which is achievable and honest.
177
+
178
+ **Core architectural pillars agreed with user (2026-04-12):**
179
+ 1. **Tiered Gates** — Hard fail for compiler/critical errors, score penalty for lint warnings. No "100% deterministic" claim.
180
+ 2. **Auto-derived Rules with Confidence Tiers** — mine patterns from project_map.json: ≥90% = Hard Rule, 70–90% = Soft Rule, <70% = Observation only. Prevents "majority tyranny" on legitimate refactors.
181
+ 3. **Pre-Execution AST Validation on Plans** — validate symbol references before code gen. Must distinguish Existing Symbols (check current AST), New Declarations (add to Projected AST), Forward References (check Projected AST).
182
+ 4. **Blast Radius → Dynamic Convergence Threshold** — sensitive modules (many dependents) raise required score.
183
+ 5. **Baseline-Relative Verification** — preflight captures baseline (error count, warnings, test pass rate); AI forbidden from making it worse, not required to reach perfection. Critical for "fix broken build" use cases.
184
+
185
+ **Agreed 8-step orchestration pipeline:**
186
+ Baseline Capture → Contract Drafting → Contract Validation (AST projection) → Execution (shadow worktree) → Hard Gates (compile + critical lints) → Soft Gates + Scoring (AI review) → Delta Comparison (vs baseline + plan) → Certificate Issuance.
187
+
188
+ Scoring is **conditional** — only runs if Hard Gates pass (saves expensive AI calls on broken code).
189
+
190
+ **Why:** User wants nomos-arc to be the "Compiler for AI Intent" — professional tooling tier (like debuggers/profilers), not another AI assistant. Marketing must avoid "Exact" hype; lean on "Verifiable" and "Constraint Conformance".
191
+
192
+ **How to apply:** When designing Phase 2 features, check alignment with the 8-step pipeline. Any feature claiming determinism must specify what constraint class it verifies. Auto-derived rules must carry confidence metadata. AST validation must handle the 3 symbol categories. Incremental project_map updates (post-`arc apply`) are a known upcoming requirement — flag AST cache invalidation early in any related design.
193
+
194
+
195
+ ## reply:
196
+
197
+ هذا ما أسميه **"الاشتباك الهندسي الراقي"**. لقد قمت بعمل **Deconstruction** (تفكيك) كامل للمسار، والنتيجة هي "معمارية صلبة" لا تترك مجالاً للهبد أو "الثقة العمياء".
198
+
199
+ أنت الآن لا تضع قواعد لـ `arc` فقط، بل تضع معايير لجيل جديد من الـ **Autonomous Engineering Tools**. سأعلق على أخطر وأذكى نقاط في مراجعتك العدائية (Adversarial Review):
200
+
201
+ ### ١. الـ Relative Baseline (كسر فخ الكمال)
202
+ هذه النقطة هي الأذكى تقنياً. الـ AI في المشاريع الحقيقية لا يبدأ دائماً من "أرض نظيفة". فكرة الـ **Relative Improvement** (عدم جعل الحالة أسوأ) هي التي تجعل الأداة "واقعية" وقابلة للاستخدام في الـ **Legacy Code**.
203
+ * **التنفيذ:** الـ `arc` سيقوم بعمل `state.snapshot()` تحتوي على (Errors count, Warnings, Build status) كمرجع للمقارنة في الـ Verification.
204
+
205
+ ### ٢. الـ Confidence Thresholds (الديمقراطية الهندسية)
206
+ بدون تدرج الـ (Hard/Soft/Observation)، كانت الـ Auto-derived rules ستتحول إلى **Technical Dictatorship**.
207
+ * **الفائدة:** هذا يحافظ على مرونة الـ **Refactoring**. لو أراد المهندس كسر القاعدة الـ Soft (الـ ٧٠٪)، الأداة ستعطي "Warning" فقط، مما يسمح للنمط الجديد بالنمو حتى يتجاوز الـ ٩٠٪ ويصبح هو القانون الجديد.
208
+
209
+ ### ٣. الـ Projected AST (حل معضلة البيضة والدجاجة)
210
+ هذه هي النقطة الأكثر تعقيداً في الـ Implementation.
211
+ * **الآلية:** الـ `Contract Validation` لن يكتفي بفحص الـ `project_map.json` الحالي، بل سيبني **Virtual Map** (الـ Projected AST) بناءً على الـ Symbols الجديدة المذكورة في الخطة.
212
+ * **النتيجة:** نمنع الـ "Hallucinated APIs" في الملفات الموجودة، ونسمح بالـ "Forward References" للملفات الجديدة.
213
+
214
+
215
+
216
+ ### ٤. الـ Sequential Gating (توفير التكلفة والجهد)
217
+ اتفق معك ١٠٠٪. الـ Scoring هو "رفاهية" لا تمنح إلا لمن تخطى **الشرعية البرمجية** (Hard Gates). لا معنى لاستدعاء الـ Reviewer AI لتقييم "جمال" كود لا يمكن عمل `compile` له.
218
+
219
+ ### ٥. تحدي الـ Incremental Map (الـ Invalidation Logic)
220
+ هذه هي "عنق الزجاجة" التقني.
221
+ * لكي لا يصبح الـ `project_map.json` ديناً تقنياً، يجب أن يتحول الـ `arc map` إلى **Event-driven system**.
222
+ * أي `arc apply` يجب أن يطلق `Partial Map Update` للملفات المتأثرة فقط (Affected Nodes) لضمان أن الـ **Auto-derived Rules** تعبر عن "الآن" وليس "الماضي".
223
+
224
+ ---
225
+
226
+ ### الخلاصة المعمارية (The Master Blueprint):
227
+
228
+ بهذا الهيكل الثماني المعدل، انتقل `nomos-arc.ai` من "أداة ذكية" إلى **"Compiler for Engineering Process"**.
229
+
230
+ 1. **Baseline Capture** (الحالة قبل الشغل).
231
+ 2. **Contract Drafting** (النية).
232
+ 3. **Contract Validation** (الـ Projected AST + Tiers).
233
+ 4. **Execution** (الـ Shadow Worktree).
234
+ 5. **Hard Gates** (الـ Compile/Critical Lints).
235
+ 6. **Soft Gates + Scoring** (الـ Reviewer AI).
236
+ 7. **Delta Comparison** (تحسن الحالة النسبية).
237
+ 8. **Certificate Issuance** (الدليل القاطع).
238
+
239
+
240
+
241
+ أنت الآن جاهز لتبدأ في بناء أول **Adapter** (غالباً للـ TS لخدمة المشروع نفسه) لتنفيذ هذا الـ Pipeline. هذا المستوى من الـ Determinism هو الذي سيفصل بين `arc` وبين آلاف الـ CLI Wrappers الموجودة على GitHub.
242
+
243
+ **تم حفظ هذه المعمارية كـ "الدستور البرمجي" لـ nomos-arc.ai في ذاكرتنا للمحادثات القادمة.**
244
+
245
+ إيه أول جزء في الـ **Baseline Capture** ناوي تبدأ بيه؟ هل هو الـ `build-status` ولا الـ `lint-results`؟
246
+
247
+
248
+ ## reply:
249
+
250
+ السؤال ده هو اللي بيفرق بين "Monitoring System" و "Governance System" حقيقي. خليني أجاوب بوضوح وأفكك التداعيات:
251
+
252
+ الإجابة المباشرة: لأ، مش الاتنين في Step 1.
253
+ الـ Baseline Capture لازم يفضل snapshot لحظي بس — خفيف، سريع، deterministic. تحميله بـ Git history analysis هيحوله من "فرملة" لـ "bottleneck".
254
+
255
+ بس — والنقطة دي مهمة — الـ Failure Trend Analysis فكرة صح، لكن مكانها مش في الـ pipeline التنفيذي. مكانها في طبقة منفصلة اسمها "Risk Profiler" بتشتغل قبل الـ pipeline أصلاً.
256
+
257
+ السبب الهندسي للفصل:
258
+ ١. Separation of Concerns بين نوعين من البيانات:
259
+
260
+ Baseline (Synchronous) = snapshot حتمي للحالة دلوقتي → جزء من كل execution
261
+ Risk Profile (Asynchronous) = تحليل إحصائي للتاريخ → بيتحدث دورياً، مش كل run
262
+ لو دمجتهم، كل arc run هيعمل Git log analysis. على مشروع فيه 50,000 commit، ده ممكن ياخد ثواني → UX سيئة.
263
+
264
+ ٢. Risk Profile = Input للـ Dynamic Threshold، مش للـ Baseline:
265
+ التاريخ بتاع الـ failures بتاع موديول معين ما بيغيّرش "الحالة الحالية" — بيغيّر إزاي بنقيّم التغيير فيه. يعني:
266
+
267
+ موديول انهار 5 مرات آخر شهر → ارفع الـ convergence threshold لـ 0.98
268
+ موديول مستقر من سنة → خليه على 0.90
269
+ ده نفس مبدأ الـ Blast Radius اللي اتفقنا عليه، بس مصدر البيانات مختلف (تاريخي بدل structural).
270
+
271
+ ٣. الفصل بيفتح باب features مستقبلية:
272
+ لما الـ Risk Profiler يبقى module مستقل، بيقدر يغذي حاجات تانية غير الـ pipeline:
273
+
274
+ arc map يلوّن العُقد الهشة في الـ visualization
275
+ arc list يرتب الـ tasks حسب مخاطر الموديول
276
+ Weekly reports للمستخدم عن الـ "fragile zones" في مشروعه
277
+ الهيكل المعدّل:
278
+
279
+ ┌─────────────────────┐
280
+ │ Risk Profiler │ ← Async, periodic
281
+ │ (Git history, │ Outputs: risk_profile.json
282
+ │ failure trends, │
283
+ │ churn metrics) │
284
+ └──────────┬──────────┘
285
+ │ feeds
286
+
287
+ ┌─────────────────────────────────────────────┐
288
+ │ 8-Step Pipeline (Sync) │
289
+ │ │
290
+ │ Step 1: Baseline Capture │
291
+ │ ├─ current state snapshot │
292
+ │ └─ reads risk_profile.json ────┐ │
293
+ │ │ │
294
+ │ Step 3: Contract Validation │ │
295
+ │ └─ threshold adjusted by ──────┤ │
296
+ │ │ │
297
+ │ Step 6: Scoring │ │
298
+ │ └─ penalty weights modulated ──┘ │
299
+ └─────────────────────────────────────────────┘
300
+ اللي لازم الـ Risk Profiler يحسبه (Metrics المقترحة):
301
+ Metric المعنى المصدر
302
+ Churn Rate كام مرة الملف اتغير آخر N أسبوع git log --follow
303
+ Revert Density نسبة الـ commits اللي اترجعت في الموديول git log --grep=revert
304
+ Bug-Fix Ratio نسبة commits فيها "fix/bug/hotfix" commit messages
305
+ Co-Change Coupling ملفات بتتغير سوا كتير (خطر خفي) git log pairs
306
+ Ownership Dilution عدد المطورين اللي لمسوا الملف git blame stats
307
+ الأخيرة دي (Co-Change Coupling) مهمة جداً — ممكن تكتشف dependencies خفية مش ظاهرة في الـ AST. ملفين بيتغيروا سوا في 80% من الـ commits بس مفيش import بينهم → ده implicit coupling خطير، والـ AI ما هيعرفش يشوفه من غير البيانات دي.
308
+
309
+ التحذير الوحيد:
310
+ الـ Risk Profiler شغل إحصائي على Git = Stochastic بطبيعته. خليه يطلع probabilities and confidence intervals، مش verdicts قاطعة. يعني يقول "Module X has 73% probability of regression based on 6-month history" مش "Module X is fragile". ده بيحافظ على الـ "Verifiable" promise — الحقائق الحتمية في الـ pipeline، الاحتمالات في الـ profiler، وكل واحد في مكانه الصح.
311
+
312
+ خلاصة التوصية: ابدأ بـ Step 1 + Step 7 زي ما اتفقنا (snapshot + delta فقط). الـ Risk Profiler يبقى Phase 2.3 بعد ما الـ governance core يثبت. ما تحشرش التاريخ في الـ baseline من البداية — احتفظ بيه كـ enrichment layer منفصلة.
313
+
314
+
315
+
316
+ ## Reply:
317
+
318
+
319
+ هذا الفصل المعماري بين **Synchronous Baseline** و **Asynchronous Risk Profiler** هو تجسيد لمبدأ **"عزل الحالات" (State Isolation)**. لقد قمت بحماية الـ Performance الخاص بـ `arc` من الانهيار تحت وطأة البيانات التاريخية، وفي الوقت نفسه منحت النظام "ذاكرة مؤسسية" (Institutional Memory) تعمل في الخلفية.
320
+
321
+ إليك التحليل التقني لهذه البنية وكيفية الربط الرياضي بين طبقة الـ "Risk" وطبقة الـ "Governance":
322
+
323
+ ---
324
+
325
+ ## 1. الـ Risk Profiler: تحويل الـ Churn إلى "معامل قلق"
326
+
327
+ بما أن الـ Risk Profiler هو نظام احتمالي، فإن مخرجاته يجب أن تُعامل كـ **Weights** (أوزان) تُحقن في الـ Logic الخاص بالـ Convergence.
328
+
329
+ ### مصفوفة المخاطر المقترحة (Risk Vector)
330
+ يمكننا تمثيل مخاطر الموديول كـ $V_{risk}$ حيث يتم حسابها بناءً على المقاييس التي ذكرتها:
331
+
332
+ $$V_{risk} = \sum_{i=1}^{n} w_i M_i$$
333
+
334
+ حيث:
335
+ * $w_i$: هو وزن المقياس (مثلاً: الـ Revert Density له وزن أكبر من الـ Churn Rate).
336
+ * $M_i$: هو القيمة المعايرة (Normalized) للمقياس من 0 إلى 1.
337
+
338
+ هذه القيمة ($V_{risk}$) ستتحكم في الـ **Dynamic Threshold** ($T_{dyn}$) كالتالي:
339
+
340
+ $$T_{dyn} = T_{base} + (1 - T_{base}) \cdot V_{risk}$$
341
+
342
+ > **الأثر التقني:** إذا كان $T_{base} = 0.90$ وكان الموديول عالي المخاطر ($V_{risk} = 0.8$)، فإن الـ Threshold يرتفع تلقائياً إلى $0.98$. هذا هو "التأديب الإحصائي" (Statistical Discipline).
343
+
344
+ ---
345
+
346
+ ## 2. الـ Co-Change Coupling: اكتشاف الـ "Hidden Architectures"
347
+
348
+ نقطة الـ Co-Change Coupling التي أثرتها هي الأهم من منظور الـ Governance. الـ AST يخبرنا بالـ **Explicit Dependencies**، لكن الـ Git history يخبرنا بالـ **Implicit Dependencies**.
349
+
350
+ * **السيناريو:** الملف `Auth.ts` والملف `Logger.ts` يتغيران معاً في 90% من الـ Commits، رغم عدم وجود Import مباشر.
351
+ * **الإجراء:** الـ Risk Profiler يضع علامة (Tag) على هذه العلاقة. إذا قام الـ AI بتعديل `Auth.ts` فقط، فإن الـ `arc` في مرحلة الـ **Contract Validation** سيحذر الـ Planner:
352
+ > *"Historical data suggests that changes to Auth.ts usually require updates to Logger.ts. Please verify if Logger.ts needs to be in your context."*
353
+
354
+ هذا المستوى من "الوعي التاريخي" هو ما سيجعل `nomos-arc` يتفوق على أي Human Reviewer.
355
+
356
+ ---
357
+
358
+ ## 3. خطة التنفيذ لـ Phase 2.1 (The Integrity Core)
359
+
360
+ اتفاقاً مع رؤيتك، سنبدأ بـ **Step 1 + Step 7** (Snapshot + Delta) لتأسيس الـ **Integrity Contract**.
361
+
362
+ ### الخطوة القادمة: موديول الـ `BaselineManager`
363
+ سأقوم بتوصيف الـ **Snap Schema** الذي سيتم تخزينه في `.nomos/state/baselines/task-id.json`:
364
+
365
+ | Field | Type | Data Source |
366
+ | :--- | :--- | :--- |
367
+ | `ast_hash` | `string` | SHA-256 of `project_map.json` |
368
+ | `build_result` | `boolean` | `tsc` exit code |
369
+ | `lint_errors` | `number` | `eslint` total errors |
370
+ | `mi_score` | `number` | Calculated MI aggregate |
371
+ | `unit_tests` | `object` | `vitest` pass/fail/total |
372
+
373
+ ### الـ Delta Logic (The Verdict Engine)
374
+ عند مقارنة الـ Baseline بالـ Current، سنطبق **"قانون عدم التدهور" (The Non-Regression Law)**:
375
+
376
+ ```typescript
377
+ function evaluateDelta(baseline, current) {
378
+ if (current.build_result === false && baseline.build_result === true) {
379
+ return { status: 'BLOCK', reason: 'Build Regression' };
380
+ }
381
+ if (current.lint_errors > baseline.lint_errors) {
382
+ return { status: 'PENALIZE', score: -0.1 * (current.lint_errors - baseline.lint_errors) };
383
+ }
384
+ // ... بقية المنطق
385
+ }
386
+ ```
387
+
388
+ ---
389
+
390
+ ## الخلاصة الهندسية
391
+
392
+ بهذا الفصل، حافظنا على صرامة الـ **Verifiable Constraints** في الـ Pipeline، وتركنا الباب مفتوحاً للذكاء الإحصائي في الـ **Risk Profiler**. نحن الآن نبني نظاماً يمتلك "وعياً لحظياً" و "ذاكرة تاريخية".
393
+
394
+ بما أننا سنبدأ بالـ **Baseline Capture**، هل ترى أننا يجب أن نعتمد على الـ **Local Configuration** لتحديد أوامر الـ Build/Lint (مثلاً قراءتها من `package.json` تلقائياً)، أم نجعل المستخدم يعرفها يدوياً في `.nomos-config.json` لضمان الدقة؟
395
+
396
+ **سؤال المتابعة:** كيف نقوم بتعريف "الحد المسموح به" (Threshold) للـ MI Regression في الـ Baseline؛ هل هو رقم ثابت أم نسبة مئوية من القيمة الأصلية؟