refactor: remove resolution-epic dead code and document the new resolution surfaces - #875
Merged
Merged
Conversation
Collaborator
Author
|
Follow-up commit: restored the 3 direct unit tests for the singular |
…ution surfaces Post-epic cleanup for the FeatureGroup resolution work, in two parts: remove dead code left after the epic, then document the surviving resolution surface. Dead code removed: - FeatureChainParser._match_pattern_based_feature (only self-referenced). - format_feature_group_classes (plural) and its dedicated test file; the singular format_feature_group_class stays and keeps direct unit tests in a dedicated file. - the log_n_subclasses parameter and its unreachable debug branch in get_all_subclasses. - Options.add, a zero-caller legacy shim. Behavior-preserving: get_column_base_feature now consumes the exported COLUMN_SEPARATOR. The _strict_validation_rejection_reason / name_path_presence_rejection_reason diagnostic seam is documented as supported (docstring-only, no behavior change). Docs: typed FeatureResolutionError framing plus a catching example on the troubleshooting page; diagnose / resolution_report() and the FeatureResolutionError / ResolutionDiagnosis / ResolutionRecord types in mloda-api.md; get_result / get_artifacts docstrings. Breaking changes (public API): Options.add is removed (use add_to_group); get_all_subclasses loses its log_n_subclasses parameter. Both were zero-caller and intentional.
TKaltofen
force-pushed
the
refactor/os-015-resolution-cleanup
branch
from
July 28, 2026 13:33
8d21c0f to
ff34662
Compare
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.
Summary
Post-epic cleanup for the FeatureGroup resolution work, in two ordered steps: remove dead code left after the epic, then document the new resolution surfaces against what remains.
Dead code removed
FeatureChainParser._match_pattern_based_feature: only self-referenced; the docstring claim thatmatch_configuration_feature_chain_parserused it was stale.format_feature_group_classes(plural) and its dedicated test file. The singularformat_feature_group_classstays (used by the engine and covered by the error-message tests).log_n_subclassesparameter and its unreachable, buggy debug branch inget_all_subclasses.Options.add, a zero-caller legacy migration shim.Behavior-preserving tidy-up
get_column_base_featurenow splits on the exportedCOLUMN_SEPARATORconstant instead of a bare"~", giving the constant an internal consumer.COLUMN_SEPARATOR == "~", so behavior is identical.Diagnostic seam blessed (not retired)
_strict_validation_rejection_reasonand its helpername_path_presence_rejection_reasonare the assertion seam across roughly a dozen test modules. Rather than retire them, their docstrings now mark them as a supported diagnostic seam (docstring-only, no behavior change), mirroring the os-014 "bless the test seam" precedent.Docs
FeatureResolutionError(aValueErrorsubclass) with a catching example.mloda-api.md:diagnosedocumented next toexplain,resolution_report()next toresolved_plan(); the staleresolve_featureblock replaced with a pointer to the accuratediscover-plugins.md;FeatureResolutionError,ResolutionDiagnosis, andResolutionRecorddocumented.mlodaAPI.get_result()/get_artifacts().memory-bank/activeContext.mdandprogress.mdrefreshed for the finished resolution epic.Breaking changes (public API)
Two symbols on mloda's public surface are removed. Both were explicitly sanctioned for removal by the ticket and verified zero-caller across mloda core and mloda-registry:
Options.add(key, value)(reachable viafrom mloda.user import Options) is removed. UseOptions.add_to_group(key, value)instead, oradd_to_context(key, value)for metadata-only options.get_all_subclasses(cls, log_n_subclasses=...)(exported viamloda.provider) loses itslog_n_subclassesparameter. No internal call site passed it, and its only effect was an unreachable debug branch that indexed the subclass set rather than logging a count. Callget_all_subclasses(cls).Validation
toxgreen (pytest -n 8, ruff format + check, pip-licenses, mypy --strict, bandit). The two public-API removals above were reviewed for backward-compatibility impact and are intentional per the ticket.