Problem
src/gradata/patterns/__init__.py is a back-compat shim that re-exports from src/gradata/contrib/patterns/. The real Layer 0 is contrib/patterns/; the top-level patterns/ directory is effectively hollow.
Impact:
help(gradata.patterns) / tab-completion on patterns. yields nothing because the shim has no __all__
- Callers who import
gradata.patterns.X silently get gradata.contrib.patterns.X via lazy hops
- Any future refactor of
contrib/patterns/ must also maintain the shim or silently break callers
Proposed resolution (pick one)
A. Promote canonical: Delete src/gradata/patterns/, move contrib/patterns/ → src/gradata/patterns/, add deprecation notice to the old gradata.contrib.patterns import path.
B. Make the shim honest: Keep both locations, but give patterns/__init__.py a real __all__ so discovery works.
Option A is cleaner but breaks external imports of gradata.contrib.patterns.X. Option B keeps back-compat but locks in the bifurcation.
Context
Identified by council review of the autoresearch/consolidation branch. Needs a product-level decision — not a mechanical refactor.
Problem
src/gradata/patterns/__init__.pyis a back-compat shim that re-exports fromsrc/gradata/contrib/patterns/. The real Layer 0 iscontrib/patterns/; the top-levelpatterns/directory is effectively hollow.Impact:
help(gradata.patterns)/ tab-completion onpatterns.yields nothing because the shim has no__all__gradata.patterns.Xsilently getgradata.contrib.patterns.Xvia lazy hopscontrib/patterns/must also maintain the shim or silently break callersProposed resolution (pick one)
A. Promote canonical: Delete
src/gradata/patterns/, movecontrib/patterns/→src/gradata/patterns/, add deprecation notice to the oldgradata.contrib.patternsimport path.B. Make the shim honest: Keep both locations, but give
patterns/__init__.pya real__all__so discovery works.Option A is cleaner but breaks external imports of
gradata.contrib.patterns.X. Option B keeps back-compat but locks in the bifurcation.Context
Identified by council review of the
autoresearch/consolidationbranch. Needs a product-level decision — not a mechanical refactor.