ubiquitous-invention/packages/database/src/scripts/import-markdown-backlog.ts

54 lines
1.8 KiB
TypeScript
Raw Normal View History

/**
* One-shot markdown backlog import.
*
* Sibling of `watch-markdown-backlog.ts` but runs ONE sweep and exits. Use
* this when you want to bootstrap or refresh the DB from `plans/**` without
* leaving a long-running file watcher in place particularly important
* during agent sessions, because the watcher's upsert overwrites
* `markdown_backlog_items.status` from frontmatter on every sweep and would
* clobber `claim_task` / `complete_task` state.
*
* Until the DB markdown export side ships (see follow-up task), the
* convention is:
* - Edit `.md` files to author / refine intent.
* - Run this script when you want the changes in the DB.
* - Let agents drive runtime status via MCP tools BETWEEN syncs.
*
* Env:
* - DATABASE_URL (required)
* - MARKDOWN_BACKLOG_WORKSPACE_ID UUID of the target workspace (required)
* - MARKDOWN_BACKLOG_REPO_ROOT absolute path to repo root (default: cwd)
*/
import { resolve } from "node:path";
import { db } from "../client";
import { syncMarkdownBacklogScan } from "../markdown-backlog/sync";
const workspaceId = process.env.MARKDOWN_BACKLOG_WORKSPACE_ID?.trim();
const repoRootAbs = resolve(
process.env.MARKDOWN_BACKLOG_REPO_ROOT?.trim() || process.cwd(),
);
if (!workspaceId) {
console.error(
"[import-markdown-backlog] Set MARKDOWN_BACKLOG_WORKSPACE_ID to your workspace UUID.",
);
process.exit(1);
}
void (async () => {
try {
const result = await syncMarkdownBacklogScan(db, {
workspaceId,
repoRootAbs,
});
console.log(
`[import-markdown-backlog] done — scanned ${result.scannedFiles} files, upserted ${result.upsertedRows} rows, deleted ${result.deletedRows} stale rows. Repo root: ${repoRootAbs}`,
);
process.exit(0);
} catch (e) {
console.error("[import-markdown-backlog] sync failed:", e);
process.exit(1);
}
})();