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/locales/en.yml ADDED
@@ -0,0 +1,571 @@
1
+ ---
2
+ en:
3
+ rosett_ai:
4
+ meta:
5
+ direction: ltr
6
+ language_name: "English"
7
+ language_name_native: "English"
8
+ cli:
9
+ version: "raictl version %{version}"
10
+ compile:
11
+ success: "Compiled %{count} rules successfully"
12
+ no_categories: "No compilable categories found."
13
+ simulate_prefix: "Would"
14
+ discovered_categories: "Discovered categories:"
15
+ would_update: "Would update: %{filename}"
16
+ would_create: "Would create: %{filename}"
17
+ would_remove_orphan: "Would remove orphan: %{filename}"
18
+ removed_orphan: "Removed orphan: %{filename}"
19
+ unchanged: "Unchanged: %{filename}"
20
+ created: "Created"
21
+ updated: "Updated"
22
+ wrote_lockfile: "Wrote lockfile: %{path}"
23
+ summary_title: "Compile Summary"
24
+ action: "Action"
25
+ count: "Count"
26
+ locale_simulate: "Would compile locale files to gettext and Qt formats"
27
+ locale_gettext_compiled: "Compiled %{count} gettext file(s)"
28
+ locale_qt_compiled: "Compiled %{count} Qt Linguist file(s)"
29
+ target_deprecated: "[DEPRECATED] --target is deprecated, use --engine instead"
30
+ target_deprecated_strict: "--target is deprecated. Use --engine instead (--strict mode)"
31
+ engine_and_target_conflict: "Cannot use both --engine and --target. Use --engine only."
32
+ config:
33
+ scope_not_found: "Scope file not found: %{path}. Valid scopes: %{scopes}"
34
+ no_scopes: "No scope files found in conf/claude_code/"
35
+ compiled: "Compiled %{source} → %{target}"
36
+ config_updated: "Updated %{source} → %{target}"
37
+ unchanged: "Unchanged: %{source}"
38
+ skipped: "Skipped: %{source}"
39
+ summary_title: "Config Compile Summary"
40
+ failed_compilation: "%{count} scope file(s) failed compilation"
41
+ failed_to_compile: "Failed to compile %{basename}"
42
+ no_config_compiler: "Engine '%{engine}' does not support config compilation"
43
+ engine_not_found: "Engine '%{engine}' not found. %{hint}"
44
+ no_engines_hint: "No engine plugins installed. Install with: apt install %{package}"
45
+ available_engines: "Available engines: %{engines}"
46
+ design:
47
+ no_documents: "No design documents to validate."
48
+ validation_failed: "Validation failed"
49
+ not_found: "Design document '%{name}' not found."
50
+ empty_file: "Design document is empty: %{path}"
51
+ no_documents_found: "No design documents found."
52
+ valid: "VALID"
53
+ invalid: "INVALID"
54
+ title: "Design Documents"
55
+ name: "Name"
56
+ design_version: "Version"
57
+ status: "Status"
58
+ domain: "Domain"
59
+ priority: "Priority"
60
+ intent: "Intent"
61
+ constraints: "Constraints"
62
+ acceptance_criteria: "Acceptance Criteria"
63
+ dependencies: "Dependencies"
64
+ examples: "Examples"
65
+ scenario: "Scenario:"
66
+ expected: "Expected:"
67
+ not_expected: "Not:"
68
+ anti_patterns: "Anti-Patterns"
69
+ preferences: "Preferences"
70
+ behaviour:
71
+ no_files: "No behaviour files found in conf/behaviour/"
72
+ no_files_short: "No behaviour files found."
73
+ not_found: "Behaviour '%{name}' not found."
74
+ no_validate: "No behaviour files to validate."
75
+ files_title: "Behaviour Files:"
76
+ table_title: "Behaviour Configuration"
77
+ already_exists: "Behaviour '%{name}' already exists at %{path}"
78
+ created: "Behaviour '%{name}' created successfully at %{path}"
79
+ updated: "Behaviour '%{name}' updated successfully."
80
+ deleted: "Behaviour '%{name}' deleted."
81
+ validation_failed_label: "Validation failed:"
82
+ referenced_in: "This behaviour is referenced in:"
83
+ delete_confirm: "Are you sure you want to delete '%{name}'?"
84
+ valid: "VALID"
85
+ invalid: "INVALID"
86
+ validation_failed: "Validation failed"
87
+ yaml_syntax_error: "Malformed YAML in %{path}: %{detail}"
88
+ adopt:
89
+ no_files: "No managed rule files found."
90
+ found_files: "Found %{count} managed rule file(s)"
91
+ sensitive_skipped: "Sensitive files skipped: %{count}"
92
+ sensitive_label: "(sensitive)"
93
+ local_checks: "Running local-only structural checks"
94
+ analyzing: "Analyzing rules..."
95
+ cached: "(cached)"
96
+ cache_hit: "Cache hit — checksum matched"
97
+ done: "Done"
98
+ failed: "Failed"
99
+ no_issues: "No issues found."
100
+ status_label: "Status: %{status} %{summary}"
101
+ sensitive_skipped_title: "Sensitive files (skipped from API analysis):"
102
+ error_prefix: "Error: %{message}"
103
+ backup:
104
+ success: "Backup created successfully"
105
+ destination: "Destination: %{path}"
106
+ no_scope: "Error: at least one of --global or --local must be given."
107
+ no_files: "No files found to back up."
108
+ creating: "Creating backup archive..."
109
+ compression_unavailable: "Compression '%{type}' is not available on this system."
110
+ backup_failed: "Backup failed: %{message}"
111
+ summary_title: "Backup Summary"
112
+ status_unchanged: "OK (unchanged)"
113
+ status_created: "Created"
114
+ status_updated: "Updated"
115
+ files_archived: "Files archived"
116
+ archive_size: "Archive size"
117
+ restore_not_found: "Archive not found: %{path}"
118
+ restore_not_file: "Not a file: %{path}"
119
+ restore_unknown_format: "Unknown archive format: %{ext}"
120
+ internal_only: "The '%{command}' command is only available inside the rosett-ai repository."
121
+ build_package_internal_only: "The 'build package' command is only available inside the rosett-ai repository."
122
+ build_engine:
123
+ no_gemspec: "No rosett-ai-engine-*.gemspec found in %{dir}. Run this from an engine directory or use --path."
124
+ multiple_gemspecs: "Multiple rosett-ai-engine-*.gemspec files found in %{dir}. Expected exactly one."
125
+ init:
126
+ no_scope: "Error: at least one of --global, --local, or --project must be given."
127
+ global_init: "Initializing global ~/.claude/ structure..."
128
+ local_init: "Initializing local .claude/ structure..."
129
+ project_init: "Initializing project .rosett-ai/ structure..."
130
+ project_exists: "Project structure already exists: %{path}"
131
+ compiling: "Compiling rules..."
132
+ done: "Done"
133
+ failed: "Failed"
134
+ init_failed: "Initialization failed: %{message}"
135
+ compile_skipped_hint: "Run 'raictl compile' after installing an engine plugin."
136
+ summary_title: "Initialization Summary"
137
+ item: "Item"
138
+ count: "Count"
139
+ dirs_created: "%{prefix} directories created"
140
+ files_copied: "%{prefix} files copied"
141
+ config_created: "Config file created: %{path}"
142
+ config_exists: "Config file exists: %{path}"
143
+ detected_engines_title: "Detected engines:"
144
+ detected: "detected"
145
+ not_detected: "not detected"
146
+ edit_config_hint: "Edit %{path} to set your default engine."
147
+ mcp_registered: "Registered rosett-ai MCP server in %{path}"
148
+ mcp_already_registered: "rosett-ai MCP server already registered"
149
+ mcp_skipped: "MCP registration skipped: %{reason}"
150
+ validate:
151
+ valid: "VALID"
152
+ invalid: "INVALID"
153
+ summary_title: "Validation Summary"
154
+ category: "Category"
155
+ files: "Files"
156
+ passed: "Passed"
157
+ failed_label: "Failed"
158
+ status: "Status"
159
+ ok: "OK"
160
+ fail: "FAIL"
161
+ total: "Total"
162
+ validation_failed: "Validation failed"
163
+ documentation:
164
+ no_updates: "No documentation updates needed."
165
+ scan_complete: "Scan complete!"
166
+ updating: "Updating documentation..."
167
+ done: "Done!"
168
+ pending_updates: "Pending documentation updates:"
169
+ status_title: "Documentation Status"
170
+ doc_files: "Documentation files: %{count}"
171
+ configured_locales: "Configured locales: %{count}"
172
+ undocumented: "Undocumented public methods"
173
+ not_in_behaviour_md: "Not documented in BEHAVIOUR.md"
174
+ gemfile_newer: "Gemfile newer than SETUP.md"
175
+ updating_api: "Updating API docs for %{file} (%{target_locale})"
176
+ updating_behaviour: "Updating behaviour docs for %{file} (%{target_locale})"
177
+ updating_setup: "Updating SETUP.md (%{target_locale})"
178
+ translate_source_missing: "Source file not found: %{path}"
179
+ translate_done: "Translated to %{path}"
180
+ reference:
181
+ stale: "Technical reference PDF is outdated (source files changed)"
182
+ missing: "Technical reference PDF does not exist"
183
+ compiling: "Compiling LaTeX technical reference..."
184
+ compiled: "Technical reference compiled: %{path}"
185
+ tools_missing: "LaTeX toolchain not available (missing: %{tools}). Skipping reference compilation."
186
+ tooling:
187
+ no_ci_files: "No GitLab CI YAML files found."
188
+ no_tooling_files: "No tooling files to validate."
189
+ not_found: "Tooling file '%{name}' not found."
190
+ valid: "VALID"
191
+ invalid: "INVALID"
192
+ ok: "OK"
193
+ fail: "FAIL"
194
+ ci_title: "GitLab CI YAML Validation"
195
+ ci_valid: "Valid"
196
+ ci_invalid: "Invalid"
197
+ version_title: "Version Consistency Check"
198
+ expected_version: "Expected version"
199
+ total_references: "Total references"
200
+ mismatches: "Mismatches"
201
+ mismatch: "MISMATCH"
202
+ missing: "MISSING"
203
+ conflict: "CONFLICT"
204
+ gem_title: "Gem Version Consistency"
205
+ gem_total: "Total gems"
206
+ gem_ok: "OK"
207
+ gem_problems: "Problems"
208
+ gem_stale_refs: "Stale references"
209
+ gem_stale_reference: "STALE"
210
+ gem_status_missing: "MISSING"
211
+ gem_status_conflict: "CONFLICT"
212
+ validation_failed: "Validation failed"
213
+ ci_validation_failed: "CI YAML validation failed"
214
+ version_check_failed: "Version consistency check failed"
215
+ license:
216
+ activate:
217
+ success: "License activated: %{tier} tier. You have access to premium content packs."
218
+ invalid: "Invalid license key: %{reason}"
219
+ status:
220
+ title: "License Status"
221
+ tier_label: "Tier"
222
+ valid_label: "Valid"
223
+ community: "No license key found. Running as Community tier (full software functionality)."
224
+ warning_prefix: "Warning"
225
+ deactivate:
226
+ success: "License deactivated. Reverted to Community tier."
227
+ not_found: "No license key found."
228
+ content:
229
+ list:
230
+ header: "Installed Content Packs"
231
+ available_header: "Available Content Packs"
232
+ no_packs: "No content packs installed."
233
+ name: "Name"
234
+ version_col: "Version"
235
+ tier: "Tier"
236
+ description: "Description"
237
+ install:
238
+ downloading: "Downloading %{name}..."
239
+ verifying: "Verifying signature..."
240
+ success: "Installed %{name} v%{version} (%{behaviours} behaviours, %{designs} designs)."
241
+ tampered: "Content pack signature invalid. Pack not installed."
242
+ tier_required: "%{name} requires %{required} tier. Your tier: %{current}."
243
+ not_found: "Content pack '%{name}' not found."
244
+ update:
245
+ checking: "Checking %{name}..."
246
+ success: "All content packs updated."
247
+ offline: "Cannot reach content server. Existing content packs unchanged."
248
+ release:
249
+ prepare:
250
+ success: "Release v%{version} prepared successfully."
251
+ next_steps: "Next steps: review the commit, then run 'bin/raictl release tag' to create tag v%{version}."
252
+ invalid_level: "Invalid release level '%{level}'. Valid levels: %{valid}"
253
+ dirty_tree: "Working tree has uncommitted changes. Commit or stash before releasing."
254
+ running_gates: "Running verification suite..."
255
+ gates_passed: "All verification gates passed."
256
+ gate_ok: "OK"
257
+ gate_fail: "FAILED"
258
+ gate_abort: "Verification suite failed (%{gate}). Fix issues before releasing."
259
+ version_bumped: "Version bumped: %{old} → %{new}"
260
+ changelog_updated: "CHANGELOG.md updated."
261
+ commit_created: "Release commit created for v%{version}."
262
+ git_add_failed: "Git add failed for release files (version.rb, CHANGELOG.md)."
263
+ git_commit_failed: "Git commit failed (pre-commit hook rejected?)."
264
+ tag:
265
+ success: "Tag %{tag} created."
266
+ exists: "Tag %{tag} already exists."
267
+ git_tag_failed: "Git tag %{tag} failed."
268
+ status:
269
+ title: "Release Status"
270
+ version_label: "Current version"
271
+ last_tag_label: "Last tag"
272
+ commits_label: "Commits since tag"
273
+ no_tags: "(none)"
274
+ build:
275
+ summary_title: "Build Summary"
276
+ build_id: "Build ID"
277
+ architecture: "Architecture"
278
+ ruby_version: "Ruby version"
279
+ stages: "Stages"
280
+ result: "Result"
281
+ output: "Output"
282
+ build_log: "Build log"
283
+ duration: "Duration"
284
+ success: "SUCCESS"
285
+ failed: "FAILED"
286
+ done: "Done"
287
+ engines:
288
+ list_title: "Available Engines"
289
+ detect_title: "Engine Detection"
290
+ status_title: "Engine Status"
291
+ name: "Name"
292
+ display_name: "Display Name"
293
+ version: "Version"
294
+ engine: "Engine"
295
+ check_type: "Check"
296
+ check_name: "Target"
297
+ status: "Status"
298
+ detected: "Detected"
299
+ default: "Default"
300
+ default_engine: "Default engine"
301
+ found: "found"
302
+ not_found: "not found"
303
+ yes: "yes"
304
+ no: "no"
305
+ no_detector: "n/a"
306
+ plugins_title: "Registered Plugin Engines"
307
+ no_plugins: "No plugin engines registered."
308
+ dbus:
309
+ status_title: "D-Bus Service Status"
310
+ not_running: "D-Bus service is not running"
311
+ start_hint: "Start with: %{command}"
312
+ already_running: "D-Bus service is already running"
313
+ starting: "Starting D-Bus service..."
314
+ press_ctrl_c: "Press Ctrl+C to stop"
315
+ started_background: "D-Bus service started in background (PID: %{pid})"
316
+ stopped: "D-Bus service stopped"
317
+ start_failed: "Failed to start D-Bus service"
318
+ bus_unavailable: "D-Bus session bus is not available"
319
+ bus_unavailable_hint: "Ensure D-Bus is running and DBUS_SESSION_BUS_ADDRESS is set."
320
+ error_querying: "Error querying service: %{message}"
321
+ detect_title: "Compositor Detection"
322
+ detected: "Detected"
323
+ adapter: "Adapter"
324
+ env_title: "Environment Variables"
325
+ adapter_none: "None (unknown compositor)"
326
+ property: "Property"
327
+ value: "Value"
328
+ variable: "Variable"
329
+ not_set: "(not set)"
330
+ missing_dependency: "Desktop features require the ruby-dbus gem. Install with: apt install rosett-ai-gtk4"
331
+ desktop:
332
+ status_title: "Desktop Integration Status"
333
+ gtk4_label: "GTK4/Adwaita"
334
+ dbus_label: "D-Bus Service"
335
+ available: "Available"
336
+ not_installed: "Not installed"
337
+ running: "Running"
338
+ not_running: "Not running"
339
+ to_enable_gtk4: "To enable GTK4 support:"
340
+ install_adwaita: "gem install adwaita"
341
+ install_pkg: "Or: apt install rosett-ai-gtk4"
342
+ to_start_dbus: "To start D-Bus service:"
343
+ unavailable: "GTK4/Adwaita is not available."
344
+ plugins:
345
+ title: "Installed Plugins"
346
+ no_plugins: "No %{type} plugins registered."
347
+ name: "Name"
348
+ display_name: "Display Name"
349
+ version: "Version"
350
+ type: "Type"
351
+ installing: "Installing %{package}..."
352
+ installed: "Successfully installed %{package}."
353
+ install_failed: "Failed to install %{package}."
354
+ removing: "Removing %{package}..."
355
+ removed: "Successfully removed %{package}."
356
+ remove_failed: "Failed to remove %{package}."
357
+ invalid_type: "Invalid plugin type: %{type}. Valid types: engine, gui, mcp"
358
+ composition:
359
+ composing: "Composing %{count} behaviour file(s)..."
360
+ scope_resolved: " %{name}: scope=%{scope} (%{count} rules)"
361
+ conflict_warning: "Warning: %{message}"
362
+ conflict_error: "Error: %{message}"
363
+ no_conflicts: "No rule ID conflicts detected."
364
+ conflicts_title: "Rule ID Conflicts"
365
+ circular_dependency: "Circular dependency detected: %{cycle}"
366
+ lockfile_written: "Lockfile written: %{path}"
367
+ lockfile_stale: "Behaviour files changed since lockfile — run 'bin/raictl compile --vendor' to update."
368
+ lockfile_frozen: "Using frozen composition from lockfile."
369
+ sensitive_excluded: "Excluding %{count} sensitive rule(s) from %{target} target"
370
+ trace_header: "Composition Trace:"
371
+ trace_entry: " #%{position}: %{rule_id} ← %{behaviour} (scope=%{scope}, priority=%{priority})"
372
+ security_override: "Cannot override security rule %{rule_id} with non-security rule from %{behaviour}"
373
+ provenance:
374
+ init_created: "Provenance file created: %{path}"
375
+ init_exists: "Provenance file already exists: %{path}"
376
+ entry_added: "Provenance entry added for commit %{commit}"
377
+ validate_valid: "Provenance file is valid (%{count} entries)"
378
+ validate_invalid: "Provenance validation failed:"
379
+ validate_error: " - %{error}"
380
+ show_commit_title: "Provenance for commit %{commit}"
381
+ show_file_title: "Provenance for file %{path}"
382
+ show_no_entries: "No provenance entries found"
383
+ show_entry: " %{role}: %{tool} (%{timestamp})"
384
+ file_not_found: "Provenance file not found. Run 'raictl provenance init' first."
385
+ file_too_large: "Provenance file exceeds size limit"
386
+ trailer_generated: "Generated %{count} commit trailer(s)"
387
+ ai_config:
388
+ compile_start: "Compiling AI configuration for engine '%{engine}'..."
389
+ model_resolved: " %{task}: %{tier} -> %{model}"
390
+ unsupported_warning: "Warning: %{message}"
391
+ compile_complete: "AI configuration compiled (%{count} settings)"
392
+ validate_valid: "AI configuration is valid"
393
+ validate_invalid: "AI configuration validation failed:"
394
+ validate_error: " - %{error}"
395
+ fallback_warning: "Warning: %{message}"
396
+ strict_error: "Error (strict mode): %{message}"
397
+ no_config: "No AI configuration found at %{path}"
398
+ authorship:
399
+ status_title: "Authorship Disclosure Status"
400
+ disclosure_level: "Disclosure level: %{level}"
401
+ no_provenance: "No provenance data available"
402
+ recent_attributions: "Recent AI attributions:"
403
+ no_attributions: "No AI attributions found"
404
+ self_review_warning: "Self-review detected: reviewer matches commit author"
405
+ self_review_error: "Self-review rejected: reviewer must differ from commit author (--strict)"
406
+ attribution_compiled: "Authorship attribution compiled for %{engine}"
407
+ attribution_skipped: "Authorship attribution skipped (disclosure: none)"
408
+ engine_no_trailers: "Engine '%{engine}' does not support commit trailers"
409
+ policy:
410
+ init_created: "Policy directory created: %{path}"
411
+ init_exists: "Policy directory already exists: %{path}"
412
+ validate_valid: "Policy file is valid"
413
+ validate_invalid: "Policy validation failed:"
414
+ validate_error: " - %{error}"
415
+ show_title: "Active Policies"
416
+ show_tier: "Tier: %{tier}"
417
+ show_scope: "Scope: %{scope}"
418
+ show_deny_patterns: "Deny list: %{count} patterns"
419
+ show_protected_files: "Protected files: %{count}"
420
+ audit_title: "Policy Compliance Audit"
421
+ audit_deny_patterns: "Deny list patterns: %{count}"
422
+ audit_denied_files: "Denied files: %{count}"
423
+ audit_protected_files: "Protected files: %{count}"
424
+ audit_opted_out: "Opted-out files: %{count}"
425
+ audit_compliant: "Compliance status: PASS"
426
+ tighten_only_error: "Cannot remove deny-list pattern from parent policy — tighten only"
427
+ no_policies: "No policy files found. Run 'raictl policy init' first."
428
+ doctor:
429
+ unexpected_error: "Check failed unexpectedly — see error details above"
430
+ header:
431
+ check: "Check"
432
+ status: "Status"
433
+ details: "Details"
434
+ summary:
435
+ all_pass: "All %{total} checks passed"
436
+ warnings: "%{total} checks completed, %{warn} warning(s)"
437
+ failures: "%{total} checks completed, %{fail} failure(s)"
438
+ ruby_version:
439
+ match: "Ruby %{version}"
440
+ mismatch: "Running Ruby %{actual}, expected %{expected}"
441
+ install: "Install Ruby %{version} via rbenv: rbenv install %{version}"
442
+ no_file: "No .ruby-version file found"
443
+ create_file: "Create .ruby-version with the expected Ruby version"
444
+ gem_dependencies:
445
+ all_installed: "All dependencies installed (%{count} gems loaded)"
446
+ missing: "Missing gems: %{gems}"
447
+ no_lockfile: "No Gemfile.lock found"
448
+ run_bundle: "Run 'bundle install' to install dependencies"
449
+ file_permissions:
450
+ writable: "All configuration directories are writable"
451
+ not_writable: "Directories not writable: %{dirs}"
452
+ fix_permissions: "Fix directory permissions with: chmod u+w <dir>"
453
+ dbus_availability:
454
+ available: "D-Bus session bus available"
455
+ unavailable: "D-Bus session bus not available"
456
+ install_dbus: "Install D-Bus: apt install dbus and ensure DBUS_SESSION_BUS_ADDRESS is set"
457
+ engine_detection:
458
+ found: "Engines detected: %{engines}"
459
+ none_found: "No engines detected"
460
+ install_engine: "Install an engine: apt install rosett-ai-engine-claude (or another engine)"
461
+ cache_health:
462
+ writable: "Cache directory writable: %{path}"
463
+ not_found: "Cache directory not found: %{path}"
464
+ create_dir: "Create cache directory: mkdir -p %{path}"
465
+ not_writable: "Cache directory not writable: %{path}"
466
+ fix_permissions: "Fix cache permissions: chmod u+w %{path}"
467
+ stale_home_nncc:
468
+ clean: "No stale .rosett-ai/ directory at $HOME"
469
+ found: "Stale .rosett-ai/ directory at %{path} contains %{count} behaviour file(s)"
470
+ empty: "Stale .rosett-ai/ directory at %{path} (no behaviour files)"
471
+ remove: "Review and remove the stale directory: rm -rf %{path}"
472
+ stale_config_nncc:
473
+ clean: "No stale ~/.config/nncc/ directory found"
474
+ found: "Stale ~/.config/nncc/ directory at %{path} contains %{count} file(s)"
475
+ empty: "Stale ~/.config/nncc/ directory at %{path} (empty)"
476
+ migrate: "Run raictl migrate to move legacy config to ~/.config/rosett-ai/"
477
+ comply:
478
+ summary:
479
+ all_pass: "%{total} checks: all passed"
480
+ warnings: "%{total} checks: %{pass} passed, %{warn} warnings"
481
+ failures: "%{total} checks: %{pass} passed, %{fail} failures"
482
+ header:
483
+ id: "ID"
484
+ status: "Status"
485
+ description: "Description"
486
+ details: "Details"
487
+ workflow:
488
+ no_files: "No workflow files found."
489
+ list_title: "Available Workflows"
490
+ name: "Name"
491
+ version: "Version"
492
+ steps_count: "Steps"
493
+ path: "Path"
494
+ valid: "Workflow '%{name}' is valid."
495
+ invalid: "Workflow '%{name}' has validation errors:"
496
+ not_found: "Workflow '%{name}' not found."
497
+ simulate_header: "Dry-run for workflow '%{name}':"
498
+ run_title: "Workflow: %{name}"
499
+ step_label: "Step"
500
+ status_label: "Status"
501
+ message_label: "Message"
502
+ duration_label: "Duration"
503
+ run_summary: "%{total} steps: %{pass} passed, %{fail} failed, %{skip} skipped"
504
+ project:
505
+ info_title: "Project Information"
506
+ status_title: "Project Status"
507
+ name_label: "Project"
508
+ engine_label: "Engine"
509
+ template_label: "Template"
510
+ behaviours_label: "Behaviours"
511
+ designs_label: "Designs"
512
+ healthy: "Project is healthy."
513
+ unhealthy: "Project has issues:"
514
+ no_templates: "No project templates available."
515
+ templates_title: "Available templates:"
516
+ apply_summary: "%{applied} file(s) applied, %{skipped} file(s) skipped."
517
+ no_drift: "No drift detected."
518
+ drift_detected: "%{count} file(s) with drift detected."
519
+ sync_summary: "%{updated} file(s) updated, %{conflicts} conflict(s)."
520
+ simulate_prefix: "(simulate) "
521
+ retrofit:
522
+ no_engines: "No retrofit engine adapters available."
523
+ engines_title: "Available retrofit engines:"
524
+ simulate_prefix: "(simulate) "
525
+ summary: "%{generated} file(s) generated, %{skipped} file(s) skipped, %{errors} error(s)."
526
+ hooks:
527
+ no_config: "No hooks configured in .rosett-ai/config.yml"
528
+ no_hooks_installed: "No rai hooks are currently installed."
529
+ detected_managers: "Detected hook managers: %{managers}"
530
+ install_summary: "Installed %{count} hook(s)."
531
+ uninstall_summary: "Removed %{count} hook(s)."
532
+ mcp:
533
+ no_servers: "No MCP servers configured."
534
+ serve_started: "MCP server started on stdio transport."
535
+ audit_complete: "Audit complete: %{total} server(s) checked."
536
+ feature_flags:
537
+ not_enabled: "'raictl %{feature}' is experimental and not enabled. Enable with: %{env_example}"
538
+ unknown_flag: "Warning: unknown experimental feature '%{flag}'. Known features: %{known}"
539
+ validation:
540
+ required: "%{field} is required"
541
+ invalid_format: "%{field} has invalid format"
542
+ schema_error: "Schema validation failed: %{message}"
543
+ errors:
544
+ compile_error: "Compilation failed: %{message}"
545
+ yaml_syntax: "YAML syntax error in %{file}: %{message}"
546
+ unknown_target: "Unknown target: %{name}"
547
+ permission_denied: "Permission denied: %{path}"
548
+ error_handler:
549
+ error_prefix: "Error [%{code}]"
550
+ why_prefix: "Why"
551
+ fix_prefix: "Fix"
552
+ type_prefix: "Type"
553
+ backtrace_header: "Backtrace (first 10 frames)"
554
+ exit_codes:
555
+ success: "Success"
556
+ general: "General error"
557
+ validation: "Validation error"
558
+ config: "Configuration error"
559
+ permission: "Permission error"
560
+ dependency: "Dependency error"
561
+ deprecation:
562
+ warning: "[DEPRECATED] %{feature} is deprecated since v%{since}, use %{replacement} instead. Will be removed in v%{removal}."
563
+ completion:
564
+ bash: "Generated bash completion script"
565
+ zsh: "Generated zsh completion script"
566
+ fish: "Generated fish completion script"
567
+ install_success: "Installed %{shell} completion to %{path}"
568
+ unsupported_shell: "Shell %{shell} is not supported — available: %{available}"
569
+ migration:
570
+ missing_field: "Migration needed: %{file} is missing required field '%{field}'."
571
+ deprecated_field: "Migration needed: %{file} uses deprecated field '%{field}', use '%{replacement}' instead."