From 8ad9e51e987f8d4b03b08999aef0b1a93bbac488 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Thu, 10 Sep 2026 19:57:26 +0000 Subject: [PATCH 1/2] Mark the UniProt, Alliance and Cross-Database work as parked, not dead I proposed deleting about 500 lines of this to save maintenance effort. That was the wrong trade: Helia did the work to make UniProt integration possible and Adam did the same for Alliance, and "we are not working on it right now" is not "it is dead". Deleting a colleague's work to make my refactors cheaper is not a saving. So instead the status is written down where someone will find it. Each module now says three things: it is deliberately not deployed, it must not be deleted, and it must not be invested in while parked -- keeping it importable through a refactor is enough. Also records that it has not been exercised since today, so if it is ever un-parked its behaviour is unverified even where the code still type-checks. That is the fact most likely to bite whoever resurrects it. No behaviour change. The chatbot already defaults to Reactome only, in both config_default.yml and chat-chainlit.py's fallback -- these profiles run only if a config.yml names them explicitly. Co-Authored-By: Claude Opus 5 --- src/agent/profiles/cross_database.py | 14 ++++++++++++++ src/data_generation/alliance/__init__.py | 14 ++++++++++++++ src/retrievers/uniprot/rag.py | 14 ++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/agent/profiles/cross_database.py b/src/agent/profiles/cross_database.py index eff9940..37f034e 100644 --- a/src/agent/profiles/cross_database.py +++ b/src/agent/profiles/cross_database.py @@ -1,3 +1,17 @@ +"""The Cross-Database profile: Reactome answers combined with UniProt answers. + +PARKED, NOT ABANDONED. Deliberately not deployed: every profile default is +React-to-Me, in `config_default.yml` and in `chat-chainlit.py`'s fallback, so this +runs only if a `config.yml` names it explicitly. + +Do not delete it. Helia Mohammadi did the work to make UniProt integration possible, and it is kept so the capability can be resurrected +rather than rebuilt. Equally, do not invest in it while it is parked -- it does not +need new features, and a change that merely keeps it importable is enough. + +If it is ever un-parked, note that it has not been exercised since 2026-09-10, so +its behaviour is unverified even where the code still type-checks. +""" + from typing import Any, Literal from langchain_core.embeddings import Embeddings diff --git a/src/data_generation/alliance/__init__.py b/src/data_generation/alliance/__init__.py index badbc3e..dadb508 100644 --- a/src/data_generation/alliance/__init__.py +++ b/src/data_generation/alliance/__init__.py @@ -1,3 +1,17 @@ +"""Building embeddings from Alliance of Genome Resources data. + +PARKED, NOT ABANDONED. Deliberately not deployed: every profile default is +React-to-Me, in `config_default.yml` and in `chat-chainlit.py`'s fallback, so this +runs only if a `config.yml` names it explicitly. + +Do not delete it. Adam Wright did the work to make Alliance results possible, and it is kept so the capability can be resurrected +rather than rebuilt. Equally, do not invest in it while it is parked -- it does not +need new features, and a change that merely keeps it importable is enough. + +If it is ever un-parked, note that it has not been exercised since 2026-09-10, so +its behaviour is unverified even where the code still type-checks. +""" + import os import requests diff --git a/src/retrievers/uniprot/rag.py b/src/retrievers/uniprot/rag.py index 324083b..0b7b52b 100644 --- a/src/retrievers/uniprot/rag.py +++ b/src/retrievers/uniprot/rag.py @@ -1,3 +1,17 @@ +"""Retrieval over a UniProt embeddings bundle. + +PARKED, NOT ABANDONED. Deliberately not deployed: every profile default is +React-to-Me, in `config_default.yml` and in `chat-chainlit.py`'s fallback, so this +runs only if a `config.yml` names it explicitly. + +Do not delete it. Helia Mohammadi did the work to make UniProt integration possible, and it is kept so the capability can be resurrected +rather than rebuilt. Equally, do not invest in it while it is parked -- it does not +need new features, and a change that merely keeps it importable is enough. + +If it is ever un-parked, note that it has not been exercised since 2026-09-10, so +its behaviour is unverified even where the code still type-checks. +""" + from pathlib import Path from langchain_core.embeddings import Embeddings From 01c735c277581fa3cc49dc8bc495260af1151798 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Thu, 10 Sep 2026 19:58:49 +0000 Subject: [PATCH 2/2] Amend the constitution: parked is not dead (v1.1.0) Principle VII. Capability that is built, works and is deliberately not deployed had no stated policy, so it read as dead code -- and I proposed deleting about 500 lines of it to make refactors cheaper. The principle names both failure modes. Do not delete parked work to cheapen a refactor: it cost someone real effort, "not working on it now" is not "dead", and rebuilding costs far more than carrying. Do not invest in it either: keeping it importable and type-checking through a refactor is the whole obligation. It also records that parked code is unexercised, so its behaviour is unverified even where it type-checks -- the fact most likely to bite whoever resurrects it, and the reason the module docstrings in this same PR say so where they will be found. MINOR bump: a principle added, none removed or redefined. Co-Authored-By: Claude Opus 5 --- .specify/memory/constitution.md | 39 ++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md index 795b7cf..7bd33af 100644 --- a/.specify/memory/constitution.md +++ b/.specify/memory/constitution.md @@ -1,3 +1,20 @@ + + # Reactome ChatBot Constitution The team is three developers covering a large surface — website, pathway browser, @@ -60,6 +77,26 @@ it records a decision, a measurement, or a defect someone else must judge — no as a substitute for a fix that takes ten minutes. Three fixes are worth more than five issues describing them. +### VII. Parked is not dead + +Some capability here is built, works, and is deliberately not deployed: UniProt +integration, Alliance results, and the Cross-Database profile. It runs only when a +`config.yml` names it; every default is React-to-Me. + +Do not delete parked work to make a refactor cheaper. That trade looks like a saving +and is not: the code cost someone real effort, "we are not working on it now" is not +"it is dead", and rebuilding is far more expensive than carrying. This principle +exists because the proposal was made -- to remove about 500 lines of UniProt and +Cross-Database serving code, on the grounds that it had been dragged through three +refactors in a week -- and it was wrong. + +Equally, do not invest in parked work. It needs no new features and no new tests. +Keeping it importable and type-checking through a refactor is the whole obligation. + +Parked code is unexercised, so its behaviour is unverified even where it still type +checks. Whoever un-parks it inherits that, and should be told at the point they find +it rather than after. + ## Quality Gates `main` is protected: pull request required, `enforce_admins` on, branch must be @@ -100,4 +137,4 @@ used for bug triage or dependency bumps, where the ceremony costs more than the fix. Retrofitting specifications onto existing code is archaeology and is not done. -**Version**: 1.0.0 | **Ratified**: 2026-09-08 | **Last Amended**: 2026-09-08 +**Version**: 1.1.0 | **Ratified**: 2026-09-08 | **Last Amended**: 2026-09-10