rosett-ai 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. checksums.yaml +7 -0
  2. data/.ai-provenance.yml +119 -0
  3. data/.debride_whitelist +186 -0
  4. data/.fasterer.yml +29 -0
  5. data/.mdl_style.rb +10 -0
  6. data/.mdlrc +3 -0
  7. data/.mutant.yml +49 -0
  8. data/.namespace-allowlist +42 -0
  9. data/.reek.yml +1040 -0
  10. data/.rosett-ai/config.yml +3 -0
  11. data/.rspec +5 -0
  12. data/.rubocop.yml +380 -0
  13. data/.ruby-version +1 -0
  14. data/.yamllint +51 -0
  15. data/.yardopts +12 -0
  16. data/AI-DISCLOSURE.md +48 -0
  17. data/CHANGELOG.md +519 -0
  18. data/CLAUDE.md +141 -0
  19. data/CONTRIBUTING.md +734 -0
  20. data/INSTALL.md +154 -0
  21. data/LICENSE +674 -0
  22. data/LICENSE.md +675 -0
  23. data/QUICKSTART.md +73 -0
  24. data/README.md +366 -0
  25. data/Rakefile +200 -0
  26. data/SECURITY.md +114 -0
  27. data/bin/rai +1 -0
  28. data/cliff.toml +52 -0
  29. data/conf/adopt_redactions.yml +8 -0
  30. data/conf/behaviour/.gitkeep +0 -0
  31. data/conf/compliance/cra_rules.yml +25 -0
  32. data/conf/compliance/license_rules.yml +20 -0
  33. data/conf/design/aaif_alignment.yml +181 -0
  34. data/conf/design/ab_testing.yml +172 -0
  35. data/conf/design/accessibility.yml +84 -0
  36. data/conf/design/ai_authorship.yml +210 -0
  37. data/conf/design/ai_provenance.yml +224 -0
  38. data/conf/design/ai_tool_configuration.yml +207 -0
  39. data/conf/design/architecture.yml +139 -0
  40. data/conf/design/autocompletion.yml +115 -0
  41. data/conf/design/backward_compatibility.yml +112 -0
  42. data/conf/design/behaviour_composition.yml +246 -0
  43. data/conf/design/build_rake_extraction.yml +57 -0
  44. data/conf/design/ci_pipeline.yml +100 -0
  45. data/conf/design/claude_code_configuration.yml +157 -0
  46. data/conf/design/compiler.yml +128 -0
  47. data/conf/design/comply.yml +153 -0
  48. data/conf/design/content_packs.yml +84 -0
  49. data/conf/design/desktop_integration.yml +289 -0
  50. data/conf/design/distribution.yml +216 -0
  51. data/conf/design/doctor.yml +184 -0
  52. data/conf/design/documentation.yml +152 -0
  53. data/conf/design/engine_architecture.yml +257 -0
  54. data/conf/design/error_handling.yml +103 -0
  55. data/conf/design/feature_flags.yml +142 -0
  56. data/conf/design/git_hooks.yml +165 -0
  57. data/conf/design/gui_plugins.yml +475 -0
  58. data/conf/design/i18n.yml +84 -0
  59. data/conf/design/integration_testing.yml +56 -0
  60. data/conf/design/licensing_system.yml +88 -0
  61. data/conf/design/lifecycle_management.yml +208 -0
  62. data/conf/design/mcp_integration.yml +207 -0
  63. data/conf/design/mcp_settings.yml +126 -0
  64. data/conf/design/migration.yml +56 -0
  65. data/conf/design/monitoring_observability.yml +194 -0
  66. data/conf/design/namespace_cleanup.yml +145 -0
  67. data/conf/design/plugin_test_segregation.yml +145 -0
  68. data/conf/design/policy_management.yml +229 -0
  69. data/conf/design/project_management.yml +183 -0
  70. data/conf/design/rai_mcp_asset_discovery.yml +164 -0
  71. data/conf/design/rai_mcp_server.yml +605 -0
  72. data/conf/design/release_management.yml +117 -0
  73. data/conf/design/retrofit.yml +199 -0
  74. data/conf/design/retrospective_analyzer.yml +79 -0
  75. data/conf/design/scope_hierarchy.yml +352 -0
  76. data/conf/design/security.yml +115 -0
  77. data/conf/design/session_retrospective.yml +85 -0
  78. data/conf/design/smart_ui_feedback.yml +89 -0
  79. data/conf/design/structured_logging.yml +148 -0
  80. data/conf/design/styles.yml +123 -0
  81. data/conf/design/test_peer_review.yml +89 -0
  82. data/conf/design/testing.yml +136 -0
  83. data/conf/design/threat_model.yml +108 -0
  84. data/conf/design/ui_framework.yml +111 -0
  85. data/conf/design/usage_optimization.yml +122 -0
  86. data/conf/design/version_management.yml +60 -0
  87. data/conf/design/workflow.yml +227 -0
  88. data/conf/mcp/server_defaults.yml +42 -0
  89. data/conf/mcp/trust.yml +21 -0
  90. data/conf/packaging/core.yml +12 -0
  91. data/conf/packaging/gtk4.yml +11 -0
  92. data/conf/packaging/qt6.yml +11 -0
  93. data/conf/policy/default_deny_list.yml +197 -0
  94. data/conf/review/cli-command-audit.yml +857 -0
  95. data/conf/review/design-docs.yml +1064 -0
  96. data/conf/review/design-questionnaire.yml +153 -0
  97. data/conf/review/questionnaire.yml +146 -0
  98. data/conf/review/rosett-ai-core.yml +2919 -0
  99. data/conf/schemas/ai_config_schema.json +73 -0
  100. data/conf/schemas/behaviour_schema.json +132 -0
  101. data/conf/schemas/compliance_rule_schema.json +63 -0
  102. data/conf/schemas/content_pack_manifest_schema.json +51 -0
  103. data/conf/schemas/design_schema.json +210 -0
  104. data/conf/schemas/engine_manifest_schema.json +144 -0
  105. data/conf/schemas/lockfile_schema.json +74 -0
  106. data/conf/schemas/mcp_server_schema.json +48 -0
  107. data/conf/schemas/packaging_schema.json +70 -0
  108. data/conf/schemas/policy_schema.json +85 -0
  109. data/conf/schemas/provenance_schema.json +84 -0
  110. data/conf/schemas/rai_config_schema.json +56 -0
  111. data/conf/schemas/rai_project_schema.json +20 -0
  112. data/conf/schemas/scope_hierarchy_schema.json +49 -0
  113. data/conf/schemas/target_schema.json +67 -0
  114. data/conf/schemas/tooling_schema.json +65 -0
  115. data/conf/schemas/workflow_schema.json +112 -0
  116. data/conf/targets/agents_md.yml +17 -0
  117. data/conf/targets/claude.yml +12 -0
  118. data/conf/tooling/tools.yml +58 -0
  119. data/dist/rosett-ai-mcp.service +48 -0
  120. data/dist/rosett-ai-mcp.yml.default +45 -0
  121. data/doc/AAIF_POSITIONING.md +58 -0
  122. data/doc/ADOPT.md +224 -0
  123. data/doc/AI_PROVENANCE.md +139 -0
  124. data/doc/ARCHITECTURE.md +920 -0
  125. data/doc/BEHAVIOUR.md +409 -0
  126. data/doc/BUILD.md +138 -0
  127. data/doc/CI_CD_RECIPES.md +171 -0
  128. data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
  129. data/doc/COMMAND_ANALYSIS.md +229 -0
  130. data/doc/CONFIGURATION.md +281 -0
  131. data/doc/DESIGN_AUDIT.md +235 -0
  132. data/doc/DESIGN_PEER_REVIEW.md +771 -0
  133. data/doc/DESKTOP.md +447 -0
  134. data/doc/ENGINES.md +567 -0
  135. data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
  136. data/doc/FEATURE_AUDIT.md +218 -0
  137. data/doc/IMPLEMENTATION_PLAN.md +669 -0
  138. data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
  139. data/doc/MIGRATION_GUIDE.md +88 -0
  140. data/doc/PACKAGING.md +232 -0
  141. data/doc/PROJECT_DASHBOARD.md +153 -0
  142. data/doc/PULP_DEPLOYMENT.md +164 -0
  143. data/doc/QUALITY_FIX_SUMMARY.md +110 -0
  144. data/doc/QUICK_START.md +162 -0
  145. data/doc/REEK_CONFIGURATION.md +166 -0
  146. data/doc/REFERENCE.md +253 -0
  147. data/doc/REFERENCES.md +324 -0
  148. data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
  149. data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
  150. data/doc/SETUP.md +202 -0
  151. data/doc/TEST_PEER_REVIEW.md +152 -0
  152. data/doc/THREAT_MODEL.md +230 -0
  153. data/doc/USAGE.md +545 -0
  154. data/doc/USER_MANUAL.md +585 -0
  155. data/doc/ai_test_review_checklist.md +110 -0
  156. data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
  157. data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
  158. data/doc/changes/2026-02-20-security-implementation.md +281 -0
  159. data/doc/changes/2026-02-20-styles-implementation.md +220 -0
  160. data/doc/changes/2026-02-21-architecture-completion.md +95 -0
  161. data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
  162. data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
  163. data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
  164. data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
  165. data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
  166. data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
  167. data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
  168. data/doc/changes/2026-02-21-path-resolver.md +128 -0
  169. data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
  170. data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
  171. data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
  172. data/doc/context/SESSION-HANDOFF.md +69 -0
  173. data/doc/context/ai-engine-usage-trends-2026.md +80 -0
  174. data/doc/context/plan-pluggable-engines.md +590 -0
  175. data/doc/decisions/001-flog-deferred.md +32 -0
  176. data/doc/decisions/002-path-resolution-strategy.md +158 -0
  177. data/doc/decisions/003-ui-adapter-selection.md +193 -0
  178. data/doc/decisions/004-design-document-validation.md +179 -0
  179. data/doc/decisions/005-package-splitting-strategy.md +200 -0
  180. data/doc/decisions/006-multi-engine-architecture.md +147 -0
  181. data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
  182. data/doc/decisions/008-ci-bundler-strategy.md +129 -0
  183. data/doc/decisions/009-core-only-v1-release.md +60 -0
  184. data/doc/decisions/010-engine-debian-packaging.md +66 -0
  185. data/doc/decisions/011-context-aware-cli.md +71 -0
  186. data/doc/dependency_decisions.yml +247 -0
  187. data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
  188. data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
  189. data/doc/issues/003-smoke-test-false-positive.md +127 -0
  190. data/doc/issues/004-market-research-design-updates.md +109 -0
  191. data/doc/issues/005-compile-scope-coexistence.md +161 -0
  192. data/doc/locales/.gitkeep +0 -0
  193. data/doc/man/rai.1.ronn +505 -0
  194. data/doc/operations/packaging.md +133 -0
  195. data/doc/operations/rosett-ai-release.md +65 -0
  196. data/doc/reference/error-catalog.md +107 -0
  197. data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
  198. data/doc/reference/src/Pictures/cover.jpg +0 -0
  199. data/doc/reference/src/Pictures/head1.jpg +0 -0
  200. data/doc/reference/src/Pictures/head2.jpg +0 -0
  201. data/doc/reference/src/Pictures/head3.jpg +0 -0
  202. data/doc/reference/src/Pictures/head4.jpg +0 -0
  203. data/doc/reference/src/Pictures/head5.jpg +0 -0
  204. data/doc/reference/src/Pictures/head6.jpg +0 -0
  205. data/doc/reference/src/Pictures/head7.jpg +0 -0
  206. data/doc/reference/src/Pictures/head8.jpg +0 -0
  207. data/doc/reference/src/StyleInd.ist +4 -0
  208. data/doc/reference/src/bibliography.bib +79 -0
  209. data/doc/reference/src/main.tex +1288 -0
  210. data/doc/reference/src/structure.tex +303 -0
  211. data/doc/rosett-ai-bookmarks.html +301 -0
  212. data/kitchen.yml +46 -0
  213. data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
  214. data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
  215. data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
  216. data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
  217. data/lib/rosett_ai/ai_config/context_window.rb +55 -0
  218. data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
  219. data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
  220. data/lib/rosett_ai/ai_config/model_router.rb +121 -0
  221. data/lib/rosett_ai/ai_config/validator.rb +45 -0
  222. data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
  223. data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
  224. data/lib/rosett_ai/authorship/review_validator.rb +39 -0
  225. data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
  226. data/lib/rosett_ai/backup/compressor.rb +180 -0
  227. data/lib/rosett_ai/backup/destination.rb +91 -0
  228. data/lib/rosett_ai/behaviour/manager.rb +156 -0
  229. data/lib/rosett_ai/compiler/backend.rb +86 -0
  230. data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
  231. data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
  232. data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
  233. data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
  234. data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
  235. data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
  236. data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
  237. data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
  238. data/lib/rosett_ai/compiler/target_profile.rb +112 -0
  239. data/lib/rosett_ai/completion/generator.rb +101 -0
  240. data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
  241. data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
  242. data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
  243. data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
  244. data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
  245. data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
  246. data/lib/rosett_ai/comply/reporter.rb +113 -0
  247. data/lib/rosett_ai/comply/runner.rb +50 -0
  248. data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
  249. data/lib/rosett_ai/composition/composer.rb +158 -0
  250. data/lib/rosett_ai/composition/composition_result.rb +64 -0
  251. data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
  252. data/lib/rosett_ai/composition/lockfile.rb +103 -0
  253. data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
  254. data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
  255. data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
  256. data/lib/rosett_ai/config/compile_result.rb +37 -0
  257. data/lib/rosett_ai/config/compiler.rb +13 -0
  258. data/lib/rosett_ai/config/domain_transformer.rb +13 -0
  259. data/lib/rosett_ai/config/key_map.rb +13 -0
  260. data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
  261. data/lib/rosett_ai/config/scope_router.rb +13 -0
  262. data/lib/rosett_ai/config/secret_resolver.rb +125 -0
  263. data/lib/rosett_ai/configuration.rb +119 -0
  264. data/lib/rosett_ai/content/content_client.rb +60 -0
  265. data/lib/rosett_ai/content/pack_installer.rb +117 -0
  266. data/lib/rosett_ai/content/pack_manifest.rb +50 -0
  267. data/lib/rosett_ai/content/pack_registry.rb +68 -0
  268. data/lib/rosett_ai/content_packs/manager.rb +50 -0
  269. data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
  270. data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
  271. data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
  272. data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
  273. data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
  274. data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
  275. data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
  276. data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
  277. data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
  278. data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
  279. data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
  280. data/lib/rosett_ai/dbus/service.rb +121 -0
  281. data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
  282. data/lib/rosett_ai/deprecation.rb +79 -0
  283. data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
  284. data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
  285. data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
  286. data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
  287. data/lib/rosett_ai/doctor/check.rb +92 -0
  288. data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
  289. data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
  290. data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
  291. data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
  292. data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
  293. data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
  294. data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
  295. data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
  296. data/lib/rosett_ai/doctor.rb +81 -0
  297. data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
  298. data/lib/rosett_ai/documentation/translator.rb +62 -0
  299. data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
  300. data/lib/rosett_ai/engines/detector.rb +63 -0
  301. data/lib/rosett_ai/engines/registry.rb +50 -0
  302. data/lib/rosett_ai/error_handler.rb +139 -0
  303. data/lib/rosett_ai/exit_codes.rb +76 -0
  304. data/lib/rosett_ai/feature_flags.rb +102 -0
  305. data/lib/rosett_ai/formatting.rb +33 -0
  306. data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
  307. data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
  308. data/lib/rosett_ai/git_hooks/installer.rb +175 -0
  309. data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
  310. data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
  311. data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
  312. data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
  313. data/lib/rosett_ai/init/config_file_writer.rb +24 -0
  314. data/lib/rosett_ai/init/directory_builder.rb +38 -0
  315. data/lib/rosett_ai/init/file_copier.rb +95 -0
  316. data/lib/rosett_ai/init/global_initializer.rb +28 -0
  317. data/lib/rosett_ai/init/local_initializer.rb +27 -0
  318. data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
  319. data/lib/rosett_ai/init/project_initializer.rb +38 -0
  320. data/lib/rosett_ai/licensing/license_key.rb +139 -0
  321. data/lib/rosett_ai/licensing/license_store.rb +64 -0
  322. data/lib/rosett_ai/licensing/license_validator.rb +60 -0
  323. data/lib/rosett_ai/licensing/tier.rb +42 -0
  324. data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
  325. data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
  326. data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
  327. data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
  328. data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
  329. data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
  330. data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
  331. data/lib/rosett_ai/mcp/governance.rb +160 -0
  332. data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
  333. data/lib/rosett_ai/mcp/instructions.rb +266 -0
  334. data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
  335. data/lib/rosett_ai/mcp/keyfile.rb +221 -0
  336. data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
  337. data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
  338. data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
  339. data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
  340. data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
  341. data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
  342. data/lib/rosett_ai/mcp/plugins.rb +143 -0
  343. data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
  344. data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
  345. data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
  346. data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
  347. data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
  348. data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
  349. data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
  350. data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
  351. data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
  352. data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
  353. data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
  354. data/lib/rosett_ai/mcp/response_helper.rb +46 -0
  355. data/lib/rosett_ai/mcp/security_logger.rb +60 -0
  356. data/lib/rosett_ai/mcp/server.rb +212 -0
  357. data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
  358. data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
  359. data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
  360. data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
  361. data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
  362. data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
  363. data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
  364. data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
  365. data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
  366. data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
  367. data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
  368. data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
  369. data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
  370. data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
  371. data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
  372. data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
  373. data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
  374. data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
  375. data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
  376. data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
  377. data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
  378. data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
  379. data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
  380. data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
  381. data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
  382. data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
  383. data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
  384. data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
  385. data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
  386. data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
  387. data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
  388. data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
  389. data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
  390. data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
  391. data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
  392. data/lib/rosett_ai/migration/detector.rb +117 -0
  393. data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
  394. data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
  395. data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
  396. data/lib/rosett_ai/package_manager/apt.rb +108 -0
  397. data/lib/rosett_ai/package_manager/base.rb +68 -0
  398. data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
  399. data/lib/rosett_ai/packaging/variant_config.rb +92 -0
  400. data/lib/rosett_ai/path_resolver.rb +115 -0
  401. data/lib/rosett_ai/plugins/contract.rb +43 -0
  402. data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
  403. data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
  404. data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
  405. data/lib/rosett_ai/plugins/registry.rb +150 -0
  406. data/lib/rosett_ai/policy/auditor.rb +41 -0
  407. data/lib/rosett_ai/policy/deny_list.rb +71 -0
  408. data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
  409. data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
  410. data/lib/rosett_ai/policy/protected_files.rb +47 -0
  411. data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
  412. data/lib/rosett_ai/policy/validator.rb +35 -0
  413. data/lib/rosett_ai/profiler.rb +79 -0
  414. data/lib/rosett_ai/project/drift_detector.rb +126 -0
  415. data/lib/rosett_ai/project/manager.rb +115 -0
  416. data/lib/rosett_ai/project/sync_manager.rb +138 -0
  417. data/lib/rosett_ai/project/template_applier.rb +105 -0
  418. data/lib/rosett_ai/project_context.rb +82 -0
  419. data/lib/rosett_ai/provenance/entry.rb +63 -0
  420. data/lib/rosett_ai/provenance/file_source.rb +32 -0
  421. data/lib/rosett_ai/provenance/source.rb +62 -0
  422. data/lib/rosett_ai/provenance/store.rb +153 -0
  423. data/lib/rosett_ai/provenance/tracker.rb +62 -0
  424. data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
  425. data/lib/rosett_ai/provenance/validator.rb +45 -0
  426. data/lib/rosett_ai/quorum/collector.rb +59 -0
  427. data/lib/rosett_ai/quorum/comparator.rb +81 -0
  428. data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
  429. data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
  430. data/lib/rosett_ai/rai_config.rb +107 -0
  431. data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
  432. data/lib/rosett_ai/retrofit/engine.rb +171 -0
  433. data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
  434. data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
  435. data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
  436. data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
  437. data/lib/rosett_ai/retrofit/scanner.rb +47 -0
  438. data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
  439. data/lib/rosett_ai/secrets_resolver.rb +71 -0
  440. data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
  441. data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
  442. data/lib/rosett_ai/structured_logger.rb +110 -0
  443. data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
  444. data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
  445. data/lib/rosett_ai/telemetry/provider.rb +26 -0
  446. data/lib/rosett_ai/telemetry/reporter.rb +144 -0
  447. data/lib/rosett_ai/telemetry.rb +47 -0
  448. data/lib/rosett_ai/text_sanitizer.rb +62 -0
  449. data/lib/rosett_ai/thor/cli.rb +269 -0
  450. data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
  451. data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
  452. data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
  453. data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
  454. data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
  455. data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
  456. data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
  457. data/lib/rosett_ai/thor/tasks/config.rb +265 -0
  458. data/lib/rosett_ai/thor/tasks/content.rb +193 -0
  459. data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
  460. data/lib/rosett_ai/thor/tasks/design.rb +258 -0
  461. data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
  462. data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
  463. data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
  464. data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
  465. data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
  466. data/lib/rosett_ai/thor/tasks/init.rb +259 -0
  467. data/lib/rosett_ai/thor/tasks/license.rb +120 -0
  468. data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
  469. data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
  470. data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
  471. data/lib/rosett_ai/thor/tasks/project.rb +260 -0
  472. data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
  473. data/lib/rosett_ai/thor/tasks/release.rb +314 -0
  474. data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
  475. data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
  476. data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
  477. data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
  478. data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
  479. data/lib/rosett_ai/tooling/version_checker.rb +35 -0
  480. data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
  481. data/lib/rosett_ai/ui/base.rb +46 -0
  482. data/lib/rosett_ai/ui/gtk4.rb +98 -0
  483. data/lib/rosett_ai/ui/kde.rb +40 -0
  484. data/lib/rosett_ai/ui/qt6.rb +40 -0
  485. data/lib/rosett_ai/ui/registry.rb +60 -0
  486. data/lib/rosett_ai/ui/tty_helper.rb +74 -0
  487. data/lib/rosett_ai/ui/tui.rb +59 -0
  488. data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
  489. data/lib/rosett_ai/validators/design_validator.rb +17 -0
  490. data/lib/rosett_ai/validators/schema_validator.rb +84 -0
  491. data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
  492. data/lib/rosett_ai/version.rb +8 -0
  493. data/lib/rosett_ai/version_consistency_checker.rb +129 -0
  494. data/lib/rosett_ai/workflow/audit_log.rb +86 -0
  495. data/lib/rosett_ai/workflow/engine.rb +142 -0
  496. data/lib/rosett_ai/workflow/manager.rb +82 -0
  497. data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
  498. data/lib/rosett_ai/workflow/step_runner.rb +61 -0
  499. data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
  500. data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
  501. data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
  502. data/lib/rosett_ai/yaml_loader.rb +78 -0
  503. data/lib/rosett_ai.rb +221 -0
  504. data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
  505. data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
  506. data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
  507. data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
  508. data/lib/rubocop/rosett_ai.rb +9 -0
  509. data/lib/scripts/generated/docker_hub_tags.rb +126 -0
  510. data/locales/.gitkeep +0 -0
  511. data/locales/ar.yml +579 -0
  512. data/locales/en.yml +571 -0
  513. data/locales/fr.yml +567 -0
  514. data/packaging/build-engine-deb.sh +81 -0
  515. data/packaging/scripts/postinst +17 -0
  516. data/packaging/scripts/postrm +19 -0
  517. data/packaging/scripts/prerm +10 -0
  518. data/packaging/wrapper.sh.template +38 -0
  519. data/rosett-ai.gemspec +63 -0
  520. data/rules/.gitkeep +0 -0
  521. data/scripts/publish/pulp_upload.sh +123 -0
  522. data/settings.json +29 -0
  523. data/share/applications/be.neatnerds.rosettai.desktop +29 -0
  524. data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
  525. data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
  526. data/share/templates/behaviour/criticalthinking.yml +69 -0
  527. metadata +810 -0
