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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Claude Sessions Moved
|
|
2
|
+
|
|
3
|
+
The Claude Code session transcripts and memory files that were previously stored in
|
|
4
|
+
`doc/claude-sessions/` have been relocated to the workspace-level `.claude/` directory:
|
|
5
|
+
|
|
6
|
+
| Previous Location | New Location |
|
|
7
|
+
|-------------------|--------------|
|
|
8
|
+
| `doc/claude-sessions/*.jsonl` | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/sessions/rosett-ai-core/` |
|
|
9
|
+
| `doc/claude-sessions/memory/` | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/memory/` |
|
|
10
|
+
| `settings.json` (repo root) | `~/git/Neatnerds/NNSD/NeatNerds-ai/.claude/settings.json` |
|
|
11
|
+
|
|
12
|
+
This change was made on 2026-03-12 as part of the ecosystem orchestration overhaul
|
|
13
|
+
to separate Claude-specific assets from engine-agnostic code.
|
|
14
|
+
|
|
15
|
+
The original session archives (NNCO-era, 272MB) are preserved in:
|
|
16
|
+
`~/Archives/claude-sessions/nnco-rosett-ai-sessions-20260312.tar.zst`
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Command Overlap & Friction Analysis
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-03-15
|
|
4
|
+
**Scope**: All 18 registered CLI entry points (1 top-level + 17 subcommand groups)
|
|
5
|
+
**Method**: Static analysis of `lib/rosett_ai/thor/cli.rb` and all `lib/rosett_ai/thor/tasks/*.rb`
|
|
6
|
+
|
|
7
|
+
## Command Surface Summary
|
|
8
|
+
|
|
9
|
+
| # | Group | Commands | Visibility | File |
|
|
10
|
+
|---|-------|----------|------------|------|
|
|
11
|
+
| 1 | `version` | 1 | public | `cli.rb:54` |
|
|
12
|
+
| 2 | `compile` | 1 | public | `tasks/compile.rb` |
|
|
13
|
+
| 3 | `validate` | 1 | public | `tasks/validate.rb` |
|
|
14
|
+
| 4 | `adopt` | 1 | public | `tasks/adopt.rb` |
|
|
15
|
+
| 5 | `init` | 1 | public | `tasks/init.rb` |
|
|
16
|
+
| 6 | `backup` | 1 | public | `tasks/backup.rb` |
|
|
17
|
+
| 7 | `behaviour` | 7 | public | `tasks/behaviour.rb` |
|
|
18
|
+
| 8 | `build` | 2 | public | `tasks/build.rb` |
|
|
19
|
+
| 9 | `design` | 3 | public | `tasks/design.rb` |
|
|
20
|
+
| 10 | `config` | 2 | public | `tasks/config.rb` |
|
|
21
|
+
| 11 | `tooling` | 3 | public | `tasks/tooling.rb` |
|
|
22
|
+
| 12 | `license` | 3 | public | `tasks/license.rb` |
|
|
23
|
+
| 13 | `content` | 3 | public | `tasks/content.rb` |
|
|
24
|
+
| 14 | `engines` | 4 | public | `tasks/engines.rb` |
|
|
25
|
+
| 15 | `release` | 3 | internal | `tasks/release.rb` |
|
|
26
|
+
| 16 | `documentation` | 3 | internal | `tasks/documentation.rb` |
|
|
27
|
+
| 17 | `dbus` | 4 | internal | `tasks/dbus.rb` |
|
|
28
|
+
| 18 | `desktop` | 2 | internal | `tasks/desktop.rb` |
|
|
29
|
+
| | **Total** | **~45** | 14 public / 4 internal | |
|
|
30
|
+
|
|
31
|
+
## Finding 1: Validate Fragmentation (OVERLAP)
|
|
32
|
+
|
|
33
|
+
**Severity**: Medium
|
|
34
|
+
**Type**: DRY concern + discoverability
|
|
35
|
+
|
|
36
|
+
Validation exists in four places:
|
|
37
|
+
|
|
38
|
+
| Command | Scope | Accepts NAME arg? |
|
|
39
|
+
|---------|-------|-------------------|
|
|
40
|
+
| `rai validate` | All categories (behaviour + design + tooling) | No |
|
|
41
|
+
| `rai behaviour validate [NAME]` | Behaviour files only | Yes (optional) |
|
|
42
|
+
| `rai design validate [NAME]` | Design documents only | Yes (optional) |
|
|
43
|
+
| `rai tooling validate [NAME]` | Tooling configs only | Yes (optional) |
|
|
44
|
+
|
|
45
|
+
**Friction**: A user running `rai validate` gets the umbrella check, but cannot target a single file. The per-category commands allow targeting but require knowing which category a file belongs to.
|
|
46
|
+
|
|
47
|
+
**Recommendation**: The current structure is defensible — `rai validate` is the CI/pre-commit entry point,
|
|
48
|
+
per-category commands are for authoring workflows. No change needed, but consider adding
|
|
49
|
+
`rai validate --category design` as a middle ground in a future iteration.
|
|
50
|
+
|
|
51
|
+
## Finding 2: Compile Ambiguity (FRICTION)
|
|
52
|
+
|
|
53
|
+
**Severity**: Medium
|
|
54
|
+
**Type**: Naming collision
|
|
55
|
+
|
|
56
|
+
Two unrelated "compile" operations exist:
|
|
57
|
+
|
|
58
|
+
| Command | Input | Output | Purpose |
|
|
59
|
+
|---------|-------|--------|---------|
|
|
60
|
+
| `rai compile` | `conf/behaviour/*.yml` | `rules/*.md` | Compile behaviour rules to engine-native format |
|
|
61
|
+
| `rai config compile` | `conf/claude_code/*.yml` | `settings.json` | Compile scope configs to Claude Code settings |
|
|
62
|
+
|
|
63
|
+
**Friction**: "compile" means different things depending on context. A user who just installed rosett-ai and runs `rai compile` might expect it to compile *everything* (including config), or vice versa.
|
|
64
|
+
|
|
65
|
+
**Recommendation**: This is a genuine UX concern. Two options:
|
|
66
|
+
|
|
67
|
+
1. **Accept it**: Both are compile operations for different artefacts.
|
|
68
|
+
The subcommand nesting (`config compile`) disambiguates. Document clearly.
|
|
69
|
+
2. **Unify**: Make `rai compile` the umbrella that compiles rules + config + locales,
|
|
70
|
+
add `--only rules` / `--only config` for targeting. This would be a breaking change.
|
|
71
|
+
|
|
72
|
+
**Verdict**: Accept for v1.0.0. Document in help text. Revisit if user confusion is reported.
|
|
73
|
+
|
|
74
|
+
## Finding 3: Tooling Validate Name Collision (FRICTION)
|
|
75
|
+
|
|
76
|
+
**Severity**: Low
|
|
77
|
+
**Type**: Naming ambiguity within a subcommand group
|
|
78
|
+
|
|
79
|
+
| Command | Purpose |
|
|
80
|
+
|---------|---------|
|
|
81
|
+
| `rai tooling validate [NAME]` | Validate tooling YAML against schema |
|
|
82
|
+
| `rai tooling validate-ci-yaml` | Validate GitLab CI YAML syntax |
|
|
83
|
+
|
|
84
|
+
**Friction**: Both start with "validate" but do completely different things. A user running `rai tooling validate` might expect it to also validate CI YAML.
|
|
85
|
+
|
|
86
|
+
**Recommendation**: Acceptable as-is. The schema validation checks *tooling config* structure, while `validate-ci-yaml` checks *CI pipeline* syntax. They are genuinely different. The kebab-case compound name `validate-ci-yaml` is distinct enough.
|
|
87
|
+
|
|
88
|
+
## Finding 4: Provenance CLI Gap (MISSING)
|
|
89
|
+
|
|
90
|
+
**Severity**: High
|
|
91
|
+
**Type**: Documentation/implementation mismatch
|
|
92
|
+
|
|
93
|
+
The `provenance` command is fully documented in CLAUDE.md (6 subcommands: `init`, `add`, `validate`, `show`, `log`) but **not implemented** in the CLI. No task file exists at `lib/rosett_ai/thor/tasks/provenance.rb`.
|
|
94
|
+
|
|
95
|
+
The library module `RosettAi::Provenance::*` exists and is functional, but has no CLI exposure.
|
|
96
|
+
|
|
97
|
+
**Documented commands without implementation**:
|
|
98
|
+
|
|
99
|
+
- `rai provenance init`
|
|
100
|
+
- `rai provenance add [--engine ENGINE]`
|
|
101
|
+
- `rai provenance validate`
|
|
102
|
+
- `rai provenance show COMMIT [--file PATH]`
|
|
103
|
+
- `rai provenance log [--role ROLE]`
|
|
104
|
+
|
|
105
|
+
**Recommendation**: Either implement the CLI commands or remove them from CLAUDE.md. Given that provenance
|
|
106
|
+
is actively used (102 entries in `.ai-provenance.yml`), implementing the CLI is the right choice.
|
|
107
|
+
This is a feature gap, not a friction issue.
|
|
108
|
+
|
|
109
|
+
## Finding 5: Design vs Behaviour Feature Parity (GAP)
|
|
110
|
+
|
|
111
|
+
**Severity**: Low
|
|
112
|
+
**Type**: Asymmetric command surface
|
|
113
|
+
|
|
114
|
+
| Operation | `behaviour` | `design` |
|
|
115
|
+
|-----------|-------------|----------|
|
|
116
|
+
| `list` | Yes | Yes |
|
|
117
|
+
| `show NAME` | Yes | Yes |
|
|
118
|
+
| `validate [NAME]` | Yes | Yes |
|
|
119
|
+
| `display` (table) | Yes | No |
|
|
120
|
+
| `manage add` | Yes | No |
|
|
121
|
+
| `manage modify` | Yes | No |
|
|
122
|
+
| `manage delete` | Yes | No |
|
|
123
|
+
|
|
124
|
+
**Friction**: Behaviour files have full CRUD management; design documents are created/edited manually. A user might expect `rai design manage add` to scaffold a design doc.
|
|
125
|
+
|
|
126
|
+
**Recommendation**: Acceptable asymmetry. Design documents are authored by humans and reviewed
|
|
127
|
+
carefully — scaffolding would encourage boilerplate. Behaviour files have strict schema constraints
|
|
128
|
+
that justify managed creation. If scaffolding is desired later, the `rosett-ai-dev-tools` gem already
|
|
129
|
+
provides template generation.
|
|
130
|
+
|
|
131
|
+
## Finding 6: Naming Consistency (MINOR)
|
|
132
|
+
|
|
133
|
+
**Severity**: Low
|
|
134
|
+
**Type**: Cosmetic
|
|
135
|
+
|
|
136
|
+
| Pattern | Examples |
|
|
137
|
+
|---------|----------|
|
|
138
|
+
| Single-word commands | `compile`, `validate`, `adopt`, `init`, `backup` |
|
|
139
|
+
| Kebab-case subcommands | `validate-ci-yaml`, `check-versions` |
|
|
140
|
+
| Noun-based groups | `behaviour`, `design`, `config`, `tooling`, `engines` |
|
|
141
|
+
| Verb-based groups | `compile`, `validate`, `adopt`, `build`, `backup` |
|
|
142
|
+
|
|
143
|
+
**Observation**: Top-level commands mix verbs (`compile`, `validate`) with nouns (`behaviour`, `engines`). This is standard Thor/CLI convention — verbs for actions, nouns for resource management groups. No friction in practice.
|
|
144
|
+
|
|
145
|
+
**Recommendation**: No change needed. Consistent within categories.
|
|
146
|
+
|
|
147
|
+
## Finding 7: Engine Flag Duplication (MINOR)
|
|
148
|
+
|
|
149
|
+
**Severity**: Low
|
|
150
|
+
**Type**: Repeated option definition
|
|
151
|
+
|
|
152
|
+
The `--engine` flag appears on:
|
|
153
|
+
|
|
154
|
+
- `rai compile --engine NAME`
|
|
155
|
+
- `rai config compile --engine NAME`
|
|
156
|
+
- `rai config show --engine NAME`
|
|
157
|
+
|
|
158
|
+
Each independently defaults to the configured default engine. This is correct (each command needs it), but the flag is defined separately in each task file.
|
|
159
|
+
|
|
160
|
+
**Recommendation**: No change needed. Thor class_options don't propagate to subcommands, so duplication is necessary. A shared concern module could DRY this if more commands need it.
|
|
161
|
+
|
|
162
|
+
## Finding 8: Internal Command Gating (OK)
|
|
163
|
+
|
|
164
|
+
**Severity**: None
|
|
165
|
+
**Type**: Design validation
|
|
166
|
+
|
|
167
|
+
Four command groups are gated behind `RAI_INTERNAL=true`:
|
|
168
|
+
|
|
169
|
+
- `release` — version bumping, tagging, changelog
|
|
170
|
+
- `documentation` — doc generation, translation
|
|
171
|
+
- `dbus` — D-Bus service lifecycle
|
|
172
|
+
- `desktop` — GUI launcher
|
|
173
|
+
|
|
174
|
+
**Assessment**: Correct gating. These are development/infrastructure commands that end users should not invoke. The gating mechanism (env var check + hidden from `--help`) is clean.
|
|
175
|
+
|
|
176
|
+
## Finding 9: Missing `--verbose` Consistency (MINOR)
|
|
177
|
+
|
|
178
|
+
**Severity**: Low
|
|
179
|
+
**Type**: UX inconsistency
|
|
180
|
+
|
|
181
|
+
| Command | Has `--verbose`? |
|
|
182
|
+
|---------|-----------------|
|
|
183
|
+
| `compile` | Yes |
|
|
184
|
+
| `adopt` | Yes |
|
|
185
|
+
| `config compile` | Yes |
|
|
186
|
+
| `tooling validate-ci-yaml` | Yes |
|
|
187
|
+
| `tooling check-versions` | Yes |
|
|
188
|
+
| `build package` | Yes |
|
|
189
|
+
| `build engine` | Yes |
|
|
190
|
+
| `validate` | No |
|
|
191
|
+
| `behaviour validate` | No |
|
|
192
|
+
| `design validate` | No |
|
|
193
|
+
| `init` | No |
|
|
194
|
+
| `backup` | No |
|
|
195
|
+
|
|
196
|
+
**Friction**: Validation commands don't have `--verbose`, so users cannot get detailed output when debugging schema failures.
|
|
197
|
+
|
|
198
|
+
**Recommendation**: Consider adding `--verbose` to `validate`, `behaviour validate`, and `design validate` in a future iteration. Low priority — the current error messages include schema violation details.
|
|
199
|
+
|
|
200
|
+
## KISS Assessment
|
|
201
|
+
|
|
202
|
+
| Principle | Status | Notes |
|
|
203
|
+
|-----------|--------|-------|
|
|
204
|
+
| Command count | OK | 45 commands across 18 groups is moderate for a tool of this scope |
|
|
205
|
+
| Nesting depth | OK | Maximum 3 levels (`build package execute`) — within Thor norms |
|
|
206
|
+
| Option count | OK | No command has more than 7 options (build package = 7) |
|
|
207
|
+
| Default behaviour | Good | `compile`, `adopt`, `init` all have sensible defaults |
|
|
208
|
+
| Discoverability | Good | `--help` works at every level; internal commands hidden |
|
|
209
|
+
| Naming | Good | Consistent within categories; no cryptic abbreviations |
|
|
210
|
+
|
|
211
|
+
## Summary Matrix
|
|
212
|
+
|
|
213
|
+
| # | Finding | Severity | Type | Action |
|
|
214
|
+
|---|---------|----------|------|--------|
|
|
215
|
+
| 1 | Validate fragmentation | Medium | Overlap | Accept; document |
|
|
216
|
+
| 2 | Compile ambiguity | Medium | Friction | Accept for v1.0.0; document |
|
|
217
|
+
| 3 | Tooling validate collision | Low | Friction | Accept |
|
|
218
|
+
| 4 | Provenance CLI gap | High | Missing | Implement or remove from docs |
|
|
219
|
+
| 5 | Design vs Behaviour parity | Low | Gap | Accept; asymmetry is intentional |
|
|
220
|
+
| 6 | Naming consistency | Low | Cosmetic | No change |
|
|
221
|
+
| 7 | Engine flag duplication | Low | DRY | No change (Thor limitation) |
|
|
222
|
+
| 8 | Internal gating | None | OK | Validated correct |
|
|
223
|
+
| 9 | Missing --verbose | Low | UX | Future iteration |
|
|
224
|
+
|
|
225
|
+
## Actionable Items
|
|
226
|
+
|
|
227
|
+
1. **Implement `provenance` CLI** (Finding 4) — or remove from CLAUDE.md
|
|
228
|
+
2. **Document compile disambiguation** (Finding 2) — clarify in `--help` text
|
|
229
|
+
3. **Consider `--verbose` on validate commands** (Finding 9) — future enhancement
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Rosett-AI - Configuration Reference
|
|
2
|
+
|
|
3
|
+
## Configuration Files
|
|
4
|
+
|
|
5
|
+
### settings.json
|
|
6
|
+
|
|
7
|
+
Global Claude Code settings. Version controlled.
|
|
8
|
+
|
|
9
|
+
Location: `~/.claude/settings.json`
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"permissions": {
|
|
14
|
+
"allow": [],
|
|
15
|
+
"deny": [],
|
|
16
|
+
"additionalDirectories": []
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### settings.local.json
|
|
22
|
+
|
|
23
|
+
Local overrides. Gitignored for machine-specific settings.
|
|
24
|
+
|
|
25
|
+
Location: `~/.claude/settings.local.json`
|
|
26
|
+
|
|
27
|
+
### CLAUDE.md
|
|
28
|
+
|
|
29
|
+
Global instructions for Claude Code. Markdown format.
|
|
30
|
+
|
|
31
|
+
Location: `~/.claude/CLAUDE.md`
|
|
32
|
+
|
|
33
|
+
## Permission Configuration
|
|
34
|
+
|
|
35
|
+
### Allow Rules
|
|
36
|
+
|
|
37
|
+
Permit specific operations:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"permissions": {
|
|
42
|
+
"allow": [
|
|
43
|
+
"Bash(rbenv versions:*)",
|
|
44
|
+
"Bash(bundle:*)",
|
|
45
|
+
"Bash(gem:*)",
|
|
46
|
+
"Bash(bin/raictl:*)"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Deny Rules
|
|
53
|
+
|
|
54
|
+
Block access to sensitive paths:
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"permissions": {
|
|
59
|
+
"deny": [
|
|
60
|
+
"Read(/home/user/.ssh/**)",
|
|
61
|
+
"Read(/home/user/.gnupg/**)",
|
|
62
|
+
"Read(/home/user/**/.env)",
|
|
63
|
+
"Read(/home/user/**/.env.*)",
|
|
64
|
+
"Read(/home/user/**/secrets/**)",
|
|
65
|
+
"Read(/home/user/**/*.pem)",
|
|
66
|
+
"Read(/home/user/**/*.key)"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Additional Directories
|
|
73
|
+
|
|
74
|
+
Grant Claude Code access to specific directories:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"permissions": {
|
|
79
|
+
"additionalDirectories": [
|
|
80
|
+
"/home/user/projects",
|
|
81
|
+
"/var/log/myapp"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Configuration Hierarchy
|
|
88
|
+
|
|
89
|
+
Settings are merged in this order (later overrides earlier):
|
|
90
|
+
|
|
91
|
+
1. `settings.json` (base)
|
|
92
|
+
2. `settings.local.json` (local overrides)
|
|
93
|
+
3. Group-level CLAUDE.md
|
|
94
|
+
4. Project-level CLAUDE.md
|
|
95
|
+
|
|
96
|
+
### Merge Behavior
|
|
97
|
+
|
|
98
|
+
| Type | Behavior |
|
|
99
|
+
|------|----------|
|
|
100
|
+
| Objects | Deep merge |
|
|
101
|
+
| Arrays | Union (deduplicated) |
|
|
102
|
+
| Scalars | Override |
|
|
103
|
+
|
|
104
|
+
## .claudeignore
|
|
105
|
+
|
|
106
|
+
Patterns for files Claude should not access.
|
|
107
|
+
|
|
108
|
+
Location: `~/.claude/.claudeignore`
|
|
109
|
+
|
|
110
|
+
```gitignore
|
|
111
|
+
# Credentials
|
|
112
|
+
.credentials.json
|
|
113
|
+
**/.env
|
|
114
|
+
**/*.pem
|
|
115
|
+
**/*.key
|
|
116
|
+
|
|
117
|
+
# Runtime data
|
|
118
|
+
history.jsonl
|
|
119
|
+
cache/
|
|
120
|
+
debug/
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Behaviour Files
|
|
124
|
+
|
|
125
|
+
YAML configuration files in `conf/behaviour/`.
|
|
126
|
+
|
|
127
|
+
### Schema
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
name: string (required)
|
|
131
|
+
description: string (required)
|
|
132
|
+
version: string (semver format)
|
|
133
|
+
author: string
|
|
134
|
+
created_at: date
|
|
135
|
+
modified_at: date
|
|
136
|
+
modified_by: string
|
|
137
|
+
sensitive: boolean # exclude from API analysis during adopt
|
|
138
|
+
used_in: array of strings
|
|
139
|
+
rules: array (required, min 1 item)
|
|
140
|
+
- id: string (required)
|
|
141
|
+
description: string (required)
|
|
142
|
+
priority: integer (1-100)
|
|
143
|
+
enabled: boolean
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Example
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
name: code_review
|
|
150
|
+
description: Rules for code review assistance
|
|
151
|
+
version: 1.0.0
|
|
152
|
+
author: developer@neatnerds.be
|
|
153
|
+
created_at: "2025-01-17"
|
|
154
|
+
modified_at: "2025-01-17"
|
|
155
|
+
modified_by: developer@neatnerds.be
|
|
156
|
+
used_in:
|
|
157
|
+
- project_alpha
|
|
158
|
+
- project_beta
|
|
159
|
+
rules:
|
|
160
|
+
- id: review_security
|
|
161
|
+
description: Always check for security vulnerabilities
|
|
162
|
+
priority: 90
|
|
163
|
+
enabled: true
|
|
164
|
+
- id: review_tests
|
|
165
|
+
description: Verify test coverage for changes
|
|
166
|
+
priority: 80
|
|
167
|
+
enabled: true
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Adopt Redactions
|
|
171
|
+
|
|
172
|
+
Redaction patterns for the `adopt` command, stored in `conf/adopt_redactions.yml`:
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
---
|
|
176
|
+
patterns:
|
|
177
|
+
- pattern: '\b[A-Z0-9._%+-]+@neatnerds\.be\b'
|
|
178
|
+
replacement: '[EMAIL-REDACTED]'
|
|
179
|
+
- pattern: 'NeatNerds'
|
|
180
|
+
replacement: '[COMPANY]'
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Patterns are applied to file contents before sending to the Claude API. Original files are never modified.
|
|
184
|
+
|
|
185
|
+
### Adopt Cache
|
|
186
|
+
|
|
187
|
+
Analysis results are cached in `conf/adopt.cache.yml`, keyed on the SHA256 of all analyzed file contents. Delete this file to force a fresh analysis.
|
|
188
|
+
|
|
189
|
+
## Environment-Specific Configuration
|
|
190
|
+
|
|
191
|
+
### Development
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"permissions": {
|
|
196
|
+
"allow": [
|
|
197
|
+
"Bash(bundle exec:*)",
|
|
198
|
+
"Bash(bin/raictl:*)"
|
|
199
|
+
]
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Production
|
|
205
|
+
|
|
206
|
+
More restrictive permissions for production environments:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"permissions": {
|
|
211
|
+
"allow": [],
|
|
212
|
+
"deny": [
|
|
213
|
+
"Bash(*)",
|
|
214
|
+
"Write(*)"
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Project-Level Configuration
|
|
221
|
+
|
|
222
|
+
### `.rosett-ai/config.yml`
|
|
223
|
+
|
|
224
|
+
Created by `rai init --project`. Contains per-project settings:
|
|
225
|
+
|
|
226
|
+
```yaml
|
|
227
|
+
project_name: my-project
|
|
228
|
+
default_engine: claude
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
When rosett-ai detects a `.rosett-ai/` directory (by walking up from the current directory), it resolves behaviour and design files from `.rosett-ai/conf/` instead of the global installation.
|
|
232
|
+
|
|
233
|
+
### Engine Management
|
|
234
|
+
|
|
235
|
+
Engines are installed as separate packages:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
apt install rosett-ai-engine-claude
|
|
239
|
+
apt install rosett-ai-engine-generic
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Configure the default engine globally:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# In ~/.config/rosett-ai/config.yml
|
|
246
|
+
default_engine: claude
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Or per-project in `.rosett-ai/config.yml`, or per-command with `--engine`:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
rai compile --engine generic
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Environment Variables
|
|
256
|
+
|
|
257
|
+
| Variable | Purpose |
|
|
258
|
+
|----------|---------|
|
|
259
|
+
| `RAI_ORIGINAL_PWD` | Preserves working directory (set by `.deb` wrapper) |
|
|
260
|
+
| `RAI_ENGINE_PATH` | Custom engine discovery paths (colon-separated) |
|
|
261
|
+
| `RAI_LOG_LEVEL` | Log verbosity (`DEBUG`, `INFO`, `WARN`, `ERROR`) |
|
|
262
|
+
|
|
263
|
+
## Validation
|
|
264
|
+
|
|
265
|
+
Validate configuration files:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Validate all config files
|
|
269
|
+
bin/raictl validate
|
|
270
|
+
|
|
271
|
+
# Validate behaviour files only
|
|
272
|
+
bin/raictl behaviour validate
|
|
273
|
+
|
|
274
|
+
# Validate design documents only
|
|
275
|
+
bin/raictl design validate
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Further Reading
|
|
279
|
+
|
|
280
|
+
- [REFERENCE.md](REFERENCE.md) - Complete CLI options and file locations reference
|
|
281
|
+
- [INSTALL.md](../INSTALL.md) - Installation guide
|