refactor(027)!: rename ohbm2026→abstractatlas + ohbmcli→aacli (US1; data preserved)#72
refactor(027)!: rename ohbm2026→abstractatlas + ohbmcli→aacli (US1; data preserved)#72satra wants to merge 3 commits into
Conversation
…estors Stage 27 foundation: rename ohbm2026→abstractatlas + ohbmcli→aacli (data preserved, byte-identical), a pluggable Ingestor architecture + registry, and a standardized LinkML ingest schema; port OHBM + NeuroScape as the first two ingestors. New-source ingestors deferred. Full Spec Kit artifacts + analyze remediations (SC-001 wording, cache-resumability check, NeuroScape-port scouting). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ata preserved) Mechanical, behavior-preserving rename (US1 / the shippable MVP slice): - `git mv src/ohbm2026 → src/abstractatlas`; surgically rewrite imports + `ohbm2026.<module>` refs across src/, tests/, scripts/, .github/, docs/ (README + CLAUDE.md pre-SPECKIT). Two passes: `(from|import) ohbm2026` and `ohbm2026.<X>` EXCEPT `ohbm2026.parquet`. - pyproject: package name→abstractatlas; `aacli = abstractatlas.cli:main`; legacy per-stage `ohbm-*` scripts dropped (most pointed at Stage-5-moved modules; functions remain importable). - Deprecation shims (FR-003/SC-007): `ohbmcli` entry point warns then delegates to aacli; `src/ohbm2026/__init__.py` meta-path shim redirects `import ohbm2026[.*]` → `abstractatlas[.*]` with a DeprecationWarning. Both labeled with removal follow-up. DATA PRESERVED (FR-004) — NOT renamed: `ohbm2026.parquet`, `/ohbm2026/` route, `SITE_MODE='ohbm'`, `OHBM2026_*` CI vars, conference `kind`, `ohbm2026.ui.*`/`analytics` localStorage keys, `--ohbm2026-parquet` flag, `ohbm2026_state_key`, on-disk paths/state-keys. No data regen, no site re-publish, byte-identical. Site (TypeScript) untouched — it never imports the Python package (T007 verified no-op). Verified: full suite `Ran 1034 — OK (skipped=1)`, identical to baseline (SC-002); import smoke test OK; constitution-check --full exit 0; residual `git grep 'ohbm2026|ohbmcli'` = only data-identity, shims, historical specs. US2 (ingestor arch) + US3 (LinkML schema) follow in later slices. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request renames the core package from ohbm2026 to abstractatlas and the CLI from ohbmcli to aacli, updating all imports, scripts, and documentation while preserving existing data paths and published package names to maintain byte-identity. It also establishes a pluggable ingestion architecture with a standardized LinkML ingest schema, wrapping the existing OHBM and NeuroScape sources. The review feedback recommends replacing an absolute local path in the poster sequencing benchmark plan with a relative repository link, and adding a guard in the deprecated ohbm2026 shim to prevent duplicate _RedirectFinder registrations in sys.meta_path during reloads.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| ## Why This Phase Now | ||
|
|
||
| The current semantic-path ordering logic is still based on greedy nearest-neighbor walks in [src/ohbm2026/poster_layout.py](/Users/satra/software/temp/ohbm2026/src/ohbm2026/poster_layout.py). | ||
| The current semantic-path ordering logic is still based on greedy nearest-neighbor walks in [src/abstractatlas/poster_layout.py](/Users/satra/software/temp/ohbm2026/src/abstractatlas/poster_layout.py). |
There was a problem hiding this comment.
The link contains an absolute path /Users/satra/software/temp/ohbm2026/src/abstractatlas/poster_layout.py which points to a local directory of a specific user. It should be updated to a relative path within the repository so that the link works for all users and environments.
| The current semantic-path ordering logic is still based on greedy nearest-neighbor walks in [src/abstractatlas/poster_layout.py](/Users/satra/software/temp/ohbm2026/src/abstractatlas/poster_layout.py). | |
| The current semantic-path ordering logic is still based on greedy nearest-neighbor walks in [src/abstractatlas/poster_layout.py](../src/abstractatlas/poster_layout.py). |
| return None | ||
|
|
||
|
|
||
| sys.meta_path.insert(0, _RedirectFinder()) |
There was a problem hiding this comment.
To prevent duplicate finders from being registered in sys.meta_path if the ohbm2026 module is reloaded or imported multiple times in complex environments, check if an instance of _RedirectFinder is already present before inserting it.
if not any(isinstance(f, _RedirectFinder) for f in sys.meta_path):\n sys.meta_path.insert(0, _RedirectFinder())…s/aacli
Per requester: no deprecation shims. Removes:
- src/ohbm2026/__init__.py (the import meta-path shim) — `import ohbm2026`
now raises ModuleNotFoundError.
- the `ohbmcli` [project.scripts] entry + `_ohbmcli_deprecated_main` in
cli.py — `ohbmcli` is now `command not found`.
Also renames the remaining `ohbmcli` string literals in src (+ tests):
argparse `prog=` (aacli --help now shows `usage: aacli`), provenance
`command_line` strings, help/error text; and fixes a dynamic
`__import__("ohbm2026")` in test_enrich_stage that the module-ref passes
missed. Reinstalled the venv (uninstall ohbm2026 dist → install -e .) so a
prior installed `ohbm2026` can't mask the cutover.
Spec/plan/tasks/contracts (FR-003, SC-007, R3, rename-map, cli-aacli) +
CLAUDE pointer updated to describe the hard cutover.
Verified: full suite `Ran 1034 — OK (skipped=1)`; `import ohbm2026` →
ModuleNotFoundError; `ohbmcli` → command not found; `aacli` works.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Stage 27, slice 1 of 3 (US1 — the rename MVP). US2 (pluggable ingestor architecture) and US3 (LinkML ingest schema) follow as separate PRs on this foundation.
What this does
Renames the component
ohbm2026→abstractatlas(package) andohbmcli→aacli(CLI), behavior-preserving, with all data identity preserved.git mv src/ohbm2026 → src/abstractatlas+ surgical import/module rewrite acrosssrc/,tests/,scripts/,.github/,docs/, README, and CLAUDE.md (pre-SPECKIT). Two passes:(from|import) ohbm2026andohbm2026.<module>— exceptohbm2026.parquet.pyproject: package name →abstractatlas;aacli = "abstractatlas.cli:main"; legacy per-stageohbm-*scripts dropped (most already pointed at Stage-5-moved modules; their functions remain importable).ohbmcliis removed (command not found) andimport ohbm2026raisesModuleNotFoundError. Theprog=/help/provenancecommand_linestrings insrc/now sayaacli. The local venv is reinstalled (uv pip uninstall ohbm2026 && uv pip install -e .) so a previously-installedohbm2026dist can't mask the cutover.Data preserved — NOT renamed (FR-004)
ohbm2026.parquet(published data name),/ohbm2026/site route,SITE_MODE='ohbm',OHBM2026_*CI vars, conferencekind: 'ohbm2026',ohbm2026.ui.*/ohbm2026.analytics.*localStorage keys,--ohbm2026-parquetflag,ohbm2026_state_key, on-disk paths + state-keys. No data regeneration, no site re-publish, byte-identical. The TypeScript site is untouched (it never imports the Python package).Verification
Ran 1034 tests — OK (skipped=1), identical to the pre-rename baseline (SC-002)aacli --helpshowsusage: aacli;import abstractatlasOK;git mvpreserved historyimport ohbm2026→ModuleNotFoundError;ohbmcli→command not found(SC-007)constitution-check.sh --fullexit 0git grep 'ohbm2026|ohbmcli'= only data-identity names + historicalspecs/Scope
Foundation rename only. New-source ingestors (arXiv/bioRxiv/medRxiv, other conferences) remain out of scope. Spec Kit artifacts under
specs/027-abstractatlas-rename-ingestors/.🤖 Generated with Claude Code