From d37a4475c31f10b4f6071c44fc6393f5b30e7dfe Mon Sep 17 00:00:00 2001 From: dereknorrbom Date: Thu, 23 Apr 2026 20:38:21 +0000 Subject: [PATCH] fix(reports): default FeedbackAnalysis memory analysis to off --- plexus/reports/blocks/feedback_analysis.py | 6 ++++ .../tests/test_feedback_analysis_alias.py | 33 +++++++++++++++++++ ..._42ac435e-146e-4d21-97ec-2efe1dacf4d0.json | 18 ++++++++++ ..._3f3a1c70-45a9-4398-912a-7ffa88824dd7.json | 12 +++++++ ...-e36b0657-325a-46c7-a3ad-c05a9db416e8.json | 18 ++++++++++ 5 files changed, 87 insertions(+) create mode 100644 project/events/2026-04-23T20:35:06.303Z__42ac435e-146e-4d21-97ec-2efe1dacf4d0.json create mode 100644 project/events/2026-04-23T20:37:22.736Z__3f3a1c70-45a9-4398-912a-7ffa88824dd7.json create mode 100644 project/issues/plx-e36b0657-325a-46c7-a3ad-c05a9db416e8.json diff --git a/plexus/reports/blocks/feedback_analysis.py b/plexus/reports/blocks/feedback_analysis.py index 27afc0433..95c84672a 100644 --- a/plexus/reports/blocks/feedback_analysis.py +++ b/plexus/reports/blocks/feedback_analysis.py @@ -10,3 +10,9 @@ class FeedbackAnalysis(FeedbackAlignment): support for `days` and explicit `start_date` / `end_date` windows. """ + async def generate(self): + # Keep legacy FeedbackAnalysis execution lightweight/safe by default. + # Memory analysis remains available as an explicit opt-in. + if "memory_analysis" not in self.config: + self.config["memory_analysis"] = False + return await super().generate() diff --git a/plexus/reports/tests/test_feedback_analysis_alias.py b/plexus/reports/tests/test_feedback_analysis_alias.py index 2a717b27b..99909bac9 100644 --- a/plexus/reports/tests/test_feedback_analysis_alias.py +++ b/plexus/reports/tests/test_feedback_analysis_alias.py @@ -1,8 +1,41 @@ from plexus.reports import service from plexus.reports import blocks +from unittest.mock import patch +import pytest def test_feedback_analysis_block_class_registered() -> None: assert "FeedbackAnalysis" in service.BLOCK_CLASSES assert service.BLOCK_CLASSES["FeedbackAnalysis"] is blocks.FeedbackAnalysis + +@pytest.mark.asyncio +async def test_feedback_analysis_defaults_memory_analysis_disabled() -> None: + instance = blocks.FeedbackAnalysis(config={"scorecard": "1481"}, params={}, api_client=None) + + async def _fake_generate(self): + return {"ok": True}, "log" + + with patch.object(blocks.FeedbackAlignment, "generate", _fake_generate): + output, _log = await instance.generate() + + assert output == {"ok": True} + assert instance.config["memory_analysis"] is False + + +@pytest.mark.asyncio +async def test_feedback_analysis_preserves_explicit_memory_analysis_setting() -> None: + instance = blocks.FeedbackAnalysis( + config={"scorecard": "1481", "memory_analysis": True}, + params={}, + api_client=None, + ) + + async def _fake_generate(self): + return {"ok": True}, "log" + + with patch.object(blocks.FeedbackAlignment, "generate", _fake_generate): + output, _log = await instance.generate() + + assert output == {"ok": True} + assert instance.config["memory_analysis"] is True diff --git a/project/events/2026-04-23T20:35:06.303Z__42ac435e-146e-4d21-97ec-2efe1dacf4d0.json b/project/events/2026-04-23T20:35:06.303Z__42ac435e-146e-4d21-97ec-2efe1dacf4d0.json new file mode 100644 index 000000000..1f0360660 --- /dev/null +++ b/project/events/2026-04-23T20:35:06.303Z__42ac435e-146e-4d21-97ec-2efe1dacf4d0.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "event_id": "42ac435e-146e-4d21-97ec-2efe1dacf4d0", + "issue_id": "plx-e36b0657-325a-46c7-a3ad-c05a9db416e8", + "event_type": "issue_created", + "occurred_at": "2026-04-23T20:35:06.303Z", + "actor_id": "derek", + "payload": { + "assignee": null, + "description": "", + "issue_type": "bug", + "labels": [], + "parent": null, + "priority": 1, + "status": "open", + "title": "FeedbackAnalysis days mode crashes with 'pop from an empty deque'" + } +} \ No newline at end of file diff --git a/project/events/2026-04-23T20:37:22.736Z__3f3a1c70-45a9-4398-912a-7ffa88824dd7.json b/project/events/2026-04-23T20:37:22.736Z__3f3a1c70-45a9-4398-912a-7ffa88824dd7.json new file mode 100644 index 000000000..21ff7992d --- /dev/null +++ b/project/events/2026-04-23T20:37:22.736Z__3f3a1c70-45a9-4398-912a-7ffa88824dd7.json @@ -0,0 +1,12 @@ +{ + "schema_version": 1, + "event_id": "3f3a1c70-45a9-4398-912a-7ffa88824dd7", + "issue_id": "plx-e36b0657-325a-46c7-a3ad-c05a9db416e8", + "event_type": "state_transition", + "occurred_at": "2026-04-23T20:37:22.736Z", + "actor_id": "derek", + "payload": { + "from_status": "open", + "to_status": "in_progress" + } +} \ No newline at end of file diff --git a/project/issues/plx-e36b0657-325a-46c7-a3ad-c05a9db416e8.json b/project/issues/plx-e36b0657-325a-46c7-a3ad-c05a9db416e8.json new file mode 100644 index 000000000..c37a44c27 --- /dev/null +++ b/project/issues/plx-e36b0657-325a-46c7-a3ad-c05a9db416e8.json @@ -0,0 +1,18 @@ +{ + "id": "plx-e36b0657-325a-46c7-a3ad-c05a9db416e8", + "title": "FeedbackAnalysis days mode crashes with 'pop from an empty deque'", + "description": "", + "type": "bug", + "status": "in_progress", + "priority": 1, + "assignee": null, + "creator": null, + "parent": null, + "labels": [], + "dependencies": [], + "comments": [], + "created_at": "2026-04-23T20:35:06.303621402Z", + "updated_at": "2026-04-23T20:37:22.736117681Z", + "closed_at": null, + "custom": {} +} \ No newline at end of file