infra: extract heph.nvim into its own forge repo
Some checks failed
Build / validate (pull_request) Failing after 1m12s

The Neovim plugin now lives at eblume/hephaestus.nvim (plugin at the repo
root). Remove heph.nvim/ from the monorepo and the build/test wiring that
referenced it:

- Dagger: drop the test_nvim function + the pinned-Neovim NVIM_VERSION
- build.yaml: drop the `dagger call test-nvim` step
- drop the mise run test-nvim task and .stylua.toml + the stylua prek hook
  (no Lua remains in the monorepo)
- install-heph.md: install via a plain lazy.nvim spec pointing at the
  plugin repo over SSH (no more local-dir checkout hack)
- README / AGENTS / heph-nvim.md: note the surface lives in its own repo

The CLI/TUI -> nvim integration is unchanged (they shell out to `nvim`
expecting the heph plugin installed). The v1-prototype tech-spec §14 build
record and prior changelog fragments are left as frozen history.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erich Blume 2026-06-03 22:42:39 -07:00
commit d36ed18590
42 changed files with 31 additions and 2965 deletions

View file

@ -0,0 +1 @@
Extracted the Neovim plugin into its own forge repo, [eblume/hephaestus.nvim](ssh://forgejo@forge.ops.eblu.me:2222/eblume/hephaestus.nvim.git). Removed `heph.nvim/` from the monorepo along with its build/test wiring: the `test_nvim` Dagger function, the `dagger call test-nvim` CI step, the `mise run test-nvim` task, and the `.stylua.toml` + stylua prek hook (no Lua remains here). The CLI/TUI→nvim integration is unchanged (they shell out to `nvim` expecting the plugin installed). Install now uses a plain lazy.nvim spec pointing at the plugin repo — see [[install-heph]].

View file

@ -33,20 +33,15 @@ real data.
## 2. The Neovim plugin
`heph.nvim` lives in a subdirectory of the monorepo, and lazy.nvim can't load a
subdir plugin from a bare git URL (it puts the clone *root* on `runtimepath`).
For now, point lazy at a dedicated checkout via `dir`:
```bash
git clone --branch feature/v1-prototype \
ssh://forgejo@forge.ops.eblu.me:2222/eblume/hephaestus.git \
~/.local/share/heph/checkout
```
The plugin lives in its own forge repo,
[eblume/hephaestus.nvim](ssh://forgejo@forge.ops.eblu.me:2222/eblume/hephaestus.nvim.git),
with the plugin at the repo root — so lazy.nvim loads it from a bare git URL.
Point lazy at the forge over SSH:
```lua
-- lazy.nvim spec
{
dir = vim.fn.expand("~/.local/share/heph/checkout/heph.nvim"),
url = "ssh://forgejo@forge.ops.eblu.me:2222/eblume/hephaestus.nvim.git",
config = function()
require("heph").setup({}) -- connect-only: talks to the daemon you started
end,
@ -61,9 +56,8 @@ heph daemon start # launchd agent (macOS) / systemd user service (Linux)
```
See [[run-the-daemon]] for `start`/`stop`/`restart`/`status`. Update the plugin
by `git pull`ing the checkout (and after a `cargo install` upgrade, `heph daemon
restart` to pick up the new `hephd`). (A future split of `heph.nvim` into its own
forge repo will make this a normal `{ "eblume/heph.nvim" }` spec.)
with `:Lazy update` (and after a `cargo install` upgrade of the binaries, `heph
daemon restart` to pick up the new `hephd`).
## 3. Isolate development

View file

@ -8,15 +8,20 @@ tags:
# heph.nvim
The primary user surface (tech-spec §8): a Neovim plugin that replaces
The Neovim knowledge-base surface (tech-spec §8): a plugin that replaces
obsidian.nvim and is a **thin client of the local `hephd`** over its
unix-socket JSON-RPC. Notes, journals, and tasks are edited as ordinary
buffers; the daemon owns all storage and sync. Built in checkpointed slices on
`feature/v1-prototype`; this card tracks the stable surface as it lands.
buffers; the daemon owns all storage and sync.
> **Repo:** the plugin code lives in its own forge repo,
> [eblume/hephaestus.nvim](ssh://forgejo@forge.ops.eblu.me:2222/eblume/hephaestus.nvim.git)
> (extracted from this monorepo). This card documents the surface's
> architecture; see [[install-heph]] to install it and the plugin repo for the
> Lua sources + headless e2e suite.
## Architecture
`heph.nvim/lua/heph/` modules, each small and single-purpose:
The `lua/heph/` modules, each small and single-purpose:
| Module | Responsibility |
|---|---|
@ -109,13 +114,11 @@ The headless e2e suite drives the plugin in `nvim --headless` against a real
`hephd` over a temp socket, asserting both buffer contents and resulting DB
state (via an isolated RPC session). It uses a **self-contained busted-style
runner** (`tests/e2e/runner.lua`) — no external plugins, no network — so it is
deterministic. `mise run test-nvim` builds the daemon and runs the suite against
system-installed Neovim; a deliberately failing spec exits non-zero (no
false-green; the runner also fails if it discovers zero specs). CI runs the same
suite through the **`test-nvim` Dagger function** (`.dagger/`, invoked by
`build.yaml` as `dagger call test-nvim`), which bakes a pinned, arch-detected
Neovim onto a Rust image, builds `hephd`, and runs the suite — reproducible, and
identical to the native `mise run test-nvim` path.
deterministic. The suite lives in the plugin repo (eblume/hephaestus.nvim); since
that repo carries no Rust source, `mise run test-nvim` there drives the suite
against a prebuilt `hephd` supplied via `$HEPHD_BIN` (built from this monorepo:
`cargo build -p hephd`). A deliberately failing spec exits non-zero, and the
runner also fails if it discovers zero specs — no false-green.
## Related