From 0e615aa82cbf9aafa35eb3104e529838833a21f8 Mon Sep 17 00:00:00 2001 From: esther-anierobi Date: Sat, 4 Oct 2025 13:28:25 +0100 Subject: [PATCH 1/5] fixed: Remove null values from CDS Hook API responses #142 --- .idea/.gitignore | 8 +++ .idea/HealthChain.iml | 22 ++++++ .idea/inspectionProfiles/Project_Default.xml | 69 +++++++++++++++++++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ healthchain/gateway/events/dispatcher.py | 2 +- healthchain/gateway/fhir/aio.py | 4 +- healthchain/gateway/fhir/base.py | 2 +- healthchain/interop/generators/cda.py | 2 +- tests/gateway/test_base_fhir_gateway.py | 5 +- tests/gateway/test_event_dispatcher.py | 8 ++- 12 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/HealthChain.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/HealthChain.iml b/.idea/HealthChain.iml new file mode 100644 index 00000000..128b375b --- /dev/null +++ b/.idea/HealthChain.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..aa299d84 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,69 @@ + + + + diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..cc5462da --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..59155b11 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..dcb6b8c4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/healthchain/gateway/events/dispatcher.py b/healthchain/gateway/events/dispatcher.py index 5d2ef09f..0a881383 100644 --- a/healthchain/gateway/events/dispatcher.py +++ b/healthchain/gateway/events/dispatcher.py @@ -121,7 +121,7 @@ async def publish(self, event: EHREvent, middleware_id: Optional[int] = None): """ # Convert event to the format expected by fastapi-events event_name = event.event_type.value - event_data = event.model_dump() + event_data = event.model_dump(exclude_none=True) # Use the provided middleware_id or fall back to the class's middleware_id mid = middleware_id or self.middleware_id diff --git a/healthchain/gateway/fhir/aio.py b/healthchain/gateway/fhir/aio.py index ef150688..8cebf24e 100644 --- a/healthchain/gateway/fhir/aio.py +++ b/healthchain/gateway/fhir/aio.py @@ -414,7 +414,9 @@ async def modify( updated_resource = await client.update(resource) resource.id = updated_resource.id - for field_name, field_value in updated_resource.model_dump().items(): + for field_name, field_value in updated_resource.model_dump( + exclude_none=True + ).items(): if hasattr(resource, field_name): setattr(resource, field_name, field_value) diff --git a/healthchain/gateway/fhir/base.py b/healthchain/gateway/fhir/base.py index ff397e63..dcb0f3eb 100644 --- a/healthchain/gateway/fhir/base.py +++ b/healthchain/gateway/fhir/base.py @@ -103,7 +103,7 @@ def capability_statement( Includes both custom transform/aggregate operations (via REST endpoints) and standard FHIR CRUD operations (via Python gateway methods). """ - return fhir.build_capability_statement().model_dump() + return fhir.build_capability_statement().model_dump(exclude_none=True) # Gateway status endpoint - returns operational metadata @self.get("/status", response_class=JSONResponse) diff --git a/healthchain/interop/generators/cda.py b/healthchain/interop/generators/cda.py index 967f44ca..7551ed1a 100644 --- a/healthchain/interop/generators/cda.py +++ b/healthchain/interop/generators/cda.py @@ -133,7 +133,7 @@ def _render_entry( context = { "timestamp": timestamp, "text_reference_name": reference_name, - "resource": resource.model_dump(), + "resource": resource.model_dump(exclude_none=True), "config": section_config, } diff --git a/tests/gateway/test_base_fhir_gateway.py b/tests/gateway/test_base_fhir_gateway.py index 39f385c2..c354c682 100644 --- a/tests/gateway/test_base_fhir_gateway.py +++ b/tests/gateway/test_base_fhir_gateway.py @@ -119,7 +119,10 @@ def test_empty_capability_statement_with_no_handlers(fhir_gateway): """Gateway with no handlers generates minimal CapabilityStatement.""" capability = fhir_gateway.build_capability_statement() - assert capability.model_dump()["resourceType"] == "CapabilityStatement" + assert ( + capability.model_dump(exclude_none=True)["resourceType"] + == "CapabilityStatement" + ) assert capability.status == "active" assert capability.kind == "instance" diff --git a/tests/gateway/test_event_dispatcher.py b/tests/gateway/test_event_dispatcher.py index 60b5a29c..147da09b 100644 --- a/tests/gateway/test_event_dispatcher.py +++ b/tests/gateway/test_event_dispatcher.py @@ -143,7 +143,7 @@ async def test_event_publishing_with_default_middleware_id( mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(), + sample_ehr_event.model_dump(exclude_none=True), middleware_id=event_dispatcher.middleware_id, ) @@ -160,7 +160,9 @@ async def test_event_publishing_with_custom_middleware_id( await event_dispatcher.publish(sample_ehr_event, middleware_id=custom_middleware_id) mock_dispatch.assert_called_once_with( - "fhir.read", sample_ehr_event.model_dump(), middleware_id=custom_middleware_id + "fhir.read", + sample_ehr_event.model_dump(exclude_none=True), + middleware_id=custom_middleware_id, ) @@ -182,7 +184,7 @@ async def mock_coroutine(): # Verify dispatch was called with correct parameters mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(), + sample_ehr_event.model_dump(exclude_none=True), middleware_id=event_dispatcher.middleware_id, ) From aed35973e77f08004c350529c237ced8618a4e73 Mon Sep 17 00:00:00 2001 From: esther-anierobi Date: Tue, 7 Oct 2025 06:29:07 +0100 Subject: [PATCH 2/5] fix: remove .idea folder and run test --- .gitignore | 1 + .idea/.gitignore | 8 --- .idea/HealthChain.iml | 22 ------ .idea/inspectionProfiles/Project_Default.xml | 69 ------------------- .../inspectionProfiles/profiles_settings.xml | 6 -- .idea/modules.xml | 8 --- .idea/vcs.xml | 6 -- healthchain/gateway/events/dispatcher.py | 2 +- healthchain/gateway/fhir/aio.py | 4 +- healthchain/gateway/fhir/base.py | 2 +- healthchain/interop/generators/cda.py | 2 +- tests/gateway/test_base_fhir_gateway.py | 5 +- tests/gateway/test_event_dispatcher.py | 8 +-- 13 files changed, 9 insertions(+), 134 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/HealthChain.iml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index ae3778db..868815e6 100644 --- a/.gitignore +++ b/.gitignore @@ -167,3 +167,4 @@ scrap/ .python-version .cursor/ scripts/ +.idea/ diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/HealthChain.iml b/.idea/HealthChain.iml deleted file mode 100644 index 128b375b..00000000 --- a/.idea/HealthChain.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index aa299d84..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index cc5462da..00000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 59155b11..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index dcb6b8c4..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/healthchain/gateway/events/dispatcher.py b/healthchain/gateway/events/dispatcher.py index 0a881383..5d2ef09f 100644 --- a/healthchain/gateway/events/dispatcher.py +++ b/healthchain/gateway/events/dispatcher.py @@ -121,7 +121,7 @@ async def publish(self, event: EHREvent, middleware_id: Optional[int] = None): """ # Convert event to the format expected by fastapi-events event_name = event.event_type.value - event_data = event.model_dump(exclude_none=True) + event_data = event.model_dump() # Use the provided middleware_id or fall back to the class's middleware_id mid = middleware_id or self.middleware_id diff --git a/healthchain/gateway/fhir/aio.py b/healthchain/gateway/fhir/aio.py index 8cebf24e..ef150688 100644 --- a/healthchain/gateway/fhir/aio.py +++ b/healthchain/gateway/fhir/aio.py @@ -414,9 +414,7 @@ async def modify( updated_resource = await client.update(resource) resource.id = updated_resource.id - for field_name, field_value in updated_resource.model_dump( - exclude_none=True - ).items(): + for field_name, field_value in updated_resource.model_dump().items(): if hasattr(resource, field_name): setattr(resource, field_name, field_value) diff --git a/healthchain/gateway/fhir/base.py b/healthchain/gateway/fhir/base.py index dcb0f3eb..ff397e63 100644 --- a/healthchain/gateway/fhir/base.py +++ b/healthchain/gateway/fhir/base.py @@ -103,7 +103,7 @@ def capability_statement( Includes both custom transform/aggregate operations (via REST endpoints) and standard FHIR CRUD operations (via Python gateway methods). """ - return fhir.build_capability_statement().model_dump(exclude_none=True) + return fhir.build_capability_statement().model_dump() # Gateway status endpoint - returns operational metadata @self.get("/status", response_class=JSONResponse) diff --git a/healthchain/interop/generators/cda.py b/healthchain/interop/generators/cda.py index 7551ed1a..967f44ca 100644 --- a/healthchain/interop/generators/cda.py +++ b/healthchain/interop/generators/cda.py @@ -133,7 +133,7 @@ def _render_entry( context = { "timestamp": timestamp, "text_reference_name": reference_name, - "resource": resource.model_dump(exclude_none=True), + "resource": resource.model_dump(), "config": section_config, } diff --git a/tests/gateway/test_base_fhir_gateway.py b/tests/gateway/test_base_fhir_gateway.py index c354c682..39f385c2 100644 --- a/tests/gateway/test_base_fhir_gateway.py +++ b/tests/gateway/test_base_fhir_gateway.py @@ -119,10 +119,7 @@ def test_empty_capability_statement_with_no_handlers(fhir_gateway): """Gateway with no handlers generates minimal CapabilityStatement.""" capability = fhir_gateway.build_capability_statement() - assert ( - capability.model_dump(exclude_none=True)["resourceType"] - == "CapabilityStatement" - ) + assert capability.model_dump()["resourceType"] == "CapabilityStatement" assert capability.status == "active" assert capability.kind == "instance" diff --git a/tests/gateway/test_event_dispatcher.py b/tests/gateway/test_event_dispatcher.py index 147da09b..60b5a29c 100644 --- a/tests/gateway/test_event_dispatcher.py +++ b/tests/gateway/test_event_dispatcher.py @@ -143,7 +143,7 @@ async def test_event_publishing_with_default_middleware_id( mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(exclude_none=True), + sample_ehr_event.model_dump(), middleware_id=event_dispatcher.middleware_id, ) @@ -160,9 +160,7 @@ async def test_event_publishing_with_custom_middleware_id( await event_dispatcher.publish(sample_ehr_event, middleware_id=custom_middleware_id) mock_dispatch.assert_called_once_with( - "fhir.read", - sample_ehr_event.model_dump(exclude_none=True), - middleware_id=custom_middleware_id, + "fhir.read", sample_ehr_event.model_dump(), middleware_id=custom_middleware_id ) @@ -184,7 +182,7 @@ async def mock_coroutine(): # Verify dispatch was called with correct parameters mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(exclude_none=True), + sample_ehr_event.model_dump(), middleware_id=event_dispatcher.middleware_id, ) From a2ef68a87c59849cb2820c39382ea464b2b23936 Mon Sep 17 00:00:00 2001 From: esther-anierobi Date: Tue, 7 Oct 2025 06:43:30 +0100 Subject: [PATCH 3/5] fix: remove .idea folder and run test --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 868815e6..6140c439 100644 --- a/.gitignore +++ b/.gitignore @@ -168,3 +168,4 @@ scrap/ .cursor/ scripts/ .idea/ +.idea/ From 3611308f18c15acf84d6915dc7ee205cc1fb9341 Mon Sep 17 00:00:00 2001 From: esther-anierobi Date: Tue, 7 Oct 2025 07:31:15 +0100 Subject: [PATCH 4/5] fix: remove null values cds hook api response --- healthchain/gateway/events/dispatcher.py | 2 +- healthchain/gateway/fhir/aio.py | 4 +++- healthchain/gateway/fhir/base.py | 2 +- healthchain/interop/generators/cda.py | 2 +- healthchain/io/containers/document.py | 6 ++++-- pyproject.toml | 2 +- tests/conftest.py | 6 ++++-- tests/gateway/test_base_fhir_gateway.py | 5 ++++- tests/gateway/test_event_dispatcher.py | 8 +++++--- tests/pipeline/test_cdsfhiradapter.py | 16 ++++++++++++---- 10 files changed, 36 insertions(+), 17 deletions(-) diff --git a/healthchain/gateway/events/dispatcher.py b/healthchain/gateway/events/dispatcher.py index 5d2ef09f..0a881383 100644 --- a/healthchain/gateway/events/dispatcher.py +++ b/healthchain/gateway/events/dispatcher.py @@ -121,7 +121,7 @@ async def publish(self, event: EHREvent, middleware_id: Optional[int] = None): """ # Convert event to the format expected by fastapi-events event_name = event.event_type.value - event_data = event.model_dump() + event_data = event.model_dump(exclude_none=True) # Use the provided middleware_id or fall back to the class's middleware_id mid = middleware_id or self.middleware_id diff --git a/healthchain/gateway/fhir/aio.py b/healthchain/gateway/fhir/aio.py index ef150688..8cebf24e 100644 --- a/healthchain/gateway/fhir/aio.py +++ b/healthchain/gateway/fhir/aio.py @@ -414,7 +414,9 @@ async def modify( updated_resource = await client.update(resource) resource.id = updated_resource.id - for field_name, field_value in updated_resource.model_dump().items(): + for field_name, field_value in updated_resource.model_dump( + exclude_none=True + ).items(): if hasattr(resource, field_name): setattr(resource, field_name, field_value) diff --git a/healthchain/gateway/fhir/base.py b/healthchain/gateway/fhir/base.py index ff397e63..dcb0f3eb 100644 --- a/healthchain/gateway/fhir/base.py +++ b/healthchain/gateway/fhir/base.py @@ -103,7 +103,7 @@ def capability_statement( Includes both custom transform/aggregate operations (via REST endpoints) and standard FHIR CRUD operations (via Python gateway methods). """ - return fhir.build_capability_statement().model_dump() + return fhir.build_capability_statement().model_dump(exclude_none=True) # Gateway status endpoint - returns operational metadata @self.get("/status", response_class=JSONResponse) diff --git a/healthchain/interop/generators/cda.py b/healthchain/interop/generators/cda.py index 967f44ca..7551ed1a 100644 --- a/healthchain/interop/generators/cda.py +++ b/healthchain/interop/generators/cda.py @@ -133,7 +133,7 @@ def _render_entry( context = { "timestamp": timestamp, "text_reference_name": reference_name, - "resource": resource.model_dump(), + "resource": resource.model_dump(exclude_none=True), "config": section_config, } diff --git a/healthchain/io/containers/document.py b/healthchain/io/containers/document.py index 9bbf2690..1c8ee780 100644 --- a/healthchain/io/containers/document.py +++ b/healthchain/io/containers/document.py @@ -700,7 +700,9 @@ def update_problem_list_from_nlp( system=coding_system, ) set_problem_list_item_category(condition) - logger.debug(f"Adding condition from spaCy: {condition.model_dump()}") + logger.debug( + f"Adding condition from spaCy: {condition.model_dump(exclude_none=True)}" + ) new_conditions.append(condition) # 2. Extract from generic NLP entities (framework-agnostic) @@ -725,7 +727,7 @@ def update_problem_list_from_nlp( ) set_problem_list_item_category(condition) logger.debug( - f"Adding condition from entities: {condition.model_dump()}" + f"Adding condition from entities: {condition.model_dump(exclude_none=True)}" ) new_conditions.append(condition) diff --git a/pyproject.toml b/pyproject.toml index 6f417439..a84c619d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ include = [ "healthchain/configs/**/*.liquid" ] -[project.urls] +[tool.poetry.urls] "Homepage" = "https://dotimplement.github.io/HealthChain/" "Repository" = "https://github.com/dotimplement/HealthChain" diff --git a/tests/conftest.py b/tests/conftest.py index c3fa7142..be60e5a2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -66,7 +66,6 @@ def empty_bundle(): return create_bundle() - @pytest.fixture def test_condition(): """Provides a minimal, generic FHIR Condition resource. @@ -261,9 +260,12 @@ def doc_ref_without_content(): fhir.resources.documentreference.DocumentReference: An incomplete DocumentReference resource. """ from fhir.resources.attachment import Attachment + return DocumentReference( status="current", - content=[DocumentReferenceContent(attachment=Attachment(contentType="text/plain"))], # Missing required data or url + content=[ + DocumentReferenceContent(attachment=Attachment(contentType="text/plain")) + ], # Missing required data or url ) diff --git a/tests/gateway/test_base_fhir_gateway.py b/tests/gateway/test_base_fhir_gateway.py index 39f385c2..c354c682 100644 --- a/tests/gateway/test_base_fhir_gateway.py +++ b/tests/gateway/test_base_fhir_gateway.py @@ -119,7 +119,10 @@ def test_empty_capability_statement_with_no_handlers(fhir_gateway): """Gateway with no handlers generates minimal CapabilityStatement.""" capability = fhir_gateway.build_capability_statement() - assert capability.model_dump()["resourceType"] == "CapabilityStatement" + assert ( + capability.model_dump(exclude_none=True)["resourceType"] + == "CapabilityStatement" + ) assert capability.status == "active" assert capability.kind == "instance" diff --git a/tests/gateway/test_event_dispatcher.py b/tests/gateway/test_event_dispatcher.py index 60b5a29c..147da09b 100644 --- a/tests/gateway/test_event_dispatcher.py +++ b/tests/gateway/test_event_dispatcher.py @@ -143,7 +143,7 @@ async def test_event_publishing_with_default_middleware_id( mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(), + sample_ehr_event.model_dump(exclude_none=True), middleware_id=event_dispatcher.middleware_id, ) @@ -160,7 +160,9 @@ async def test_event_publishing_with_custom_middleware_id( await event_dispatcher.publish(sample_ehr_event, middleware_id=custom_middleware_id) mock_dispatch.assert_called_once_with( - "fhir.read", sample_ehr_event.model_dump(), middleware_id=custom_middleware_id + "fhir.read", + sample_ehr_event.model_dump(exclude_none=True), + middleware_id=custom_middleware_id, ) @@ -182,7 +184,7 @@ async def mock_coroutine(): # Verify dispatch was called with correct parameters mock_dispatch.assert_called_once_with( "fhir.read", - sample_ehr_event.model_dump(), + sample_ehr_event.model_dump(exclude_none=True), middleware_id=event_dispatcher.middleware_id, ) diff --git a/tests/pipeline/test_cdsfhiradapter.py b/tests/pipeline/test_cdsfhiradapter.py index 981ec0c3..a8691aaf 100644 --- a/tests/pipeline/test_cdsfhiradapter.py +++ b/tests/pipeline/test_cdsfhiradapter.py @@ -29,7 +29,9 @@ def test_parse_with_document_reference( cds_fhir_adapter, test_cds_request, doc_ref_with_content ): # Add DocumentReference to prefetch data - test_cds_request.prefetch["document"] = doc_ref_with_content.model_dump() + test_cds_request.prefetch["document"] = doc_ref_with_content.model_dump( + exclude_none=True + ) # Call the input method result = cds_fhir_adapter.parse(test_cds_request) @@ -44,7 +46,9 @@ def test_parse_with_multiple_attachments( cds_fhir_adapter, test_cds_request, doc_ref_with_multiple_content ): # Add DocumentReference to prefetch data - test_cds_request.prefetch["document"] = doc_ref_with_multiple_content.model_dump() + test_cds_request.prefetch["document"] = doc_ref_with_multiple_content.model_dump( + exclude_none=True + ) # Call the input method result = cds_fhir_adapter.parse(test_cds_request) @@ -73,7 +77,9 @@ def test_parse_with_custom_document_key( cds_fhir_adapter, test_cds_request, doc_ref_with_content ): # Add DocumentReference to prefetch data with custom key - test_cds_request.prefetch["custom_key"] = doc_ref_with_content.model_dump() + test_cds_request.prefetch["custom_key"] = doc_ref_with_content.model_dump( + exclude_none=True + ) # Call the input method with custom key result = cds_fhir_adapter.parse( @@ -90,7 +96,9 @@ def test_parse_with_document_reference_error( cds_fhir_adapter, test_cds_request, doc_ref_without_content, caplog ): # Add invalid DocumentReference to prefetch data - test_cds_request.prefetch["document"] = doc_ref_without_content.model_dump() + test_cds_request.prefetch["document"] = doc_ref_without_content.model_dump( + exclude_none=True + ) # Call the input method result = cds_fhir_adapter.parse(test_cds_request) From 7db4cb846ffdcad35c8c445a6ea3640365d310a0 Mon Sep 17 00:00:00 2001 From: Adam Kells Date: Mon, 13 Oct 2025 09:10:43 +0100 Subject: [PATCH 5/5] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6140c439..868815e6 100644 --- a/.gitignore +++ b/.gitignore @@ -168,4 +168,3 @@ scrap/ .cursor/ scripts/ .idea/ -.idea/