fix(git-sync): address review — configurable poll, always-on loop-guard, cleanup
Comprehensive-review follow-ups (APPROVE WITH SUGGESTIONS; no critical issues):
- poll interval is now actually configurable: replaced the hardcoded
@Interval('git-sync-poll', 15000) with a dynamic SchedulerRegistry interval
registered in onModuleInit from getGitSyncPollIntervalMs() (cleared in
onModuleDestroy); /status and the real cadence now share one config source.
Boots logging 'poll interval registered (Nms)'.
- loop-guard now ALWAYS applies: the lastUpdatedSource==='git-sync' skip was
nested inside the !spaceId/!workspaceId branch, so structural self-writes
(CREATE/MOVE/RESTORE/SOFT_DELETE, which carry spaceId+workspaceId) bypassed it
and re-triggered cycles. Fetch the page row once, guard unconditionally, then
resolve space/workspace.
- remove the dead PAGE_CONTENT_UPDATED subscription (it's a BullMQ job, never an
EventEmitter event; body edits arrive via PAGE_UPDATED).
- fix the stale datasource comment (PageService DOES stamp 'git-sync' now).
- env getters: parseInt radix 10 + NaN/<=0 fallback for poll/debounce (+ max
deletes), with 6 new environment.service.spec tests.
tsc clean; jest 723 pass; live cycle re-verified post-refactor (ran, push
applied, unflagged 92-page space untouched).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -30,14 +30,12 @@ export interface GitSyncBindContext {
|
||||
}
|
||||
|
||||
/**
|
||||
* The git-sync provenance carried into PageService writes. PageService stamps
|
||||
* `lastUpdatedSource = 'agent'` only when `provenance.actor === 'agent'`; for any
|
||||
* other actor it leaves the column at its default ('user'). So create/move/rename
|
||||
* through PageService DO NOT yet stamp 'git-sync' on the page row — see the note
|
||||
* in the report. Body writes (writeBody, §3.3) DO stamp 'git-sync' because the
|
||||
* collab context's `actor: 'git-sync'` flows into PersistenceExtension. We pass a
|
||||
* 'git-sync' provenance anyway so that when PageService is extended to honor it,
|
||||
* the marker propagates without touching the datasource.
|
||||
* The git-sync provenance carried into PageService writes. PageService.create/
|
||||
* update/movePage honor this provenance and stamp `lastUpdatedSource = 'git-sync'`
|
||||
* on the page row when `provenance.actor === 'git-sync'`. Body writes (writeBody,
|
||||
* §3.3) likewise stamp 'git-sync' because the collab context's `actor: 'git-sync'`
|
||||
* flows into PersistenceExtension. So ALL git-sync structural + body writes mark
|
||||
* the row's source, which the listener's loop-guard reads to skip our own writes.
|
||||
*/
|
||||
const GIT_SYNC_PROVENANCE: AuthProvenanceData = {
|
||||
actor: 'git-sync',
|
||||
|
||||
Reference in New Issue
Block a user