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.
- checksums.yaml +7 -0
- data/.ai-provenance.yml +119 -0
- data/.debride_whitelist +186 -0
- data/.fasterer.yml +29 -0
- data/.mdl_style.rb +10 -0
- data/.mdlrc +3 -0
- data/.mutant.yml +49 -0
- data/.namespace-allowlist +42 -0
- data/.reek.yml +1040 -0
- data/.rosett-ai/config.yml +3 -0
- data/.rspec +5 -0
- data/.rubocop.yml +380 -0
- data/.ruby-version +1 -0
- data/.yamllint +51 -0
- data/.yardopts +12 -0
- data/AI-DISCLOSURE.md +48 -0
- data/CHANGELOG.md +519 -0
- data/CLAUDE.md +141 -0
- data/CONTRIBUTING.md +734 -0
- data/INSTALL.md +154 -0
- data/LICENSE +674 -0
- data/LICENSE.md +675 -0
- data/QUICKSTART.md +73 -0
- data/README.md +366 -0
- data/Rakefile +200 -0
- data/SECURITY.md +114 -0
- data/bin/rai +1 -0
- data/cliff.toml +52 -0
- data/conf/adopt_redactions.yml +8 -0
- data/conf/behaviour/.gitkeep +0 -0
- data/conf/compliance/cra_rules.yml +25 -0
- data/conf/compliance/license_rules.yml +20 -0
- data/conf/design/aaif_alignment.yml +181 -0
- data/conf/design/ab_testing.yml +172 -0
- data/conf/design/accessibility.yml +84 -0
- data/conf/design/ai_authorship.yml +210 -0
- data/conf/design/ai_provenance.yml +224 -0
- data/conf/design/ai_tool_configuration.yml +207 -0
- data/conf/design/architecture.yml +139 -0
- data/conf/design/autocompletion.yml +115 -0
- data/conf/design/backward_compatibility.yml +112 -0
- data/conf/design/behaviour_composition.yml +246 -0
- data/conf/design/build_rake_extraction.yml +57 -0
- data/conf/design/ci_pipeline.yml +100 -0
- data/conf/design/claude_code_configuration.yml +157 -0
- data/conf/design/compiler.yml +128 -0
- data/conf/design/comply.yml +153 -0
- data/conf/design/content_packs.yml +84 -0
- data/conf/design/desktop_integration.yml +289 -0
- data/conf/design/distribution.yml +216 -0
- data/conf/design/doctor.yml +184 -0
- data/conf/design/documentation.yml +152 -0
- data/conf/design/engine_architecture.yml +257 -0
- data/conf/design/error_handling.yml +103 -0
- data/conf/design/feature_flags.yml +142 -0
- data/conf/design/git_hooks.yml +165 -0
- data/conf/design/gui_plugins.yml +475 -0
- data/conf/design/i18n.yml +84 -0
- data/conf/design/integration_testing.yml +56 -0
- data/conf/design/licensing_system.yml +88 -0
- data/conf/design/lifecycle_management.yml +208 -0
- data/conf/design/mcp_integration.yml +207 -0
- data/conf/design/mcp_settings.yml +126 -0
- data/conf/design/migration.yml +56 -0
- data/conf/design/monitoring_observability.yml +194 -0
- data/conf/design/namespace_cleanup.yml +145 -0
- data/conf/design/plugin_test_segregation.yml +145 -0
- data/conf/design/policy_management.yml +229 -0
- data/conf/design/project_management.yml +183 -0
- data/conf/design/rai_mcp_asset_discovery.yml +164 -0
- data/conf/design/rai_mcp_server.yml +605 -0
- data/conf/design/release_management.yml +117 -0
- data/conf/design/retrofit.yml +199 -0
- data/conf/design/retrospective_analyzer.yml +79 -0
- data/conf/design/scope_hierarchy.yml +352 -0
- data/conf/design/security.yml +115 -0
- data/conf/design/session_retrospective.yml +85 -0
- data/conf/design/smart_ui_feedback.yml +89 -0
- data/conf/design/structured_logging.yml +148 -0
- data/conf/design/styles.yml +123 -0
- data/conf/design/test_peer_review.yml +89 -0
- data/conf/design/testing.yml +136 -0
- data/conf/design/threat_model.yml +108 -0
- data/conf/design/ui_framework.yml +111 -0
- data/conf/design/usage_optimization.yml +122 -0
- data/conf/design/version_management.yml +60 -0
- data/conf/design/workflow.yml +227 -0
- data/conf/mcp/server_defaults.yml +42 -0
- data/conf/mcp/trust.yml +21 -0
- data/conf/packaging/core.yml +12 -0
- data/conf/packaging/gtk4.yml +11 -0
- data/conf/packaging/qt6.yml +11 -0
- data/conf/policy/default_deny_list.yml +197 -0
- data/conf/review/cli-command-audit.yml +857 -0
- data/conf/review/design-docs.yml +1064 -0
- data/conf/review/design-questionnaire.yml +153 -0
- data/conf/review/questionnaire.yml +146 -0
- data/conf/review/rosett-ai-core.yml +2919 -0
- data/conf/schemas/ai_config_schema.json +73 -0
- data/conf/schemas/behaviour_schema.json +132 -0
- data/conf/schemas/compliance_rule_schema.json +63 -0
- data/conf/schemas/content_pack_manifest_schema.json +51 -0
- data/conf/schemas/design_schema.json +210 -0
- data/conf/schemas/engine_manifest_schema.json +144 -0
- data/conf/schemas/lockfile_schema.json +74 -0
- data/conf/schemas/mcp_server_schema.json +48 -0
- data/conf/schemas/packaging_schema.json +70 -0
- data/conf/schemas/policy_schema.json +85 -0
- data/conf/schemas/provenance_schema.json +84 -0
- data/conf/schemas/rai_config_schema.json +56 -0
- data/conf/schemas/rai_project_schema.json +20 -0
- data/conf/schemas/scope_hierarchy_schema.json +49 -0
- data/conf/schemas/target_schema.json +67 -0
- data/conf/schemas/tooling_schema.json +65 -0
- data/conf/schemas/workflow_schema.json +112 -0
- data/conf/targets/agents_md.yml +17 -0
- data/conf/targets/claude.yml +12 -0
- data/conf/tooling/tools.yml +58 -0
- data/dist/rosett-ai-mcp.service +48 -0
- data/dist/rosett-ai-mcp.yml.default +45 -0
- data/doc/AAIF_POSITIONING.md +58 -0
- data/doc/ADOPT.md +224 -0
- data/doc/AI_PROVENANCE.md +139 -0
- data/doc/ARCHITECTURE.md +920 -0
- data/doc/BEHAVIOUR.md +409 -0
- data/doc/BUILD.md +138 -0
- data/doc/CI_CD_RECIPES.md +171 -0
- data/doc/CLAUDE_SESSIONS_MOVED.md +16 -0
- data/doc/COMMAND_ANALYSIS.md +229 -0
- data/doc/CONFIGURATION.md +281 -0
- data/doc/DESIGN_AUDIT.md +235 -0
- data/doc/DESIGN_PEER_REVIEW.md +771 -0
- data/doc/DESKTOP.md +447 -0
- data/doc/ENGINES.md +567 -0
- data/doc/ENGINE_DEVELOPMENT_GUIDE.md +417 -0
- data/doc/FEATURE_AUDIT.md +218 -0
- data/doc/IMPLEMENTATION_PLAN.md +669 -0
- data/doc/INCIDENT_REPORT_2026-02-02.md +251 -0
- data/doc/MIGRATION_GUIDE.md +88 -0
- data/doc/PACKAGING.md +232 -0
- data/doc/PROJECT_DASHBOARD.md +153 -0
- data/doc/PULP_DEPLOYMENT.md +164 -0
- data/doc/QUALITY_FIX_SUMMARY.md +110 -0
- data/doc/QUICK_START.md +162 -0
- data/doc/REEK_CONFIGURATION.md +166 -0
- data/doc/REFERENCE.md +253 -0
- data/doc/REFERENCES.md +324 -0
- data/doc/SECURITY_REVIEW_CHECKLIST.md +72 -0
- data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +359 -0
- data/doc/SETUP.md +202 -0
- data/doc/TEST_PEER_REVIEW.md +152 -0
- data/doc/THREAT_MODEL.md +230 -0
- data/doc/USAGE.md +545 -0
- data/doc/USER_MANUAL.md +585 -0
- data/doc/ai_test_review_checklist.md +110 -0
- data/doc/changes/2026-02-18-packaging-fpm.md +155 -0
- data/doc/changes/2026-02-19-testing-infrastructure.md +221 -0
- data/doc/changes/2026-02-20-security-implementation.md +281 -0
- data/doc/changes/2026-02-20-styles-implementation.md +220 -0
- data/doc/changes/2026-02-21-architecture-completion.md +95 -0
- data/doc/changes/2026-02-21-architecture-ui-layer.md +253 -0
- data/doc/changes/2026-02-21-cc-config-implementation.md +108 -0
- data/doc/changes/2026-02-21-ci-pipeline-implementation.md +214 -0
- data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +241 -0
- data/doc/changes/2026-02-21-config-design-show-commands.md +61 -0
- data/doc/changes/2026-02-21-design-implementation-overview.md +455 -0
- data/doc/changes/2026-02-21-lifecycle-management.md +196 -0
- data/doc/changes/2026-02-21-path-resolver.md +128 -0
- data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +45 -0
- data/doc/changes/2026-03-01-ci-bundler-strategy.md +120 -0
- data/doc/changes/2026-03-20-security-hardening-phase2.md +163 -0
- data/doc/context/SESSION-HANDOFF.md +69 -0
- data/doc/context/ai-engine-usage-trends-2026.md +80 -0
- data/doc/context/plan-pluggable-engines.md +590 -0
- data/doc/decisions/001-flog-deferred.md +32 -0
- data/doc/decisions/002-path-resolution-strategy.md +158 -0
- data/doc/decisions/003-ui-adapter-selection.md +193 -0
- data/doc/decisions/004-design-document-validation.md +179 -0
- data/doc/decisions/005-package-splitting-strategy.md +200 -0
- data/doc/decisions/006-multi-engine-architecture.md +147 -0
- data/doc/decisions/007-engine-agnostic-pivot.md +219 -0
- data/doc/decisions/008-ci-bundler-strategy.md +129 -0
- data/doc/decisions/009-core-only-v1-release.md +60 -0
- data/doc/decisions/010-engine-debian-packaging.md +66 -0
- data/doc/decisions/011-context-aware-cli.md +71 -0
- data/doc/dependency_decisions.yml +247 -0
- data/doc/issues/001-wrapper-missing-environment-variables.md +197 -0
- data/doc/issues/002-embedded-ruby-wrong-prefix.md +217 -0
- data/doc/issues/003-smoke-test-false-positive.md +127 -0
- data/doc/issues/004-market-research-design-updates.md +109 -0
- data/doc/issues/005-compile-scope-coexistence.md +161 -0
- data/doc/locales/.gitkeep +0 -0
- data/doc/man/rai.1.ronn +505 -0
- data/doc/operations/packaging.md +133 -0
- data/doc/operations/rosett-ai-release.md +65 -0
- data/doc/reference/error-catalog.md +107 -0
- data/doc/reference/rosett-ai-technical-reference.pdf +0 -0
- data/doc/reference/src/Pictures/cover.jpg +0 -0
- data/doc/reference/src/Pictures/head1.jpg +0 -0
- data/doc/reference/src/Pictures/head2.jpg +0 -0
- data/doc/reference/src/Pictures/head3.jpg +0 -0
- data/doc/reference/src/Pictures/head4.jpg +0 -0
- data/doc/reference/src/Pictures/head5.jpg +0 -0
- data/doc/reference/src/Pictures/head6.jpg +0 -0
- data/doc/reference/src/Pictures/head7.jpg +0 -0
- data/doc/reference/src/Pictures/head8.jpg +0 -0
- data/doc/reference/src/StyleInd.ist +4 -0
- data/doc/reference/src/bibliography.bib +79 -0
- data/doc/reference/src/main.tex +1288 -0
- data/doc/reference/src/structure.tex +303 -0
- data/doc/rosett-ai-bookmarks.html +301 -0
- data/kitchen.yml +46 -0
- data/lib/rosett_ai/adopter/executor_resolver.rb +77 -0
- data/lib/rosett_ai/adopter/local_analysis_collector.rb +154 -0
- data/lib/rosett_ai/adopter/rule_adopter.rb +254 -0
- data/lib/rosett_ai/ai_config/config_compiler.rb +111 -0
- data/lib/rosett_ai/ai_config/context_window.rb +55 -0
- data/lib/rosett_ai/ai_config/cost_controls.rb +44 -0
- data/lib/rosett_ai/ai_config/fallback_chain.rb +64 -0
- data/lib/rosett_ai/ai_config/model_router.rb +121 -0
- data/lib/rosett_ai/ai_config/validator.rb +45 -0
- data/lib/rosett_ai/authorship/attribution_compiler.rb +99 -0
- data/lib/rosett_ai/authorship/disclosure_policy.rb +81 -0
- data/lib/rosett_ai/authorship/review_validator.rb +39 -0
- data/lib/rosett_ai/authorship/trailer_generator.rb +88 -0
- data/lib/rosett_ai/backup/compressor.rb +180 -0
- data/lib/rosett_ai/backup/destination.rb +91 -0
- data/lib/rosett_ai/behaviour/manager.rb +156 -0
- data/lib/rosett_ai/compiler/backend.rb +86 -0
- data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +80 -0
- data/lib/rosett_ai/compiler/backends/claude_backend.rb +88 -0
- data/lib/rosett_ai/compiler/backends/generic_backend.rb +15 -0
- data/lib/rosett_ai/compiler/behaviour_compiler.rb +40 -0
- data/lib/rosett_ai/compiler/capability_checker.rb +104 -0
- data/lib/rosett_ai/compiler/compilation_pipeline.rb +361 -0
- data/lib/rosett_ai/compiler/compiled_output.rb +39 -0
- data/lib/rosett_ai/compiler/locale_compiler.rb +250 -0
- data/lib/rosett_ai/compiler/target_profile.rb +112 -0
- data/lib/rosett_ai/completion/generator.rb +101 -0
- data/lib/rosett_ai/completion/shells/bash_generator.rb +126 -0
- data/lib/rosett_ai/completion/shells/fish_generator.rb +78 -0
- data/lib/rosett_ai/completion/shells/zsh_generator.rb +126 -0
- data/lib/rosett_ai/comply/checkers/cra_checker.rb +102 -0
- data/lib/rosett_ai/comply/checkers/license_checker.rb +85 -0
- data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +98 -0
- data/lib/rosett_ai/comply/reporter.rb +113 -0
- data/lib/rosett_ai/comply/runner.rb +50 -0
- data/lib/rosett_ai/composition/circular_dependency_detector.rb +56 -0
- data/lib/rosett_ai/composition/composer.rb +158 -0
- data/lib/rosett_ai/composition/composition_result.rb +64 -0
- data/lib/rosett_ai/composition/conflict_detector.rb +53 -0
- data/lib/rosett_ai/composition/lockfile.rb +103 -0
- data/lib/rosett_ai/composition/merge_strategy.rb +131 -0
- data/lib/rosett_ai/composition/priority_sorter.rb +29 -0
- data/lib/rosett_ai/composition/scope_resolver.rb +55 -0
- data/lib/rosett_ai/config/compile_result.rb +37 -0
- data/lib/rosett_ai/config/compiler.rb +13 -0
- data/lib/rosett_ai/config/domain_transformer.rb +13 -0
- data/lib/rosett_ai/config/key_map.rb +13 -0
- data/lib/rosett_ai/config/masking_secret_resolver.rb +40 -0
- data/lib/rosett_ai/config/scope_router.rb +13 -0
- data/lib/rosett_ai/config/secret_resolver.rb +125 -0
- data/lib/rosett_ai/configuration.rb +119 -0
- data/lib/rosett_ai/content/content_client.rb +60 -0
- data/lib/rosett_ai/content/pack_installer.rb +117 -0
- data/lib/rosett_ai/content/pack_manifest.rb +50 -0
- data/lib/rosett_ai/content/pack_registry.rb +68 -0
- data/lib/rosett_ai/content_packs/manager.rb +50 -0
- data/lib/rosett_ai/dbus/compositor_detector.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/base.rb +59 -0
- data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +172 -0
- data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +77 -0
- data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +65 -0
- data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +103 -0
- data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +105 -0
- data/lib/rosett_ai/dbus/focus_monitor_interface.rb +103 -0
- data/lib/rosett_ai/dbus/manager_interface.rb +213 -0
- data/lib/rosett_ai/dbus/plugin_manager_interface.rb +169 -0
- data/lib/rosett_ai/dbus/rate_limiter.rb +89 -0
- data/lib/rosett_ai/dbus/service.rb +121 -0
- data/lib/rosett_ai/dbus/status_notifier_interface.rb +79 -0
- data/lib/rosett_ai/deprecation.rb +79 -0
- data/lib/rosett_ai/desktop/dbus_client.rb +259 -0
- data/lib/rosett_ai/desktop/gtk4_app.rb +371 -0
- data/lib/rosett_ai/desktop/gtk4_preferences.rb +331 -0
- data/lib/rosett_ai/desktop/gui_logger.rb +236 -0
- data/lib/rosett_ai/doctor/check.rb +92 -0
- data/lib/rosett_ai/doctor/checks/cache_health_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/dbus_availability_check.rb +39 -0
- data/lib/rosett_ai/doctor/checks/engine_detection_check.rb +46 -0
- data/lib/rosett_ai/doctor/checks/file_permission_check.rb +44 -0
- data/lib/rosett_ai/doctor/checks/gem_dependency_check.rb +55 -0
- data/lib/rosett_ai/doctor/checks/ruby_version_check.rb +50 -0
- data/lib/rosett_ai/doctor/checks/stale_config_nncc_check.rb +57 -0
- data/lib/rosett_ai/doctor/checks/stale_home_nncc_check.rb +59 -0
- data/lib/rosett_ai/doctor.rb +81 -0
- data/lib/rosett_ai/documentation/reference_compiler.rb +122 -0
- data/lib/rosett_ai/documentation/translator.rb +62 -0
- data/lib/rosett_ai/engines/base_config_compiler.rb +203 -0
- data/lib/rosett_ai/engines/detector.rb +63 -0
- data/lib/rosett_ai/engines/registry.rb +50 -0
- data/lib/rosett_ai/error_handler.rb +139 -0
- data/lib/rosett_ai/exit_codes.rb +76 -0
- data/lib/rosett_ai/feature_flags.rb +102 -0
- data/lib/rosett_ai/formatting.rb +33 -0
- data/lib/rosett_ai/gem_consistency_checker.rb +199 -0
- data/lib/rosett_ai/git_hooks/chain_detector.rb +86 -0
- data/lib/rosett_ai/git_hooks/installer.rb +175 -0
- data/lib/rosett_ai/git_hooks/script_generator.rb +125 -0
- data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +79 -0
- data/lib/rosett_ai/i18n/locale_resolver.rb +46 -0
- data/lib/rosett_ai/i18n/utf8_checker.rb +32 -0
- data/lib/rosett_ai/init/config_file_writer.rb +24 -0
- data/lib/rosett_ai/init/directory_builder.rb +38 -0
- data/lib/rosett_ai/init/file_copier.rb +95 -0
- data/lib/rosett_ai/init/global_initializer.rb +28 -0
- data/lib/rosett_ai/init/local_initializer.rb +27 -0
- data/lib/rosett_ai/init/mcp_registrar.rb +109 -0
- data/lib/rosett_ai/init/project_initializer.rb +38 -0
- data/lib/rosett_ai/licensing/license_key.rb +139 -0
- data/lib/rosett_ai/licensing/license_store.rb +64 -0
- data/lib/rosett_ai/licensing/license_validator.rb +60 -0
- data/lib/rosett_ai/licensing/tier.rb +42 -0
- data/lib/rosett_ai/mcp/admin/auditor.rb +88 -0
- data/lib/rosett_ai/mcp/admin/health_checker.rb +81 -0
- data/lib/rosett_ai/mcp/admin/registry.rb +100 -0
- data/lib/rosett_ai/mcp/admin/schema_validator.rb +63 -0
- data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
- data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +197 -0
- data/lib/rosett_ai/mcp/enforcement/validator.rb +215 -0
- data/lib/rosett_ai/mcp/governance.rb +160 -0
- data/lib/rosett_ai/mcp/http_security_config.rb +158 -0
- data/lib/rosett_ai/mcp/instructions.rb +266 -0
- data/lib/rosett_ai/mcp/key_hasher.rb +66 -0
- data/lib/rosett_ai/mcp/keyfile.rb +221 -0
- data/lib/rosett_ai/mcp/middleware/authentication.rb +146 -0
- data/lib/rosett_ai/mcp/middleware/content_type.rb +56 -0
- data/lib/rosett_ai/mcp/middleware/cors.rb +83 -0
- data/lib/rosett_ai/mcp/middleware/origin_validation.rb +73 -0
- data/lib/rosett_ai/mcp/middleware/rate_limit.rb +106 -0
- data/lib/rosett_ai/mcp/middleware/request_size.rb +51 -0
- data/lib/rosett_ai/mcp/plugins.rb +143 -0
- data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +40 -0
- data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +41 -0
- data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +127 -0
- data/lib/rosett_ai/mcp/resources/config_resource.rb +72 -0
- data/lib/rosett_ai/mcp/resources/design_resource.rb +58 -0
- data/lib/rosett_ai/mcp/resources/hooks_resource.rb +74 -0
- data/lib/rosett_ai/mcp/resources/provenance_resource.rb +51 -0
- data/lib/rosett_ai/mcp/resources/rules_resource.rb +60 -0
- data/lib/rosett_ai/mcp/resources/schema_resource.rb +72 -0
- data/lib/rosett_ai/mcp/response_helper.rb +46 -0
- data/lib/rosett_ai/mcp/security_logger.rb +60 -0
- data/lib/rosett_ai/mcp/server.rb +212 -0
- data/lib/rosett_ai/mcp/settings/server_installer.rb +112 -0
- data/lib/rosett_ai/mcp/settings/trust_manager.rb +142 -0
- data/lib/rosett_ai/mcp/tools/adopt_tool.rb +70 -0
- data/lib/rosett_ai/mcp/tools/backup_tool.rb +64 -0
- data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +72 -0
- data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +56 -0
- data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +114 -0
- data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +122 -0
- data/lib/rosett_ai/mcp/tools/compile_tool.rb +191 -0
- data/lib/rosett_ai/mcp/tools/comply_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +71 -0
- data/lib/rosett_ai/mcp/tools/config_status_tool.rb +79 -0
- data/lib/rosett_ai/mcp/tools/content_tool.rb +78 -0
- data/lib/rosett_ai/mcp/tools/context_query_tool.rb +156 -0
- data/lib/rosett_ai/mcp/tools/design_list_tool.rb +57 -0
- data/lib/rosett_ai/mcp/tools/design_show_tool.rb +69 -0
- data/lib/rosett_ai/mcp/tools/doctor_tool.rb +62 -0
- data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +45 -0
- data/lib/rosett_ai/mcp/tools/engines_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +190 -0
- data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +173 -0
- data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +84 -0
- data/lib/rosett_ai/mcp/tools/init_tool.rb +87 -0
- data/lib/rosett_ai/mcp/tools/license_status_tool.rb +44 -0
- data/lib/rosett_ai/mcp/tools/project_tool.rb +117 -0
- data/lib/rosett_ai/mcp/tools/provenance_tool.rb +97 -0
- data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +40 -0
- data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +81 -0
- data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +163 -0
- data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +94 -0
- data/lib/rosett_ai/mcp/tools/tooling_tool.rb +86 -0
- data/lib/rosett_ai/mcp/tools/validate_tool.rb +105 -0
- data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +74 -0
- data/lib/rosett_ai/mcp/tools/workflow_tool.rb +78 -0
- data/lib/rosett_ai/migration/detector.rb +117 -0
- data/lib/rosett_ai/migration/nncc_config_migrator.rb +94 -0
- data/lib/rosett_ai/migration/nncc_project_migrator.rb +90 -0
- data/lib/rosett_ai/migration/xdg_migrator.rb +123 -0
- data/lib/rosett_ai/package_manager/apt.rb +108 -0
- data/lib/rosett_ai/package_manager/base.rb +68 -0
- data/lib/rosett_ai/package_manager/gem_backend.rb +90 -0
- data/lib/rosett_ai/packaging/variant_config.rb +92 -0
- data/lib/rosett_ai/path_resolver.rb +115 -0
- data/lib/rosett_ai/plugins/contract.rb +43 -0
- data/lib/rosett_ai/plugins/engine_contract.rb +60 -0
- data/lib/rosett_ai/plugins/gui_contract.rb +74 -0
- data/lib/rosett_ai/plugins/mcp_contract.rb +48 -0
- data/lib/rosett_ai/plugins/registry.rb +150 -0
- data/lib/rosett_ai/policy/auditor.rb +41 -0
- data/lib/rosett_ai/policy/deny_list.rb +71 -0
- data/lib/rosett_ai/policy/opt_out_scanner.rb +37 -0
- data/lib/rosett_ai/policy/policy_compiler.rb +84 -0
- data/lib/rosett_ai/policy/protected_files.rb +47 -0
- data/lib/rosett_ai/policy/tier_hierarchy.rb +48 -0
- data/lib/rosett_ai/policy/validator.rb +35 -0
- data/lib/rosett_ai/profiler.rb +79 -0
- data/lib/rosett_ai/project/drift_detector.rb +126 -0
- data/lib/rosett_ai/project/manager.rb +115 -0
- data/lib/rosett_ai/project/sync_manager.rb +138 -0
- data/lib/rosett_ai/project/template_applier.rb +105 -0
- data/lib/rosett_ai/project_context.rb +82 -0
- data/lib/rosett_ai/provenance/entry.rb +63 -0
- data/lib/rosett_ai/provenance/file_source.rb +32 -0
- data/lib/rosett_ai/provenance/source.rb +62 -0
- data/lib/rosett_ai/provenance/store.rb +153 -0
- data/lib/rosett_ai/provenance/tracker.rb +62 -0
- data/lib/rosett_ai/provenance/trailer_generator.rb +43 -0
- data/lib/rosett_ai/provenance/validator.rb +45 -0
- data/lib/rosett_ai/quorum/collector.rb +59 -0
- data/lib/rosett_ai/quorum/comparator.rb +81 -0
- data/lib/rosett_ai/quorum/dispatcher.rb +57 -0
- data/lib/rosett_ai/quorum/strategies/adopt.rb +56 -0
- data/lib/rosett_ai/rai_config.rb +107 -0
- data/lib/rosett_ai/retrofit/base_parser.rb +66 -0
- data/lib/rosett_ai/retrofit/engine.rb +171 -0
- data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +50 -0
- data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +69 -0
- data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +82 -0
- data/lib/rosett_ai/retrofit/round_trip_validator.rb +65 -0
- data/lib/rosett_ai/retrofit/scanner.rb +47 -0
- data/lib/rosett_ai/retrofit/secret_detector.rb +87 -0
- data/lib/rosett_ai/secrets_resolver.rb +71 -0
- data/lib/rosett_ai/smart_feedback/suggester.rb +83 -0
- data/lib/rosett_ai/smart_feedback/thor_middleware.rb +84 -0
- data/lib/rosett_ai/structured_logger.rb +110 -0
- data/lib/rosett_ai/telemetry/json_lines_writer.rb +50 -0
- data/lib/rosett_ai/telemetry/log_rotator.rb +67 -0
- data/lib/rosett_ai/telemetry/provider.rb +26 -0
- data/lib/rosett_ai/telemetry/reporter.rb +144 -0
- data/lib/rosett_ai/telemetry.rb +47 -0
- data/lib/rosett_ai/text_sanitizer.rb +62 -0
- data/lib/rosett_ai/thor/cli.rb +269 -0
- data/lib/rosett_ai/thor/tasks/adopt.rb +250 -0
- data/lib/rosett_ai/thor/tasks/backup.rb +420 -0
- data/lib/rosett_ai/thor/tasks/behaviour.rb +474 -0
- data/lib/rosett_ai/thor/tasks/build.rb +1162 -0
- data/lib/rosett_ai/thor/tasks/compile.rb +415 -0
- data/lib/rosett_ai/thor/tasks/completion.rb +123 -0
- data/lib/rosett_ai/thor/tasks/comply.rb +82 -0
- data/lib/rosett_ai/thor/tasks/config.rb +265 -0
- data/lib/rosett_ai/thor/tasks/content.rb +193 -0
- data/lib/rosett_ai/thor/tasks/dbus.rb +321 -0
- data/lib/rosett_ai/thor/tasks/design.rb +258 -0
- data/lib/rosett_ai/thor/tasks/desktop.rb +129 -0
- data/lib/rosett_ai/thor/tasks/doctor.rb +127 -0
- data/lib/rosett_ai/thor/tasks/documentation.rb +321 -0
- data/lib/rosett_ai/thor/tasks/engines.rb +167 -0
- data/lib/rosett_ai/thor/tasks/hooks.rb +219 -0
- data/lib/rosett_ai/thor/tasks/init.rb +259 -0
- data/lib/rosett_ai/thor/tasks/license.rb +120 -0
- data/lib/rosett_ai/thor/tasks/mcp.rb +535 -0
- data/lib/rosett_ai/thor/tasks/migrate.rb +121 -0
- data/lib/rosett_ai/thor/tasks/plugins.rb +157 -0
- data/lib/rosett_ai/thor/tasks/project.rb +260 -0
- data/lib/rosett_ai/thor/tasks/provenance.rb +195 -0
- data/lib/rosett_ai/thor/tasks/release.rb +314 -0
- data/lib/rosett_ai/thor/tasks/retrofit.rb +90 -0
- data/lib/rosett_ai/thor/tasks/tooling.rb +308 -0
- data/lib/rosett_ai/thor/tasks/validate.rb +108 -0
- data/lib/rosett_ai/thor/tasks/workflow.rb +196 -0
- data/lib/rosett_ai/tooling/ci_yaml_validator.rb +37 -0
- data/lib/rosett_ai/tooling/version_checker.rb +35 -0
- data/lib/rosett_ai/ui/accessible_tui.rb +61 -0
- data/lib/rosett_ai/ui/base.rb +46 -0
- data/lib/rosett_ai/ui/gtk4.rb +98 -0
- data/lib/rosett_ai/ui/kde.rb +40 -0
- data/lib/rosett_ai/ui/qt6.rb +40 -0
- data/lib/rosett_ai/ui/registry.rb +60 -0
- data/lib/rosett_ai/ui/tty_helper.rb +74 -0
- data/lib/rosett_ai/ui/tui.rb +59 -0
- data/lib/rosett_ai/validators/behaviour_validator.rb +20 -0
- data/lib/rosett_ai/validators/design_validator.rb +17 -0
- data/lib/rosett_ai/validators/schema_validator.rb +84 -0
- data/lib/rosett_ai/validators/tooling_validator.rb +17 -0
- data/lib/rosett_ai/version.rb +8 -0
- data/lib/rosett_ai/version_consistency_checker.rb +129 -0
- data/lib/rosett_ai/workflow/audit_log.rb +86 -0
- data/lib/rosett_ai/workflow/engine.rb +142 -0
- data/lib/rosett_ai/workflow/manager.rb +82 -0
- data/lib/rosett_ai/workflow/schema_validator.rb +71 -0
- data/lib/rosett_ai/workflow/step_runner.rb +61 -0
- data/lib/rosett_ai/workflow/steps/prompt_step.rb +62 -0
- data/lib/rosett_ai/workflow/steps/rai_step.rb +74 -0
- data/lib/rosett_ai/workflow/steps/shell_step.rb +53 -0
- data/lib/rosett_ai/yaml_loader.rb +78 -0
- data/lib/rosett_ai.rb +221 -0
- data/lib/rubocop/cop/rosett_ai/shell_interpolation.rb +54 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_const_get.rb +60 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_send.rb +50 -0
- data/lib/rubocop/cop/rosett_ai/unsafe_yaml_load.rb +40 -0
- data/lib/rubocop/rosett_ai.rb +9 -0
- data/lib/scripts/generated/docker_hub_tags.rb +126 -0
- data/locales/.gitkeep +0 -0
- data/locales/ar.yml +579 -0
- data/locales/en.yml +571 -0
- data/locales/fr.yml +567 -0
- data/packaging/build-engine-deb.sh +81 -0
- data/packaging/scripts/postinst +17 -0
- data/packaging/scripts/postrm +19 -0
- data/packaging/scripts/prerm +10 -0
- data/packaging/wrapper.sh.template +38 -0
- data/rosett-ai.gemspec +63 -0
- data/rules/.gitkeep +0 -0
- data/scripts/publish/pulp_upload.sh +123 -0
- data/settings.json +29 -0
- data/share/applications/be.neatnerds.rosettai.desktop +29 -0
- data/share/dbus-1/interfaces/be.neatnerds.rosettai.xml +103 -0
- data/share/dbus-1/services/be.neatnerds.rosettai.service +3 -0
- data/share/templates/behaviour/criticalthinking.yml +69 -0
- metadata +810 -0
data/.rspec
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
# Rosett-AI - RuboCop Configuration
|
|
2
|
+
#
|
|
3
|
+
# MFA disabled due to OTP timing issues when pushing gems
|
|
4
|
+
Gemspec/RequireMFA:
|
|
5
|
+
Enabled: false
|
|
6
|
+
#
|
|
7
|
+
# Use plugins for extensions that support it
|
|
8
|
+
plugins:
|
|
9
|
+
- rubocop-factory_bot
|
|
10
|
+
- rubocop-performance
|
|
11
|
+
- rubocop-rake
|
|
12
|
+
- rubocop-rspec
|
|
13
|
+
- rubocop-thread_safety
|
|
14
|
+
#
|
|
15
|
+
# Custom project cops
|
|
16
|
+
require:
|
|
17
|
+
- ./lib/rubocop/rosett_ai
|
|
18
|
+
#
|
|
19
|
+
# === Custom Security Cops ===
|
|
20
|
+
#
|
|
21
|
+
RosettAi/UnsafeYamlLoad:
|
|
22
|
+
Enabled: true
|
|
23
|
+
Severity: error
|
|
24
|
+
#
|
|
25
|
+
RosettAi/ShellInterpolation:
|
|
26
|
+
Enabled: true
|
|
27
|
+
Severity: error
|
|
28
|
+
#
|
|
29
|
+
# Advisory cops (warning) - existing safe code uses frozen registries
|
|
30
|
+
RosettAi/UnsafeConstGet:
|
|
31
|
+
Enabled: true
|
|
32
|
+
Severity: warning
|
|
33
|
+
Exclude:
|
|
34
|
+
# RuboCop cops use on_send which is part of the AST API
|
|
35
|
+
- 'lib/rubocop/cop/**/*'
|
|
36
|
+
# Test helpers use dynamic patterns for setup
|
|
37
|
+
- 'spec/**/*'
|
|
38
|
+
# These files use frozen PARSER_REGISTRY/CATEGORIES constants (safe pattern)
|
|
39
|
+
- 'lib/rosett_ai/retrofit/engine.rb'
|
|
40
|
+
- 'lib/rosett_ai/thor/tasks/validate.rb'
|
|
41
|
+
# Logger const_get catches NameError and falls back to WARN (safe)
|
|
42
|
+
- 'lib/rosett_ai/structured_logger.rb'
|
|
43
|
+
#
|
|
44
|
+
RosettAi/UnsafeSend:
|
|
45
|
+
Enabled: true
|
|
46
|
+
Severity: warning
|
|
47
|
+
Exclude:
|
|
48
|
+
# GTK4 apps use send for action dispatch with validated method names
|
|
49
|
+
- 'lib/rosett_ai/desktop/**/*'
|
|
50
|
+
# GUI logger delegates via send with internally-defined method names
|
|
51
|
+
- 'lib/rosett_ai/desktop/gui_logger.rb'
|
|
52
|
+
# Thor tasks use send for Rainbow color methods (hardcoded)
|
|
53
|
+
- 'lib/rosett_ai/thor/tasks/**/*'
|
|
54
|
+
# RuboCop cops test AST patterns
|
|
55
|
+
- 'lib/rubocop/cop/**/*'
|
|
56
|
+
# Test helpers may use dynamic dispatch
|
|
57
|
+
- 'spec/**/*'
|
|
58
|
+
#
|
|
59
|
+
# === Thread Safety ===
|
|
60
|
+
#
|
|
61
|
+
# Thread safety cops are advisory for nncc — many patterns that trigger these
|
|
62
|
+
# cops are intentional (singletons, registries, parallel dispatch). We exclude
|
|
63
|
+
# files with known-safe patterns and keep the cops enabled to catch new issues.
|
|
64
|
+
#
|
|
65
|
+
ThreadSafety:
|
|
66
|
+
Enabled: true
|
|
67
|
+
Exclude:
|
|
68
|
+
# Test files may use patterns that trigger thread safety cops for setup/teardown
|
|
69
|
+
- 'spec/**/*'
|
|
70
|
+
#
|
|
71
|
+
ThreadSafety/ClassInstanceVariable:
|
|
72
|
+
Enabled: true
|
|
73
|
+
Exclude:
|
|
74
|
+
# Module-level memoization for singletons (standard Ruby pattern)
|
|
75
|
+
- 'lib/rosett_ai.rb'
|
|
76
|
+
# Singleton patterns and registries (intentional)
|
|
77
|
+
- 'lib/rosett_ai/dbus/**/*'
|
|
78
|
+
- 'lib/rosett_ai/deprecation.rb'
|
|
79
|
+
- 'lib/rosett_ai/desktop/**/*'
|
|
80
|
+
- 'lib/rosett_ai/doctor.rb'
|
|
81
|
+
- 'lib/rosett_ai/doctor/check.rb'
|
|
82
|
+
- 'lib/rosett_ai/feature_flags.rb'
|
|
83
|
+
- 'lib/rosett_ai/path_resolver.rb'
|
|
84
|
+
- 'lib/rosett_ai/plugins/registry.rb'
|
|
85
|
+
- 'lib/rosett_ai/structured_logger.rb'
|
|
86
|
+
- 'lib/rosett_ai/telemetry/reporter.rb'
|
|
87
|
+
- 'lib/rosett_ai/thor/tasks/build.rb'
|
|
88
|
+
- 'lib/rosett_ai/ui/registry.rb'
|
|
89
|
+
- 'spec/**/*'
|
|
90
|
+
#
|
|
91
|
+
ThreadSafety/NewThread:
|
|
92
|
+
Enabled: true
|
|
93
|
+
Exclude:
|
|
94
|
+
# D-Bus service and focus adapters require threads by design
|
|
95
|
+
- 'lib/rosett_ai/dbus/**/*'
|
|
96
|
+
# Quorum dispatcher uses threads for parallel engine execution
|
|
97
|
+
- 'lib/rosett_ai/quorum/dispatcher.rb'
|
|
98
|
+
- 'spec/**/*'
|
|
99
|
+
#
|
|
100
|
+
ThreadSafety/DirChdir:
|
|
101
|
+
Enabled: true
|
|
102
|
+
Exclude:
|
|
103
|
+
# Tests commonly use Dir.chdir for isolation
|
|
104
|
+
- 'spec/**/*'
|
|
105
|
+
# Reference compiler needs chdir for relative path handling
|
|
106
|
+
- 'lib/rosett_ai/documentation/reference_compiler.rb'
|
|
107
|
+
# Gemspec uses chdir for file listing
|
|
108
|
+
- '*.gemspec'
|
|
109
|
+
#
|
|
110
|
+
ThreadSafety/ClassAndModuleAttributes:
|
|
111
|
+
Enabled: true
|
|
112
|
+
Exclude:
|
|
113
|
+
- 'spec/**/*'
|
|
114
|
+
#
|
|
115
|
+
ThreadSafety/MutableClassInstanceVariable:
|
|
116
|
+
Enabled: true
|
|
117
|
+
Exclude:
|
|
118
|
+
- 'spec/**/*'
|
|
119
|
+
# Registry patterns use mutable hashes intentionally
|
|
120
|
+
- 'lib/rosett_ai/deprecation.rb'
|
|
121
|
+
- 'lib/rosett_ai/doctor.rb'
|
|
122
|
+
- 'lib/rosett_ai/ui/registry.rb'
|
|
123
|
+
#
|
|
124
|
+
AllCops:
|
|
125
|
+
TargetRubyVersion: 3.3
|
|
126
|
+
NewCops: enable
|
|
127
|
+
Exclude:
|
|
128
|
+
- 'vendor/**/*'
|
|
129
|
+
- 'tmp/**/*'
|
|
130
|
+
- 'cache/**/*'
|
|
131
|
+
- 'coverage/**/*'
|
|
132
|
+
- 'pkg/**/*'
|
|
133
|
+
#
|
|
134
|
+
# Layout
|
|
135
|
+
Layout/LineLength:
|
|
136
|
+
Max: 120
|
|
137
|
+
AllowedPatterns:
|
|
138
|
+
- '^\s*#'
|
|
139
|
+
- '^\s*"'
|
|
140
|
+
- "^\\s*'"
|
|
141
|
+
#
|
|
142
|
+
Layout/MultilineMethodCallIndentation:
|
|
143
|
+
EnforcedStyle: indented
|
|
144
|
+
#
|
|
145
|
+
Layout/FirstArrayElementIndentation:
|
|
146
|
+
EnforcedStyle: consistent
|
|
147
|
+
#
|
|
148
|
+
Layout/FirstHashElementIndentation:
|
|
149
|
+
EnforcedStyle: consistent
|
|
150
|
+
#
|
|
151
|
+
# Metrics
|
|
152
|
+
Metrics/AbcSize:
|
|
153
|
+
Max: 25
|
|
154
|
+
Exclude:
|
|
155
|
+
# Test setup blocks are inherently verbose (let chains, before hooks, multi-step arrange)
|
|
156
|
+
- 'spec/**/*'
|
|
157
|
+
# Thor tasks orchestrate multi-stage workflows (build, backup, compile) with sequential steps
|
|
158
|
+
- 'lib/rosett_ai/thor/tasks/**/*'
|
|
159
|
+
# Compiler render/diff methods handle complex string assembly and multi-pass transformation
|
|
160
|
+
- 'lib/rosett_ai/compiler/**/*'
|
|
161
|
+
# GTK4 desktop app builds UI widget trees — inherently creates many objects
|
|
162
|
+
- 'lib/rosett_ai/desktop/**/*'
|
|
163
|
+
# Engine backends render markdown with complex string assembly
|
|
164
|
+
- 'lib/rosett_ai/engines/*/backend.rb'
|
|
165
|
+
#
|
|
166
|
+
Metrics/BlockLength:
|
|
167
|
+
Exclude:
|
|
168
|
+
# RSpec describe/context blocks are naturally long by design
|
|
169
|
+
- 'spec/**/*'
|
|
170
|
+
# Standard Ruby exclusions — gemspec, Gemfile, and Rakefile use DSL blocks
|
|
171
|
+
- '*.gemspec'
|
|
172
|
+
- 'Gemfile'
|
|
173
|
+
- 'Rakefile'
|
|
174
|
+
#
|
|
175
|
+
Metrics/ModuleLength:
|
|
176
|
+
Exclude:
|
|
177
|
+
# Root module declares 20+ error classes (one-liners) + module-level singletons
|
|
178
|
+
- 'lib/rosett_ai.rb'
|
|
179
|
+
# Instructions module contains 7 markdown heredoc sections — content, not complexity
|
|
180
|
+
- 'lib/rosett_ai/mcp/instructions.rb'
|
|
181
|
+
# Governance module is a tool/resource/prompt registry — grows with each tool
|
|
182
|
+
- 'lib/rosett_ai/mcp/governance.rb'
|
|
183
|
+
#
|
|
184
|
+
Metrics/ClassLength:
|
|
185
|
+
Max: 200
|
|
186
|
+
Exclude:
|
|
187
|
+
# BuildPackage orchestrates a 9-stage build pipeline with per-stage methods and formatting
|
|
188
|
+
- 'lib/rosett_ai/thor/tasks/build.rb'
|
|
189
|
+
# Documentation has scan + apply + reference compilation + locale + status methods
|
|
190
|
+
- 'lib/rosett_ai/thor/tasks/documentation.rb'
|
|
191
|
+
# Compile orchestrates engine resolution + compilation + orphan removal + locale compilation
|
|
192
|
+
- 'lib/rosett_ai/thor/tasks/compile.rb'
|
|
193
|
+
# GTK4 desktop app has many UI builder methods and action handlers
|
|
194
|
+
- 'lib/rosett_ai/desktop/**/*'
|
|
195
|
+
# Thor task classes grow with long_desc blocks (help text, not logic)
|
|
196
|
+
- 'lib/rosett_ai/thor/tasks/mcp.rb'
|
|
197
|
+
- 'lib/rosett_ai/thor/tasks/dbus.rb'
|
|
198
|
+
- 'lib/rosett_ai/thor/tasks/release.rb'
|
|
199
|
+
# Init has long_desc blocks + multiple scope setup methods + MCP registration
|
|
200
|
+
- 'lib/rosett_ai/thor/tasks/init.rb'
|
|
201
|
+
- 'lib/rosett_ai/thor/tasks/tooling.rb'
|
|
202
|
+
- 'lib/rosett_ai/thor/tasks/hooks.rb'
|
|
203
|
+
- 'lib/rosett_ai/thor/tasks/backup.rb'
|
|
204
|
+
#
|
|
205
|
+
Metrics/MethodLength:
|
|
206
|
+
Max: 25
|
|
207
|
+
Exclude:
|
|
208
|
+
# Test methods contain multi-step setup and assertion sequences
|
|
209
|
+
- 'spec/**/*'
|
|
210
|
+
# Thor task methods orchestrate multi-stage CLI workflows with inline output formatting
|
|
211
|
+
- 'lib/rosett_ai/thor/tasks/**/*'
|
|
212
|
+
# GTK4 desktop app methods build widget trees with multiple configuration steps
|
|
213
|
+
- 'lib/rosett_ai/desktop/**/*'
|
|
214
|
+
#
|
|
215
|
+
Metrics/CyclomaticComplexity:
|
|
216
|
+
Max: 10
|
|
217
|
+
#
|
|
218
|
+
Metrics/PerceivedComplexity:
|
|
219
|
+
Max: 10
|
|
220
|
+
#
|
|
221
|
+
# Naming
|
|
222
|
+
Naming/FileName:
|
|
223
|
+
Exclude:
|
|
224
|
+
- 'Gemfile'
|
|
225
|
+
- 'Rakefile'
|
|
226
|
+
#
|
|
227
|
+
Naming/AccessorMethodName:
|
|
228
|
+
Exclude:
|
|
229
|
+
# D-Bus interfaces follow standard D-Bus method naming (GetStatus, GetFocusState)
|
|
230
|
+
- 'lib/rosett_ai/dbus/*_interface.rb'
|
|
231
|
+
#
|
|
232
|
+
# Style
|
|
233
|
+
Style/Documentation:
|
|
234
|
+
Enabled: true
|
|
235
|
+
#
|
|
236
|
+
Style/FrozenStringLiteralComment:
|
|
237
|
+
Enabled: true
|
|
238
|
+
EnforcedStyle: always
|
|
239
|
+
#
|
|
240
|
+
Style/Copyright:
|
|
241
|
+
Enabled: true
|
|
242
|
+
Notice: 'SPDX-License-Identifier: GPL-3.0-only'
|
|
243
|
+
AutocorrectNotice: "# SPDX-License-Identifier: GPL-3.0-only\n# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds"
|
|
244
|
+
Exclude:
|
|
245
|
+
# Dependency manifests and external config files are not project source code
|
|
246
|
+
- 'Gemfile'
|
|
247
|
+
- '.mdl_style.rb'
|
|
248
|
+
#
|
|
249
|
+
Style/StringLiterals:
|
|
250
|
+
EnforcedStyle: single_quotes
|
|
251
|
+
#
|
|
252
|
+
Style/StringLiteralsInInterpolation:
|
|
253
|
+
EnforcedStyle: single_quotes
|
|
254
|
+
#
|
|
255
|
+
Style/SymbolArray:
|
|
256
|
+
EnforcedStyle: brackets
|
|
257
|
+
#
|
|
258
|
+
Style/WordArray:
|
|
259
|
+
EnforcedStyle: brackets
|
|
260
|
+
#
|
|
261
|
+
Style/TrailingCommaInArrayLiteral:
|
|
262
|
+
EnforcedStyleForMultiline: no_comma
|
|
263
|
+
#
|
|
264
|
+
Style/TrailingCommaInHashLiteral:
|
|
265
|
+
EnforcedStyleForMultiline: no_comma
|
|
266
|
+
#
|
|
267
|
+
Style/HashSyntax:
|
|
268
|
+
EnforcedStyle: ruby19
|
|
269
|
+
#
|
|
270
|
+
Style/RedundantSelf:
|
|
271
|
+
Enabled: true
|
|
272
|
+
#
|
|
273
|
+
Style/ClassAndModuleChildren:
|
|
274
|
+
EnforcedStyle: nested
|
|
275
|
+
#
|
|
276
|
+
Style/RescueModifier:
|
|
277
|
+
Exclude:
|
|
278
|
+
# Tests use rescue modifier for concise exception-testing patterns
|
|
279
|
+
- 'spec/**/*'
|
|
280
|
+
#
|
|
281
|
+
Style/RedundantConstantBase:
|
|
282
|
+
Enabled: true
|
|
283
|
+
Exclude:
|
|
284
|
+
# Specs reference ::Thor to avoid resolving to RosettAi::Thor module
|
|
285
|
+
- 'spec/rosett_ai/smart_feedback/thor_middleware_spec.rb'
|
|
286
|
+
- 'spec/rosett_ai/thor/tasks/**/*'
|
|
287
|
+
#
|
|
288
|
+
# RSpec
|
|
289
|
+
RSpec/ExampleLength:
|
|
290
|
+
Max: 15
|
|
291
|
+
#
|
|
292
|
+
RSpec/MultipleMemoizedHelpers:
|
|
293
|
+
Max: 7
|
|
294
|
+
#
|
|
295
|
+
RSpec/MultipleExpectations:
|
|
296
|
+
Max: 5
|
|
297
|
+
#
|
|
298
|
+
RSpec/NestedGroups:
|
|
299
|
+
Max: 4
|
|
300
|
+
#
|
|
301
|
+
RSpec/DescribeClass:
|
|
302
|
+
Exclude:
|
|
303
|
+
# Integration specs test cross-cutting behaviour, not individual classes
|
|
304
|
+
- 'spec/integration/**/*'
|
|
305
|
+
#
|
|
306
|
+
RSpec/SpecFilePathFormat:
|
|
307
|
+
Enabled: true
|
|
308
|
+
Exclude:
|
|
309
|
+
# D-Bus module uses uppercase DBus, not D_Bus — directory naming follows module structure
|
|
310
|
+
- 'spec/rosett_ai/dbus/**/*'
|
|
311
|
+
- 'spec/rosett_ai/thor/tasks/dbus_spec.rb'
|
|
312
|
+
#
|
|
313
|
+
RSpec/SpecFilePathSuffix:
|
|
314
|
+
Enabled: true
|
|
315
|
+
#
|
|
316
|
+
RSpec/AnyInstance:
|
|
317
|
+
Exclude:
|
|
318
|
+
# Thor tasks have private stage methods that need stubbing for isolation testing
|
|
319
|
+
- 'spec/rosett_ai/thor/tasks/**/*'
|
|
320
|
+
# D-Bus interfaces use AnyInstance for stubbing compile pipelines
|
|
321
|
+
- 'spec/rosett_ai/dbus/**/*'
|
|
322
|
+
#
|
|
323
|
+
RSpec/VerifiedDoubles:
|
|
324
|
+
Exclude:
|
|
325
|
+
# External D-Bus libraries (ruby-dbus, i3ipc) can't be verified — classes loaded dynamically
|
|
326
|
+
- 'spec/rosett_ai/dbus/**/*'
|
|
327
|
+
- 'spec/rosett_ai/thor/tasks/dbus_spec.rb'
|
|
328
|
+
# GTK4/Adwaita classes can't be verified — gem may not be installed
|
|
329
|
+
- 'spec/rosett_ai/desktop/**/*'
|
|
330
|
+
- 'spec/rosett_ai/thor/tasks/desktop_spec.rb'
|
|
331
|
+
# MCP gem classes are optional — can't be verified when gem not loaded
|
|
332
|
+
- 'spec/rosett_ai/mcp/server_spec.rb'
|
|
333
|
+
#
|
|
334
|
+
RSpec/MessageSpies:
|
|
335
|
+
Exclude:
|
|
336
|
+
# D-Bus specs use expect().to receive for setup simplicity with mocked external services
|
|
337
|
+
- 'spec/rosett_ai/dbus/**/*'
|
|
338
|
+
# Desktop specs use expect().to receive for GTK4/D-Bus mocking
|
|
339
|
+
- 'spec/rosett_ai/desktop/**/*'
|
|
340
|
+
- 'spec/rosett_ai/thor/tasks/desktop_spec.rb'
|
|
341
|
+
#
|
|
342
|
+
RSpec/ReceiveMessages:
|
|
343
|
+
Exclude:
|
|
344
|
+
# Desktop specs set up mock objects with multiple stubs
|
|
345
|
+
- 'spec/rosett_ai/desktop/**/*'
|
|
346
|
+
- 'spec/rosett_ai/thor/tasks/desktop_spec.rb'
|
|
347
|
+
#
|
|
348
|
+
RSpec/LeadingSubject:
|
|
349
|
+
Exclude:
|
|
350
|
+
# Desktop specs place subject after mocks for readability
|
|
351
|
+
- 'spec/rosett_ai/desktop/**/*'
|
|
352
|
+
#
|
|
353
|
+
RSpec/DescribedClass:
|
|
354
|
+
Enabled: true
|
|
355
|
+
#
|
|
356
|
+
RSpec/MultipleDescribes:
|
|
357
|
+
Enabled: true
|
|
358
|
+
Exclude:
|
|
359
|
+
# Compressor/Destination base + subclasses are tightly coupled — one spec file per hierarchy
|
|
360
|
+
- 'spec/rosett_ai/backup/compressor_spec.rb'
|
|
361
|
+
- 'spec/rosett_ai/backup/destination_spec.rb'
|
|
362
|
+
#
|
|
363
|
+
# Performance
|
|
364
|
+
Performance/StringReplacement:
|
|
365
|
+
Enabled: true
|
|
366
|
+
#
|
|
367
|
+
Performance/RegexpMatch:
|
|
368
|
+
Enabled: true
|
|
369
|
+
#
|
|
370
|
+
# Rake
|
|
371
|
+
Rake/Desc:
|
|
372
|
+
Enabled: true
|
|
373
|
+
#
|
|
374
|
+
# Gemspec
|
|
375
|
+
Gemspec/DevelopmentDependencies:
|
|
376
|
+
Enabled: true
|
|
377
|
+
#
|
|
378
|
+
RSpec/PredicateMatcher:
|
|
379
|
+
Enabled: true
|
|
380
|
+
#
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.3.10
|
data/.yamllint
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# NeatNerds Code Companion - yamllint Configuration
|
|
2
|
+
|
|
3
|
+
extends: default
|
|
4
|
+
|
|
5
|
+
rules:
|
|
6
|
+
line-length:
|
|
7
|
+
max: 240
|
|
8
|
+
level: warning
|
|
9
|
+
|
|
10
|
+
indentation:
|
|
11
|
+
spaces: 2
|
|
12
|
+
indent-sequences: whatever
|
|
13
|
+
|
|
14
|
+
document-start: disable
|
|
15
|
+
|
|
16
|
+
truthy:
|
|
17
|
+
level: warning
|
|
18
|
+
|
|
19
|
+
comments:
|
|
20
|
+
min-spaces-from-content: 1
|
|
21
|
+
|
|
22
|
+
braces:
|
|
23
|
+
min-spaces-inside: 0
|
|
24
|
+
max-spaces-inside: 1
|
|
25
|
+
|
|
26
|
+
brackets:
|
|
27
|
+
min-spaces-inside: 0
|
|
28
|
+
max-spaces-inside: 0
|
|
29
|
+
|
|
30
|
+
colons:
|
|
31
|
+
max-spaces-before: 0
|
|
32
|
+
max-spaces-after: 1
|
|
33
|
+
|
|
34
|
+
commas:
|
|
35
|
+
max-spaces-before: 0
|
|
36
|
+
min-spaces-after: 1
|
|
37
|
+
max-spaces-after: 1
|
|
38
|
+
|
|
39
|
+
hyphens:
|
|
40
|
+
max-spaces-after: 1
|
|
41
|
+
|
|
42
|
+
empty-lines:
|
|
43
|
+
max: 2
|
|
44
|
+
max-start: 0
|
|
45
|
+
max-end: 1
|
|
46
|
+
|
|
47
|
+
ignore:
|
|
48
|
+
- vendor/
|
|
49
|
+
- cache/
|
|
50
|
+
- coverage/
|
|
51
|
+
- .git/
|
data/.yardopts
ADDED
data/AI-DISCLOSURE.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# AI Disclosure
|
|
2
|
+
|
|
3
|
+
This project uses AI tools in its development process.
|
|
4
|
+
|
|
5
|
+
## AI Tools Used
|
|
6
|
+
|
|
7
|
+
| Tool | Provider | Purpose |
|
|
8
|
+
|------|----------|---------|
|
|
9
|
+
| Claude Code | Anthropic | Code authoring, refactoring, testing, documentation |
|
|
10
|
+
|
|
11
|
+
## Governance Policy
|
|
12
|
+
|
|
13
|
+
1. **All AI-generated code is human-reviewed** before merging. The human
|
|
14
|
+
contributor bears primary responsibility for all committed code,
|
|
15
|
+
regardless of whether it was AI-generated.
|
|
16
|
+
|
|
17
|
+
2. **Commit trailers document AI involvement.** Every commit that includes
|
|
18
|
+
AI-generated or AI-assisted content carries a `Co-Authored-By` trailer
|
|
19
|
+
identifying the AI tool and model version.
|
|
20
|
+
|
|
21
|
+
3. **AI provenance is tracked.** The `.ai-provenance.yml` file records
|
|
22
|
+
which sessions contributed to the codebase, the AI model used, the
|
|
23
|
+
scope of work, and which files were affected.
|
|
24
|
+
|
|
25
|
+
4. **No AI-generated code ships without tests.** All new functionality
|
|
26
|
+
includes test coverage verified by the human reviewer.
|
|
27
|
+
|
|
28
|
+
5. **DCO sign-off required.** All contributions comply with the Developer
|
|
29
|
+
Certificate of Origin. The `Signed-off-by` trailer is enforced via
|
|
30
|
+
git hooks where applicable.
|
|
31
|
+
|
|
32
|
+
## License Compatibility
|
|
33
|
+
|
|
34
|
+
This project is licensed under GPL-3.0-only. AI-generated code is
|
|
35
|
+
contributed under the same license. SPDX license identifiers are present
|
|
36
|
+
on all source files.
|
|
37
|
+
|
|
38
|
+
## Provenance Verification
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
raictl provenance validate # Validate all provenance entries
|
|
42
|
+
raictl provenance log # View provenance history
|
|
43
|
+
raictl comply --headers # Verify SPDX headers
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Questions
|
|
47
|
+
|
|
48
|
+
For questions about AI usage in this project, contact: query@neatnerds.be
|