chore(git-sync): remove dead Settings REST fields, warn on inert REMOTE_TEMPLATE, fix stale docstrings (review)

Dead code / doc-vs-code cleanup from review #4404:
- Drop the unused Settings.docmostApiUrl/Email/Password fields (the native
  in-process datasource never reads them; the engine only used docmostSpaceId).
  Removed from the type, buildSettings, and the 4 engine test suites that
  fabricated them.
- Warn ONCE at startup when GIT_SYNC_REMOTE_TEMPLATE is set — remote push is
  deferred (SPEC §7) so the value is currently inert; the operator now gets a
  log line instead of a silent no-op.
- Correct stale docstrings that claimed live-destructive code was 'FAKES only /
  NEXT increment / no live wiring' (applyPushActions runs LIVE via
  runCycle->orchestrator); that importPageMarkdown receives a 'self-contained
  file (meta+body)' (it receives the stripped body); and that the Yjs body merge
  is '2-way' (3-way runs end-to-end when the base is present).

No behavior change (except the new warning); build + git-sync smoke verified.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
claude-stand
2026-07-02 19:03:57 +03:00
parent bb5bb52244
commit 91d674fea6
9 changed files with 40 additions and 43 deletions
+9 -7
View File
@@ -70,14 +70,16 @@ export interface GitSyncClient {
// --- writes (push) --------------------------------------------------------
/**
* Merge a page's body from a self-contained markdown file (meta + body). The
* collab/Yjs write path (SPEC §2/§15.6) — never a raw jsonb overwrite.
* `applyPushActions` reads only an optional `updatedAt` off the result
* (via `extractUpdatedAt`, tolerant of extra fields).
* Merge a page's markdown BODY into the live page. `applyPushActions` passes
* the file's body with the frontmatter AND any git conflict markers already
* stripped — NOT the raw self-contained file — so `fullMarkdown` here is clean
* body text (the datasource re-parses defensively). The collab/Yjs write path
* (SPEC §2/§15.6) — never a raw jsonb overwrite. `applyPushActions` reads only
* an optional `updatedAt` off the result (via `extractUpdatedAt`).
*
* `baseMarkdown` is the last-synced version of the file (`refs/docmost/
* last-pushed`), the common ancestor for a THREE-WAY merge against the live
* doc so concurrent human edits survive (review #5). Optional/null -> 2-way.
* `baseMarkdown` is the last-synced body (from `refs/docmost/last-pushed`,
* likewise stripped), the common ancestor for a THREE-WAY merge against the
* live doc so concurrent human edits survive (review #5). Optional/null -> 2-way.
*/
importPageMarkdown(
pageId: string,
+10 -9
View File
@@ -486,9 +486,10 @@ export const LAST_PUSHED_REF = "refs/docmost/last-pushed";
export const DOCMOST_BRANCH = "docmost";
/**
* Injectable IO for `applyPushActions`. The real `main` (NEXT increment) wires
* these to the live client, `node:fs/promises`, and the vault git wrapper; this
* increment drives them only through FAKES in tests (no live destructive run).
* Injectable IO for `applyPushActions`. In production these are wired to the live
* client (the native GitmostDataSource), `node:fs/promises`, and the vault git
* wrapper — `applyPushActions` runs LIVE via runPush -> runCycle -> the
* orchestrator's driveCycle. Tests substitute FAKES through the same seam.
* - `client`: the create/update/delete/move/rename subset of `GitSyncClient`.
* - `readFile`/`writeFile`: read a changed file's body / write a file back
* (by vault-relative path; the applier does not resolve absolute paths so
@@ -645,13 +646,13 @@ export interface ApplyPushResult {
}
/**
* THIN IO applier for the COMMON push cases (create/update/delete). Exercised
* via FAKES only in this increment — there is no live wiring.
* THIN IO applier for the COMMON push cases (create/update/delete). Runs LIVE in
* production (via runPush -> runCycle -> orchestrator); tests drive it with FAKES.
*
* - UPDATE: read the file body, then `client.importPageMarkdown(pageId, body)`.
* This is the collab/Yjs write path (SPEC §2/§15.6) — NEVER a raw jsonb
* overwrite. The full self-contained markdown (meta + body) is sent as-is;
* `importPageMarkdown` parses the meta/body itself.
* overwrite. The file's markdown is sent as-is; `importPageMarkdown` parses
* the meta/body itself.
* - CREATE: derive title/spaceId/parentPageId from the file's current meta,
* `client.createPage(...)`, take the assigned pageId from the result, and
* write it BACK as the file's `gitmost_id` frontmatter (re-serialized via
@@ -1379,8 +1380,8 @@ function extractUpdatedAt(result: unknown): { updatedAt?: string } {
// Docmost writes, NO ref advance); an explicit `--apply` is the ONLY path that
// builds a client and mutates Docmost.
//
// Every external effect is injected (`PushDeps`) so the whole orchestration is
// driven by FAKES in tests — no live Docmost, git, fs, or network.
// Every external effect is injected (`PushDeps`): production wires the live
// Docmost client, git, and fs; tests substitute FAKES through the same seam.
/**
* The human ("local") git identity used for engine-made commits on `main` in the
-3
View File
@@ -8,9 +8,6 @@
*/
export type Settings = {
docmostApiUrl: string;
docmostEmail: string;
docmostPassword: string;
docmostSpaceId: string;
vaultPath: string;
gitRemote?: string;