docs(verify): record that GNN promotion breaks API serving at startup (BR-1) - #290
Merged
Conversation
Passing the five promotion gates is necessary but not sufficient to ship a GNN, and nothing said so anywhere. promote_model rewrites config.yaml's model_path to the GNN checkpoint without relocating it, but ModelManager.load passes only config.model_path.name to ModelRegistry.load, and resolve_model rebuilds that as models/<basename> relative to cwd. The directory is discarded, the lookup misses, and FileNotFoundError is raised inside the unguarded startup lifespan handler - so the API fails to start rather than degrading, with /health down too. Two further defects are latent behind that one: a .pth loads as a raw state_dict with no predict_proba, and _score_peptide builds a flat 31-float vector where GraphPredictorV2.forward expects a PyG batch. There is no model-type dispatch in api/main.py at all. Recorded in the promotion orchestrator's own docstring rather than in a planning document, which is where this class of knowledge was lost before. Docstring only; no behaviour change. (cherry picked from commit 27ac57989ee9e06569ad083cc222ec849bc65d11, re-authored: the original was committed under a placeholder identity, Test <test@example.com>, which is neither correct nor DCO-valid on a repo with a single author of record.) Signed-off-by: Gavin Borges <gavinmborges1104@gmail.com>
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.
Rescues BR-1, an operational warning that existed on exactly one local branch, on no remote, and on no task list. Docstring only; no behaviour change.
What it records
Passing the five GNN promotion gates is necessary but not sufficient to ship a GNN, and nothing in the repository said so.
promote_modelrewritesconfig.yaml'smodel_pathto the GNN checkpoint without relocating it. ButModelManager.loadpasses onlyconfig.model_path.name- the basename - toModelRegistry.load, andresolve_modelrebuilds that asmodels/<basename>relative to cwd. The directory component is discarded, the lookup misses, andFileNotFoundErroris raised inside the unguarded startuplifespanhandler.So promoting a GNN makes the API fail to start,
/healthincluded. It does not degrade, and it does not fall back.Two further defects sit latent behind that one: a
.pthloads as a rawstate_dictwith nopredict_proba, and_score_peptidebuilds a flat 31-float vector whereGraphPredictorV2.forwardexpects a PyG batch. There is no model-type dispatch inapi/main.pyat all.Re-verified against current
origin/mainline by line before this branch was cut, not carried forward on the original commit's word:api/main.py:204passesself.config.model_path.name;model_registry.py:14-19rebuilds it asmodels/<basename>and raises only on directory escape;model_registry.py:52raises theFileNotFoundError;lifespanatapi/main.py:342is_manager.load()with notry/except.Why it is a fresh branch rather than the original commit
The original commit
27ac579is authored and signed off asTest <test@example.com>, a placeholder identity from a git misconfiguration - neither correct nor DCO-valid on a repository with a single author of record. It could not be pushed as-is.This is a clean cherry-pick onto current
main, re-authored to Gavin Borges with a matching DCO trailer and GPG-signed. Content is byte-identical to the original; the cherry-pick applied with no conflicts. The provenance is recorded in the commit message rather than lost.27ac579is the twentieth commit of the sameTest <test@example.com>window. The other nineteen are on published history and are handled by.mailmapin #288, which maps display without rewriting any commit object. This one was never pushed, so it could be re-authored properly instead - which is strictly better, and is why it was deliberately excluded from that mapping.