rosett-ai 1.3.3

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 (527) hide show
  1. checksums.yaml +7 -0
  2. data/.ai-provenance.yml +119 -0
  3. data/.debride_whitelist +186 -0
  4. data/.fasterer.yml +29 -0
  5. data/.mdl_style.rb +10 -0
  6. data/.mdlrc +3 -0
  7. data/.mutant.yml +49 -0
  8. data/.namespace-allowlist +42 -0
  9. data/.reek.yml +1040 -0
  10. data/.rosett-ai/config.yml +3 -0
  11. data/.rspec +5 -0
  12. data/.rubocop.yml +380 -0
  13. data/.ruby-version +1 -0
  14. data/.yamllint +51 -0
  15. data/.yardopts +12 -0
  16. data/AI-DISCLOSURE.md +48 -0
  17. data/CHANGELOG.md +519 -0
  18. data/CLAUDE.md +141 -0
  19. data/CONTRIBUTING.md +734 -0
  20. data/INSTALL.md +154 -0
  21. data/LICENSE +674 -0
  22. data/LICENSE.md +675 -0
  23. data/QUICKSTART.md +73 -0
  24. data/README.md +366 -0
  25. data/Rakefile +200 -0
  26. data/SECURITY.md +114 -0
  27. data/bin/rai +1 -0
  28. data/cliff.toml +52 -0
  29. data/conf/adopt_redactions.yml +8 -0
  30. data/conf/behaviour/.gitkeep +0 -0
  31. data/conf/compliance/cra_rules.yml +25 -0
  32. data/conf/compliance/license_rules.yml +20 -0
  33. data/conf/design/aaif_alignment.yml +181 -0
  34. data/conf/design/ab_testing.yml +172 -0
  35. data/conf/design/accessibility.yml +84 -0
  36. data/conf/design/ai_authorship.yml +210 -0
  37. data/conf/design/ai_provenance.yml +224 -0
  38. data/conf/design/ai_tool_configuration.yml +207 -0
  39. data/conf/design/architecture.yml +139 -0
  40. data/conf/design/autocompletion.yml +115 -0
  41. data/conf/design/backward_compatibility.yml +112 -0
  42. data/conf/design/behaviour_composition.yml +246 -0
  43. data/conf/design/build_rake_extraction.yml +57 -0
  44. data/conf/design/ci_pipeline.yml +100 -0
  45. data/conf/design/claude_code_configuration.yml +157 -0
  46. data/conf/design/compiler.yml +128 -0
  47. data/conf/design/comply.yml +153 -0
  48. data/conf/design/content_packs.yml +84 -0
  49. data/conf/design/desktop_integration.yml +289 -0
  50. data/conf/design/distribution.yml +216 -0
  51. data/conf/design/doctor.yml +184 -0
  52. data/conf/design/documentation.yml +152 -0
  53. data/conf/design/engine_architecture.yml +257 -0
  54. data/conf/design/error_handling.yml +103 -0
  55. data/conf/design/feature_flags.yml +142 -0
  56. data/conf/design/git_hooks.yml +165 -0
  57. data/conf/design/gui_plugins.yml +475 -0
  58. data/conf/design/i18n.yml +84 -0
  59. data/conf/design/integration_testing.yml +56 -0
  60. data/conf/design/licensing_system.yml +88 -0
  61. data/conf/design/lifecycle_management.yml +208 -0
  62. data/conf/design/mcp_integration.yml +207 -0
  63. data/conf/design/mcp_settings.yml +126 -0
  64. data/conf/design/migration.yml +56 -0
  65. data/conf/design/monitoring_observability.yml +194 -0
  66. data/conf/design/namespace_cleanup.yml +145 -0
  67. data/conf/design/plugin_test_segregation.yml +145 -0
  68. data/conf/design/policy_management.yml +229 -0
  69. data/conf/design/project_management.yml +183 -0
  70. data/conf/design/rai_mcp_asset_discovery.yml +164 -0
  71. data/conf/design/rai_mcp_server.yml +605 -0
  72. data/conf/design/release_management.yml +117 -0
  73. data/conf/design/retrofit.yml +199 -0
  74. data/conf/design/retrospective_analyzer.yml +79 -0
  75. data/conf/design/scope_hierarchy.yml +352 -0
  76. data/conf/design/security.yml +115 -0
  77. data/conf/design/session_retrospective.yml +85 -0
  78. data/conf/design/smart_ui_feedback.yml +89 -0
  79. data/conf/design/structured_logging.yml +148 -0
  80. data/conf/design/styles.yml +123 -0
  81. data/conf/design/test_peer_review.yml +89 -0
  82. data/conf/design/testing.yml +136 -0
  83. data/conf/design/threat_model.yml +108 -0
  84. data/conf/design/ui_framework.yml +111 -0
  85. data/conf/design/usage_optimization.yml +122 -0
  86. data/conf/design/version_management.yml +60 -0
  87. data/conf/design/workflow.yml +227 -0
  88. data/conf/mcp/server_defaults.yml +42 -0
  89. data/conf/mcp/trust.yml +21 -0
  90. data/conf/packaging/core.yml +12 -0
  91. data/conf/packaging/gtk4.yml +11 -0
  92. data/conf/packaging/qt6.yml +11 -0
  93. data/conf/policy/default_deny_list.yml +197 -0
  94. data/conf/review/cli-command-audit.yml +857 -0
  95. data/conf/review/design-docs.yml +1064 -0
  96. data/conf/review/design-questionnaire.yml +153 -0
  97. data/conf/review/questionnaire.yml +146 -0
  98. data/conf/review/rosett-ai-core.yml +2919 -0
  99. data/conf/schemas/ai_config_schema.json +73 -0
  100. data/conf/schemas/behaviour_schema.json +132 -0
  101. data/conf/schemas/compliance_rule_schema.json +63 -0
  102. data/conf/schemas/content_pack_manifest_schema.json +51 -0
  103. data/conf/schemas/design_schema.json +210 -0
  104. data/conf/schemas/engine_manifest_schema.json +144 -0
  105. data/conf/schemas/lockfile_schema.json +74 -0
  106. data/conf/schemas/mcp_server_schema.json +48 -0
  107. data/conf/schemas/packaging_schema.json +70 -0
  108. data/conf/schemas/policy_schema.json +85 -0
  109. data/conf/schemas/provenance_schema.json +84 -0
  110. data/conf/schemas/rai_config_schema.json +56 -0
  111. data/conf/schemas/rai_project_schema.json +20 -0
  112. data/conf/schemas/scope_hierarchy_schema.json +49 -0
  113. data/conf/schemas/target_schema.json +67 -0
  114. data/conf/schemas/tooling_schema.json +65 -0
  115. data/conf/schemas/workflow_schema.json +112 -0
  116. data/conf/targets/agents_md.yml +17 -0
  117. data/conf/targets/claude.yml +12 -0
  118. data/conf/tooling/tools.yml +58 -0
  119. data/dist/rosett-ai-mcp.service +48 -0
  120. data/dist/rosett-ai-mcp.yml.default +45 -0
  121. data/doc/AAIF_POSITIONING.md +58 -0
  122. data/doc/ADOPT.md +224 -0
  123. data/doc/AI_PROVENANCE.md +139 -0
  124. data/doc/ARCHITECTURE.md +920 -0
  125. data/doc/BEHAVIOUR.md +409 -0
  126. data/doc/BUILD.md +138 -0
  127. data/doc/CI_CD_RECIPES.md +171 -0
  128. data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
  129. data/doc/COMMAND_ANALYSIS.md +229 -0
  130. data/doc/CONFIGURATION.md +281 -0
  131. data/doc/DESIGN_AUDIT.md +235 -0
  132. data/doc/DESIGN_PEER_REVIEW.md +771 -0
  133. data/doc/DESKTOP.md +447 -0
  134. data/doc/ENGINES.md +567 -0
  135. data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
  136. data/doc/FEATURE_AUDIT.md +218 -0
  137. data/doc/IMPLEMENTATION_PLAN.md +669 -0
  138. data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
  139. data/doc/MIGRATION_GUIDE.md +88 -0
  140. data/doc/PACKAGING.md +232 -0
  141. data/doc/PROJECT_DASHBOARD.md +153 -0
  142. data/doc/PULP_DEPLOYMENT.md +164 -0
  143. data/doc/QUALITY_FIX_SUMMARY.md +110 -0
  144. data/doc/QUICK_START.md +162 -0
  145. data/doc/REEK_CONFIGURATION.md +166 -0
  146. data/doc/REFERENCE.md +253 -0
  147. data/doc/REFERENCES.md +324 -0
  148. data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
  149. data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
  150. data/doc/SETUP.md +202 -0
  151. data/doc/TEST_PEER_REVIEW.md +152 -0
  152. data/doc/THREAT_MODEL.md +230 -0
  153. data/doc/USAGE.md +545 -0
  154. data/doc/USER_MANUAL.md +585 -0
  155. data/doc/ai_test_review_checklist.md +110 -0
  156. data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
  157. data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
  158. data/doc/changes/2026-02-20-security-implementation.md +281 -0
  159. data/doc/changes/2026-02-20-styles-implementation.md +220 -0
  160. data/doc/changes/2026-02-21-architecture-completion.md +95 -0
  161. data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
  162. data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
  163. data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
  164. data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
  165. data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
  166. data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
  167. data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
  168. data/doc/changes/2026-02-21-path-resolver.md +128 -0
  169. data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
  170. data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
  171. data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
  172. data/doc/context/SESSION-HANDOFF.md +69 -0
  173. data/doc/context/ai-engine-usage-trends-2026.md +80 -0
  174. data/doc/context/plan-pluggable-engines.md +590 -0
  175. data/doc/decisions/001-flog-deferred.md +32 -0
  176. data/doc/decisions/002-path-resolution-strategy.md +158 -0
  177. data/doc/decisions/003-ui-adapter-selection.md +193 -0
  178. data/doc/decisions/004-design-document-validation.md +179 -0
  179. data/doc/decisions/005-package-splitting-strategy.md +200 -0
  180. data/doc/decisions/006-multi-engine-architecture.md +147 -0
  181. data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
  182. data/doc/decisions/008-ci-bundler-strategy.md +129 -0
  183. data/doc/decisions/009-core-only-v1-release.md +60 -0
  184. data/doc/decisions/010-engine-debian-packaging.md +66 -0
  185. data/doc/decisions/011-context-aware-cli.md +71 -0
  186. data/doc/dependency_decisions.yml +247 -0
  187. data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
  188. data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
  189. data/doc/issues/003-smoke-test-false-positive.md +127 -0
  190. data/doc/issues/004-market-research-design-updates.md +109 -0
  191. data/doc/issues/005-compile-scope-coexistence.md +161 -0
  192. data/doc/locales/.gitkeep +0 -0
  193. data/doc/man/rai.1.ronn +505 -0
  194. data/doc/operations/packaging.md +133 -0
  195. data/doc/operations/rosett-ai-release.md +65 -0
  196. data/doc/reference/error-catalog.md +107 -0
  197. data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
  198. data/doc/reference/src/Pictures/cover.jpg +0 -0
  199. data/doc/reference/src/Pictures/head1.jpg +0 -0
  200. data/doc/reference/src/Pictures/head2.jpg +0 -0
  201. data/doc/reference/src/Pictures/head3.jpg +0 -0
  202. data/doc/reference/src/Pictures/head4.jpg +0 -0
  203. data/doc/reference/src/Pictures/head5.jpg +0 -0
  204. data/doc/reference/src/Pictures/head6.jpg +0 -0
  205. data/doc/reference/src/Pictures/head7.jpg +0 -0
  206. data/doc/reference/src/Pictures/head8.jpg +0 -0
  207. data/doc/reference/src/StyleInd.ist +4 -0
  208. data/doc/reference/src/bibliography.bib +79 -0
  209. data/doc/reference/src/main.tex +1288 -0
  210. data/doc/reference/src/structure.tex +303 -0
  211. data/doc/rosett-ai-bookmarks.html +301 -0
  212. data/kitchen.yml +46 -0
  213. data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
  214. data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
  215. data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
  216. data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
  217. data/lib/rosett_ai/ai_config/context_window.rb +55 -0
  218. data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
  219. data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
  220. data/lib/rosett_ai/ai_config/model_router.rb +121 -0
  221. data/lib/rosett_ai/ai_config/validator.rb +45 -0
  222. data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
  223. data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
  224. data/lib/rosett_ai/authorship/review_validator.rb +39 -0
  225. data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
  226. data/lib/rosett_ai/backup/compressor.rb +180 -0
  227. data/lib/rosett_ai/backup/destination.rb +91 -0
  228. data/lib/rosett_ai/behaviour/manager.rb +156 -0
  229. data/lib/rosett_ai/compiler/backend.rb +86 -0
  230. data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
  231. data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
  232. data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
  233. data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
  234. data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
  235. data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
  236. data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
  237. data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
  238. data/lib/rosett_ai/compiler/target_profile.rb +112 -0
  239. data/lib/rosett_ai/completion/generator.rb +101 -0
  240. data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
  241. data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
  242. data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
  243. data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
  244. data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
  245. data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
  246. data/lib/rosett_ai/comply/reporter.rb +113 -0
  247. data/lib/rosett_ai/comply/runner.rb +50 -0
  248. data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
  249. data/lib/rosett_ai/composition/composer.rb +158 -0
  250. data/lib/rosett_ai/composition/composition_result.rb +64 -0
  251. data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
  252. data/lib/rosett_ai/composition/lockfile.rb +103 -0
  253. data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
  254. data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
  255. data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
  256. data/lib/rosett_ai/config/compile_result.rb +37 -0
  257. data/lib/rosett_ai/config/compiler.rb +13 -0
  258. data/lib/rosett_ai/config/domain_transformer.rb +13 -0
  259. data/lib/rosett_ai/config/key_map.rb +13 -0
  260. data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
  261. data/lib/rosett_ai/config/scope_router.rb +13 -0
  262. data/lib/rosett_ai/config/secret_resolver.rb +125 -0
  263. data/lib/rosett_ai/configuration.rb +119 -0
  264. data/lib/rosett_ai/content/content_client.rb +60 -0
  265. data/lib/rosett_ai/content/pack_installer.rb +117 -0
  266. data/lib/rosett_ai/content/pack_manifest.rb +50 -0
  267. data/lib/rosett_ai/content/pack_registry.rb +68 -0
  268. data/lib/rosett_ai/content_packs/manager.rb +50 -0
  269. data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
  270. data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
  271. data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
  272. data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
  273. data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
  274. data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
  275. data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
  276. data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
  277. data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
  278. data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
  279. data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
  280. data/lib/rosett_ai/dbus/service.rb +121 -0
  281. data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
  282. data/lib/rosett_ai/deprecation.rb +79 -0
  283. data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
  284. data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
  285. data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
  286. data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
  287. data/lib/rosett_ai/doctor/check.rb +92 -0
  288. data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
  289. data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
  290. data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
  291. data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
  292. data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
  293. data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
  294. data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
  295. data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
  296. data/lib/rosett_ai/doctor.rb +81 -0
  297. data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
  298. data/lib/rosett_ai/documentation/translator.rb +62 -0
  299. data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
  300. data/lib/rosett_ai/engines/detector.rb +63 -0
  301. data/lib/rosett_ai/engines/registry.rb +50 -0
  302. data/lib/rosett_ai/error_handler.rb +139 -0
  303. data/lib/rosett_ai/exit_codes.rb +76 -0
  304. data/lib/rosett_ai/feature_flags.rb +102 -0
  305. data/lib/rosett_ai/formatting.rb +33 -0
  306. data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
  307. data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
  308. data/lib/rosett_ai/git_hooks/installer.rb +175 -0
  309. data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
  310. data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
  311. data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
  312. data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
  313. data/lib/rosett_ai/init/config_file_writer.rb +24 -0
  314. data/lib/rosett_ai/init/directory_builder.rb +38 -0
  315. data/lib/rosett_ai/init/file_copier.rb +95 -0
  316. data/lib/rosett_ai/init/global_initializer.rb +28 -0
  317. data/lib/rosett_ai/init/local_initializer.rb +27 -0
  318. data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
  319. data/lib/rosett_ai/init/project_initializer.rb +38 -0
  320. data/lib/rosett_ai/licensing/license_key.rb +139 -0
  321. data/lib/rosett_ai/licensing/license_store.rb +64 -0
  322. data/lib/rosett_ai/licensing/license_validator.rb +60 -0
  323. data/lib/rosett_ai/licensing/tier.rb +42 -0
  324. data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
  325. data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
  326. data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
  327. data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
  328. data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
  329. data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
  330. data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
  331. data/lib/rosett_ai/mcp/governance.rb +160 -0
  332. data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
  333. data/lib/rosett_ai/mcp/instructions.rb +266 -0
  334. data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
  335. data/lib/rosett_ai/mcp/keyfile.rb +221 -0
  336. data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
  337. data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
  338. data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
  339. data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
  340. data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
  341. data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
  342. data/lib/rosett_ai/mcp/plugins.rb +143 -0
  343. data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
  344. data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
  345. data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
  346. data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
  347. data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
  348. data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
  349. data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
  350. data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
  351. data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
  352. data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
  353. data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
  354. data/lib/rosett_ai/mcp/response_helper.rb +46 -0
  355. data/lib/rosett_ai/mcp/security_logger.rb +60 -0
  356. data/lib/rosett_ai/mcp/server.rb +212 -0
  357. data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
  358. data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
  359. data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
  360. data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
  361. data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
  362. data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
  363. data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
  364. data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
  365. data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
  366. data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
  367. data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
  368. data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
  369. data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
  370. data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
  371. data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
  372. data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
  373. data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
  374. data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
  375. data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
  376. data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
  377. data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
  378. data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
  379. data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
  380. data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
  381. data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
  382. data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
  383. data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
  384. data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
  385. data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
  386. data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
  387. data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
  388. data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
  389. data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
  390. data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
  391. data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
  392. data/lib/rosett_ai/migration/detector.rb +117 -0
  393. data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
  394. data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
  395. data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
  396. data/lib/rosett_ai/package_manager/apt.rb +108 -0
  397. data/lib/rosett_ai/package_manager/base.rb +68 -0
  398. data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
  399. data/lib/rosett_ai/packaging/variant_config.rb +92 -0
  400. data/lib/rosett_ai/path_resolver.rb +115 -0
  401. data/lib/rosett_ai/plugins/contract.rb +43 -0
  402. data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
  403. data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
  404. data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
  405. data/lib/rosett_ai/plugins/registry.rb +150 -0
  406. data/lib/rosett_ai/policy/auditor.rb +41 -0
  407. data/lib/rosett_ai/policy/deny_list.rb +71 -0
  408. data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
  409. data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
  410. data/lib/rosett_ai/policy/protected_files.rb +47 -0
  411. data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
  412. data/lib/rosett_ai/policy/validator.rb +35 -0
  413. data/lib/rosett_ai/profiler.rb +79 -0
  414. data/lib/rosett_ai/project/drift_detector.rb +126 -0
  415. data/lib/rosett_ai/project/manager.rb +115 -0
  416. data/lib/rosett_ai/project/sync_manager.rb +138 -0
  417. data/lib/rosett_ai/project/template_applier.rb +105 -0
  418. data/lib/rosett_ai/project_context.rb +82 -0
  419. data/lib/rosett_ai/provenance/entry.rb +63 -0
  420. data/lib/rosett_ai/provenance/file_source.rb +32 -0
  421. data/lib/rosett_ai/provenance/source.rb +62 -0
  422. data/lib/rosett_ai/provenance/store.rb +153 -0
  423. data/lib/rosett_ai/provenance/tracker.rb +62 -0
  424. data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
  425. data/lib/rosett_ai/provenance/validator.rb +45 -0
  426. data/lib/rosett_ai/quorum/collector.rb +59 -0
  427. data/lib/rosett_ai/quorum/comparator.rb +81 -0
  428. data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
  429. data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
  430. data/lib/rosett_ai/rai_config.rb +107 -0
  431. data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
  432. data/lib/rosett_ai/retrofit/engine.rb +171 -0
  433. data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
  434. data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
  435. data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
  436. data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
  437. data/lib/rosett_ai/retrofit/scanner.rb +47 -0
  438. data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
  439. data/lib/rosett_ai/secrets_resolver.rb +71 -0
  440. data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
  441. data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
  442. data/lib/rosett_ai/structured_logger.rb +110 -0
  443. data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
  444. data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
  445. data/lib/rosett_ai/telemetry/provider.rb +26 -0
  446. data/lib/rosett_ai/telemetry/reporter.rb +144 -0
  447. data/lib/rosett_ai/telemetry.rb +47 -0
  448. data/lib/rosett_ai/text_sanitizer.rb +62 -0
  449. data/lib/rosett_ai/thor/cli.rb +269 -0
  450. data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
  451. data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
  452. data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
  453. data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
  454. data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
  455. data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
  456. data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
  457. data/lib/rosett_ai/thor/tasks/config.rb +265 -0
  458. data/lib/rosett_ai/thor/tasks/content.rb +193 -0
  459. data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
  460. data/lib/rosett_ai/thor/tasks/design.rb +258 -0
  461. data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
  462. data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
  463. data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
  464. data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
  465. data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
  466. data/lib/rosett_ai/thor/tasks/init.rb +259 -0
  467. data/lib/rosett_ai/thor/tasks/license.rb +120 -0
  468. data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
  469. data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
  470. data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
  471. data/lib/rosett_ai/thor/tasks/project.rb +260 -0
  472. data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
  473. data/lib/rosett_ai/thor/tasks/release.rb +314 -0
  474. data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
  475. data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
  476. data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
  477. data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
  478. data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
  479. data/lib/rosett_ai/tooling/version_checker.rb +35 -0
  480. data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
  481. data/lib/rosett_ai/ui/base.rb +46 -0
  482. data/lib/rosett_ai/ui/gtk4.rb +98 -0
  483. data/lib/rosett_ai/ui/kde.rb +40 -0
  484. data/lib/rosett_ai/ui/qt6.rb +40 -0
  485. data/lib/rosett_ai/ui/registry.rb +60 -0
  486. data/lib/rosett_ai/ui/tty_helper.rb +74 -0
  487. data/lib/rosett_ai/ui/tui.rb +59 -0
  488. data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
  489. data/lib/rosett_ai/validators/design_validator.rb +17 -0
  490. data/lib/rosett_ai/validators/schema_validator.rb +84 -0
  491. data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
  492. data/lib/rosett_ai/version.rb +8 -0
  493. data/lib/rosett_ai/version_consistency_checker.rb +129 -0
  494. data/lib/rosett_ai/workflow/audit_log.rb +86 -0
  495. data/lib/rosett_ai/workflow/engine.rb +142 -0
  496. data/lib/rosett_ai/workflow/manager.rb +82 -0
  497. data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
  498. data/lib/rosett_ai/workflow/step_runner.rb +61 -0
  499. data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
  500. data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
  501. data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
  502. data/lib/rosett_ai/yaml_loader.rb +78 -0
  503. data/lib/rosett_ai.rb +221 -0
  504. data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
  505. data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
  506. data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
  507. data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
  508. data/lib/rubocop/rosett_ai.rb +9 -0
  509. data/lib/scripts/generated/docker_hub_tags.rb +126 -0
  510. data/locales/.gitkeep +0 -0
  511. data/locales/ar.yml +579 -0
  512. data/locales/en.yml +571 -0
  513. data/locales/fr.yml +567 -0
  514. data/packaging/build-engine-deb.sh +81 -0
  515. data/packaging/scripts/postinst +17 -0
  516. data/packaging/scripts/postrm +19 -0
  517. data/packaging/scripts/prerm +10 -0
  518. data/packaging/wrapper.sh.template +38 -0
  519. data/rosett-ai.gemspec +63 -0
  520. data/rules/.gitkeep +0 -0
  521. data/scripts/publish/pulp_upload.sh +123 -0
  522. data/settings.json +29 -0
  523. data/share/applications/be.neatnerds.rosettai.desktop +29 -0
  524. data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
  525. data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
  526. data/share/templates/behaviour/criticalthinking.yml +69 -0
  527. metadata +810 -0
