Skip to content

refactor(027)!: rename ohbm2026→abstractatlas + ohbmcli→aacli (US1; data preserved)#72

Open
satra wants to merge 3 commits into
mainfrom
027-abstractatlas-rename-ingestors
Open

refactor(027)!: rename ohbm2026→abstractatlas + ohbmcli→aacli (US1; data preserved)#72
satra wants to merge 3 commits into
mainfrom
027-abstractatlas-rename-ingestors

Conversation

@satra

@satra satra commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

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 ohbm2026abstractatlas (package) and ohbmcliaacli (CLI), behavior-preserving, with all data identity preserved.

  • git mv src/ohbm2026 → src/abstractatlas + surgical import/module rewrite across src/, tests/, scripts/, .github/, docs/, README, and CLAUDE.md (pre-SPECKIT). Two passes: (from|import) ohbm2026 and ohbm2026.<module>except ohbm2026.parquet.
  • pyproject: package name → abstractatlas; aacli = "abstractatlas.cli:main"; legacy per-stage ohbm-* scripts dropped (most already pointed at Stage-5-moved modules; their functions remain importable).
  • Hard cutover — NO deprecation shims (per maintainer): ohbmcli is removed (command not found) and import ohbm2026 raises ModuleNotFoundError. The prog=/help/provenance command_line strings in src/ now say aacli. The local venv is reinstalled (uv pip uninstall ohbm2026 && uv pip install -e .) so a previously-installed ohbm2026 dist 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, conference kind: 'ohbm2026', ohbm2026.ui.*/ohbm2026.analytics.* localStorage keys, --ohbm2026-parquet flag, 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

  • ✅ Full suite Ran 1034 tests — OK (skipped=1), identical to the pre-rename baseline (SC-002)
  • aacli --help shows usage: aacli; import abstractatlas OK; git mv preserved history
  • ✅ Hard cutover: import ohbm2026ModuleNotFoundError; ohbmclicommand not found (SC-007)
  • constitution-check.sh --full exit 0
  • ✅ Residual git grep 'ohbm2026|ohbmcli' = only data-identity names + historical specs/

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/.

Code/CLI/package rename with zero site-data impact — no deploy-production label needed; the site build is unaffected.

🤖 Generated with Claude Code

satra and others added 2 commits July 3, 2026 15:19
…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>
@satra
satra temporarily deployed to pr-preview-72 July 3, 2026 19:30 — with GitHub Actions Inactive

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
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).

Comment thread src/ohbm2026/__init__.py Outdated
return None


sys.meta_path.insert(0, _RedirectFinder())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant