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
data/doc/USAGE.md ADDED
@@ -0,0 +1,545 @@
1
+ # Rosett-AI - Usage Guide
2
+
3
+ ## CLI Commands
4
+
5
+ The `rosett-ai` CLI provides various commands for managing AI-assisted development configurations.
6
+
7
+ ### Getting Help
8
+
9
+ ```bash
10
+ # Show all commands
11
+ bin/raictl help
12
+
13
+ # Show help for a specific command
14
+ bin/raictl help behaviour
15
+ bin/raictl behaviour help display
16
+ ```
17
+
18
+ ### Version
19
+
20
+ ```bash
21
+ bin/raictl version
22
+ # or
23
+ bin/raictl -v
24
+ bin/raictl --version
25
+ ```
26
+
27
+ ## Documentation Commands
28
+
29
+ Manage project documentation.
30
+
31
+ ### Update Documentation
32
+
33
+ Scan for changes and update documentation files:
34
+
35
+ ```bash
36
+ # Basic update
37
+ bin/raictl documentation update
38
+
39
+ # Dry run (show what would change)
40
+ bin/raictl documentation update --dry-run
41
+
42
+ # Update for specific locale
43
+ bin/raictl documentation update --locale=nl
44
+
45
+ # Update all locales
46
+ bin/raictl documentation update --all-locales
47
+ ```
48
+
49
+ ### Check Documentation Status
50
+
51
+ ```bash
52
+ bin/raictl documentation status
53
+ ```
54
+
55
+ ## Behaviour Commands
56
+
57
+ Manage behaviour configuration files.
58
+
59
+ ### Display Behaviours
60
+
61
+ Show all configured behaviours in a table:
62
+
63
+ ```bash
64
+ # Table format (default)
65
+ bin/raictl behaviour display
66
+
67
+ # JSON format
68
+ bin/raictl behaviour display --format=json
69
+
70
+ # YAML format
71
+ bin/raictl behaviour display --format=yaml
72
+ ```
73
+
74
+ ### List Behaviours
75
+
76
+ ```bash
77
+ bin/raictl behaviour list
78
+ ```
79
+
80
+ ### Show Specific Behaviour
81
+
82
+ ```bash
83
+ bin/raictl behaviour show my_behaviour
84
+ ```
85
+
86
+ ### Validate Behaviours
87
+
88
+ ```bash
89
+ # Validate all behaviour files
90
+ bin/raictl behaviour validate
91
+
92
+ # Validate specific behaviour
93
+ bin/raictl behaviour validate my_behaviour
94
+ ```
95
+
96
+ ### Manage Behaviours
97
+
98
+ #### Add New Behaviour
99
+
100
+ ```bash
101
+ # Interactive mode
102
+ bin/raictl behaviour manage add new_behaviour
103
+
104
+ # With description
105
+ bin/raictl behaviour manage add new_behaviour --description="My new behaviour rules"
106
+
107
+ # With author
108
+ bin/raictl behaviour manage add new_behaviour --author="john.doe"
109
+ ```
110
+
111
+ #### Modify Existing Behaviour
112
+
113
+ ```bash
114
+ bin/raictl behaviour manage modify existing_behaviour
115
+ ```
116
+
117
+ This opens the behaviour file in your `$EDITOR` for editing.
118
+
119
+ #### Delete Behaviour
120
+
121
+ ```bash
122
+ # With confirmation prompt
123
+ bin/raictl behaviour manage delete old_behaviour
124
+
125
+ # Skip confirmation
126
+ bin/raictl behaviour manage delete old_behaviour --force
127
+ ```
128
+
129
+ ## Init Commands
130
+
131
+ Initialize Claude Code directory structure (idempotent).
132
+
133
+ ### Global Setup
134
+
135
+ ```bash
136
+ # Set up ~/.claude/ structure
137
+ bin/raictl init --global
138
+
139
+ # Without compilation
140
+ bin/raictl init --global --no-compile
141
+ ```
142
+
143
+ ### Local Setup
144
+
145
+ ```bash
146
+ # Set up .claude/ in current project
147
+ bin/raictl init --local
148
+
149
+ # Without compilation
150
+ bin/raictl init --local --no-compile
151
+ ```
152
+
153
+ ### Project Setup
154
+
155
+ ```bash
156
+ # Set up .rosett-ai/ project structure (config.yml, conf/behaviour/, conf/design/)
157
+ bin/raictl init --project
158
+ ```
159
+
160
+ ### Both
161
+
162
+ ```bash
163
+ # Set up both global and local structures
164
+ bin/raictl init --global --local
165
+ ```
166
+
167
+ ### Flags
168
+
169
+ | Flag | Effect |
170
+ |------|--------|
171
+ | `--global` | Set up global `~/.claude/` structure |
172
+ | `--local` | Set up project-local `.claude/` structure |
173
+ | `--project` | Set up `.rosett-ai/` project structure with `config.yml` |
174
+ | `--no-compile` | Skip the compile step after setup |
175
+
176
+ ## Backup Commands
177
+
178
+ Back up Claude Code directory structure and generated assets.
179
+
180
+ ### Create Backup
181
+
182
+ ```bash
183
+ # Back up global ~/.claude/ structure
184
+ bin/raictl backup --global
185
+
186
+ # Back up project-local .claude/ and CLAUDE.md
187
+ bin/raictl backup --local
188
+
189
+ # Back up both scopes
190
+ bin/raictl backup --global --local
191
+
192
+ # Use tar.gz compression
193
+ bin/raictl backup --global --compression=tar.gz
194
+
195
+ # Use tar.xz compression
196
+ bin/raictl backup --global --compression=tar.xz
197
+
198
+ # Set compression level (0-9)
199
+ bin/raictl backup --global --compression=tar.gz --compression-ratio=9
200
+
201
+ # Custom destination
202
+ bin/raictl backup --global --destination=/path/to/backup.zip
203
+
204
+ # URI-prefixed destination
205
+ bin/raictl backup --global --destination=file:///tmp/backup.tar.gz
206
+ ```
207
+
208
+ ### Flags
209
+
210
+ | Flag | Default | Description |
211
+ |------|---------|-------------|
212
+ | `--global` | `false` | Back up `~/.claude/` structure |
213
+ | `--local` | `false` | Back up project `.claude/` and `CLAUDE.md` |
214
+ | `--compression` | `zip` | Compression algorithm: `zip`, `tar.gz`, `tar.xz` |
215
+ | `--compression-ratio` | (default) | Compression level (0-9, if supported) |
216
+ | `--destination` | `nncc_backup_<date>.<ext>` | Output path or URI |
217
+
218
+ ### Supported Compression Algorithms
219
+
220
+ | Algorithm | Extension | Availability |
221
+ |-----------|-----------|--------------|
222
+ | `zip` | `.zip` | Requires `rubyzip` gem (bundled) |
223
+ | `tar.gz` | `.tar.gz` | Always available (Ruby stdlib) |
224
+ | `tar.xz` | `.tar.xz` | Requires `xz` command on system |
225
+
226
+ ### Destination URI Schemes
227
+
228
+ | Scheme | Status |
229
+ |--------|--------|
230
+ | `file://` | Fully supported |
231
+ | `s3://` | Planned (not yet implemented) |
232
+ | `ssh://` | Planned (not yet implemented) |
233
+ | `bup://` | Planned (not yet implemented) |
234
+ | `https://` | Planned (not yet implemented) |
235
+
236
+ ### Idempotent Behaviour
237
+
238
+ Running backup twice with the same content will report "OK (unchanged)" and skip re-creation. Changed content will overwrite and report "Updated".
239
+
240
+ ## Build Commands
241
+
242
+ Build and package rosett-ai for distribution as a self-contained Debian package.
243
+
244
+ The build pipeline uses [fpm](https://github.com/jordansissel/fpm) for packaging and
245
+ [ruby-build](https://github.com/rbenv/ruby-build) to compile an embedded Ruby runtime.
246
+ The resulting `.deb` includes everything needed to run rosett-ai — no system Ruby required.
247
+
248
+ ### Build Package
249
+
250
+ ```bash
251
+ # Build with defaults (reads Ruby version from .ruby-version)
252
+ bin/raictl build package
253
+
254
+ # Build with verbose output
255
+ bin/raictl build package --verbose
256
+
257
+ # Clean staging directory before building
258
+ bin/raictl build package --clean
259
+
260
+ # Override Ruby version
261
+ bin/raictl build package --ruby-version 3.3.10
262
+
263
+ # Build for a specific architecture
264
+ bin/raictl build package --architecture arm64
265
+
266
+ # Custom output directory
267
+ bin/raictl build package --output-dir /tmp/pkg
268
+
269
+ # Set build iteration (release number)
270
+ bin/raictl build package --build-iteration 2
271
+
272
+ # Combined flags
273
+ bin/raictl build package --clean --verbose --architecture amd64
274
+ ```
275
+
276
+ ### Flags
277
+
278
+ | Flag | Type | Default | Description |
279
+ |------|------|---------|-------------|
280
+ | `--verbose` | bool | `false` | Show detailed build output |
281
+ | `--clean` | bool | `false` | Clean staging directory before building |
282
+ | `--ruby-version` | string | `.ruby-version` | Ruby version to compile |
283
+ | `--architecture` | string | auto-detect | Target architecture (amd64, arm64) |
284
+ | `--output-dir` | string | `pkg` | Directory for the produced .deb file |
285
+ | `--build-iteration` | numeric | `1` | Package build iteration (release number) |
286
+ | `--variant` | string | `core` | Package variant: `core`, `gtk4`, `qt6` |
287
+
288
+ Run `bin/raictl build help package` for the full list.
289
+
290
+ ### Build Pipeline
291
+
292
+ The build proceeds through these stages:
293
+
294
+ 1. **Validate** — checks that `ruby-build`, `fpm`, `fakeroot`, `dpkg-deb`, and `rsync` are available
295
+ 2. **Compile Ruby** — runs `ruby-build` to install Ruby into `tmp/staging/opt/rosett-ai/embedded/`
296
+ 3. **Sync application** — copies source tree (excluding dev/test/CI files) to `tmp/staging/opt/rosett-ai/app/`
297
+ 4. **Install gems** — runs `bundle install --deployment` using the embedded Ruby
298
+ 5. **Install wrapper** — copies `packaging/wrapper.sh` as `/opt/rosett-ai/bin/raictl`
299
+ 6. **Package** — invokes `fpm` to produce a `.deb` with maintainer scripts and xz compression
300
+
301
+ ### Package Layout
302
+
303
+ | Path | Contents |
304
+ |------|----------|
305
+ | `/opt/rosett-ai/embedded/` | Compiled Ruby runtime |
306
+ | `/opt/rosett-ai/app/` | Application source and vendored gems |
307
+ | `/opt/rosett-ai/bin/raictl` | Wrapper script |
308
+ | `/opt/rosett-ai/etc/` | Default configuration files |
309
+ | `/etc/rosett-ai/` | System configuration (created by postinst) |
310
+ | `/usr/local/bin/raictl` | Symlink (created by postinst) |
311
+
312
+ ### APT Lifecycle
313
+
314
+ | Operation | Behaviour |
315
+ |-----------|-----------|
316
+ | `dpkg -i nncc_*.deb` | Installs to `/opt/rosett-ai`, creates symlink and `/etc/rosett-ai/` |
317
+ | `dpkg -r rosett-ai` | Removes files but preserves `/etc/rosett-ai/` |
318
+ | `dpkg --purge rosett-ai` | Removes everything including `/etc/rosett-ai/` |
319
+
320
+ ### Build Dependencies
321
+
322
+ These tools must be available on the build host:
323
+
324
+ | Tool | Package | Purpose | Reference |
325
+ |------|---------|---------|-----------|
326
+ | `ruby-build` | (manual install) | Compile Ruby from source | [github.com/rbenv/ruby-build](https://github.com/rbenv/ruby-build) |
327
+ | `fpm` | `gem install fpm` | Create .deb packages | [github.com/jordansissel/fpm](https://github.com/jordansissel/fpm) |
328
+ | `fakeroot` | `fakeroot` | Simulate root for packaging | [wiki.debian.org/FakeRoot](https://wiki.debian.org/FakeRoot) |
329
+ | `dpkg-deb` | `dpkg-dev` | Low-level .deb manipulation | [man7.org/dpkg-deb](https://man7.org/linux/man-pages/man1/dpkg-deb.1.html) |
330
+ | `rsync` | `rsync` | Efficient file synchronisation | [rsync.samba.org](https://rsync.samba.org/) |
331
+
332
+ ### Runtime Dependencies (declared in .deb)
333
+
334
+ | Package | Purpose |
335
+ |---------|---------|
336
+ | `libc6` | GNU C Library |
337
+ | `libssl3` | OpenSSL shared libraries |
338
+ | `zlib1g` | Compression library |
339
+ | `libyaml-0-2` | YAML parsing (required by Psych gem) |
340
+
341
+ ## Compile with Different Engines
342
+
343
+ raictl supports 10 compilation engines. Use `--engine` to select:
344
+
345
+ ```bash
346
+ # Claude Code (default)
347
+ bin/raictl compile --engine claude
348
+
349
+ # Generic AI assistant
350
+ bin/raictl compile --engine generic
351
+
352
+ # AGENTS.md vendor-neutral format
353
+ bin/raictl compile --engine agents_md
354
+
355
+ # Local model engines
356
+ bin/raictl compile --engine ollama
357
+ bin/raictl compile --engine gpt_neox
358
+
359
+ # CLI-based engines (subprocess execution)
360
+ bin/raictl compile --engine goose
361
+ bin/raictl compile --engine aider
362
+
363
+ # IDE-integrated engines
364
+ bin/raictl compile --engine cursor
365
+ bin/raictl compile --engine copilot
366
+ bin/raictl compile --engine windsurf
367
+ ```
368
+
369
+ ### Engine Detection
370
+
371
+ ```bash
372
+ # List all known engines
373
+ bin/raictl engines list
374
+
375
+ # Detect installed engines on the system
376
+ bin/raictl engines detect
377
+
378
+ # Show default engine and detection status
379
+ bin/raictl engines status
380
+ ```
381
+
382
+ ### Quorum (Multi-Engine Analysis)
383
+
384
+ ```bash
385
+ # Analyze rules across multiple engines
386
+ bin/raictl adopt --api --quorum
387
+ ```
388
+
389
+ ## D-Bus and Desktop Commands
390
+
391
+ Desktop features require the `rosett-ai-gtk4` package.
392
+
393
+ ### D-Bus Service
394
+
395
+ ```bash
396
+ # Start the session bus service
397
+ bin/raictl dbus start
398
+
399
+ # Stop the service
400
+ bin/raictl dbus stop
401
+ ```
402
+
403
+ ### GTK4 Desktop Application
404
+
405
+ ```bash
406
+ # Launch the GTK4 desktop app
407
+ bin/raictl desktop gtk4
408
+ ```
409
+
410
+ ## Adopt Commands
411
+
412
+ Analyze compiled rule files for inconsistencies, conflicts, harmful content, duplicates, and other issues.
413
+
414
+ ### Analyze Rules
415
+
416
+ ```bash
417
+ # Local-only structural checks (default)
418
+ bin/raictl adopt
419
+
420
+ # Verbose output with processing details
421
+ bin/raictl adopt --verbose
422
+
423
+ # Show detailed explanations for each finding
424
+ bin/raictl adopt --elaborate
425
+
426
+ # Enable remote API analysis
427
+ bin/raictl adopt --api
428
+
429
+ # Combined flags
430
+ bin/raictl adopt --api --elaborate --verbose
431
+ ```
432
+
433
+ ### Flags
434
+
435
+ | Flag | Effect |
436
+ |------|--------|
437
+ | `--api` | Enable remote API analysis (default: local only) |
438
+ | `--verbose` | Show file counts, checksums, cache status, skipped files |
439
+ | `--elaborate` | Add explanation column to findings table |
440
+ | `--quorum` | Multi-engine analysis (requires `--api`) |
441
+
442
+ ### Environment Variables
443
+
444
+ | Variable | Purpose | Default |
445
+ |----------|---------|---------|
446
+ | `ANTHROPIC_API_KEY` | API key for Claude analysis | (required for API mode) |
447
+ | `ANTHROPIC_API_BASE_URL` | Custom API endpoint (Bedrock/Vertex/proxy) | `https://api.anthropic.com` |
448
+
449
+ ### Privacy Controls
450
+
451
+ 1. Mark behaviour files as `sensitive: true` to exclude from API analysis
452
+ 2. Configure redaction patterns in `conf/adopt_redactions.yml`
453
+ 3. Set `ANTHROPIC_API_BASE_URL` for private endpoints
454
+ 4. Omit `--api` flag to stay local-only (default)
455
+
456
+ ## Rake Tasks
457
+
458
+ Alternative access via Rake:
459
+
460
+ ```bash
461
+ # Update documentation
462
+ bundle exec rake docs:update
463
+
464
+ # Check documentation status
465
+ bundle exec rake docs:status
466
+
467
+ # Validate behaviours
468
+ bundle exec rake behaviour:validate
469
+
470
+ # List behaviours
471
+ bundle exec rake behaviour:list
472
+ ```
473
+
474
+ ## Environment Variables
475
+
476
+ | Variable | Purpose | Default |
477
+ |----------|---------|---------|
478
+ | `EDITOR` | Editor for behaviour files | `vim` |
479
+ | `USER` | Default author for new behaviours | system user |
480
+ | `ANTHROPIC_API_KEY` | API key for `adopt` command | (required for API mode) |
481
+ | `ANTHROPIC_API_BASE_URL` | Custom API endpoint for `adopt` | `https://api.anthropic.com` |
482
+
483
+ ## Exit Codes
484
+
485
+ | Code | Meaning |
486
+ |------|---------|
487
+ | 0 | Success |
488
+ | 1 | Validation failed or command error |
489
+
490
+ ## Examples
491
+
492
+ ### Complete Workflow
493
+
494
+ ```bash
495
+ # 1. Create a new behaviour
496
+ bin/raictl behaviour manage add code_review --description="Code review guidelines"
497
+
498
+ # 2. Edit the created file in $EDITOR
499
+ # Add your rules...
500
+
501
+ # 3. Validate the behaviour
502
+ bin/raictl behaviour validate code_review
503
+
504
+ # 4. View all behaviours
505
+ bin/raictl behaviour display
506
+
507
+ # 5. Update documentation
508
+ bin/raictl documentation update
509
+ ```
510
+
511
+ ## Tooling Commands
512
+
513
+ Validate CI/CD configuration files.
514
+
515
+ ### Validate GitLab CI YAML
516
+
517
+ Validates all GitLab CI YAML files (`.gitlab-ci.yml` and `.gitlab-ci-files/**/*.yml`) for syntax errors. Uses AST-only parsing to accept GitLab CI custom tags like `!reference` while catching genuine syntax issues.
518
+
519
+ ```bash
520
+ # Validate (errors only)
521
+ bin/raictl tooling validate-ci-yaml
522
+
523
+ # Validate with all file results
524
+ bin/raictl tooling validate-ci-yaml --verbose
525
+
526
+ # Validate a different project directory
527
+ bin/raictl tooling validate-ci-yaml --project-dir=/path/to/project
528
+ ```
529
+
530
+ ### Flags
531
+
532
+ | Flag | Default | Description |
533
+ |------|---------|-------------|
534
+ | `--verbose` | `false` | Show all validated files, not just errors |
535
+ | `--project-dir` | current directory | Project directory to scan |
536
+
537
+ ### CI/CD Integration
538
+
539
+ ```bash
540
+ # In CI pipeline
541
+ bin/raictl behaviour validate || exit 1
542
+ bin/raictl tooling validate-ci-yaml || exit 1
543
+ bundle exec rspec
544
+ bundle exec rubocop
545
+ ```