@@ -0,0 +1,16 @@
1
+ # Claude Sessions Moved
2
+
3
+ The Claude Code session transcripts and memory files that were previously stored in
4
+ `doc/claude-sessions/` have been relocated to the workspace-level `.claude/` directory:
5
+
6
+ | Previous Location | New Location |
7
+ |-------------------|--------------|
8
+ | `doc/claude-sessions/*.jsonl` | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/sessions/rosett-ai-core/` |
9
+ | `doc/claude-sessions/memory/` | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/memory/` |
10
+ | `settings.json` (repo root) | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/settings.json` |
11
+
12
+ This change was made on 2026-03-12 as part of the ecosystem orchestration overhaul
13
+ to separate Claude-specific assets from engine-agnostic code.
14
+
15
+ The original session archives (NNCO-era, 272MB) are preserved in:
16
+ `~/Archives/claude-sessions/nnco-rosett-ai-sessions-20260312.tar.zst`
@@ -0,0 +1,229 @@
1
+ # Command Overlap & Friction Analysis
2
+
3
+ **Date**: 2026-03-15
4
+ **Scope**: All 18 registered CLI entry points (1 top-level + 17 subcommand groups)
5
+ **Method**: Static analysis of `lib/rosett_ai/thor/cli.rb` and all `lib/rosett_ai/thor/tasks/*.rb`
6
+
7
+ ## Command Surface Summary
8
+
9
+ | # | Group | Commands | Visibility | File |
10
+ |---|-------|----------|------------|------|
11
+ | 1 | `version` | 1 | public | `cli.rb:54` |
12
+ | 2 | `compile` | 1 | public | `tasks/compile.rb` |
13
+ | 3 | `validate` | 1 | public | `tasks/validate.rb` |
14
+ | 4 | `adopt` | 1 | public | `tasks/adopt.rb` |
15
+ | 5 | `init` | 1 | public | `tasks/init.rb` |
16
+ | 6 | `backup` | 1 | public | `tasks/backup.rb` |
17
+ | 7 | `behaviour` | 7 | public | `tasks/behaviour.rb` |
18
+ | 8 | `build` | 2 | public | `tasks/build.rb` |
19
+ | 9 | `design` | 3 | public | `tasks/design.rb` |
20
+ | 10 | `config` | 2 | public | `tasks/config.rb` |
21
+ | 11 | `tooling` | 3 | public | `tasks/tooling.rb` |
22
+ | 12 | `license` | 3 | public | `tasks/license.rb` |
23
+ | 13 | `content` | 3 | public | `tasks/content.rb` |
24
+ | 14 | `engines` | 4 | public | `tasks/engines.rb` |
25
+ | 15 | `release` | 3 | internal | `tasks/release.rb` |
26
+ | 16 | `documentation` | 3 | internal | `tasks/documentation.rb` |
27
+ | 17 | `dbus` | 4 | internal | `tasks/dbus.rb` |
28
+ | 18 | `desktop` | 2 | internal | `tasks/desktop.rb` |
29
+ | | **Total** | **~45** | 14 public / 4 internal | |
30
+
31
+ ## Finding 1: Validate Fragmentation (OVERLAP)
32
+
33
+ **Severity**: Medium
34
+ **Type**: DRY concern + discoverability
35
+
36
+ Validation exists in four places:
37
+
38
+ | Command | Scope | Accepts NAME arg? |
39
+ |---------|-------|-------------------|
40
+ | `rai validate` | All categories (behaviour + design + tooling) | No |
41
+ | `rai behaviour validate [NAME]` | Behaviour files only | Yes (optional) |
42
+ | `rai design validate [NAME]` | Design documents only | Yes (optional) |
43
+ | `rai tooling validate [NAME]` | Tooling configs only | Yes (optional) |
44
+
45
+ **Friction**: A user running `rai validate` gets the umbrella check, but cannot target a single file. The per-category commands allow targeting but require knowing which category a file belongs to.
46
+
47
+ **Recommendation**: The current structure is defensible — `rai validate` is the CI/pre-commit entry point,
48
+ per-category commands are for authoring workflows. No change needed, but consider adding
49
+ `rai validate --category design` as a middle ground in a future iteration.
50
+
51
+ ## Finding 2: Compile Ambiguity (FRICTION)
52
+
53
+ **Severity**: Medium
54
+ **Type**: Naming collision
55
+
56
+ Two unrelated "compile" operations exist:
57
+
58
+ | Command | Input | Output | Purpose |
59
+ |---------|-------|--------|---------|
60
+ | `rai compile` | `conf/behaviour/*.yml` | `rules/*.md` | Compile behaviour rules to engine-native format |
61
+ | `rai config compile` | `conf/claude_code/*.yml` | `settings.json` | Compile scope configs to Claude Code settings |
62
+
63
+ **Friction**: "compile" means different things depending on context. A user who just installed rosett-ai and runs `rai compile` might expect it to compile *everything* (including config), or vice versa.
64
+
65
+ **Recommendation**: This is a genuine UX concern. Two options:
66
+
67
+ 1. **Accept it**: Both are compile operations for different artefacts.
68
+ The subcommand nesting (`config compile`) disambiguates. Document clearly.
69
+ 2. **Unify**: Make `rai compile` the umbrella that compiles rules + config + locales,
70
+ add `--only rules` / `--only config` for targeting. This would be a breaking change.
71
+
72
+ **Verdict**: Accept for v1.0.0. Document in help text. Revisit if user confusion is reported.
73
+
74
+ ## Finding 3: Tooling Validate Name Collision (FRICTION)
75
+
76
+ **Severity**: Low
77
+ **Type**: Naming ambiguity within a subcommand group
78
+
79
+ | Command | Purpose |
80
+ |---------|---------|
81
+ | `rai tooling validate [NAME]` | Validate tooling YAML against schema |
82
+ | `rai tooling validate-ci-yaml` | Validate GitLab CI YAML syntax |
83
+
84
+ **Friction**: Both start with "validate" but do completely different things. A user running `rai tooling validate` might expect it to also validate CI YAML.
85
+
86
+ **Recommendation**: Acceptable as-is. The schema validation checks *tooling config* structure, while `validate-ci-yaml` checks *CI pipeline* syntax. They are genuinely different. The kebab-case compound name `validate-ci-yaml` is distinct enough.
87
+
88
+ ## Finding 4: Provenance CLI Gap (MISSING)
89
+
90
+ **Severity**: High
91
+ **Type**: Documentation/implementation mismatch
92
+
93
+ The `provenance` command is fully documented in CLAUDE.md (6 subcommands: `init`, `add`, `validate`, `show`, `log`) but **not implemented** in the CLI. No task file exists at `lib/rosett_ai/thor/tasks/provenance.rb`.
94
+
95
+ The library module `RosettAi::Provenance::*` exists and is functional, but has no CLI exposure.
96
+
97
+ **Documented commands without implementation**:
98
+
99
+ - `rai provenance init`
100
+ - `rai provenance add [--engine ENGINE]`
101
+ - `rai provenance validate`
102
+ - `rai provenance show COMMIT [--file PATH]`
103
+ - `rai provenance log [--role ROLE]`
104
+
105
+ **Recommendation**: Either implement the CLI commands or remove them from CLAUDE.md. Given that provenance
106
+ is actively used (102 entries in `.ai-provenance.yml`), implementing the CLI is the right choice.
107
+ This is a feature gap, not a friction issue.
108
+
109
+ ## Finding 5: Design vs Behaviour Feature Parity (GAP)
110
+
111
+ **Severity**: Low
112
+ **Type**: Asymmetric command surface
113
+
114
+ | Operation | `behaviour` | `design` |
115
+ |-----------|-------------|----------|
116
+ | `list` | Yes | Yes |
117
+ | `show NAME` | Yes | Yes |
118
+ | `validate [NAME]` | Yes | Yes |
119
+ | `display` (table) | Yes | No |
120
+ | `manage add` | Yes | No |
121
+ | `manage modify` | Yes | No |
122
+ | `manage delete` | Yes | No |
123
+
124
+ **Friction**: Behaviour files have full CRUD management; design documents are created/edited manually. A user might expect `rai design manage add` to scaffold a design doc.
125
+
126
+ **Recommendation**: Acceptable asymmetry. Design documents are authored by humans and reviewed
127
+ carefully — scaffolding would encourage boilerplate. Behaviour files have strict schema constraints
128
+ that justify managed creation. If scaffolding is desired later, the `rosett-ai-dev-tools` gem already
129
+ provides template generation.
130
+
131
+ ## Finding 6: Naming Consistency (MINOR)
132
+
133
+ **Severity**: Low
134
+ **Type**: Cosmetic
135
+
136
+ | Pattern | Examples |
137
+ |---------|----------|
138
+ | Single-word commands | `compile`, `validate`, `adopt`, `init`, `backup` |
139
+ | Kebab-case subcommands | `validate-ci-yaml`, `check-versions` |
140
+ | Noun-based groups | `behaviour`, `design`, `config`, `tooling`, `engines` |
141
+ | Verb-based groups | `compile`, `validate`, `adopt`, `build`, `backup` |
142
+
143
+ **Observation**: Top-level commands mix verbs (`compile`, `validate`) with nouns (`behaviour`, `engines`). This is standard Thor/CLI convention — verbs for actions, nouns for resource management groups. No friction in practice.
144
+
145
+ **Recommendation**: No change needed. Consistent within categories.
146
+
147
+ ## Finding 7: Engine Flag Duplication (MINOR)
148
+
149
+ **Severity**: Low
150
+ **Type**: Repeated option definition
151
+
152
+ The `--engine` flag appears on:
153
+
154
+ - `rai compile --engine NAME`
155
+ - `rai config compile --engine NAME`
156
+ - `rai config show --engine NAME`
157
+
158
+ Each independently defaults to the configured default engine. This is correct (each command needs it), but the flag is defined separately in each task file.
159
+
160
+ **Recommendation**: No change needed. Thor class_options don't propagate to subcommands, so duplication is necessary. A shared concern module could DRY this if more commands need it.
161
+
162
+ ## Finding 8: Internal Command Gating (OK)
163
+
164
+ **Severity**: None
165
+ **Type**: Design validation
166
+
167
+ Four command groups are gated behind `RAI_INTERNAL=true`:
168
+
169
+ - `release` — version bumping, tagging, changelog
170
+ - `documentation` — doc generation, translation
171
+ - `dbus` — D-Bus service lifecycle
172
+ - `desktop` — GUI launcher
173
+
174
+ **Assessment**: Correct gating. These are development/infrastructure commands that end users should not invoke. The gating mechanism (env var check + hidden from `--help`) is clean.
175
+
176
+ ## Finding 9: Missing `--verbose` Consistency (MINOR)
177
+
178
+ **Severity**: Low
179
+ **Type**: UX inconsistency
180
+
181
+ | Command | Has `--verbose`? |
182
+ |---------|-----------------|
183
+ | `compile` | Yes |
184
+ | `adopt` | Yes |
185
+ | `config compile` | Yes |
186
+ | `tooling validate-ci-yaml` | Yes |
187
+ | `tooling check-versions` | Yes |
188
+ | `build package` | Yes |
189
+ | `build engine` | Yes |
190
+ | `validate` | No |
191
+ | `behaviour validate` | No |
192
+ | `design validate` | No |
193
+ | `init` | No |
194
+ | `backup` | No |
195
+
196
+ **Friction**: Validation commands don't have `--verbose`, so users cannot get detailed output when debugging schema failures.
197
+
198
+ **Recommendation**: Consider adding `--verbose` to `validate`, `behaviour validate`, and `design validate` in a future iteration. Low priority — the current error messages include schema violation details.
199
+
200
+ ## KISS Assessment
201
+
202
+ | Principle | Status | Notes |
203
+ |-----------|--------|-------|
204
+ | Command count | OK | 45 commands across 18 groups is moderate for a tool of this scope |
205
+ | Nesting depth | OK | Maximum 3 levels (`build package execute`) — within Thor norms |
206
+ | Option count | OK | No command has more than 7 options (build package = 7) |
207
+ | Default behaviour | Good | `compile`, `adopt`, `init` all have sensible defaults |
208
+ | Discoverability | Good | `--help` works at every level; internal commands hidden |
209
+ | Naming | Good | Consistent within categories; no cryptic abbreviations |
210
+
211
+ ## Summary Matrix
212
+
213
+ | # | Finding | Severity | Type | Action |
214
+ |---|---------|----------|------|--------|
215
+ | 1 | Validate fragmentation | Medium | Overlap | Accept; document |
216
+ | 2 | Compile ambiguity | Medium | Friction | Accept for v1.0.0; document |
217
+ | 3 | Tooling validate collision | Low | Friction | Accept |
218
+ | 4 | Provenance CLI gap | High | Missing | Implement or remove from docs |
219
+ | 5 | Design vs Behaviour parity | Low | Gap | Accept; asymmetry is intentional |
220
+ | 6 | Naming consistency | Low | Cosmetic | No change |
221
+ | 7 | Engine flag duplication | Low | DRY | No change (Thor limitation) |
222
+ | 8 | Internal gating | None | OK | Validated correct |
223
+ | 9 | Missing --verbose | Low | UX | Future iteration |
224
+
225
+ ## Actionable Items
226
+
227
+ 1. **Implement `provenance` CLI** (Finding 4) — or remove from CLAUDE.md
228
+ 2. **Document compile disambiguation** (Finding 2) — clarify in `--help` text
229
+ 3. **Consider `--verbose` on validate commands** (Finding 9) — future enhancement
@@ -0,0 +1,281 @@
1
+ # Rosett-AI - Configuration Reference
2
+
3
+ ## Configuration Files
4
+
5
+ ### settings.json
6
+
7
+ Global Claude Code settings. Version controlled.
8
+
9
+ Location: `~/.claude/settings.json`
10
+
11
+ ```json
12
+ {
13
+ "permissions": {
14
+ "allow": [],
15
+ "deny": [],
16
+ "additionalDirectories": []
17
+ }
18
+ }
19
+ ```
20
+
21
+ ### settings.local.json
22
+
23
+ Local overrides. Gitignored for machine-specific settings.
24
+
25
+ Location: `~/.claude/settings.local.json`
26
+
27
+ ### CLAUDE.md
28
+
29
+ Global instructions for Claude Code. Markdown format.
30
+
31
+ Location: `~/.claude/CLAUDE.md`
32
+
33
+ ## Permission Configuration
34
+
35
+ ### Allow Rules
36
+
37
+ Permit specific operations:
38
+
39
+ ```json
40
+ {
41
+ "permissions": {
42
+ "allow": [
43
+ "Bash(rbenv versions:*)",
44
+ "Bash(bundle:*)",
45
+ "Bash(gem:*)",
46
+ "Bash(bin/raictl:*)"
47
+ ]
48
+ }
49
+ }
50
+ ```
51
+
52
+ ### Deny Rules
53
+
54
+ Block access to sensitive paths:
55
+
56
+ ```json
57
+ {
58
+ "permissions": {
59
+ "deny": [
60
+ "Read(/home/user/.ssh/**)",
61
+ "Read(/home/user/.gnupg/**)",
62
+ "Read(/home/user/**/.env)",
63
+ "Read(/home/user/**/.env.*)",
64
+ "Read(/home/user/**/secrets/**)",
65
+ "Read(/home/user/**/*.pem)",
66
+ "Read(/home/user/**/*.key)"
67
+ ]
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### Additional Directories
73
+
74
+ Grant Claude Code access to specific directories:
75
+
76
+ ```json
77
+ {
78
+ "permissions": {
79
+ "additionalDirectories": [
80
+ "/home/user/projects",
81
+ "/var/log/myapp"
82
+ ]
83
+ }
84
+ }
85
+ ```
86
+
87
+ ## Configuration Hierarchy
88
+
89
+ Settings are merged in this order (later overrides earlier):
90
+
91
+ 1. `settings.json` (base)
92
+ 2. `settings.local.json` (local overrides)
93
+ 3. Group-level CLAUDE.md
94
+ 4. Project-level CLAUDE.md
95
+
96
+ ### Merge Behavior
97
+
98
+ | Type | Behavior |
99
+ |------|----------|
100
+ | Objects | Deep merge |
101
+ | Arrays | Union (deduplicated) |
102
+ | Scalars | Override |
103
+
104
+ ## .claudeignore
105
+
106
+ Patterns for files Claude should not access.
107
+
108
+ Location: `~/.claude/.claudeignore`
109
+
110
+ ```gitignore
111
+ # Credentials
112
+ .credentials.json
113
+ **/.env
114
+ **/*.pem
115
+ **/*.key
116
+
117
+ # Runtime data
118
+ history.jsonl
119
+ cache/
120
+ debug/
121
+ ```
122
+
123
+ ## Behaviour Files
124
+
125
+ YAML configuration files in `conf/behaviour/`.
126
+
127
+ ### Schema
128
+
129
+ ```yaml
130
+ name: string (required)
131
+ description: string (required)
132
+ version: string (semver format)
133
+ author: string
134
+ created_at: date
135
+ modified_at: date
136
+ modified_by: string
137
+ sensitive: boolean # exclude from API analysis during adopt
138
+ used_in: array of strings
139
+ rules: array (required, min 1 item)
140
+ - id: string (required)
141
+ description: string (required)
142
+ priority: integer (1-100)
143
+ enabled: boolean
144
+ ```
145
+
146
+ ### Example
147
+
148
+ ```yaml
149
+ name: code_review
150
+ description: Rules for code review assistance
151
+ version: 1.0.0
152
+ author: developer@neatnerds.be
153
+ created_at: "2025-01-17"
154
+ modified_at: "2025-01-17"
155
+ modified_by: developer@neatnerds.be
156
+ used_in:
157
+ - project_alpha
158
+ - project_beta
159
+ rules:
160
+ - id: review_security
161
+ description: Always check for security vulnerabilities
162
+ priority: 90
163
+ enabled: true
164
+ - id: review_tests
165
+ description: Verify test coverage for changes
166
+ priority: 80
167
+ enabled: true
168
+ ```
169
+
170
+ ### Adopt Redactions
171
+
172
+ Redaction patterns for the `adopt` command, stored in `conf/adopt_redactions.yml`:
173
+
174
+ ```yaml
175
+ ---
176
+ patterns:
177
+ - pattern: '\b[A-Z0-9._%+-]+@neatnerds\.be\b'
178
+ replacement: '[EMAIL-REDACTED]'
179
+ - pattern: 'NeatNerds'
180
+ replacement: '[COMPANY]'
181
+ ```
182
+
183
+ Patterns are applied to file contents before sending to the Claude API. Original files are never modified.
184
+
185
+ ### Adopt Cache
186
+
187
+ Analysis results are cached in `conf/adopt.cache.yml`, keyed on the SHA256 of all analyzed file contents. Delete this file to force a fresh analysis.
188
+
189
+ ## Environment-Specific Configuration
190
+
191
+ ### Development
192
+
193
+ ```json
194
+ {
195
+ "permissions": {
196
+ "allow": [
197
+ "Bash(bundle exec:*)",
198
+ "Bash(bin/raictl:*)"
199
+ ]
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### Production
205
+
206
+ More restrictive permissions for production environments:
207
+
208
+ ```json
209
+ {
210
+ "permissions": {
211
+ "allow": [],
212
+ "deny": [
213
+ "Bash(*)",
214
+ "Write(*)"
215
+ ]
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## Project-Level Configuration
221
+
222
+ ### `.rosett-ai/config.yml`
223
+
224
+ Created by `rai init --project`. Contains per-project settings:
225
+
226
+ ```yaml
227
+ project_name: my-project
228
+ default_engine: claude
229
+ ```
230
+
231
+ When rosett-ai detects a `.rosett-ai/` directory (by walking up from the current directory), it resolves behaviour and design files from `.rosett-ai/conf/` instead of the global installation.
232
+
233
+ ### Engine Management
234
+
235
+ Engines are installed as separate packages:
236
+
237
+ ```bash
238
+ apt install rosett-ai-engine-claude
239
+ apt install rosett-ai-engine-generic
240
+ ```
241
+
242
+ Configure the default engine globally:
243
+
244
+ ```bash
245
+ # In ~/.config/rosett-ai/config.yml
246
+ default_engine: claude
247
+ ```
248
+
249
+ Or per-project in `.rosett-ai/config.yml`, or per-command with `--engine`:
250
+
251
+ ```bash
252
+ rai compile --engine generic
253
+ ```
254
+
255
+ ### Environment Variables
256
+
257
+ | Variable | Purpose |
258
+ |----------|---------|
259
+ | `RAI_ORIGINAL_PWD` | Preserves working directory (set by `.deb` wrapper) |
260
+ | `RAI_ENGINE_PATH` | Custom engine discovery paths (colon-separated) |
261
+ | `RAI_LOG_LEVEL` | Log verbosity (`DEBUG`, `INFO`, `WARN`, `ERROR`) |
262
+
263
+ ## Validation
264
+
265
+ Validate configuration files:
266
+
267
+ ```bash
268
+ # Validate all config files
269
+ bin/raictl validate
270
+
271
+ # Validate behaviour files only
272
+ bin/raictl behaviour validate
273
+
274
+ # Validate design documents only
275
+ bin/raictl design validate
276
+ ```
277
+
278
+ ## Further Reading
279
+
280
+ - [REFERENCE.md](REFERENCE.md) - Complete CLI options and file locations reference
281
+ - [INSTALL.md](../INSTALL.md) - Installation guide