Skip to content

feat(prowler): chunk5 add the OCSF mapping (#422) - #435

Draft
Christophe Melchior (Kakudou) wants to merge 4 commits into
feat/422-prowler-injector-chk4-client-wrapperfrom
feat/422-prowler-injector-chk5-ocsf-mapping
Draft

feat(prowler): chunk5 add the OCSF mapping (#422)#435
Christophe Melchior (Kakudou) wants to merge 4 commits into
feat/422-prowler-injector-chk4-client-wrapperfrom
feat/422-prowler-injector-chk5-ocsf-mapping

Conversation

@Kakudou

Copy link
Copy Markdown
Member

Part of #422.

Chunk 5 of the Prowler injector stack: add the OCSF mapping — decoding Prowler raw OCSF findings (array and JSONL) into immutable findings, the nested Prowler 3.x Security Finding shape, and the compatibility hardening around both.

Re-landed from feat/422-prowler-chk005-ocsf-mapping (d5240f4..8a56d7e): 5 source commits folded into 4, per-commit fidelity verified byte-identical.

@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
750 1 749 0
View the top 1 failed test(s) by shortest run time
tests.behaviour.chk001_catalog_scaffold.test_chk001_catalog_scaffold_bdd::test_foundation_startup_registers_no_assessment_contracts
Stack Traces | 0.003s run time
standard_injector_environment = None

    def test_foundation_startup_registers_no_assessment_contracts(
        standard_injector_environment: None,
    ) -> None:
        """The foundation starts its listener with an empty contract catalog."""
        _given_the_prowler_project()
>       config, helper = _when_injector_starts()
                         ^^^^^^^^^^^^^^^^^^^^^^^

.../behaviour/chk001_catalog_scaffold/test_chk001_catalog_scaffold_bdd.py:146: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../behaviour/chk001_catalog_scaffold/test_chk001_catalog_scaffold_bdd.py:70: in _when_injector_starts
    config = ConfigLoader()
             ^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

__pydantic_self__ = ConfigLoader(), _case_sensitive = None
_nested_model_default_partial_update = None, _env_prefix = None
_env_prefix_target = None, _env_file = PosixPath('.'), _env_file_encoding = None
_env_ignore_empty = None, _env_nested_delimiter = None
_env_nested_max_split = None, _env_parse_none_str = None
_env_parse_enums = None, _cli_prog_name = None, _cli_parse_args = None
_cli_settings_source = None, _cli_parse_none_str = None
_cli_hide_none_type = None, _cli_avoid_json = None, _cli_enforce_required = None
_cli_use_class_docs_for_groups = None, _cli_exit_on_error = None
_cli_prefix = None, _cli_flag_prefix_char = None, _cli_implicit_flags = None
_cli_ignore_unknown_args = None, _cli_kebab_case = None, _cli_shortcuts = None
_secrets_dir = None, _build_sources = None, values = {}
sources = (EnvSettingsSource(env_nested_delimiter='_', env_prefix_len=0), DefaultSettingsSource(nested_model_default_partial_update=False))
init_kwargs = {}

    def __init__(
        __pydantic_self__,
        _case_sensitive: bool | None = None,
        _nested_model_default_partial_update: bool | None = None,
        _env_prefix: str | None = None,
        _env_prefix_target: EnvPrefixTarget | None = None,
        _env_file: DotenvType | None = ENV_FILE_SENTINEL,
        _env_file_encoding: str | None = None,
        _env_ignore_empty: bool | None = None,
        _env_nested_delimiter: str | None = None,
        _env_nested_max_split: int | None = None,
        _env_parse_none_str: str | None = None,
        _env_parse_enums: bool | None = None,
        _cli_prog_name: str | None = None,
        _cli_parse_args: bool | list[str] | tuple[str, ...] | None = None,
        _cli_settings_source: CliSettingsSource[Any] | None = None,
        _cli_parse_none_str: str | None = None,
        _cli_hide_none_type: bool | None = None,
        _cli_avoid_json: bool | None = None,
        _cli_enforce_required: bool | None = None,
        _cli_use_class_docs_for_groups: bool | None = None,
        _cli_exit_on_error: bool | None = None,
        _cli_prefix: str | None = None,
        _cli_flag_prefix_char: str | None = None,
        _cli_implicit_flags: bool | Literal['dual', 'toggle'] | None = None,
        _cli_ignore_unknown_args: bool | None = None,
        _cli_kebab_case: bool | Literal['all', 'no_enums'] | None = None,
        _cli_shortcuts: Mapping[str, str | list[str]] | None = None,
        _secrets_dir: PathType | None = None,
        _build_sources: tuple[tuple[PydanticBaseSettingsSource, ...], dict[str, Any]] | None = None,
        **values: Any,
    ) -> None:
        sources, init_kwargs = (
            _build_sources
            if _build_sources is not None
            else __pydantic_self__.__class__._settings_init_sources(
                _case_sensitive=_case_sensitive,
                _nested_model_default_partial_update=_nested_model_default_partial_update,
                _env_prefix=_env_prefix,
                _env_prefix_target=_env_prefix_target,
                _env_file=_env_file,
                _env_file_encoding=_env_file_encoding,
                _env_ignore_empty=_env_ignore_empty,
                _env_nested_delimiter=_env_nested_delimiter,
                _env_nested_max_split=_env_nested_max_split,
                _env_parse_none_str=_env_parse_none_str,
                _env_parse_enums=_env_parse_enums,
                _cli_prog_name=_cli_prog_name,
                _cli_parse_args=_cli_parse_args,
                _cli_settings_source=_cli_settings_source,
                _cli_parse_none_str=_cli_parse_none_str,
                _cli_hide_none_type=_cli_hide_none_type,
                _cli_avoid_json=_cli_avoid_json,
                _cli_enforce_required=_cli_enforce_required,
                _cli_use_class_docs_for_groups=_cli_use_class_docs_for_groups,
                _cli_exit_on_error=_cli_exit_on_error,
                _cli_prefix=_cli_prefix,
                _cli_flag_prefix_char=_cli_flag_prefix_char,
                _cli_implicit_flags=_cli_implicit_flags,
                _cli_ignore_unknown_args=_cli_ignore_unknown_args,
                _cli_kebab_case=_cli_kebab_case,
                _cli_shortcuts=_cli_shortcuts,
                _secrets_dir=_secrets_dir,
                _init_kwargs=values,
            )
        )
    
>       super().__init__(**__pydantic_self__.__class__._settings_build_values(sources, init_kwargs))
E       pydantic_core._pydantic_core.ValidationError: 1 validation error for ConfigLoader
E       openaev.tenant_id
E         Input should be a valid UUID, invalid character: found `t` at 1 [type=uuid_parsing, input_value='test-tenant', input_type=str]
E           For further information visit https://errors.pydantic.dev/2.13/v/uuid_parsing

../../../../..../pypoetry/virtualenvs/openaev-prowler-injector-c-ZdwkI6-py3.13/lib/python3.13.../site-packages/pydantic_settings/main.py:247: ValidationError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@Filigran-Automation Filigran Automation (Filigran-Automation) added the filigran team Item from the Filigran team. label Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

filigran team Item from the Filigran team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants