rosett-ai 1.3.3 → 1.5.10
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 +4 -4
- data/CHANGELOG.md +413 -22
- data/README.md +56 -42
- data/bin/raictl +13 -0
- data/conf/adopt_redactions.yml +2 -0
- data/conf/compliance/cra_rules.yml +2 -0
- data/conf/compliance/license_rules.yml +2 -0
- data/conf/mcp/server_defaults.yml +2 -0
- data/conf/mcp/trust.yml +1 -0
- data/conf/packaging/core.yml +2 -0
- data/conf/packaging/gtk4.yml +2 -0
- data/conf/packaging/qt6.yml +2 -0
- data/conf/policy/default_deny_list.yml +2 -0
- data/conf/review/cli-command-audit.yml +2 -0
- data/conf/review/design-docs.yml +2 -0
- data/conf/review/design-questionnaire.yml +2 -0
- data/conf/review/questionnaire.yml +2 -0
- data/conf/review/rosett-ai-core.yml +2 -0
- data/conf/schemas/ai_config_schema.json +14 -2
- data/conf/schemas/autoqueue.schema.json +153 -0
- data/conf/schemas/behaviour_schema.json +31 -7
- data/conf/schemas/compliance_rule_schema.json +17 -4
- data/conf/schemas/content_pack_manifest_schema.json +23 -4
- data/conf/schemas/design_schema.json +177 -42
- data/conf/schemas/engine_manifest_schema.json +22 -5
- data/conf/schemas/lockfile_schema.json +26 -4
- data/conf/schemas/mcp_server_schema.json +50 -9
- data/conf/schemas/packaging_schema.json +23 -5
- data/conf/schemas/policy_schema.json +35 -9
- data/conf/schemas/provenance_schema.json +33 -5
- data/conf/schemas/rai_config_schema.json +6 -2
- data/conf/schemas/rai_project_schema.json +8 -2
- data/conf/schemas/scope_hierarchy_schema.json +22 -5
- data/conf/schemas/target_schema.json +33 -6
- data/conf/schemas/tooling_schema.json +53 -12
- data/conf/schemas/workflow_schema.json +39 -9
- data/conf/targets/agents_md.yml +1 -0
- data/conf/targets/claude.yml +2 -0
- data/conf/tooling/tools.yml +2 -0
- data/lib/rosett_ai/adopter/local_analysis_collector.rb +5 -0
- data/lib/rosett_ai/adopter/rule_adopter.rb +40 -0
- data/lib/rosett_ai/ai_config/context_window.rb +3 -0
- data/lib/rosett_ai/ai_config/cost_controls.rb +1 -0
- data/lib/rosett_ai/ai_config/fallback_chain.rb +1 -0
- data/lib/rosett_ai/ai_config/model_router.rb +1 -0
- data/lib/rosett_ai/ai_config/validator.rb +2 -0
- data/lib/rosett_ai/authorship/attribution_compiler.rb +1 -0
- data/lib/rosett_ai/authorship/disclosure_policy.rb +2 -0
- data/lib/rosett_ai/authorship/review_validator.rb +1 -0
- data/lib/rosett_ai/authorship/trailer_generator.rb +1 -0
- data/lib/rosett_ai/backup/compressor.rb +3 -0
- data/lib/rosett_ai/backup/destination.rb +1 -0
- data/lib/rosett_ai/behaviour/manager.rb +1 -0
- data/lib/rosett_ai/compiler/backend.rb +3 -0
- data/lib/rosett_ai/compiler/backends/agents_md_backend.rb +1 -0
- data/lib/rosett_ai/compiler/backends/claude_backend.rb +1 -0
- data/lib/rosett_ai/compiler/behaviour_compiler.rb +1 -0
- data/lib/rosett_ai/compiler/compilation_pipeline.rb +1 -7
- data/lib/rosett_ai/compiler/locale_compiler.rb +2 -0
- data/lib/rosett_ai/compiler/target_profile.rb +11 -0
- data/lib/rosett_ai/completion/generator.rb +2 -0
- data/lib/rosett_ai/completion/shells/zsh_generator.rb +1 -0
- data/lib/rosett_ai/comply/checkers/cra_checker.rb +1 -0
- data/lib/rosett_ai/comply/checkers/license_checker.rb +2 -0
- data/lib/rosett_ai/comply/checkers/spdx_header_checker.rb +4 -0
- data/lib/rosett_ai/comply/runner.rb +2 -0
- data/lib/rosett_ai/composition/composer.rb +1 -0
- data/lib/rosett_ai/composition/lockfile.rb +1 -0
- data/lib/rosett_ai/composition/merge_strategy.rb +1 -0
- data/lib/rosett_ai/config/masking_secret_resolver.rb +9 -0
- data/lib/rosett_ai/config/secret_resolver.rb +4 -0
- data/lib/rosett_ai/configuration.rb +4 -0
- data/lib/rosett_ai/content/content_client.rb +15 -0
- data/lib/rosett_ai/content/pack_installer.rb +1 -0
- data/lib/rosett_ai/content/pack_manifest.rb +21 -0
- data/lib/rosett_ai/content_packs/manager.rb +1 -0
- data/lib/rosett_ai/dbus/compositor_detector.rb +2 -0
- data/lib/rosett_ai/dbus/focus_adapters/base.rb +1 -0
- data/lib/rosett_ai/dbus/focus_adapters/gnome_adapter.rb +5 -0
- data/lib/rosett_ai/dbus/focus_adapters/hyprland_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/i3_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/kwin_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_adapters/x11_adapter.rb +4 -0
- data/lib/rosett_ai/dbus/focus_monitor_interface.rb +1 -0
- data/lib/rosett_ai/dbus/manager_interface.rb +1 -0
- data/lib/rosett_ai/dbus/plugin_manager_interface.rb +2 -0
- data/lib/rosett_ai/dbus/rate_limiter.rb +1 -0
- data/lib/rosett_ai/dbus/service.rb +3 -0
- data/lib/rosett_ai/dbus/status_notifier_interface.rb +14 -0
- data/lib/rosett_ai/desktop/dbus_client.rb +6 -0
- data/lib/rosett_ai/desktop/gtk4_app.rb +3 -0
- data/lib/rosett_ai/desktop/gtk4_preferences.rb +1 -0
- data/lib/rosett_ai/desktop/gui_logger.rb +2 -0
- data/lib/rosett_ai/doctor/check.rb +1 -1
- data/lib/rosett_ai/doctor/checks/cache_health_check.rb +1 -0
- data/lib/rosett_ai/doctor.rb +1 -0
- data/lib/rosett_ai/documentation/reference_compiler.rb +9 -0
- data/lib/rosett_ai/documentation/translator.rb +8 -0
- data/lib/rosett_ai/engines/base_config_compiler.rb +71 -1
- data/lib/rosett_ai/engines/detector.rb +5 -0
- data/lib/rosett_ai/engines/registry.rb +7 -0
- data/lib/rosett_ai/exit_codes.rb +6 -0
- data/lib/rosett_ai/formatting.rb +1 -0
- data/lib/rosett_ai/gem_consistency_checker.rb +6 -0
- data/lib/rosett_ai/git_hooks/chain_detector.rb +1 -0
- data/lib/rosett_ai/git_hooks/installer.rb +4 -0
- data/lib/rosett_ai/git_hooks/script_generator.rb +2 -0
- data/lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb +6 -0
- data/lib/rosett_ai/i18n/utf8_checker.rb +1 -0
- data/lib/rosett_ai/init/config_file_writer.rb +4 -0
- data/lib/rosett_ai/init/directory_builder.rb +15 -0
- data/lib/rosett_ai/init/file_copier.rb +51 -0
- data/lib/rosett_ai/init/mcp_registrar.rb +1 -0
- data/lib/rosett_ai/init/project_initializer.rb +1 -0
- data/lib/rosett_ai/licensing/license_key.rb +4 -0
- data/lib/rosett_ai/licensing/license_store.rb +11 -0
- data/lib/rosett_ai/licensing/tier.rb +9 -0
- data/lib/rosett_ai/mcp/admin/auditor.rb +1 -0
- data/lib/rosett_ai/mcp/admin/health_checker.rb +1 -0
- data/lib/rosett_ai/mcp/admin/registry.rb +1 -0
- data/lib/rosett_ai/mcp/enforcement/hook_generator.rb +27 -4
- data/lib/rosett_ai/mcp/enforcement/validator.rb +24 -3
- data/lib/rosett_ai/mcp/governance.rb +9 -0
- data/lib/rosett_ai/mcp/http_security_config.rb +22 -0
- data/lib/rosett_ai/mcp/key_hasher.rb +4 -2
- data/lib/rosett_ai/mcp/keyfile.rb +4 -0
- data/lib/rosett_ai/mcp/middleware/cors.rb +4 -0
- data/lib/rosett_ai/mcp/middleware/origin_validation.rb +1 -0
- data/lib/rosett_ai/mcp/middleware/rate_limit.rb +3 -0
- data/lib/rosett_ai/mcp/plugins.rb +1 -0
- data/lib/rosett_ai/mcp/prompts/compilation_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/prompts/compliance_prompt.rb +3 -0
- data/lib/rosett_ai/mcp/prompts/diagnostics_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/prompts/validation_prompt.rb +2 -0
- data/lib/rosett_ai/mcp/resources/behaviour_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/config_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/design_resource.rb +1 -0
- data/lib/rosett_ai/mcp/resources/hooks_resource.rb +3 -0
- data/lib/rosett_ai/mcp/resources/provenance_resource.rb +2 -0
- data/lib/rosett_ai/mcp/resources/rules_resource.rb +1 -0
- data/lib/rosett_ai/mcp/resources/schema_resource.rb +1 -0
- data/lib/rosett_ai/mcp/server.rb +7 -1
- data/lib/rosett_ai/mcp/settings/trust_manager.rb +3 -0
- data/lib/rosett_ai/mcp/tools/adopt_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/backup_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/behaviour_display_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/behaviour_list_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/behaviour_manage_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/behaviour_show_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/compile_status_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/compile_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/comply_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/config_compile_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/config_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/content_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/context_query_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/design_list_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/design_show_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/doctor_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/documentation_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/engines_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/hook_install_tool.rb +7 -0
- data/lib/rosett_ai/mcp/tools/hook_preview_tool.rb +33 -8
- data/lib/rosett_ai/mcp/tools/hooks_status_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/init_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/license_status_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/project_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/provenance_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/provenance_write_tool.rb +3 -0
- data/lib/rosett_ai/mcp/tools/retrofit_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/rule_search_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/schema_get_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/tooling_tool.rb +5 -0
- data/lib/rosett_ai/mcp/tools/validate_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/workflow_execute_tool.rb +4 -0
- data/lib/rosett_ai/mcp/tools/workflow_tool.rb +5 -0
- data/lib/rosett_ai/migration/detector.rb +1 -0
- data/lib/rosett_ai/migration/nncc_config_migrator.rb +2 -0
- data/lib/rosett_ai/migration/xdg_migrator.rb +3 -1
- data/lib/rosett_ai/package_manager/apt.rb +5 -0
- data/lib/rosett_ai/package_manager/base.rb +1 -0
- data/lib/rosett_ai/package_manager/gem_backend.rb +1 -0
- data/lib/rosett_ai/packaging/variant_config.rb +12 -0
- data/lib/rosett_ai/plugins/contract.rb +1 -0
- data/lib/rosett_ai/plugins/engine_contract.rb +2 -0
- data/lib/rosett_ai/plugins/gui_contract.rb +2 -0
- data/lib/rosett_ai/plugins/mcp_contract.rb +2 -0
- data/lib/rosett_ai/plugins/registry.rb +10 -0
- data/lib/rosett_ai/policy/auditor.rb +1 -0
- data/lib/rosett_ai/policy/opt_out_scanner.rb +1 -0
- data/lib/rosett_ai/policy/tier_hierarchy.rb +2 -0
- data/lib/rosett_ai/policy/validator.rb +1 -0
- data/lib/rosett_ai/profiler.rb +7 -0
- data/lib/rosett_ai/project/drift_detector.rb +1 -0
- data/lib/rosett_ai/project/manager.rb +1 -0
- data/lib/rosett_ai/project/template_applier.rb +1 -0
- data/lib/rosett_ai/provenance/entry.rb +2 -0
- data/lib/rosett_ai/provenance/source.rb +1 -0
- data/lib/rosett_ai/provenance/store.rb +3 -0
- data/lib/rosett_ai/provenance/validator.rb +1 -0
- data/lib/rosett_ai/quorum/collector.rb +1 -0
- data/lib/rosett_ai/quorum/comparator.rb +2 -0
- data/lib/rosett_ai/quorum/strategies/adopt.rb +1 -0
- data/lib/rosett_ai/rai_config.rb +9 -0
- data/lib/rosett_ai/retrofit/engine.rb +2 -0
- data/lib/rosett_ai/retrofit/parsers/agents_md_parser.rb +8 -0
- data/lib/rosett_ai/retrofit/parsers/claude_parser.rb +10 -0
- data/lib/rosett_ai/retrofit/parsers/cursor_parser.rb +9 -0
- data/lib/rosett_ai/retrofit/secret_detector.rb +3 -0
- data/lib/rosett_ai/secrets_resolver.rb +1 -0
- data/lib/rosett_ai/session_hooks/installer.rb +130 -0
- data/lib/rosett_ai/smart_feedback/suggester.rb +4 -0
- data/lib/rosett_ai/smart_feedback/thor_middleware.rb +7 -0
- data/lib/rosett_ai/structured_logger.rb +1 -0
- data/lib/rosett_ai/telemetry/log_rotator.rb +1 -0
- data/lib/rosett_ai/telemetry.rb +1 -0
- data/lib/rosett_ai/thor/cli.rb +9 -0
- data/lib/rosett_ai/thor/tasks/adopt.rb +2 -0
- data/lib/rosett_ai/thor/tasks/backfill_user_yml.rb +207 -0
- data/lib/rosett_ai/thor/tasks/backup.rb +6 -0
- data/lib/rosett_ai/thor/tasks/behaviour.rb +12 -0
- data/lib/rosett_ai/thor/tasks/build.rb +106 -21
- data/lib/rosett_ai/thor/tasks/compile.rb +76 -32
- data/lib/rosett_ai/thor/tasks/completion.rb +9 -0
- data/lib/rosett_ai/thor/tasks/comply.rb +2 -0
- data/lib/rosett_ai/thor/tasks/config.rb +21 -5
- data/lib/rosett_ai/thor/tasks/content.rb +8 -0
- data/lib/rosett_ai/thor/tasks/dbus.rb +13 -0
- data/lib/rosett_ai/thor/tasks/design.rb +2 -0
- data/lib/rosett_ai/thor/tasks/desktop.rb +4 -0
- data/lib/rosett_ai/thor/tasks/doctor.rb +2 -0
- data/lib/rosett_ai/thor/tasks/documentation.rb +7 -0
- data/lib/rosett_ai/thor/tasks/engines.rb +8 -0
- data/lib/rosett_ai/thor/tasks/hooks.rb +8 -0
- data/lib/rosett_ai/thor/tasks/init.rb +1 -0
- data/lib/rosett_ai/thor/tasks/license.rb +8 -0
- data/lib/rosett_ai/thor/tasks/mcp.rb +40 -0
- data/lib/rosett_ai/thor/tasks/migrate.rb +2 -0
- data/lib/rosett_ai/thor/tasks/plugins.rb +15 -0
- data/lib/rosett_ai/thor/tasks/project.rb +8 -0
- data/lib/rosett_ai/thor/tasks/provenance.rb +8 -0
- data/lib/rosett_ai/thor/tasks/release.rb +8 -0
- data/lib/rosett_ai/thor/tasks/retrofit.rb +4 -0
- data/lib/rosett_ai/thor/tasks/validate.rb +1 -0
- data/lib/rosett_ai/thor/tasks/workflow.rb +14 -0
- data/lib/rosett_ai/tooling/version_checker.rb +1 -0
- data/lib/rosett_ai/ui/accessible_tui.rb +18 -0
- data/lib/rosett_ai/ui/base.rb +3 -0
- data/lib/rosett_ai/ui/gtk4.rb +19 -0
- data/lib/rosett_ai/ui/kde.rb +1 -0
- data/lib/rosett_ai/ui/qt6.rb +1 -0
- data/lib/rosett_ai/ui/registry.rb +15 -0
- data/lib/rosett_ai/ui/tui.rb +22 -0
- data/lib/rosett_ai/validators/behaviour_validator.rb +1 -0
- data/lib/rosett_ai/validators/design_validator.rb +2 -0
- data/lib/rosett_ai/validators/schema_validator.rb +4 -0
- data/lib/rosett_ai/validators/tooling_validator.rb +1 -0
- data/lib/rosett_ai/version.rb +2 -1
- data/lib/rosett_ai/version_consistency_checker.rb +6 -0
- data/lib/rosett_ai/workflow/engine.rb +1 -0
- data/lib/rosett_ai/workflow/manager.rb +1 -0
- data/lib/rosett_ai/workflow/schema_validator.rb +2 -0
- data/lib/rosett_ai/workflow/step_runner.rb +1 -0
- data/lib/rosett_ai/workflow/steps/rai_step.rb +1 -0
- data/lib/rosett_ai/yaml_loader.rb +2 -0
- data/lib/rosett_ai.rb +2 -0
- data/lib/scripts/generated/docker_hub_tags.rb +2 -0
- data/locales/ar.yml +2 -0
- data/locales/en.yml +5 -0
- data/locales/fr.yml +2 -0
- metadata +9 -189
- data/.ai-provenance.yml +0 -119
- data/.debride_whitelist +0 -186
- data/.fasterer.yml +0 -29
- data/.mdl_style.rb +0 -10
- data/.mdlrc +0 -3
- data/.mutant.yml +0 -49
- data/.namespace-allowlist +0 -42
- data/.reek.yml +0 -1040
- data/.rosett-ai/config.yml +0 -3
- data/.rspec +0 -5
- data/.rubocop.yml +0 -380
- data/.ruby-version +0 -1
- data/.yamllint +0 -51
- data/.yardopts +0 -12
- data/AI-DISCLOSURE.md +0 -48
- data/CLAUDE.md +0 -141
- data/CONTRIBUTING.md +0 -734
- data/INSTALL.md +0 -154
- data/LICENSE.md +0 -675
- data/QUICKSTART.md +0 -73
- data/Rakefile +0 -200
- data/SECURITY.md +0 -114
- data/cliff.toml +0 -52
- data/conf/behaviour/.gitkeep +0 -0
- data/conf/design/aaif_alignment.yml +0 -181
- data/conf/design/ab_testing.yml +0 -172
- data/conf/design/accessibility.yml +0 -84
- data/conf/design/ai_authorship.yml +0 -210
- data/conf/design/ai_provenance.yml +0 -224
- data/conf/design/ai_tool_configuration.yml +0 -207
- data/conf/design/architecture.yml +0 -139
- data/conf/design/autocompletion.yml +0 -115
- data/conf/design/backward_compatibility.yml +0 -112
- data/conf/design/behaviour_composition.yml +0 -246
- data/conf/design/build_rake_extraction.yml +0 -57
- data/conf/design/ci_pipeline.yml +0 -100
- data/conf/design/claude_code_configuration.yml +0 -157
- data/conf/design/compiler.yml +0 -128
- data/conf/design/comply.yml +0 -153
- data/conf/design/content_packs.yml +0 -84
- data/conf/design/desktop_integration.yml +0 -289
- data/conf/design/distribution.yml +0 -216
- data/conf/design/doctor.yml +0 -184
- data/conf/design/documentation.yml +0 -152
- data/conf/design/engine_architecture.yml +0 -257
- data/conf/design/error_handling.yml +0 -103
- data/conf/design/feature_flags.yml +0 -142
- data/conf/design/git_hooks.yml +0 -165
- data/conf/design/gui_plugins.yml +0 -475
- data/conf/design/i18n.yml +0 -84
- data/conf/design/integration_testing.yml +0 -56
- data/conf/design/licensing_system.yml +0 -88
- data/conf/design/lifecycle_management.yml +0 -208
- data/conf/design/mcp_integration.yml +0 -207
- data/conf/design/mcp_settings.yml +0 -126
- data/conf/design/migration.yml +0 -56
- data/conf/design/monitoring_observability.yml +0 -194
- data/conf/design/namespace_cleanup.yml +0 -145
- data/conf/design/plugin_test_segregation.yml +0 -145
- data/conf/design/policy_management.yml +0 -229
- data/conf/design/project_management.yml +0 -183
- data/conf/design/rai_mcp_asset_discovery.yml +0 -164
- data/conf/design/rai_mcp_server.yml +0 -605
- data/conf/design/release_management.yml +0 -117
- data/conf/design/retrofit.yml +0 -199
- data/conf/design/retrospective_analyzer.yml +0 -79
- data/conf/design/scope_hierarchy.yml +0 -352
- data/conf/design/security.yml +0 -115
- data/conf/design/session_retrospective.yml +0 -85
- data/conf/design/smart_ui_feedback.yml +0 -89
- data/conf/design/structured_logging.yml +0 -148
- data/conf/design/styles.yml +0 -123
- data/conf/design/test_peer_review.yml +0 -89
- data/conf/design/testing.yml +0 -136
- data/conf/design/threat_model.yml +0 -108
- data/conf/design/ui_framework.yml +0 -111
- data/conf/design/usage_optimization.yml +0 -122
- data/conf/design/version_management.yml +0 -60
- data/conf/design/workflow.yml +0 -227
- data/doc/AAIF_POSITIONING.md +0 -58
- data/doc/ADOPT.md +0 -224
- data/doc/AI_PROVENANCE.md +0 -139
- data/doc/ARCHITECTURE.md +0 -920
- data/doc/BEHAVIOUR.md +0 -409
- data/doc/BUILD.md +0 -138
- data/doc/CI_CD_RECIPES.md +0 -171
- data/doc/CLAUDE_SESSIONS_MOVED.md +0 -16
- data/doc/COMMAND_ANALYSIS.md +0 -229
- data/doc/CONFIGURATION.md +0 -281
- data/doc/DESIGN_AUDIT.md +0 -235
- data/doc/DESIGN_PEER_REVIEW.md +0 -771
- data/doc/DESKTOP.md +0 -447
- data/doc/ENGINES.md +0 -567
- data/doc/ENGINE_DEVELOPMENT_GUIDE.md +0 -417
- data/doc/FEATURE_AUDIT.md +0 -218
- data/doc/IMPLEMENTATION_PLAN.md +0 -669
- data/doc/INCIDENT_REPORT_2026-02-02.md +0 -251
- data/doc/MIGRATION_GUIDE.md +0 -88
- data/doc/PACKAGING.md +0 -232
- data/doc/PROJECT_DASHBOARD.md +0 -153
- data/doc/PULP_DEPLOYMENT.md +0 -164
- data/doc/QUALITY_FIX_SUMMARY.md +0 -110
- data/doc/QUICK_START.md +0 -162
- data/doc/REEK_CONFIGURATION.md +0 -166
- data/doc/REFERENCE.md +0 -253
- data/doc/REFERENCES.md +0 -324
- data/doc/SECURITY_REVIEW_CHECKLIST.md +0 -72
- data/doc/SESSION_2026-02-28_GTK4_HARDENING.md +0 -359
- data/doc/SETUP.md +0 -202
- data/doc/TEST_PEER_REVIEW.md +0 -152
- data/doc/THREAT_MODEL.md +0 -230
- data/doc/USAGE.md +0 -545
- data/doc/USER_MANUAL.md +0 -585
- data/doc/ai_test_review_checklist.md +0 -110
- data/doc/changes/2026-02-18-packaging-fpm.md +0 -155
- data/doc/changes/2026-02-19-testing-infrastructure.md +0 -221
- data/doc/changes/2026-02-20-security-implementation.md +0 -281
- data/doc/changes/2026-02-20-styles-implementation.md +0 -220
- data/doc/changes/2026-02-21-architecture-completion.md +0 -95
- data/doc/changes/2026-02-21-architecture-ui-layer.md +0 -253
- data/doc/changes/2026-02-21-cc-config-implementation.md +0 -108
- data/doc/changes/2026-02-21-ci-pipeline-implementation.md +0 -214
- data/doc/changes/2026-02-21-compiler-multi-target-pipeline.md +0 -241
- data/doc/changes/2026-02-21-config-design-show-commands.md +0 -61
- data/doc/changes/2026-02-21-design-implementation-overview.md +0 -455
- data/doc/changes/2026-02-21-lifecycle-management.md +0 -196
- data/doc/changes/2026-02-21-path-resolver.md +0 -128
- data/doc/changes/2026-02-24-ci-tmpdir-mutant-fetch.md +0 -45
- data/doc/changes/2026-03-01-ci-bundler-strategy.md +0 -120
- data/doc/changes/2026-03-20-security-hardening-phase2.md +0 -163
- data/doc/context/SESSION-HANDOFF.md +0 -69
- data/doc/context/ai-engine-usage-trends-2026.md +0 -80
- data/doc/context/plan-pluggable-engines.md +0 -590
- data/doc/decisions/001-flog-deferred.md +0 -32
- data/doc/decisions/002-path-resolution-strategy.md +0 -158
- data/doc/decisions/003-ui-adapter-selection.md +0 -193
- data/doc/decisions/004-design-document-validation.md +0 -179
- data/doc/decisions/005-package-splitting-strategy.md +0 -200
- data/doc/decisions/006-multi-engine-architecture.md +0 -147
- data/doc/decisions/007-engine-agnostic-pivot.md +0 -219
- data/doc/decisions/008-ci-bundler-strategy.md +0 -129
- data/doc/decisions/009-core-only-v1-release.md +0 -60
- data/doc/decisions/010-engine-debian-packaging.md +0 -66
- data/doc/decisions/011-context-aware-cli.md +0 -71
- data/doc/dependency_decisions.yml +0 -247
- data/doc/issues/001-wrapper-missing-environment-variables.md +0 -197
- data/doc/issues/002-embedded-ruby-wrong-prefix.md +0 -217
- data/doc/issues/003-smoke-test-false-positive.md +0 -127
- data/doc/issues/004-market-research-design-updates.md +0 -109
- data/doc/issues/005-compile-scope-coexistence.md +0 -161
- data/doc/locales/.gitkeep +0 -0
- data/doc/man/rai.1.ronn +0 -505
- data/doc/operations/packaging.md +0 -133
- data/doc/operations/rosett-ai-release.md +0 -65
- data/doc/reference/error-catalog.md +0 -107
- 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 +0 -4
- data/doc/reference/src/bibliography.bib +0 -79
- data/doc/reference/src/main.tex +0 -1288
- data/doc/reference/src/structure.tex +0 -303
- data/doc/rosett-ai-bookmarks.html +0 -301
- data/kitchen.yml +0 -46
- data/lib/rosett_ai/mcp/enforcement/.gitkeep +0 -0
- data/locales/.gitkeep +0 -0
- data/packaging/build-engine-deb.sh +0 -81
- data/packaging/scripts/postinst +0 -17
- data/packaging/scripts/postrm +0 -19
- data/packaging/scripts/prerm +0 -10
- data/packaging/wrapper.sh.template +0 -38
- data/rosett-ai.gemspec +0 -63
- data/rules/.gitkeep +0 -0
- data/scripts/publish/pulp_upload.sh +0 -123
- data/settings.json +0 -29
data/QUICKSTART.md
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Quick Start
|
|
2
|
-
|
|
3
|
-
Get from zero to your first compiled rules in 5 minutes.
|
|
4
|
-
|
|
5
|
-
## 1. Install
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
sudo dpkg -i nncc_1.0.0-1_amd64.deb
|
|
9
|
-
sudo apt-get install -f # resolve dependencies
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## 2. Initialize
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
# Set up global ~/.claude/ structure
|
|
16
|
-
rai init --global
|
|
17
|
-
|
|
18
|
-
# (Optional) Set up project-local structure
|
|
19
|
-
rai init --local
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## 3. Create a behaviour rule
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
rai behaviour manage add my_first_rule
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Edit the created file at `conf/behaviour/my_first_rule.yml`:
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
name: my_first_rule
|
|
32
|
-
description: My first rai behaviour rule
|
|
33
|
-
version: 1.0.0
|
|
34
|
-
author: your_name
|
|
35
|
-
created_at: "2026-01-01"
|
|
36
|
-
modified_at: "2026-01-01"
|
|
37
|
-
modified_by: your_name
|
|
38
|
-
sensitive: false
|
|
39
|
-
used_in: []
|
|
40
|
-
rules:
|
|
41
|
-
- id: rule_001
|
|
42
|
-
description: Always explain your reasoning before making changes
|
|
43
|
-
priority: 50
|
|
44
|
-
enabled: true
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## 4. Compile
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Preview what would change
|
|
51
|
-
rai compile --simulate --verbose
|
|
52
|
-
|
|
53
|
-
# Compile rules to ~/.claude/rules/
|
|
54
|
-
rai compile --verbose
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## 5. Verify
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
# Check the generated files
|
|
61
|
-
ls ~/.claude/rules/
|
|
62
|
-
|
|
63
|
-
# Validate everything is consistent
|
|
64
|
-
rai validate
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Next Steps
|
|
68
|
-
|
|
69
|
-
- `rai compile --engine generic` to compile for non-Claude tools
|
|
70
|
-
- `rai design list` to explore design documents
|
|
71
|
-
- `rai adopt --verbose` to analyze your existing rules
|
|
72
|
-
- `man raictl` for the full manual
|
|
73
|
-
- See [INSTALL.md](INSTALL.md) for detailed installation options
|
data/Rakefile
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-License-Identifier: GPL-3.0-only
|
|
4
|
-
# Copyright (C) 2026 Hugo Antonio Sepulveda Manriquez / NeatNerds
|
|
5
|
-
|
|
6
|
-
require 'bundler/gem_tasks'
|
|
7
|
-
require 'rspec/core/rake_task'
|
|
8
|
-
require 'rubocop/rake_task'
|
|
9
|
-
|
|
10
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
11
|
-
RuboCop::RakeTask.new
|
|
12
|
-
|
|
13
|
-
desc 'Run reek smell detector'
|
|
14
|
-
task :reek do
|
|
15
|
-
sh 'bundle', 'exec', 'reek', 'lib/rosett_ai.rb', 'lib/rosett_ai/'
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
desc 'Check dependency licenses for GPL-3.0 compatibility'
|
|
19
|
-
task :licenses do
|
|
20
|
-
sh 'bundle', 'exec', 'license_finder'
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
desc 'Detect potentially uncalled methods'
|
|
24
|
-
task :debride do
|
|
25
|
-
sh 'bundle', 'exec', 'debride', '-w', '.debride_whitelist', 'lib/'
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
desc 'Audit dependencies for known vulnerabilities'
|
|
29
|
-
task :bundler_audit do
|
|
30
|
-
sh 'bundle', 'exec', 'bundler-audit', 'check', '--update'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
desc 'Detect structural code duplication'
|
|
34
|
-
task :flay do
|
|
35
|
-
sh 'bundle', 'exec', 'flay', '--mass', '16', 'lib/'
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
desc 'Run all quality gates'
|
|
39
|
-
task quality: [:spec, :rubocop, :reek, :licenses, :debride, :bundler_audit, :fasterer, :flay]
|
|
40
|
-
|
|
41
|
-
task default: :quality
|
|
42
|
-
|
|
43
|
-
namespace :docs do
|
|
44
|
-
desc 'Update all documentation'
|
|
45
|
-
task :update do
|
|
46
|
-
require_relative 'lib/rosett_ai'
|
|
47
|
-
RosettAi::Thor::Tasks::Documentation.new.update
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
desc 'Check documentation status'
|
|
51
|
-
task :status do
|
|
52
|
-
require_relative 'lib/rosett_ai'
|
|
53
|
-
RosettAi::Thor::Tasks::Documentation.new.status
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
namespace :man do
|
|
58
|
-
desc 'Build man pages from ronn source'
|
|
59
|
-
task :build do
|
|
60
|
-
require 'ronn'
|
|
61
|
-
source = File.expand_path('doc/man/rai.1.ronn', __dir__)
|
|
62
|
-
output_dir = File.expand_path('man/man1', __dir__)
|
|
63
|
-
FileUtils.mkdir_p(output_dir)
|
|
64
|
-
|
|
65
|
-
doc = Ronn::Document.new(source)
|
|
66
|
-
File.write(File.join(output_dir, 'rai.1'), doc.to_roff)
|
|
67
|
-
puts 'Generated man/man1/rai.1'
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
begin
|
|
72
|
-
require 'yard'
|
|
73
|
-
YARD::Rake::YardocTask.new(:yard) do |t|
|
|
74
|
-
t.files = ['lib/**/*.rb']
|
|
75
|
-
t.options = ['--output-dir', 'doc/api', '--markup', 'markdown', '--no-private']
|
|
76
|
-
end
|
|
77
|
-
rescue LoadError
|
|
78
|
-
desc 'Generate YARD documentation (yard gem not installed)'
|
|
79
|
-
task(:yard) { warn 'yard gem is not installed. Run: gem install yard' }
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
desc 'Generate CHANGELOG.md from conventional commits (requires git-cliff)'
|
|
83
|
-
task :changelog do
|
|
84
|
-
unless system('which git-cliff > /dev/null 2>&1')
|
|
85
|
-
warn 'git-cliff is not installed. See: https://git-cliff.org/docs/installation'
|
|
86
|
-
exit 1
|
|
87
|
-
end
|
|
88
|
-
system('git-cliff', '--config', 'cliff.toml', '--output', 'CHANGELOG.md') || exit(1)
|
|
89
|
-
puts 'Generated CHANGELOG.md'
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
desc 'Run fasterer performance suggestions'
|
|
93
|
-
task :fasterer do
|
|
94
|
-
require 'fasterer/cli'
|
|
95
|
-
Fasterer::CLI.execute
|
|
96
|
-
rescue LoadError
|
|
97
|
-
warn 'fasterer gem is not installed. Run: gem install fasterer'
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
namespace :behaviour do
|
|
101
|
-
desc 'Validate all behaviour files'
|
|
102
|
-
task :validate do
|
|
103
|
-
require_relative 'lib/rosett_ai'
|
|
104
|
-
RosettAi::Thor::Tasks::Behaviour.new.validate
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
desc 'List all behaviour files'
|
|
108
|
-
task :list do
|
|
109
|
-
require_relative 'lib/rosett_ai'
|
|
110
|
-
RosettAi::Thor::Tasks::Behaviour.new.list
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
namespace :build do
|
|
115
|
-
desc 'Build core .deb package (variant: core, gtk4, qt6)'
|
|
116
|
-
task :package, [:variant] do |_t, args|
|
|
117
|
-
require_relative 'lib/rosett_ai'
|
|
118
|
-
# Trigger Zeitwerk autoload of Build (which defines BuildPackage)
|
|
119
|
-
RosettAi::Thor::Tasks::Build # rubocop:disable Lint/Void
|
|
120
|
-
opts = build_package_opts(args)
|
|
121
|
-
RosettAi::Thor::Tasks::BuildPackage.new([], opts).invoke(:create)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
desc 'Build engine plugin .deb package'
|
|
125
|
-
task :engine do
|
|
126
|
-
require_relative 'lib/rosett_ai'
|
|
127
|
-
RosettAi::Thor::Tasks::Build # rubocop:disable Lint/Void
|
|
128
|
-
RosettAi::Thor::Tasks::BuildEngine.new.invoke(:create)
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Build option flags from Rake args and environment variables.
|
|
133
|
-
# Usage:
|
|
134
|
-
# rake build:package # defaults
|
|
135
|
-
# rake build:package[gtk4] # variant only
|
|
136
|
-
# rake build:package VERBOSE=1 CLEAN=1 # flags via env
|
|
137
|
-
# rake build:package[gtk4] VERBOSE=1 CLEAN=1 # both
|
|
138
|
-
def build_package_opts(args)
|
|
139
|
-
opts = {}
|
|
140
|
-
opts[:variant] = args[:variant] if args[:variant]
|
|
141
|
-
opts[:verbose] = true if ENV['VERBOSE']
|
|
142
|
-
opts[:clean] = true if ENV['CLEAN']
|
|
143
|
-
opts[:ruby_version] = ENV['RUBY_VERSION'] if ENV['RUBY_VERSION']
|
|
144
|
-
opts[:architecture] = ENV['ARCHITECTURE'] if ENV['ARCHITECTURE']
|
|
145
|
-
opts[:output_dir] = ENV['OUTPUT_DIR'] if ENV['OUTPUT_DIR']
|
|
146
|
-
opts[:build_iteration] = ENV['BUILD_ITERATION'].to_i if ENV['BUILD_ITERATION']
|
|
147
|
-
opts
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
namespace :release do
|
|
151
|
-
desc 'Prepare release (level: major, minor, patch)'
|
|
152
|
-
task :prepare, [:level] do |_t, args|
|
|
153
|
-
require_relative 'lib/rosett_ai'
|
|
154
|
-
RosettAi::Thor::Tasks::Release.new.invoke(:prepare, [args[:level] || 'patch'])
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
desc 'Create annotated git tag from current VERSION'
|
|
158
|
-
task :tag do
|
|
159
|
-
require_relative 'lib/rosett_ai'
|
|
160
|
-
RosettAi::Thor::Tasks::Release.new.invoke(:tag)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
desc 'Show release status (version, last tag, unreleased commits)'
|
|
164
|
-
task :status do
|
|
165
|
-
require_relative 'lib/rosett_ai'
|
|
166
|
-
RosettAi::Thor::Tasks::Release.new.invoke(:status)
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
namespace :readme do
|
|
171
|
-
desc 'Update README version, test count, and engine count from live sources'
|
|
172
|
-
task :update do
|
|
173
|
-
require_relative 'lib/rosett_ai/version'
|
|
174
|
-
require 'json'
|
|
175
|
-
|
|
176
|
-
readme_path = File.expand_path('README.md', __dir__)
|
|
177
|
-
content = File.read(readme_path)
|
|
178
|
-
|
|
179
|
-
# Version from constant
|
|
180
|
-
version = RosettAi::VERSION
|
|
181
|
-
content.gsub!(%r{<!-- rai:version -->.*?<!-- /rai:version -->},
|
|
182
|
-
"<!-- rai:version -->#{version}<!-- /rai:version -->")
|
|
183
|
-
|
|
184
|
-
# Test count via rspec --dry-run (COVERAGE=false suppresses SimpleCov noise in stdout)
|
|
185
|
-
env = { 'COVERAGE' => 'false' }
|
|
186
|
-
json_output = IO.popen(env, ['bundle', 'exec', 'rspec', '--dry-run', '--format', 'json'],
|
|
187
|
-
err: File::NULL, &:read)
|
|
188
|
-
test_count = JSON.parse(json_output).dig('summary', 'example_count')
|
|
189
|
-
content.gsub!(%r{<!-- rai:tests -->.*?<!-- /rai:tests -->},
|
|
190
|
-
"<!-- rai:tests -->#{test_count} RSpec specs<!-- /rai:tests -->")
|
|
191
|
-
|
|
192
|
-
# Engine count from target profiles
|
|
193
|
-
engine_count = Dir[File.expand_path('conf/targets/*.yml', __dir__)].size
|
|
194
|
-
content.gsub!(%r{<!-- rai:engines -->\d+<!-- /rai:engines -->},
|
|
195
|
-
"<!-- rai:engines -->#{engine_count}<!-- /rai:engines -->")
|
|
196
|
-
|
|
197
|
-
File.write(readme_path, content)
|
|
198
|
-
puts "README.md updated: v#{version}, #{test_count} specs, #{engine_count} engines"
|
|
199
|
-
end
|
|
200
|
-
end
|
data/SECURITY.md
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Security Policy
|
|
2
|
-
|
|
3
|
-
## Scope
|
|
4
|
-
|
|
5
|
-
This policy covers the following NeatNerds open-source projects:
|
|
6
|
-
|
|
7
|
-
- **Rosett-AI** (raictl) --- the core CLI and compiler
|
|
8
|
-
- **rosett-ai-engine-\*** --- all official engine adapter gems
|
|
9
|
-
- **auditor-mcp** --- InSpec MCP server
|
|
10
|
-
- **openvox-mcp** --- OpenVox MCP server
|
|
11
|
-
- **neatspec** --- Compliance-as-a-Service wrapper
|
|
12
|
-
|
|
13
|
-
Third-party forks and community plugins are outside this scope unless
|
|
14
|
-
they ship under the `neatnerds` GitLab namespace.
|
|
15
|
-
|
|
16
|
-
## Supported Versions
|
|
17
|
-
|
|
18
|
-
| Version | Supported |
|
|
19
|
-
|---------|-----------|
|
|
20
|
-
| Latest release | Yes |
|
|
21
|
-
| Previous minor | Security fixes only |
|
|
22
|
-
| Older | No |
|
|
23
|
-
|
|
24
|
-
Only the latest tagged release and the immediately preceding minor
|
|
25
|
-
release receive security patches. If you are running an older version,
|
|
26
|
-
please upgrade before reporting.
|
|
27
|
-
|
|
28
|
-
## Reporting a Vulnerability
|
|
29
|
-
|
|
30
|
-
**Do not open a public issue for security vulnerabilities.**
|
|
31
|
-
|
|
32
|
-
### Email (primary channel --- no account required)
|
|
33
|
-
|
|
34
|
-
Send an email to **security@neatnerds.be** with:
|
|
35
|
-
|
|
36
|
-
1. Affected project and version
|
|
37
|
-
2. Description of the vulnerability
|
|
38
|
-
3. Steps to reproduce (proof-of-concept if possible)
|
|
39
|
-
4. Impact assessment (what an attacker could achieve)
|
|
40
|
-
|
|
41
|
-
Email is the primary reporting channel. It requires no account, no
|
|
42
|
-
registration, and no prior relationship with the project. Anyone who
|
|
43
|
-
discovers a vulnerability can report it immediately.
|
|
44
|
-
|
|
45
|
-
You may optionally encrypt your report using the PGP key for
|
|
46
|
-
`security@neatnerds.be`, available on
|
|
47
|
-
[keys.openpgp.org](https://keys.openpgp.org). Search for the email
|
|
48
|
-
address to retrieve the public key.
|
|
49
|
-
|
|
50
|
-
### GitLab Confidential Issue (alternative --- requires account)
|
|
51
|
-
|
|
52
|
-
If you already have an account on our self-hosted GitLab instance
|
|
53
|
-
(`gitlab.neatnerds.be`), you may open a **confidential** issue on
|
|
54
|
-
the affected project's repository instead. Mark it confidential
|
|
55
|
-
before submitting and use the `Security` issue template.
|
|
56
|
-
|
|
57
|
-
This channel is mainly useful for existing contributors and
|
|
58
|
-
community members who already have access. If you do not have an
|
|
59
|
-
account, use the email channel above --- do not create an account
|
|
60
|
-
solely to report a vulnerability.
|
|
61
|
-
|
|
62
|
-
## Response Timeline
|
|
63
|
-
|
|
64
|
-
| Stage | Target |
|
|
65
|
-
|-------|--------|
|
|
66
|
-
| Acknowledgement | 48 hours |
|
|
67
|
-
| Initial assessment | 7 calendar days |
|
|
68
|
-
| Fix or mitigation | 90 calendar days |
|
|
69
|
-
|
|
70
|
-
If we cannot meet a target, we will communicate the revised timeline
|
|
71
|
-
in the acknowledgement or assessment response.
|
|
72
|
-
|
|
73
|
-
## Disclosure Policy
|
|
74
|
-
|
|
75
|
-
We follow **coordinated disclosure**:
|
|
76
|
-
|
|
77
|
-
1. The reporter and maintainers agree on a disclosure date (default:
|
|
78
|
-
90 days after the initial report).
|
|
79
|
-
2. A fix is developed and tested in a private branch.
|
|
80
|
-
3. The fix is released, and a security advisory is published on
|
|
81
|
-
the same day.
|
|
82
|
-
4. The reporter is credited in the advisory (unless they request
|
|
83
|
-
anonymity).
|
|
84
|
-
|
|
85
|
-
We will never disclose a vulnerability before a fix is available
|
|
86
|
-
unless active exploitation is detected in the wild.
|
|
87
|
-
|
|
88
|
-
## Credit
|
|
89
|
-
|
|
90
|
-
We gratefully acknowledge security researchers who report
|
|
91
|
-
vulnerabilities responsibly. Unless you request otherwise, your name
|
|
92
|
-
(or handle) and a link to your profile will appear in the security
|
|
93
|
-
advisory and the CHANGELOG entry for the fix.
|
|
94
|
-
|
|
95
|
-
## Security Advisories
|
|
96
|
-
|
|
97
|
-
| ID | Date | Severity | Summary |
|
|
98
|
-
|----|------|----------|---------|
|
|
99
|
-
| [NNSA-2026-001](https://gitlab.neatnerds.be/foss/rosett-ai/rosett-ai/-/issues/2) | 2026-04-18 | Medium | Session data included in v1.2.0 gem package. Yanked. Fixed in v1.3.0+. |
|
|
100
|
-
|
|
101
|
-
## Security Best Practices for Contributors
|
|
102
|
-
|
|
103
|
-
All contributions must follow these rules (enforced by CI and
|
|
104
|
-
overcommit hooks):
|
|
105
|
-
|
|
106
|
-
- Use `YAML.safe_load` exclusively --- never `YAML.load`
|
|
107
|
-
- Use array-form `system()` calls --- never string interpolation
|
|
108
|
-
in shell commands
|
|
109
|
-
- Write files only to whitelisted directories
|
|
110
|
-
- Set 0600 permissions on any file containing secrets
|
|
111
|
-
- Never log secrets or credentials
|
|
112
|
-
- Validate all external input before use
|
|
113
|
-
- Include `# SPDX-License-Identifier: GPL-3.0-only` in every
|
|
114
|
-
Ruby source file
|
data/cliff.toml
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# git-cliff configuration for NeatNerds Code Companion
|
|
2
|
-
# Generates Keep a Changelog 1.1.0 formatted CHANGELOG from conventional commits.
|
|
3
|
-
#
|
|
4
|
-
# Reference: https://git-cliff.org/docs/configuration
|
|
5
|
-
|
|
6
|
-
[changelog]
|
|
7
|
-
header = """
|
|
8
|
-
# Changelog
|
|
9
|
-
|
|
10
|
-
All notable changes to the NeatNerds Code Companion (nncc) are documented in this file.
|
|
11
|
-
|
|
12
|
-
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\n
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
body = """
|
|
16
|
-
{% if version %}\
|
|
17
|
-
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
18
|
-
{% else %}\
|
|
19
|
-
## [Unreleased]
|
|
20
|
-
{% endif %}\
|
|
21
|
-
{% for group, commits in commits | group_by(attribute="group") %}
|
|
22
|
-
### {{ group | striptags | trim | upper_first }}
|
|
23
|
-
{% for commit in commits %}
|
|
24
|
-
- {% if commit.scope %}**{{ commit.scope }}:** {% endif %}\
|
|
25
|
-
{{ commit.message | split(pat=":") | last | trim | upper_first }}\
|
|
26
|
-
{% endfor %}
|
|
27
|
-
{% endfor -%}
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
footer = ""
|
|
31
|
-
trim = true
|
|
32
|
-
|
|
33
|
-
[git]
|
|
34
|
-
conventional_commits = true
|
|
35
|
-
filter_unconventional = false
|
|
36
|
-
split_commits = false
|
|
37
|
-
protect_breaking_commits = false
|
|
38
|
-
filter_commits = false
|
|
39
|
-
tag_pattern = "v[0-9].*"
|
|
40
|
-
sort_commits = "oldest"
|
|
41
|
-
commit_parsers = [
|
|
42
|
-
{ message = "^feat", group = "<!-- 0 -->Added" },
|
|
43
|
-
{ message = "^fix", group = "<!-- 1 -->Fixed" },
|
|
44
|
-
{ message = "^refactor", group = "<!-- 2 -->Changed" },
|
|
45
|
-
{ message = "^perf", group = "<!-- 2 -->Changed" },
|
|
46
|
-
{ message = "^docs", group = "<!-- 3 -->Documentation" },
|
|
47
|
-
{ message = "^chore\\(release\\)", skip = true },
|
|
48
|
-
{ message = "^chore", group = "<!-- 4 -->Other" },
|
|
49
|
-
{ message = "^ci", group = "<!-- 4 -->Other" },
|
|
50
|
-
{ message = "^test", group = "<!-- 5 -->Other" },
|
|
51
|
-
{ body = ".*", group = "<!-- 6 -->Other" },
|
|
52
|
-
]
|
data/conf/behaviour/.gitkeep
DELETED
|
File without changes
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: aaif_alignment
|
|
3
|
-
domain: core
|
|
4
|
-
version: 0.1.0
|
|
5
|
-
status: implemented
|
|
6
|
-
priority: 2
|
|
7
|
-
author: hugo
|
|
8
|
-
created_at: "2026-02-24"
|
|
9
|
-
modified_at: "2026-03-16"
|
|
10
|
-
modified_by: claude
|
|
11
|
-
depends_on:
|
|
12
|
-
- security
|
|
13
|
-
- architecture
|
|
14
|
-
- compiler
|
|
15
|
-
- mcp_integration
|
|
16
|
-
- error_handling
|
|
17
|
-
#
|
|
18
|
-
intent: |
|
|
19
|
-
Position rosett-ai as a standards-compliant tool within the Agentic AI Foundation (AAIF)
|
|
20
|
-
ecosystem by implementing AAIF-governed protocols and compilation targets.
|
|
21
|
-
|
|
22
|
-
The AAIF (Linux Foundation, Dec 2025) governs three founding projects:
|
|
23
|
-
- MCP (Anthropic) — protocol for AI-tool integration
|
|
24
|
-
- AGENTS.md (OpenAI) — vendor-neutral project instruction files
|
|
25
|
-
- goose (Block) — open-source AI agent framework
|
|
26
|
-
|
|
27
|
-
raictl fills a gap none of these projects address: structured, validated, versioned,
|
|
28
|
-
auditable configuration management for AI agent workflows. This document defines
|
|
29
|
-
how rosett-ai integrates with the AAIF ecosystem without losing its core value proposition.
|
|
30
|
-
|
|
31
|
-
Key alignments:
|
|
32
|
-
1. AGENTS.md as a compilation target (alongside CLAUDE.md and generic)
|
|
33
|
-
2. MCP as the integration protocol (see mcp_integration.yml)
|
|
34
|
-
3. Vendor-neutral multi-agent support (Claude, Goose, Cursor, Copilot, etc.)
|
|
35
|
-
4. Potential AAIF project contribution pathway
|
|
36
|
-
|
|
37
|
-
AAIF contribution pathway:
|
|
38
|
-
- Recommended: modular extraction (rosett-ai-mcp as Apache-2.0, core stays GPL-3.0)
|
|
39
|
-
- Timeline: build MCP integration first, extract after validation, pitch at MCP Dev Summit NYC (April 2-3, 2026)
|
|
40
|
-
- License tension: AAIF projects use Apache-2.0/MIT; GPL-3.0 is copyleft outlier
|
|
41
|
-
- Open-core model survives relicensing (content packs are data, not derivative works)
|
|
42
|
-
|
|
43
|
-
This design document is part of the AAIF Alignment epic (P2).
|
|
44
|
-
#
|
|
45
|
-
constraints:
|
|
46
|
-
- AGENTS.md compilation must produce valid, idiomatic Markdown (no YAML frontmatter unless spec adds it)
|
|
47
|
-
- AGENTS.md output must be readable by all 21+ compatible tools listed on agents.md
|
|
48
|
-
- Multi-target compilation must not degrade existing CLAUDE.md output quality
|
|
49
|
-
- Vendor-neutral features must not break Claude Code specific features
|
|
50
|
-
- AAIF spec tracking must be explicit — pin to known spec versions, not "latest"
|
|
51
|
-
- No AAIF-specific code paths that circumvent security constraints from security.yml
|
|
52
|
-
- No code may be contributed to AAIF without a documented license compatibility assessment
|
|
53
|
-
- AGENTS.md files must be compilable from the same YAML sources as CLAUDE.md
|
|
54
|
-
- Goose .goosehints format support is optional — only add if demand exists
|
|
55
|
-
- Any AAIF governance participation must be documented in project decisions log
|
|
56
|
-
#
|
|
57
|
-
acceptance_criteria:
|
|
58
|
-
- 'bin/raictl compile --engine agents_md produces valid AGENTS.md file'
|
|
59
|
-
- AGENTS.md output includes all enabled behaviours, properly sectioned by domain
|
|
60
|
-
- AGENTS.md output is tested against at least 3 tools (manual verification with Claude Code, Goose, Cursor)
|
|
61
|
-
- Compiler target registry includes agents_md alongside claude, generic, and model-specific targets
|
|
62
|
-
- Design documents reference AAIF spec versions explicitly (MCP 2025-03-26, AGENTS.md v0.1.0)
|
|
63
|
-
- Multi-agent configuration support documented with examples for Claude Code, Goose, and generic agents
|
|
64
|
-
- AAIF ecosystem positioning documented in project README or CONTRIBUTING.md
|
|
65
|
-
- Compilation lockfile tracks AGENTS.md output alongside existing targets
|
|
66
|
-
- conf/targets/agents_md.yml target profile exists with format-specific compilation rules
|
|
67
|
-
- Modular extraction plan documented for Rosett-AI-mcp (Apache-2.0) contribution pathway
|
|
68
|
-
- License compatibility matrix maintained for AAIF contribution scenarios
|
|
69
|
-
- AAIF governance participation options documented (Silver member vs project donation)
|
|
70
|
-
- Compliance differentiator (CRA/NIS2/DORA) integrated into MCP admin capabilities
|
|
71
|
-
#
|
|
72
|
-
examples:
|
|
73
|
-
- scenario: "User compiles behaviours to AGENTS.md format"
|
|
74
|
-
expected: |
|
|
75
|
-
$ bin/raictl compile --engine agents_md --verbose
|
|
76
|
-
Compiling 12 behaviours to AGENTS.md format...
|
|
77
|
-
Output: AGENTS.md (project root)
|
|
78
|
-
Sections: Project Overview, Build & Test, Code Style, Security, Testing
|
|
79
|
-
Format: Standard Markdown with ## headings per domain
|
|
80
|
-
not: "Output contains YAML, JSON Schema references, or rosett-ai-internal metadata"
|
|
81
|
-
- scenario: "User compiles for multiple targets simultaneously"
|
|
82
|
-
expected: |
|
|
83
|
-
$ bin/raictl compile --engine claude --engine agents_md
|
|
84
|
-
Compiling to ~/.claude/rules/ (claude target)
|
|
85
|
-
Compiling to ./AGENTS.md (agents_md target)
|
|
86
|
-
Both outputs reflect the same source behaviours with format-appropriate rendering.
|
|
87
|
-
not: "One target's compilation affects the other's output"
|
|
88
|
-
- scenario: "User wants to use rosett-ai with Goose instead of Claude Code"
|
|
89
|
-
expected: |
|
|
90
|
-
$ bin/raictl compile --engine agents_md
|
|
91
|
-
Creates AGENTS.md file. Goose reads it as hints (alongside .goosehints).
|
|
92
|
-
User can also configure rosett-ai as an MCP server in Goose's config.yaml.
|
|
93
|
-
not: "User must maintain separate configuration for each AI agent"
|
|
94
|
-
- scenario: "AAIF updates the MCP spec from 2025-03-26 to a newer revision"
|
|
95
|
-
expected: |
|
|
96
|
-
raictl tracks spec version in conf/targets/ and mcp_integration design doc.
|
|
97
|
-
Maintainer reviews changelog, updates pinned version, runs compatibility tests.
|
|
98
|
-
Release notes document spec version bump.
|
|
99
|
-
not: "rosett-ai silently breaks on spec change or auto-adopts unreviewed spec versions"
|
|
100
|
-
- scenario: "Preparing rosett-ai-mcp for AAIF contribution"
|
|
101
|
-
expected: |
|
|
102
|
-
1. MCP integration built and tested within rosett-ai (GPL-3.0)
|
|
103
|
-
2. MCP admin module extracted as rosett-ai-mcp (relicensed Apache-2.0)
|
|
104
|
-
3. rosett-ai-mcp has own repo, CI, tests, README, GOVERNANCE.md
|
|
105
|
-
4. Pitched at MCP Dev Summit NYC (April 2-3, 2026)
|
|
106
|
-
5. If accepted: project hosted under AAIF, copyright to LF Projects, LLC
|
|
107
|
-
Core rosett-ai remains GPL-3.0 with open-core content model intact.
|
|
108
|
-
not: "Full rosett-ai donated, GPL-3.0 abandoned, open-core model compromised"
|
|
109
|
-
- scenario: "AAIF contribution not accepted, continuing independently"
|
|
110
|
-
expected: |
|
|
111
|
-
raictl continues as independent project using AAIF standards (MCP, AGENTS.md).
|
|
112
|
-
Optional: join as Silver member for ecosystem participation without project donation.
|
|
113
|
-
MCP integration and AGENTS.md compilation still provide value regardless.
|
|
114
|
-
not: "Project abandoned because AAIF didn't accept it"
|
|
115
|
-
- scenario: "Evaluating license options for AAIF contribution"
|
|
116
|
-
expected: |
|
|
117
|
-
Options evaluated:
|
|
118
|
-
1. Relicense to Apache-2.0 (content model survives, copyleft lost)
|
|
119
|
-
2. Dual-license GPL-3.0 + Apache-2.0 (complex but preserves both)
|
|
120
|
-
3. Extract MCP only as Apache-2.0 (recommended — clean separation)
|
|
121
|
-
4. Participate as member without donation (keep full control)
|
|
122
|
-
Decision documented in project decisions log with rationale.
|
|
123
|
-
not: "License changed without evaluating impact on open-core model"
|
|
124
|
-
- scenario: "User asks about AAIF compliance status"
|
|
125
|
-
expected: |
|
|
126
|
-
$ bin/raictl status --aaif
|
|
127
|
-
AAIF Alignment Status:
|
|
128
|
-
MCP Server: enabled (spec 2025-03-26, mcp gem 0.7.1)
|
|
129
|
-
AGENTS.md: supported (compiled target)
|
|
130
|
-
CLAUDE.md: supported (compiled target, primary)
|
|
131
|
-
Goose hints: not supported (planned)
|
|
132
|
-
not: "No visibility into AAIF ecosystem alignment"
|
|
133
|
-
#
|
|
134
|
-
anti_patterns:
|
|
135
|
-
- Treating AGENTS.md as a structured format (it is deliberately unstructured Markdown)
|
|
136
|
-
- Adding AAIF-specific fields to the core behaviour YAML schema (keep source format neutral)
|
|
137
|
-
- Coupling compilation logic to a single AAIF project (MCP, AGENTS.md, goose are independent)
|
|
138
|
-
- Auto-updating to new AAIF spec versions without maintainer review
|
|
139
|
-
- Claiming AAIF compliance or endorsement without actual contribution/acceptance
|
|
140
|
-
- Ignoring AGENTS.md security concerns (hidden Unicode injection, prompt injection via Markdown)
|
|
141
|
-
- Duplicating behaviour content across targets instead of compiling from single source
|
|
142
|
-
- Assuming AGENTS.md will gain a formal schema (design for current unstructured format)
|
|
143
|
-
- Donating full rosett-ai to AAIF without extracting MCP component first (loses GPL-3.0 protection)
|
|
144
|
-
- Relicensing core rosett-ai to Apache-2.0 without evaluating open-core model impact
|
|
145
|
-
- Claiming AAIF membership or endorsement before formal acceptance
|
|
146
|
-
- Pitching "AI agent config compiler" without the MCP admin angle (too narrow for AAIF)
|
|
147
|
-
- Ignoring the compliance differentiator (CRA/NIS2/DORA) — this is the strongest enterprise pitch
|
|
148
|
-
#
|
|
149
|
-
gui_notes: |
|
|
150
|
-
Document interactions (cross-references):
|
|
151
|
-
|
|
152
|
-
1. mcp_integration.yml: MCP is the integration protocol. AAIF alignment
|
|
153
|
-
governs the strategic positioning; MCP integration handles the technical
|
|
154
|
-
implementation.
|
|
155
|
-
|
|
156
|
-
2. compiler.yml: AGENTS.md is a compilation target alongside CLAUDE.md
|
|
157
|
-
and generic. Target profile: conf/targets/agents_md.yml.
|
|
158
|
-
|
|
159
|
-
3. security.yml: AGENTS.md output must not contain hidden Unicode injection
|
|
160
|
-
or prompt injection patterns.
|
|
161
|
-
|
|
162
|
-
4. licensing_system.yml: license compatibility assessment for AAIF
|
|
163
|
-
contribution (Apache-2.0 vs GPL-3.0 tension).
|
|
164
|
-
|
|
165
|
-
5. comply.yml: CRA/NIS2/DORA compliance is the enterprise differentiator
|
|
166
|
-
for AAIF pitch.
|
|
167
|
-
|
|
168
|
-
6. error_handling.yml: exit codes and structured errors for compilation
|
|
169
|
-
targets.
|
|
170
|
-
#
|
|
171
|
-
preferences:
|
|
172
|
-
language: ruby
|
|
173
|
-
patterns:
|
|
174
|
-
- "Compiler target pattern (AGENTS.md as target)"
|
|
175
|
-
- "Adapter pattern for format-specific rendering"
|
|
176
|
-
- "Strategy pattern for multi-target compilation"
|
|
177
|
-
testing: rspec with AGENTS.md output validation, multi-target compilation
|
|
178
|
-
tests, and spec version pinning verification
|
|
179
|
-
gems:
|
|
180
|
-
- json_schemer
|
|
181
|
-
- thor
|