@@ -0,0 +1,303 @@
1
+ %------------------------------------------------------------------------------
2
+ % VARIOUS REQUIRED PACKAGES
3
+ %------------------------------------------------------------------------------
4
+
5
+ \usepackage{titlesec} % Allows customization of titles
6
+
7
+ \usepackage{graphicx} % Required for including pictures
8
+ \graphicspath{{Pictures/}} % Specifies the directory where pictures are stored
9
+
10
+ \usepackage{tikz} % Required for drawing custom shapes
11
+
12
+ \usepackage{makeidx} % Required for indexing
13
+ \makeindex
14
+
15
+ \usepackage[english]{babel} % English language/hyphenation
16
+ \usepackage{csquotes}
17
+
18
+ \usepackage{enumitem} % Customize lists
19
+ \setlist{nolistsep} % Reduce spacing between bullet points and numbered lists
20
+
21
+ \usepackage{booktabs} % Required for nicer horizontal rules in tables
22
+
23
+ \usepackage{eso-pic} % Required for specifying an image background in the title
24
+ % page
25
+
26
+ \usepackage{listings} % Code listings
27
+ \usepackage{xcolor}
28
+
29
+ % Code listing style
30
+ \lstdefinestyle{nnccstyle}{
31
+ backgroundcolor=\color{black!3},
32
+ basicstyle=\ttfamily\small,
33
+ breakatwhitespace=false,
34
+ breaklines=true,
35
+ captionpos=b,
36
+ commentstyle=\color{green!50!black},
37
+ keywordstyle=\color{ocre}\bfseries,
38
+ stringstyle=\color{red!60!black},
39
+ numberstyle=\tiny\color{gray},
40
+ numbers=left,
41
+ numbersep=8pt,
42
+ frame=single,
43
+ rulecolor=\color{black!20},
44
+ showspaces=false,
45
+ showstringspaces=false,
46
+ showtabs=false,
47
+ tabsize=2,
48
+ xleftmargin=1.5em,
49
+ framexleftmargin=1em
50
+ }
51
+ \lstset{style=nnccstyle}
52
+
53
+ % YAML language definition for listings
54
+ \lstdefinelanguage{yaml}{
55
+ keywords={true,false,null,y,n},
56
+ sensitive=false,
57
+ comment=[l]{\#},
58
+ morecomment=[s]{/*}{*/},
59
+ morestring=[b]',
60
+ morestring=[b]"
61
+ }
62
+
63
+ \usepackage{tabularx} % Better tables
64
+ \usepackage{longtable} % Multi-page tables
65
+ \usepackage{array}
66
+
67
+ %------------------------------------------------------------------------------
68
+ % MAIN TABLE OF CONTENTS
69
+ %------------------------------------------------------------------------------
70
+
71
+ \usepackage{titletoc} % Required for manipulating the table of contents
72
+
73
+ \contentsmargin{0cm} % Removes the default margin
74
+ % Chapter text styling
75
+ \titlecontents{chapter}[1.25cm] % Indentation
76
+ {\addvspace{15pt}\large\sffamily\bfseries} % Spacing and font options for chapters
77
+ {\color{ocre!60}\contentslabel[\Large\thecontentslabel]{1.25cm}\color{ocre}} % Chapter number
78
+ {}
79
+ {\color{ocre!60}\normalsize\sffamily\bfseries\;\titlerule*[.5pc]{.}\;\thecontentspage} % Page number
80
+ % Section text styling
81
+ \titlecontents{section}[1.25cm] % Indentation
82
+ {\addvspace{5pt}\sffamily\bfseries} % Spacing and font options for sections
83
+ {\contentslabel[\thecontentslabel]{1.25cm}} % Section number
84
+ {}
85
+ {\sffamily\hfill\color{black}\thecontentspage} % Page number
86
+ []
87
+ % Subsection text styling
88
+ \titlecontents{subsection}[1.25cm] % Indentation
89
+ {\addvspace{1pt}\sffamily\small} % Spacing and font options for subsections
90
+ {\contentslabel[\thecontentslabel]{1.25cm}} % Subsection number
91
+ {}
92
+ {\sffamily\;\titlerule*[.5pc]{.}\;\thecontentspage} % Page number
93
+ []
94
+
95
+ %----------------------------------------------------------------------------------------
96
+ % MINI TABLE OF CONTENTS IN CHAPTER HEADS
97
+ %----------------------------------------------------------------------------------------
98
+
99
+ % Section text styling
100
+ \titlecontents{lsection}[0em] % Indentation
101
+ {\footnotesize\sffamily} % Font settings
102
+ {}
103
+ {}
104
+ {}
105
+
106
+ % Subsection text styling
107
+ \titlecontents{lsubsection}[.5em] % Indentation
108
+ {\normalfont\footnotesize\sffamily} % Font settings
109
+ {}
110
+ {}
111
+ {}
112
+
113
+ %------------------------------------------------------------------------------
114
+ % PAGE HEADERS
115
+ %------------------------------------------------------------------------------
116
+
117
+ \usepackage{fancyhdr} % Required for header and footer configuration
118
+
119
+ \pagestyle{fancy}
120
+ \renewcommand{\chaptermark}[1]{\markboth{\sffamily\normalsize\bfseries\chaptername\ \thechapter.\ #1}{}} % Chapter text font settings
121
+ \renewcommand{\sectionmark}[1]{\markright{\sffamily\normalsize\thesection\hspace{5pt}#1}{}} % Section text font settings
122
+ \fancyhf{} \fancyhead[LE,RO]{\sffamily\normalsize\thepage} % Font setting for
123
+ % the page number in the header
124
+ \fancyhead[LO]{\rightmark} % Print the nearest section name on the left side of
125
+ % odd pages
126
+ \fancyhead[RE]{\leftmark} % Print the current chapter name on the right side of
127
+ % even pages
128
+ \renewcommand{\headrulewidth}{0.5pt} % Width of the rule under the header
129
+ \addtolength{\headheight}{2.5pt} % Increase the spacing around the header
130
+ % slightly
131
+ \renewcommand{\footrulewidth}{0pt} % Removes the rule in the footer
132
+ \fancypagestyle{plain}{\fancyhead{}\renewcommand{\headrulewidth}{0pt}} % Style
133
+ % for when a plain pagestyle is specified
134
+
135
+ % Removes the header from odd empty pages at the end of chapters
136
+ \makeatletter
137
+ \renewcommand{\cleardoublepage}{
138
+ \clearpage\ifodd\c@page\else
139
+ \hbox{}
140
+ \vspace*{\fill}
141
+ \thispagestyle{empty}
142
+ \newpage
143
+ \fi}
144
+
145
+ %------------------------------------------------------------------------------
146
+ % HYPERLINKS IN THE DOCUMENTS
147
+ %------------------------------------------------------------------------------
148
+
149
+ % For an unclear reason, the package should be loaded now and not later
150
+ \usepackage{hyperref}
151
+ \hypersetup{hidelinks,colorlinks=true,linkcolor=ocre!80!black,
152
+ urlcolor=ocre,citecolor=ocre,
153
+ bookmarksopen=false,
154
+ pdftitle={NeatNerds Code Companion -- Technical Reference},
155
+ pdfauthor={Hugo Antonio Sepulveda Manriquez}}
156
+
157
+ %------------------------------------------------------------------------------
158
+ % SECTION NUMBERING IN THE MARGIN
159
+ %------------------------------------------------------------------------------
160
+
161
+ \renewcommand{\@seccntformat}[1]{\llap{\textcolor{ocre}{\csname the#1\endcsname}\hspace{1em}}}
162
+ \renewcommand{\section}{\@startsection{section}{1}{\z@}
163
+ {-4ex \@plus -1ex \@minus -.4ex}
164
+ {1ex \@plus.2ex }
165
+ {\normalfont\large\sffamily\bfseries}}
166
+ \renewcommand{\subsection}{\@startsection {subsection}{2}{\z@}
167
+ {-3ex \@plus -0.1ex \@minus -.4ex}
168
+ {0.5ex \@plus.2ex }
169
+ {\normalfont\sffamily\bfseries}}
170
+ \renewcommand{\subsubsection}{\@startsection {subsubsection}{3}{\z@}
171
+ {-2ex \@plus -0.1ex \@minus -.2ex}
172
+ {.2ex \@plus.2ex }
173
+ {\normalfont\small\sffamily\bfseries}}
174
+ \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}
175
+ {-2ex \@plus-.2ex \@minus .2ex}
176
+ {.1ex}
177
+ {\normalfont\small\sffamily\bfseries}}
178
+
179
+ %------------------------------------------------------------------------------
180
+ % CHAPTER HEADINGS
181
+ %------------------------------------------------------------------------------
182
+
183
+ \newcommand{\thechapterimage}{}
184
+ \newcommand{\chapterimage}[1]{\renewcommand{\thechapterimage}{#1}}
185
+
186
+ % Numbered chapters with mini tableofcontents
187
+ \def\thechapter{\arabic{chapter}}
188
+ \def\@makechapterhead#1{
189
+ \thispagestyle{empty}
190
+ {\centering \normalfont\sffamily
191
+ \ifnum \c@secnumdepth >\m@ne
192
+ \if@mainmatter
193
+ \startcontents
194
+ \begin{tikzpicture}[remember picture,overlay]
195
+ \node at (current page.north west)
196
+ {\begin{tikzpicture}[remember picture,overlay]
197
+ \node[anchor=north west,inner sep=0pt] at (0,0) {\includegraphics[width=\paperwidth]{\thechapterimage}};
198
+ \draw[anchor=west] (5cm,-9cm) node [rounded corners=20pt,fill=ocre!10!white,text opacity=1,draw=ocre,draw opacity=1,line width=1.5pt,fill opacity=.6,inner sep=12pt]{\huge\sffamily\bfseries\textcolor{black}{\thechapter. #1\strut\makebox[22cm]{}}};
199
+ \end{tikzpicture}};
200
+ \end{tikzpicture}}
201
+ \par\vspace*{230\p@}
202
+ \fi
203
+ \fi}
204
+
205
+ % Unnumbered chapters without mini tableofcontents
206
+ \def\@makeschapterhead#1{
207
+ \thispagestyle{empty}
208
+ {\centering \normalfont\sffamily
209
+ \ifnum \c@secnumdepth >\m@ne
210
+ \if@mainmatter
211
+ \begin{tikzpicture}[remember picture,overlay]
212
+ \node at (current page.north west)
213
+ {\begin{tikzpicture}[remember picture,overlay]
214
+ \node[anchor=north west,inner sep=0pt] at (0,0) {\includegraphics[width=\paperwidth]{\thechapterimage}};
215
+ \draw[anchor=west] (5cm,-9cm) node [rounded corners=20pt,fill=ocre!10!white,fill opacity=.6,inner sep=12pt,text opacity=1,draw=ocre,draw opacity=1,line width=1.5pt]{\huge\sffamily\bfseries\textcolor{black}{#1\strut\makebox[22cm]{}}};
216
+ \end{tikzpicture}};
217
+ \end{tikzpicture}}
218
+ \par\vspace*{230\p@}
219
+ \fi
220
+ \fi
221
+ }
222
+ \makeatother
223
+
224
+ %----------------------------------------------------------------------------------------
225
+ % DEFINITION OF COLORED BOXES
226
+ %----------------------------------------------------------------------------------------
227
+
228
+ \RequirePackage[framemethod=default]{mdframed}
229
+
230
+ % Constraint box (blue-tinted)
231
+ \newmdenv[skipabove=7pt,
232
+ skipbelow=7pt,
233
+ backgroundcolor=black!5,
234
+ linecolor=ocre,
235
+ innerleftmargin=5pt,
236
+ innerrightmargin=5pt,
237
+ innertopmargin=5pt,
238
+ leftmargin=0cm,
239
+ rightmargin=0cm,
240
+ innerbottommargin=5pt]{constraintbox}
241
+
242
+ % Criterion box (left-bordered)
243
+ \newmdenv[skipabove=7pt,
244
+ skipbelow=7pt,
245
+ rightline=false,
246
+ leftline=true,
247
+ topline=false,
248
+ bottomline=false,
249
+ backgroundcolor=ocre!10,
250
+ linecolor=ocre,
251
+ innerleftmargin=5pt,
252
+ innerrightmargin=5pt,
253
+ innertopmargin=5pt,
254
+ innerbottommargin=5pt,
255
+ leftmargin=0cm,
256
+ rightmargin=0cm,
257
+ linewidth=4pt]{criterionbox}
258
+
259
+ % Anti-pattern box (red-tinted warning)
260
+ \newmdenv[skipabove=7pt,
261
+ skipbelow=7pt,
262
+ rightline=false,
263
+ leftline=true,
264
+ topline=false,
265
+ bottomline=false,
266
+ linecolor=red!60,
267
+ backgroundcolor=red!5,
268
+ innerleftmargin=5pt,
269
+ innerrightmargin=5pt,
270
+ innertopmargin=5pt,
271
+ leftmargin=0cm,
272
+ rightmargin=0cm,
273
+ linewidth=4pt,
274
+ innerbottommargin=5pt]{antipatternbox}
275
+
276
+ % Decision box (gray-bordered)
277
+ \newmdenv[skipabove=7pt,
278
+ skipbelow=7pt,
279
+ rightline=false,
280
+ leftline=true,
281
+ topline=false,
282
+ bottomline=false,
283
+ linecolor=gray,
284
+ backgroundcolor=black!5,
285
+ innerleftmargin=5pt,
286
+ innerrightmargin=5pt,
287
+ innertopmargin=5pt,
288
+ leftmargin=0cm,
289
+ rightmargin=0cm,
290
+ linewidth=4pt,
291
+ innerbottommargin=5pt]{decisionbox}
292
+
293
+ %----------------------------------------------------------------------------------------
294
+ % REMARK ENVIRONMENT
295
+ %----------------------------------------------------------------------------------------
296
+
297
+ \newenvironment{remark}{\par\vspace{10pt}\small
298
+ \begin{list}{}{
299
+ \leftmargin=35pt
300
+ \rightmargin=25pt}\item\ignorespaces
301
+ \makebox[-2.5pt]{\begin{tikzpicture}[overlay]
302
+ \node[draw=ocre!60,line width=1pt,circle,fill=ocre!25,font=\sffamily\bfseries,inner sep=2pt,outer sep=0pt] at (-15pt,0pt){\textcolor{ocre}{R}};\end{tikzpicture}}
303
+ \advance\baselineskip -1pt}{\end{list}\vskip5pt}
@@ -0,0 +1,301 @@
1
+ <!DOCTYPE NETSCAPE-Bookmark-file-1>
2
+ <!-- This is an automatically generated file.
3
+ It will be read and overwritten.
4
+ DO NOT EDIT! -->
5
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
6
+ <TITLE>nncc Project References</TITLE>
7
+ <H1>nncc — NeatNerds Code Companion References</H1>
8
+
9
+ <DL><p>
10
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">nncc Project References</H3>
11
+ <DL><p>
12
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">1. Licensing &amp; Legal</H3>
13
+ <DL><p>
14
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">GPL &amp; Open Source</H3>
15
+ <DL><p>
16
+ <DT><A HREF="https://www.gnu.org/licenses/gpl-3.0.en.html">GPL-3.0 Full Text (HTML)</A>
17
+ <DT><A HREF="https://www.gnu.org/licenses/gpl-3.0.txt">GPL-3.0 Full Text (TXT)</A>
18
+ <DT><A HREF="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPL-3.0 Full Text (HTML)</A>
19
+ <DT><A HREF="https://www.gnu.org/licenses/agpl-3.0.txt">AGPL-3.0 Full Text (TXT)</A>
20
+ <DT><A HREF="https://www.gnu.org/licenses/">GNU Licenses Overview</A>
21
+ <DT><A HREF="https://www.gnu.org/licenses/why-not-lgpl.html">Why Not LGPL</A>
22
+ <DT><A HREF="https://www.gnu.org/licenses/gpl-faq.en.html#CanDeveloperThirdParty">FSF GPL FAQ: Third-Party Relicensing</A>
23
+ <DT><A HREF="https://www.apache.org/licenses/GPL-compatibility.html">Apache-2.0 / GPL-3.0 Compatibility</A>
24
+ <DT><A HREF="https://fsf.org/">Free Software Foundation</A>
25
+ <DT><A HREF="https://spdx.org/licenses/">SPDX License List</A>
26
+ <DT><A HREF="https://spdx.github.io/spdx-spec/v3.0.1/annexes/spdx-license-expressions/">SPDX Specification v3.0.1 — License Expressions</A>
27
+ </DL><p>
28
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Anthropic Legal &amp; Terms</H3>
29
+ <DL><p>
30
+ <DT><A HREF="https://www.anthropic.com/legal/consumer-terms">Anthropic Consumer Terms of Service</A>
31
+ <DT><A HREF="https://www.anthropic.com/legal/commercial-terms">Anthropic Commercial Terms of Service</A>
32
+ <DT><A HREF="https://www.anthropic.com/legal/aup">Anthropic Acceptable Use Policy</A>
33
+ <DT><A HREF="https://code.claude.com/docs/en/legal-and-compliance">Claude Code Legal &amp; Compliance</A>
34
+ <DT><A HREF="https://www.anthropic.com/news/expanded-legal-protections-api-improvements">Expanded Legal Protections &amp; API Improvements</A>
35
+ </DL><p>
36
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">US Copyright Law &amp; AI</H3>
37
+ <DL><p>
38
+ <DT><A HREF="https://www.copyright.gov/ai/">US Copyright Office — AI Hub</A>
39
+ <DT><A HREF="https://www.copyright.gov/ai/Copyright-and-Artificial-Intelligence-Part-2-Copyrightability-Report.pdf">USCO Part 2: Copyrightability Report (PDF)</A>
40
+ <DT><A HREF="https://www.copyright.gov/ai/Copyright-and-Artificial-Intelligence-Part-3-Generative-AI-Training-Report-Pre-Publication-Version.pdf">USCO Part 3: Generative AI Training Report (PDF)</A>
41
+ <DT><A HREF="https://www.federalregister.gov/documents/2023/03/16/2023-05321/copyright-registration-guidance-works-containing-material-generated-by-artificial-intelligence">Federal Register: AI Copyright Registration Guidance (Mar 2023)</A>
42
+ <DT><A HREF="https://www.copyright.gov/docs/zarya-of-the-dawn.pdf">Zarya of the Dawn — Official USCO Letter (PDF)</A>
43
+ <DT><A HREF="https://media.cadc.uscourts.gov/opinions/docs/2025/03/23-5233.pdf">Thaler v. Perlmutter — D.C. Circuit Opinion (PDF)</A>
44
+ <DT><A HREF="https://cdn.patentlyo.com/media/2025/10/Thaler-v-Perlmutter-Petition.pdf">Thaler v. Perlmutter — SCOTUS Petition (PDF)</A>
45
+ <DT><A HREF="https://www.congress.gov/crs-product/LSB10922">CRS Report: Generative AI and Copyright Law</A>
46
+ </DL><p>
47
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">EU AI Act &amp; Copyright</H3>
48
+ <DL><p>
49
+ <DT><A HREF="https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=OJ:L_202401689">EU AI Act Full Text — EUR-Lex (PDF)</A>
50
+ <DT><A HREF="https://artificialintelligenceact.eu/article/53/">EU AI Act Article 53 — GPAI Obligations</A>
51
+ <DT><A HREF="https://artificialintelligenceact.eu/article/50/">EU AI Act Article 50 — Transparency</A>
52
+ <DT><A HREF="https://www.europarl.europa.eu/RegData/etudes/BRIE/2025/782585/EPRS_BRI(2025)782585_EN.pdf">EP Briefing: Copyright of AI-Generated Works (2025, PDF)</A>
53
+ <DT><A HREF="https://www.europarl.europa.eu/RegData/etudes/STUD/2025/774095/IUST_STU(2025)774095_EN.pdf">EP Study: Generative AI and Copyright (2025, PDF)</A>
54
+ </DL><p>
55
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Legal Analysis (Law Firms)</H3>
56
+ <DL><p>
57
+ <DT><A HREF="https://www.jonesday.com/en/insights/2025/02/copyrightability-of-ai-outputs-us-copyright-office-analyzes-human-authorship-requirement">Jones Day: Copyrightability of AI Outputs (Feb 2025)</A>
58
+ <DT><A HREF="https://www.foley.com/insights/publications/2025/02/clarifying-copyrightability-ai-assisted-works/">Foley &amp; Lardner: Clarifying Copyrightability (Feb 2025)</A>
59
+ <DT><A HREF="https://www.skadden.com/insights/publications/2025/03/appellate-court-affirms-human-authorship">Skadden: Appellate Court Affirms Human Authorship (Mar 2025)</A>
60
+ <DT><A HREF="https://www.finnegan.com/en/insights/ip-updates/dc-circuit-court-holds-that-human-authorship-is-required-as-a-matter-of-statutory-law-for-copyright-protection.html">Finnegan: DC Circuit — Human Authorship Required</A>
61
+ <DT><A HREF="https://www.bitlaw.com/ai/AI-copyright.html">BitLaw: Copyright Protection for AI-Generated Works</A>
62
+ </DL><p>
63
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">AI Model Licenses</H3>
64
+ <DL><p>
65
+ <DT><A HREF="https://help.mistral.ai/en/articles/347393-under-which-license-are-mistral-s-open-models-available">Mistral Open Models License (Apache 2.0)</A>
66
+ <DT><A HREF="https://github.com/EleutherAI/gpt-neox">EleutherAI GPT-NeoX (Apache 2.0)</A>
67
+ <DT><A HREF="https://ai.meta.com/llama/license/">Meta Llama 2 License</A>
68
+ <DT><A HREF="https://www.llama.com/llama3/license/">Meta Llama 3/3.1/3.2 License</A>
69
+ <DT><A HREF="https://www.llama.com/llama4/license/">Meta Llama 4 License</A>
70
+ </DL><p>
71
+ </DL><p>
72
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">2. AI Ecosystem (AAIF, MCP, AGENTS.md)</H3>
73
+ <DL><p>
74
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">AAIF (Agentic AI Foundation)</H3>
75
+ <DL><p>
76
+ <DT><A HREF="https://aaif.io/">AAIF Website</A>
77
+ <DT><A HREF="https://www.linuxfoundation.org/projects">Linux Foundation Projects</A>
78
+ <DT><A HREF="https://en.wikipedia.org/wiki/Open-core_model">Open-Core Model (Wikipedia)</A>
79
+ </DL><p>
80
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">MCP (Model Context Protocol)</H3>
81
+ <DL><p>
82
+ <DT><A HREF="https://modelcontextprotocol.io/specification/2025-03-26">MCP Specification (2025-03-26)</A>
83
+ <DT><A HREF="https://registry.modelcontextprotocol.io">MCP Server Registry</A>
84
+ <DT><A HREF="https://github.com/modelcontextprotocol/ruby-sdk">MCP Ruby SDK (gem: mcp v0.9.2)</A>
85
+ <DT><A HREF="https://github.com/modelcontextprotocol/servers">MCP Reference Servers</A>
86
+ <DT><A HREF="https://github.com/modelcontextprotocol">MCP GitHub Organization</A>
87
+ </DL><p>
88
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">AGENTS.md &amp; Goose</H3>
89
+ <DL><p>
90
+ <DT><A HREF="https://agents.md/">AGENTS.md Specification</A>
91
+ <DT><A HREF="https://github.com/block/goose">Goose by Block (Apache-2.0)</A>
92
+ <DT><A HREF="https://github.com/block/goose/blob/main/GOVERNANCE.md">Goose GOVERNANCE.md</A>
93
+ </DL><p>
94
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Anthropic SDK</H3>
95
+ <DL><p>
96
+ <DT><A HREF="https://github.com/anthropics/anthropic-sdk-ruby">Anthropic Ruby SDK</A>
97
+ </DL><p>
98
+ </DL><p>
99
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">3. D-Bus &amp; Desktop IPC</H3>
100
+ <DL><p>
101
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">D-Bus Specification &amp; Documentation</H3>
102
+ <DL><p>
103
+ <DT><A HREF="https://dbus.freedesktop.org/doc/dbus-specification.html">D-Bus Specification (freedesktop.org)</A>
104
+ <DT><A HREF="https://dbus.freedesktop.org/doc/dbus-api-design.html">D-Bus API Design Guidelines</A>
105
+ <DT><A HREF="https://dbus.freedesktop.org/doc/dbus-tutorial.html">D-Bus Tutorial (freedesktop.org)</A>
106
+ <DT><A HREF="https://en.wikipedia.org/wiki/D-Bus">D-Bus (Wikipedia)</A>
107
+ <DT><A HREF="https://wiki.archlinux.org/title/D-Bus">D-Bus (ArchWiki)</A>
108
+ <DT><A HREF="https://develop.kde.org/docs/features/d-bus/introduction_to_dbus/">KDE D-Bus Introduction</A>
109
+ </DL><p>
110
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">D-Bus Architecture &amp; Design</H3>
111
+ <DL><p>
112
+ <DT><A HREF="https://blogs.kde.org/2020/10/11/linux-desktop-shell-ipc-wayland-vs-d-bus-and-lack-agreement-when-use-them/">Wayland vs D-Bus for Shell IPC (KDE Blog)</A>
113
+ <DT><A HREF="https://rfc.archlinux.page/0025-dbus-broker-default/">Arch Linux RFC 0025: dbus-broker Default</A>
114
+ <DT><A HREF="https://wiki.archlinux.org/title/Systemd/User">systemd/User Session (ArchWiki)</A>
115
+ </DL><p>
116
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">ruby-dbus</H3>
117
+ <DL><p>
118
+ <DT><A HREF="https://github.com/mvidner/ruby-dbus">ruby-dbus on GitHub (v0.24.0)</A>
119
+ <DT><A HREF="https://github.com/mvidner/ruby-dbus/blob/master/doc/Tutorial.md">ruby-dbus Tutorial</A>
120
+ <DT><A HREF="https://rubygems.org/gems/ruby-dbus">ruby-dbus on RubyGems</A>
121
+ </DL><p>
122
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Wayland Protocols</H3>
123
+ <DL><p>
124
+ <DT><A HREF="https://wayland.app/protocols/wlr-foreign-toplevel-management-unstable-v1">wlr-foreign-toplevel-management Protocol</A>
125
+ </DL><p>
126
+ </DL><p>
127
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">4. GNOME / GTK4 Development</H3>
128
+ <DL><p>
129
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">GNOME HIG &amp; Design</H3>
130
+ <DL><p>
131
+ <DT><A HREF="https://developer.gnome.org/hig/">GNOME Human Interface Guidelines</A>
132
+ <DT><A HREF="https://developer.gnome.org/documentation/guidelines/accessibility.html">GNOME Accessibility Guidelines</A>
133
+ <DT><A HREF="https://gnome.pages.gitlab.gnome.org/libadwaita/">Libadwaita Documentation</A>
134
+ </DL><p>
135
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">GTK4 API &amp; Testing</H3>
136
+ <DL><p>
137
+ <DT><A HREF="https://docs.gtk.org/gtk4/section-accessibility.html">GTK4 Accessibility Documentation</A>
138
+ <DT><A HREF="https://docs.gtk.org/gtk4/func.test_accessible_has_role.html">GTK4 Test Accessible Functions</A>
139
+ </DL><p>
140
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Ruby GTK4 Bindings</H3>
141
+ <DL><p>
142
+ <DT><A HREF="https://github.com/ruby-gnome/ruby-gnome">ruby-gnome Project</A>
143
+ <DT><A HREF="https://rubygems.org/gems/gtk4">gtk4 Gem (v4.3.5)</A>
144
+ <DT><A HREF="https://rubygems.org/gems/adwaita">adwaita Gem (v4.3.5)</A>
145
+ </DL><p>
146
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Build &amp; i18n</H3>
147
+ <DL><p>
148
+ <DT><A HREF="https://mesonbuild.com/i18n-module.html">Meson i18n Module</A>
149
+ </DL><p>
150
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Evidence: No GCC Plugin Support</H3>
151
+ <DL><p>
152
+ <DT><A HREF="https://github.com/pop-os/gnome-control-center/blob/e87068996f29fe812e94478d4cebc38741c1853d/debian/patches/system76_firmware.patch">Pop!_OS GNOME Control Center Fork Patch</A>
153
+ </DL><p>
154
+ </DL><p>
155
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">5. KDE / Qt6 Development</H3>
156
+ <DL><p>
157
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">KDE Development</H3>
158
+ <DL><p>
159
+ <DT><A HREF="https://develop.kde.org/docs/features/configuration/kcm/">KDE KCM Development Documentation</A>
160
+ <DT><A HREF="https://develop.kde.org/hig/">KDE Human Interface Guidelines</A>
161
+ <DT><A HREF="https://develop.kde.org/docs/features/configuration/porting_kf6/">KDE Frameworks 6 Porting Guide</A>
162
+ </DL><p>
163
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Qt6 Accessibility</H3>
164
+ <DL><p>
165
+ <DT><A HREF="https://doc.qt.io/qt-6/qaccessible.html">Qt6 QAccessible Documentation</A>
166
+ <DT><A HREF="https://community.kde.org/Accessibility/qt-atspi">KDE Accessibility / qt-atspi</A>
167
+ </DL><p>
168
+ </DL><p>
169
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">6. Accessibility Standards</H3>
170
+ <DL><p>
171
+ <DT><A HREF="https://www.etsi.org/deliver/etsi_en/301500_301599/301549/">EN 301 549 (EU Accessibility Standard)</A>
172
+ <DT><A HREF="https://www.w3.org/WAI/WCAG2/supplemental/patterns/o5p03-manageable-quantity/">WCAG 2.2 — Cognitive: Manageable Quantity</A>
173
+ <DT><A HREF="https://www.w3.org/WAI/cognitive/">W3C Cognitive Accessibility</A>
174
+ <DT><A HREF="https://documentation.ubuntu.com/desktop/en/latest/reference/accessibility/dbus/">AT-SPI2 D-Bus Interfaces (Ubuntu)</A>
175
+ </DL><p>
176
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">7. GUI Testing</H3>
177
+ <DL><p>
178
+ <DT><A HREF="https://gitlab.com/dogtail/dogtail">Dogtail — Cross-Toolkit GUI Testing (v1.0.7)</A>
179
+ <DT><A HREF="https://ydirson.gitlab.io/the-floss-cook/a11y/2020/04/29/dogtail-against-gtk-and-qt.html">Dogtail Against GTK and Qt (Article)</A>
180
+ <DT><A HREF="https://github.com/faaxm/spix">Spix — Qt6 UI Test Automation (MIT, KDAB)</A>
181
+ <DT><A HREF="https://wiki.debian.org/ContinuousIntegration/GUI">Debian CI GUI Testing</A>
182
+ </DL><p>
183
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">8. Compositor &amp; Window Manager Integration</H3>
184
+ <DL><p>
185
+ <DT><A HREF="https://github.com/veelenga/i3ipc-ruby">i3ipc Ruby Gem (sway/i3)</A>
186
+ <DT><A HREF="https://wiki.hyprland.org/IPC/">Hyprland IPC Documentation</A>
187
+ <DT><A HREF="https://awesomewm.org/doc/api/libraries/dbus.html">awesome WM D-Bus Module</A>
188
+ </DL><p>
189
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">9. Ruby Gems &amp; Libraries</H3>
190
+ <DL><p>
191
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Runtime Dependencies</H3>
192
+ <DL><p>
193
+ <DT><A HREF="https://rubygems.org/gems/thor">thor (~> 1.5) — CLI framework</A>
194
+ <DT><A HREF="https://rubygems.org/gems/zeitwerk">zeitwerk (~> 2.7) — Autoloader</A>
195
+ <DT><A HREF="https://rubygems.org/gems/json_schemer">json_schemer (~> 2.5) — JSON Schema validation</A>
196
+ <DT><A HREF="https://rubygems.org/gems/i18n">i18n (~> 1.14) — Internationalisation</A>
197
+ <DT><A HREF="https://rubygems.org/gems/gettext">gettext (~> 3.5) — i18n (gettext format)</A>
198
+ <DT><A HREF="https://rubygems.org/gems/anthropic">anthropic (~> 1.16) — Claude API client</A>
199
+ <DT><A HREF="https://rubygems.org/gems/faraday">faraday (~> 2.14) — HTTP client</A>
200
+ <DT><A HREF="https://rubygems.org/gems/jwt">jwt (~> 2.10) — JWT license tokens</A>
201
+ <DT><A HREF="https://rubygems.org/gems/jwt-eddsa">jwt-eddsa (~> 0.9) — Ed25519 JWT extension</A>
202
+ <DT><A HREF="https://rubygems.org/gems/ed25519">ed25519 (~> 1.4) — License key signing</A>
203
+ <DT><A HREF="https://rubygems.org/gems/tty-prompt">tty-prompt (~> 0.23) — Interactive prompts</A>
204
+ <DT><A HREF="https://rubygems.org/gems/tty-spinner">tty-spinner (~> 0.9) — CLI spinners</A>
205
+ <DT><A HREF="https://rubygems.org/gems/terminal-table">terminal-table (~> 4.0) — CLI table output</A>
206
+ <DT><A HREF="https://rubygems.org/gems/rainbow">rainbow (~> 3.1) — Terminal colours</A>
207
+ <DT><A HREF="https://rubygems.org/gems/paint">paint (~> 2.3) — Terminal colours</A>
208
+ <DT><A HREF="https://rubygems.org/gems/rubyzip">rubyzip (~> 2.4) — ZIP archive handling</A>
209
+ <DT><A HREF="https://rubygems.org/gems/json">json (~> 2.18) — JSON parsing</A>
210
+ </DL><p>
211
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Development Dependencies</H3>
212
+ <DL><p>
213
+ <DT><A HREF="https://rubygems.org/gems/rspec">rspec (~> 3.13) — Test framework</A>
214
+ <DT><A HREF="https://rubygems.org/gems/rubocop">rubocop (~> 1.82) — Linter</A>
215
+ <DT><A HREF="https://rubygems.org/gems/reek">reek (~> 6.5) — Code smell detection</A>
216
+ <DT><A HREF="https://rubygems.org/gems/mutant-rspec">mutant-rspec (~> 0.14) — Mutation testing</A>
217
+ <DT><A HREF="https://rubygems.org/gems/simplecov">simplecov (~> 0.22) — Coverage</A>
218
+ <DT><A HREF="https://rubygems.org/gems/factory_bot">factory_bot (~> 6.5) — Test factories</A>
219
+ <DT><A HREF="https://rubygems.org/gems/fakefs">fakefs (~> 3.2) — Filesystem stubs</A>
220
+ <DT><A HREF="https://rubygems.org/gems/rantly">rantly (~> 3.0) — Property-based testing</A>
221
+ <DT><A HREF="https://rubygems.org/gems/webmock">webmock (~> 3.26) — HTTP mocking</A>
222
+ <DT><A HREF="https://rubygems.org/gems/bundler-audit">bundler-audit (~> 0.9) — CVE audit</A>
223
+ <DT><A HREF="https://rubygems.org/gems/ruby_audit">ruby_audit (~> 3.1) — Ruby CVE audit</A>
224
+ <DT><A HREF="https://rubygems.org/gems/flay">flay (~> 2.14) — Duplication detection</A>
225
+ <DT><A HREF="https://rubygems.org/gems/overcommit">overcommit (~> 0.68) — Git hooks</A>
226
+ <DT><A HREF="https://rubygems.org/gems/ronn-ng">ronn-ng (~> 0.10) — Man page generation</A>
227
+ <DT><A HREF="https://rubygems.org/gems/yard">yard (~> 0.9) — Documentation</A>
228
+ <DT><A HREF="https://rubygems.org/gems/mdl">mdl (~> 0.15) — Markdown lint</A>
229
+ <DT><A HREF="https://rubygems.org/gems/fpm">fpm (~> 1.17) — Package builder</A>
230
+ </DL><p>
231
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Future / Desktop Dependencies</H3>
232
+ <DL><p>
233
+ <DT><A HREF="https://rubygems.org/gems/ruby-dbus">ruby-dbus (0.24.0) — D-Bus IPC</A>
234
+ <DT><A HREF="https://rubygems.org/gems/gtk4">gtk4 (4.3.5) — GTK4 bindings</A>
235
+ <DT><A HREF="https://rubygems.org/gems/adwaita">adwaita (4.3.5) — Libadwaita bindings</A>
236
+ <DT><A HREF="https://rubygems.org/gems/i3ipc">i3ipc — sway/i3 IPC</A>
237
+ <DT><A HREF="https://rubygems.org/gems/mcp">mcp (0.9.2) — MCP server SDK</A>
238
+ </DL><p>
239
+ </DL><p>
240
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">10. Build, Packaging &amp; Distribution</H3>
241
+ <DL><p>
242
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Build Tools</H3>
243
+ <DL><p>
244
+ <DT><A HREF="https://github.com/jordansissel/fpm">fpm Project (GitHub)</A>
245
+ <DT><A HREF="https://fpm.readthedocs.io/en/latest/">fpm Documentation (ReadTheDocs)</A>
246
+ <DT><A HREF="https://github.com/rbenv/rbenv">rbenv — Ruby Version Manager</A>
247
+ <DT><A HREF="https://github.com/rbenv/ruby-build">ruby-build — Compile Ruby from Source</A>
248
+ </DL><p>
249
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Debian Packaging</H3>
250
+ <DL><p>
251
+ <DT><A HREF="https://man7.org/linux/man-pages/man1/dpkg-deb.1.html">dpkg-deb Man Page</A>
252
+ <DT><A HREF="https://wiki.debian.org/FakeRoot">Debian FakeRoot Wiki</A>
253
+ <DT><A HREF="https://rsync.samba.org/">rsync Homepage</A>
254
+ <DT><A HREF="https://download.samba.org/pub/rsync/rsync.1">rsync Man Page</A>
255
+ </DL><p>
256
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">System Libraries</H3>
257
+ <DL><p>
258
+ <DT><A HREF="https://www.gnu.org/software/libc/">GNU C Library (glibc)</A>
259
+ <DT><A HREF="https://www.openssl.org/">OpenSSL</A>
260
+ <DT><A HREF="https://www.zlib.net/">zlib</A>
261
+ <DT><A HREF="https://pyyaml.org/wiki/LibYAML">LibYAML</A>
262
+ </DL><p>
263
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Repository Management</H3>
264
+ <DL><p>
265
+ <DT><A HREF="https://pulpproject.org">Pulp Project — Multi-Format Repository</A>
266
+ </DL><p>
267
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">Versioning &amp; Changelog</H3>
268
+ <DL><p>
269
+ <DT><A HREF="https://semver.org">Semantic Versioning 2.0.0</A>
270
+ <DT><A HREF="https://keepachangelog.com/en/1.1.0/">Keep a Changelog 1.1.0</A>
271
+ <DT><A HREF="https://git-cliff.org/docs/configuration">git-cliff Configuration Reference</A>
272
+ </DL><p>
273
+ </DL><p>
274
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">11. Code Quality &amp; Development Tools</H3>
275
+ <DL><p>
276
+ <DT><A HREF="https://github.com/troessner/reek">Reek — Code Smell Detector</A>
277
+ <DT><A HREF="https://github.com/troessner/reek/blob/master/docs/Reek-4-to-Reek-5-migration.md">Reek 4-to-5 Migration Guide</A>
278
+ <DT><A HREF="https://github.com/troessner/reek/blob/master/docs/Duplicate-Method-Call.md">Reek: Duplicate Method Call Documentation</A>
279
+ <DT><A HREF="https://github.com/sds/overcommit">Overcommit — Git Hook Manager</A>
280
+ <DT><A HREF="https://rubygems.org">RubyGems Package Registry</A>
281
+ <DT><A HREF="https://json-schema.org/draft/2020-12/schema">JSON Schema Draft 2020-12</A>
282
+ </DL><p>
283
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">12. Standards &amp; Specifications</H3>
284
+ <DL><p>
285
+ <DT><A HREF="https://specifications.freedesktop.org/basedir/latest/">XDG Base Directory Specification</A>
286
+ <DT><A HREF="https://wiki.archlinux.org/title/XDG_Base_Directory">XDG Base Directory (ArchWiki)</A>
287
+ <DT><A HREF="https://userbase.kde.org/KDE_System_Administration/XDG_Filesystem_Hierarchy">KDE XDG Filesystem Hierarchy</A>
288
+ <DT><A HREF="https://endoflife.date/api/ruby.json">Ruby End-of-Life Dates (API)</A>
289
+ <DT><A HREF="https://www.ruby-lang.org/en/downloads/releases/">Ruby Official Releases</A>
290
+ </DL><p>
291
+ <DT><H3 ADD_DATE="1740528000" LAST_MODIFIED="1740528000">13. Project Infrastructure</H3>
292
+ <DL><p>
293
+ <DT><A HREF="https://gitlab.neatnerds.be/neatnerds/nncc">nncc Repository (GitLab)</A>
294
+ <DT><A HREF="https://gitlab.neatnerds.be/neatnerds/nncc/-/releases">nncc Releases</A>
295
+ <DT><A HREF="https://neatnerds.be/nncc/pricing">nncc Content Pack Pricing</A>
296
+ <DT><A HREF="https://repo.neatnerds.be/gpg.key">APT Repository GPG Key</A>
297
+ <DT><A HREF="https://repo.neatnerds.be/stable">APT Repository (stable)</A>
298
+ <DT><A HREF="https://repo.neatnerds.be/stable/rpm">RPM Repository (stable)</A>
299
+ </DL><p>
300
+ </DL><p>
301
+ </DL><p>