feat(microsoft-defender-o365): mvp1/chk1 - project architecture setup (#471) - #491
Draft
Megafredo wants to merge 13 commits into
Conversation
…branch (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ature files (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…hk1 features (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…o pass BDD tests (#471) - Clone template/src collector framework verbatim (generic engine, models, protocols, types, internals, settings) - Rename Template-specific bits: collector id/name defaults, icon path, source config aliases (SOURCE_*), source classes (MicrosoftDefenderO365DataFetcher/SourceData), empty SUPPORTED_SIGNATURES per #471 - Wire microsoft_defender_o365_collector.py main() using the same import names patched by the red tests - Adapt test_ci_pipeline.py to check the repository's existing CircleCI + shared GitHub Actions pipelines instead of a dedicated per-collector workflow file - All 3 BDD tests (container startup, catalog registration, CI pipeline) now pass; isort/black/flake8 clean Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Megafredo
force-pushed
the
feat/471-chk1-project-architecture-setup
branch
from
July 17, 2026 13:31
4a386b6 to
1d831ac
Compare
…oot (#471) isort was previously run from within the collector directory, which resolves first-party import grouping differently than CI's 'isort --profile black --check .' invoked from the repo root, causing CI failures. Re-run isort from the repo root to match CI's behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
❌ 1 Tests Failed:
View the full list of 1 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
mariot
reviewed
Jul 27, 2026
mariot
left a comment
Member
There was a problem hiding this comment.
This is great! Just one question and a nitpick
| "Source": patch.object(collector, "Source"), | ||
| "BaseCollector": patch.object(collector, "BaseCollector"), | ||
| } | ||
| return {name: patcher.start() for name, patcher in patchers.items()} |
Member
There was a problem hiding this comment.
Not important and with zero priority:
helpers call patcher.start() for multiple patchers and never stop them. That can leak mocks across tests and create order-dependent behavior/flaky runs.
We could wrap them in context managers (or register patcher.stop() cleanup) so mocks don’t leak between tests?
…branch (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ature files (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…hk1 features (#471) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…o pass BDD tests (#471) - Clone template/src collector framework verbatim (generic engine, models, protocols, types, internals, settings) - Rename Template-specific bits: collector id/name defaults, icon path, source config aliases (SOURCE_*), source classes (MicrosoftDefenderO365DataFetcher/SourceData), empty SUPPORTED_SIGNATURES per #471 - Wire microsoft_defender_o365_collector.py main() using the same import names patched by the red tests - Adapt test_ci_pipeline.py to check the repository's existing CircleCI + shared GitHub Actions pipelines instead of a dedicated per-collector workflow file - All 3 BDD tests (container startup, catalog registration, CI pipeline) now pass; isort/black/flake8 clean Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…oot (#471) isort was previously run from within the collector directory, which resolves first-party import grouping differently than CI's 'isort --profile black --check .' invoked from the repo root, causing CI failures. Re-run isort from the repo root to match CI's behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…thub.com/OpenAEV-Platform/collectors into feat/471-chk1-project-architecture-setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CHK.1Architecture - Template usage - Blank Collector - Catalog IntegrationGoal
Launch a working skeleton collector that appears in the OpenAEV catalog with no business logic implemented.
This establishes the project structure, Docker setup, and catalog registration, the foundation for all subsequent chunks.
Contracts
Input Contracts
None, this is the root chunk, no upstream data dependency.
Output Contracts
None, this chunk produces only a structural scaffold, no Pydantic model.
Acceptance Criteria
Done Checklist
defender_o365_collector.pywithmain()wiring stubSource(placeholderDefenderO365DataFetcher,DefenderO365SourceData, emptySUPPORTED_SIGNATURES) intoBaseCollector__main__.pycallingmain()forpython -mexecutionpyproject.tomlwithpyoaev(from the template codebase) pinned as a dependencyDockerfileanddocker-compose.ymldocker compose up, check logs for no exceptionsREADME.mdwith project description and placeholder configuration tableCloses #471