{
"id": "py-object-soup",
"language": "python",
"group": "maintainability",
"listingTitle": "Group repeated loose parameters into a domain type",
"title": "Group repeated loose parameters into a domain type",
"mvvm": false,
"defaultSeverity": "info",
"legacyGroup": "maintainability",
"why": "The same loose values repeatedly crossing function boundaries form an implicit object whose identity, validation, and evolution are distributed across parameter lists.",
"suggestion": "Introduce a dataclass, typed model, or domain class when these parameters share identity and lifecycle.",
"version": 5,
"semanticMaturity": "project",
"securityKind": "none",
"taxonomy": [
"maintainability"
],
"requirements": [
"declarations",
"sourceText"
],
"packs": [
"python"
],
"implementation": "src/rules/object_soup.rs",
"languages": [
"python"
],
"frameworks": [],
"languageVersions": [],
"limitations": [
"Requires the same complete set of four to ten simple named parameters in at least three distinct function names across two files, or at least four distinct function names in one file.",
"Parameter order, annotations, and defaults are ignored, but subsets, aliases, local variables, call-site flow, and groups split across otherwise different parameter lists are not inferred.",
"Receivers, variadic or destructured parameters, test functions, non-production source roles, declaration-only and no-op pass or NotImplementedError stubs, recognized compiler-lowering callbacks, standard overload, override, and abstract-method contracts, repeated interface-style methods with one function name, and groups below the project-level repetition threshold are excluded.",
"Arbitrary framework callback decorators and inherited override contracts without an explicit standard decorator are not resolved, so those signatures can still contribute evidence."
]
}