HarperFast / HarperFast/harper

Startup scan: warn (don't silently skip) when the reserved `restore` metadata dir looks like a database

Open Beginner friendly
#2,033 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
89
Forks
10
Avg merge
2d 6h
Merged PRs (30d)
200

Description

Follow-up from #1831 review (flagged by @kriszyp on `resources/databases.ts`).

## Context
#1831 stores restore lock/marker metadata in a reserved ``restore`` directory beside the database directories. The backtick makes it an illegal database name (`schemaRegex` rejects `/` and backtick), so the API can never create a database that collides with it, and the startup scan explicitly skips that entry.

## Edge case
The startup scan opens any directory containing `CURRENT` + `MANIFEST-*` **without re-applying `schemaRegex`**. So if a directory literally named ``restore`` already exists on disk as a RocksDB database (only reachable via manual filesystem creation, since the API always rejected backticks), an upgrade to this code now **silently stops loading that database**, and a subsequent restore would write `.lock`/`.restoring` metadata into it.

## Severity
Very low probability (no API path can produce such a directory), but the silent disappearance is a bad state to hit undiagnosed.

## Suggested fix
When the scan skips the reserved ``restore`` entry, detect whether it looks like a real database (has `CURRENT` + `MANIFEST-*`) and **log a warning** (or refuse startup with a clear message) rather than silently ignoring it, so an operator can migrate/rename it.

Ref: #1831, `resources/databases.ts` scan loops.

Contributor guide

Open the contributing guide

Research direction

Start in resources/databases.ts at the startup scan loops and review how the reserved restore entry is skipped. Check the entry for CURRENT and MANIFEST-* before it is ignored, then warn or fail clearly when it looks like a database. Done means a conflicting restore directory is no longer silently skipped and normal startup scanning still works.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
databases
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.