You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor(027)!: drop deprecation shims — hard cutover to abstractatlas/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>
| Site test strings |`ohbm2026` refs in `site/src/**` tests | updated where they name the package (NOT the `ohbm2026` data/site-mode/route which is the source identity) |
19
19
20
-
## Deprecated shims (one transition period)
20
+
## Hard cutover — no shims (per requester)
21
21
22
-
| Legacy | Behavior |
23
-
|--------|----------|
24
-
|`ohbmcli`entry point | prints "renamed to `aacli`" deprecation notice, then delegates to `aacli`|
25
-
|`import ohbm2026`|thin shim re-exporting `abstractatlas` with a `DeprecationWarning`; labeled + follow-up to remove|
22
+
| Legacy | Behavior after cutover |
23
+
|--------|------------------------|
24
+
|`ohbmcli`| removed from `[project.scripts]` → `command not found: ohbmcli`|
25
+
|`import ohbm2026`|package dir gone + venv reinstalled → `ModuleNotFoundError: No module named 'ohbm2026'`|
26
26
27
-
Shims MUST be labeled in code with root cause + removal follow-up
28
-
(Constitution VI). Neither may partially work in a confusing way (FR-003).
27
+
No deprecation shim is provided. Both fail loudly and immediately (FR-003 /
28
+
SC-007) — never a silent or partial success. The venv is reinstalled
29
+
(`uv pip uninstall ohbm2026 && uv pip install -e .`) so a previously
30
+
pip-installed `ohbm2026` dist can't mask the cutover.
Copy file name to clipboardExpand all lines: specs/027-abstractatlas-rename-ingestors/spec.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -102,7 +102,7 @@ error rather than silently passed downstream.
102
102
### Edge Cases
103
103
104
104
-**Naming divergence for preserved data**: the package is `abstractatlas` but the published parquet keeps the name `ohbm2026.parquet` (that source's data name). The system must tolerate — and clearly document — this intentional divergence rather than "fix" the data name (which would force a re-publish).
105
-
-**Legacy imports / command**: existing scripts, cron jobs, or muscle-memory using `ohbmcli` / `import ohbm2026`must fail with a clear pointer to the new name (or work via a clearly-labeled deprecated alias for one transition period), never a confusing partial success.
105
+
-**Legacy imports / command**: existing scripts, cron jobs, or muscle-memory using `ohbmcli` / `import ohbm2026` fail loudly with the standard not-found error (hard cutover — the old names are removed), never a confusing partial success.
106
106
-**State-keyed caches/checkpoints**: caches and checkpoints keyed by names that embed `ohbm2026` must remain readable so the rename does not silently invalidate expensive prior work.
107
107
-**Source-type asymmetry**: a conference record has no DOI/journal; a literature record has no poster/session. The schema must make each set optional-by-source without letting a conference record masquerade as literature or vice versa.
108
108
-**Two sources, one atlas**: an ingestor's records carry which source they came from, so downstream can attribute, filter, and de-duplicate across sources.
@@ -114,7 +114,7 @@ error rather than silently passed downstream.
114
114
115
115
-**FR-001**: The Python package MUST be renamed `ohbm2026` → `abstractatlas`, and all internal imports, references, and docs updated to the new name.
116
116
-**FR-002**: The canonical CLI MUST be renamed `ohbmcli` → `aacli`; every existing subcommand MUST remain available with identical behavior and options.
117
-
-**FR-003**: Legacy entry points (`ohbmcli`, `import ohbm2026`) MUST either be removed with a precise "renamed to …" error or provided as an explicitly-deprecated alias for one transition period; they MUST NOT partially work in a confusing way.
117
+
-**FR-003**: Legacy entry points (`ohbmcli`, `import ohbm2026`) MUST be removed outright (hard cutover — no deprecation shims); using them MUST fail loudly with the standard not-found error (`command not found` / `ModuleNotFoundError: No module named 'ohbm2026'`), never partially work in a confusing way.
118
118
-**FR-004**: Existing on-disk data artifact paths, artifact/state-key naming, cache/checkpoint keys, and published data-package names (including `ohbm2026.parquet`) MUST be preserved so no data is regenerated and the live site requires no re-publish (byte-identical data).
119
119
-**FR-005**: Ingestion MUST be organized as a pluggable architecture: a common **ingestor contract** (pull records from a source → normalize) with a runtime-discoverable registry of named ingestors.
120
120
-**FR-006**: The two existing sources — the OHBM conference (Oxford Abstracts) and the PubMed/NeuroScape corpus — MUST be ported to become the first two ingestor instances behind the common contract, each reproducing its former normalized output exactly.
@@ -153,13 +153,13 @@ error rather than silently passed downstream.
153
153
-**SC-004**: Both existing sources are expressed as named ingestors behind the common contract; porting them changed **zero** lines of downstream stage logic (measured by the diff touching only ingestor + rename code).
154
154
-**SC-005**: 100% of records emitted by each ingestor validate against the LinkML ingest schema; a deliberately malformed record is rejected with a precise, source-attributed error (0 malformed records reach downstream).
155
155
-**SC-006**: A maintainer can onboard a new source by implementing only the ingestor contract + registering it, with no edits to downstream stages — demonstrated by a documented "add an ingestor" guide and the two ports as worked examples.
156
-
-**SC-007**: Using a legacy name (`ohbmcli` / `import ohbm2026`) yields a clear rename pointer or a labeled-deprecated alias — never a silent or partial success.
156
+
-**SC-007**: Using a legacy name (`ohbmcli` / `import ohbm2026`) fails loudly and immediately with the standard not-found error — never a silent or partial success. (Hard cutover: the old names are gone.)
157
157
158
158
## Assumptions
159
159
160
160
- "Foundation only": this change renames + establishes the ingestor architecture + LinkML ingest schema + ports the two existing sources. It does **not** add arXiv/bioRxiv/medRxiv or new-conference ingestors — those are follow-on specs enabled by this foundation.
161
161
- Data continuity is paramount: on-disk artifact layout and published data-package names are preserved verbatim (including the historical `ohbm2026.parquet` name), so the rename is a code/CLI/package/docs change with no data regeneration or site re-publish.
162
162
- The standardized LinkML ingest schema is designed to **capture the existing normalized shape** (so the ported OHBM output validates and downstream stays byte-identical), while being general enough to admit literature-index sources — it does not reshape already-published data.
163
-
-A deprecated `ohbmcli`alias (and/or an `ohbm2026`import shim) may be provided for one transition period; the canonical, documented interface is `aacli` / `abstractatlas`.
163
+
-Hard cutover: NO deprecation shims. `ohbmcli` and`import ohbm2026`are removed and fail loudly; the sole interface is `aacli` / `abstractatlas`. (The local venv must be reinstalled so a previously pip-installed `ohbm2026` dist is replaced by `abstractatlas`.)
164
164
- Governance docs (constitution) contain naming references (`ohbmcli`, `src/ohbm2026/`, `data/abstracts.json`); updating those references is in scope for doc-sync, coordinated with the project's constitution-amendment process where required.
165
165
- Downstream stages already treat the corpus generically enough that a standardized ingest contract can be introduced without changing their outputs for the existing sources.
Copy file name to clipboardExpand all lines: specs/027-abstractatlas-rename-ingestors/tasks.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,7 +57,7 @@ renamed package and must follow it. Sequence: Setup → baseline → US1 → US2
57
57
58
58
-[x] T003 [US1]`git mv src/ohbm2026 src/abstractatlas`, then rewrite `ohbm2026`→`abstractatlas` across all imports/refs in `src/` (per `contracts/rename-map.md`). Do NOT touch data-identity strings in the rename-map "NOT renamed" table (data paths, state-keys, `ohbm2026.parquet`, `/ohbm2026/` route, `SITE_MODE='ohbm'`, `OHBM2026_*`).
59
59
-[x] T004 [US1] Update `pyproject.toml`: `name``ohbm2026`→`abstractatlas`; `[project.scripts]``ohbmcli`→`aacli = "abstractatlas.cli:main"`; rename `ohbm-*` entry points to `aa-*` where still used or drop them (record disposition per rename-map). Keep `package-dir`/`packages.find` under `src`.
60
-
-[x] T005 [US1]Add labeled deprecation shims (FR-003, research R3): `ohbmcli` entry point that warns "renamed to aacli" then delegates; an `ohbm2026` import shim module re-exporting `abstractatlas` with a `DeprecationWarning`. Label both in code with root cause + removal follow-up (Constitution VI).
60
+
-[x] T005 [US1]HARD CUTOVER — no deprecation shims (per requester). Remove the `ohbmcli` entry point (pyproject keeps only `aacli`), the legacy `ohbm-*` scripts, and rename all `ohbmcli` string literals in `src/` (argparse `prog=`, provenance `command_line`, help/error text) → `aacli`. Reinstall the venv package so a previously pip-installed `ohbm2026` dist is replaced by `abstractatlas` (`uv pip uninstall ohbm2026 && uv pip install -e .`), so `import ohbm2026` fails with `ModuleNotFoundError` and `ohbmcli` is `command not found` (FR-003/SC-007).
61
61
-[x] T006 [P][US1] Rewrite `ohbm2026`→`abstractatlas` imports/refs across `tests/` and `scripts/`; update `PYTHONPATH=src -m ohbm2026.cli`→`-m abstractatlas.cli` in scripts + `.github/workflows/**` + `.githooks/`.
62
62
-[x] T007 [P][US1] Update the few `ohbm2026` string refs in `site/src/**` tests that name the PACKAGE (not the `ohbm2026` data/route/site-mode identity). — VERIFIED NO-OP: audited `site/src` — every `ohbm2026` ref is data/route/storage-key identity (`/ohbm2026/` routes, `ohbm2026.parquet`, `ohbm2026.ui.*`/`ohbm2026.analytics.*` localStorage keys, conference `kind`); the TypeScript site never imports the Python package, so nothing to rename (2 stale comment path-mentions left as historical, like the src ones).
63
63
-[x] T008 [US1] Verify the rename: `PYTHONPATH=src .venv/bin/python -m unittest discover -s tests` fully green (SC-002); re-run the T002 fixture under `aacli` and diff artifacts — identical (SC-001); `ohbmcli`/`import ohbm2026` emit the labeled deprecation and still succeed (SC-007); confirm an existing `data/cache/**` (or checkpoint) entry created before the rename is still discovered/reused — no forced recompute from the name change (Constitution III / spec edge case); `git grep -n 'ohbm2026\|ohbmcli'` returns only intentional data-identity names, shims, and historical spec docs.
0 commit comments