@crowi/api 2.0.0-alpha.2 → 2.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/collab/attach.d.ts +34 -10
  2. package/dist/collab/attach.js +77 -1
  3. package/dist/collab/attach.js.map +1 -1
  4. package/dist/crowi/index.js +7 -6
  5. package/dist/crowi/index.js.map +1 -1
  6. package/dist/hono/handlers/page-collab.js +4 -0
  7. package/dist/hono/handlers/page-collab.js.map +1 -1
  8. package/dist/migration/cli-api.d.ts +8 -1
  9. package/dist/migration/cli-api.js +2 -0
  10. package/dist/migration/cli-api.js.map +1 -1
  11. package/dist/migration/migrations/code-mask.d.ts +76 -0
  12. package/dist/migration/migrations/code-mask.js +224 -0
  13. package/dist/migration/migrations/code-mask.js.map +1 -0
  14. package/dist/migration/migrations/files-url-to-attachments.d.ts +65 -1
  15. package/dist/migration/migrations/files-url-to-attachments.js +15 -1
  16. package/dist/migration/migrations/files-url-to-attachments.js.map +1 -1
  17. package/dist/migration/migrations/page-status-default.d.ts +31 -1
  18. package/dist/migration/migrations/relocate-reserved-api-paths.d.ts +37 -1
  19. package/dist/migration/migrations/relocate-reserved-api-paths.js +11 -3
  20. package/dist/migration/migrations/relocate-reserved-api-paths.js.map +1 -1
  21. package/dist/migration/migrations/revisions-schema-unify.d.ts +35 -1
  22. package/dist/migration/migrations/user-unique-prepare.d.ts +55 -1
  23. package/dist/migration/migrations/user-unique-prepare.js +5 -0
  24. package/dist/migration/migrations/user-unique-prepare.js.map +1 -1
  25. package/dist/migration/migrations/wikilink-format.d.ts +75 -1
  26. package/dist/migration/migrations/wikilink-format.js +18 -1
  27. package/dist/migration/migrations/wikilink-format.js.map +1 -1
  28. package/dist/migration/migrations/wikilink-html-recover.d.ts +76 -1
  29. package/dist/migration/migrations/wikilink-html-recover.js +33 -7
  30. package/dist/migration/migrations/wikilink-html-recover.js.map +1 -1
  31. package/dist/migration/registry.d.ts +8 -2
  32. package/dist/migration/registry.js +5 -1
  33. package/dist/migration/registry.js.map +1 -1
  34. package/dist/migration/run-boot-migrations.d.ts +4 -1
  35. package/dist/migration/run-boot-migrations.js +55 -23
  36. package/dist/migration/run-boot-migrations.js.map +1 -1
  37. package/dist/migration/runner.js +8 -1
  38. package/dist/migration/runner.js.map +1 -1
  39. package/dist/migration/types.d.ts +57 -5
  40. package/dist/migration/types.js.map +1 -1
  41. package/dist/models/page.d.ts +20 -3
  42. package/dist/models/page.js +60 -5
  43. package/dist/models/page.js.map +1 -1
  44. package/dist/plugin/plugin-manager.js +1 -1
  45. package/dist/renderer/registry.js +1 -1
  46. package/dist/util/ws-token.d.ts +13 -0
  47. package/dist/util/ws-token.js +43 -3
  48. package/dist/util/ws-token.js.map +1 -1
  49. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"user-unique-prepare.js","sourceRoot":"","sources":["../../../src/migration/migrations/user-unique-prepare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-unique-prepare.js","sourceRoot":"","sources":["../../../src/migration/migrations/user-unique-prepare.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { MigrationContext } from '../types';
1
2
  /**
2
3
  * RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
3
4
  *
@@ -72,6 +73,13 @@ export interface WikilinkOccurrence {
72
73
  * occurrence list so callers don't walk the regex twice. `body` is returned by
73
74
  * reference when nothing changed, letting callers cheap-skip via
74
75
  * `result.body === body`. Pure function — no side effects, no I/O.
76
+ *
77
+ * Code regions (fenced blocks + inline spans) are excluded: `</…>` written as a
78
+ * code example is left byte-identical, so it is never misdetected as a v1
79
+ * wikilink. We run the detection regex only on the non-`code` segments via the
80
+ * shared `rewriteOutsideCode` primitive, re-joining in original order
81
+ * (segment-and-rewrite — see `code-mask.ts` for why this beats a fill/restore
82
+ * scheme). Indented code blocks are an accepted divergence (still rewritten).
75
83
  */
76
84
  export declare function rewriteAndDetect(body: string): {
77
85
  body: string;
@@ -83,4 +91,70 @@ export declare function rewriteAndDetect(body: string): {
83
91
  * twice.
84
92
  */
85
93
  export declare function rewriteWikilinks(body: string): string;
86
- export declare const wikilinkFormat: import("../types").MigrationDefinition;
94
+ export declare const wikilinkFormat: {
95
+ id: string;
96
+ fromVersion: string;
97
+ toVersion: string;
98
+ layer: "preflight";
99
+ severity: "cosmetic";
100
+ description: string;
101
+ /**
102
+ * Pending verdict = at least one published page whose **current** revision
103
+ * body still contains a genuine legacy wikilink. Two constraints shape this:
104
+ *
105
+ * 1. The verdict uses the **full detection rule**, not the bare substring.
106
+ * A v1 wikilink (`</docs/api>`) and an HTML close tag (`</div>`) both
107
+ * start with `</`, and there is no index on `revision.body`, so an
108
+ * index-backed O(1) probe is impossible without a text index (which §9
109
+ * says the framework does not own). We therefore walk published pages and
110
+ * run `bodyHasRewritableWikilink` (the same `shouldRewriteWikilink` filter
111
+ * used by `detect`/stage) on each current-revision body. `</` is kept only
112
+ * as a cheap prefilter inside that helper to skip the regex on bodies that
113
+ * obviously cannot contain a legacy link.
114
+ *
115
+ * This is load-bearing for boot under preflight + `block` (the default):
116
+ * the substring alone would over-match `</div>` and report pending forever
117
+ * even after `migrate apply` — apply rewrites only genuine wikilinks, so
118
+ * HTML close tags survive and a substring verdict would never clear,
119
+ * deadlocking boot (§6.2: a false positive blocks every cluster boot, and
120
+ * here it would be unrecoverable). Using the full rule means once the
121
+ * migration rewrites the genuine wikilinks, a body left with only `</div>`
122
+ * reports false and boot clears.
123
+ * 2. We scan only each page's **current** revision, never the whole
124
+ * `revisions` collection. Historical revisions keep their original
125
+ * `</path>` text forever (revisions are immutable), so a collection-wide
126
+ * scan would report pending permanently after any wikilink page ever
127
+ * existed — even once every live page was rewritten. So we read only the
128
+ * body each page's editor seeds from.
129
+ *
130
+ * We short-circuit at the first page carrying a genuine wikilink, so this
131
+ * stops early rather than reading every page.
132
+ */
133
+ isPending: (ctx: MigrationContext) => Promise<boolean>;
134
+ /**
135
+ * Full scan for `plan`: count the pages that actually contain a rewritable
136
+ * occurrence (applying the full `shouldRewriteWikilink` rule, not just the
137
+ * substring pre-filter), plus the total occurrence count. Not called at boot.
138
+ */
139
+ detect: (ctx: MigrationContext) => Promise<{
140
+ summary: string;
141
+ counts: {
142
+ pages: number;
143
+ occurrences: number;
144
+ };
145
+ }>;
146
+ stages: {
147
+ name: string;
148
+ fn: (ctx: MigrationContext) => Promise<{
149
+ name: string;
150
+ transformed: number;
151
+ stats: {
152
+ wouldRewrite: number;
153
+ };
154
+ } | {
155
+ name: string;
156
+ transformed: number;
157
+ stats?: undefined;
158
+ }>;
159
+ }[];
160
+ };
@@ -9,6 +9,7 @@ const api_contract_1 = require("@crowi/api-contract");
9
9
  const page_1 = require("../../models/page");
10
10
  const helpers_1 = require("../helpers");
11
11
  const types_1 = require("../types");
12
+ const code_mask_1 = require("./code-mask");
12
13
  /**
13
14
  * RFC-0008 §10.2 step 4 / §4.3.1 — `wikilink-format` (preflight layer).
14
15
  *
@@ -101,10 +102,17 @@ function shouldRewriteWikilink(innerPath) {
101
102
  * occurrence list so callers don't walk the regex twice. `body` is returned by
102
103
  * reference when nothing changed, letting callers cheap-skip via
103
104
  * `result.body === body`. Pure function — no side effects, no I/O.
105
+ *
106
+ * Code regions (fenced blocks + inline spans) are excluded: `</…>` written as a
107
+ * code example is left byte-identical, so it is never misdetected as a v1
108
+ * wikilink. We run the detection regex only on the non-`code` segments via the
109
+ * shared `rewriteOutsideCode` primitive, re-joining in original order
110
+ * (segment-and-rewrite — see `code-mask.ts` for why this beats a fill/restore
111
+ * scheme). Indented code blocks are an accepted divergence (still rewritten).
104
112
  */
105
113
  function rewriteAndDetect(body) {
106
114
  const occurrences = [];
107
- const rewritten = body.replace(exports.WIKILINK_DETECTION_REGEX, (whole, innerPath, aliasWithPipe) => {
115
+ const rewriteSegment = (text) => text.replace(exports.WIKILINK_DETECTION_REGEX, (whole, innerPath, aliasWithPipe) => {
108
116
  if (!shouldRewriteWikilink(innerPath))
109
117
  return whole;
110
118
  occurrences.push({
@@ -115,6 +123,10 @@ function rewriteAndDetect(body) {
115
123
  const aliasSegment = aliasWithPipe ?? '';
116
124
  return `[[${innerPath}${aliasSegment}]]`;
117
125
  });
126
+ const rewritten = (0, code_mask_1.rewriteOutsideCode)(body, rewriteSegment);
127
+ // `rewriteOutsideCode` already returns `body` by reference when nothing
128
+ // changed; the `occurrences.length === 0` guard keeps that explicit so the
129
+ // detect / isPending cheap-skip (`result.body === body`) is unmistakable.
118
130
  return { body: occurrences.length === 0 ? body : rewritten, occurrences };
119
131
  }
120
132
  /**
@@ -168,6 +180,11 @@ exports.wikilinkFormat = (0, types_1.defineMigration)({
168
180
  fromVersion: '1.x',
169
181
  toVersion: '2.1',
170
182
  layer: 'preflight',
183
+ // Body display syntax only; no index / integrity impact. `isPending` scans
184
+ // the live corpus, so new v1-syntax content re-triggers it forever — the
185
+ // BUG 2 deadlock. Cosmetic so a pending verdict only warns, never refuses
186
+ // boot.
187
+ severity: 'cosmetic',
171
188
  description: 'Migrate wikilink syntax',
172
189
  /**
173
190
  * Pending verdict = at least one published page whose **current** revision
@@ -1 +1 @@
1
- {"version":3,"file":"wikilink-format.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wikilink-format.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-format.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { MigrationContext } from '../types';
1
2
  /**
2
3
  * `wikilink-html-recover` (preflight layer) — undo the `wikilink-format`
3
4
  * close-tag misfire.
@@ -83,11 +84,31 @@ export interface RecoverableOccurrence {
83
84
  * per-occurrence).
84
85
  */
85
86
  export declare function detectRecoverable(body: string): RecoverableOccurrence[];
87
+ /**
88
+ * `detectRecoverable` restricted to the non-code segments of `body`: a
89
+ * `[[/font]]` written as a code example (inside a fence or inline span) is NOT
90
+ * reported, so it never reaches the collision probe / pending verdict and is
91
+ * never reverted to `</font>`. This is the detect-side counterpart of routing
92
+ * the rewrite through `rewriteOutsideCode`; `rewrite` and `detect` are
93
+ * asymmetric (an async per-element collision probe sits between them), so they
94
+ * cannot share one `fn` — `detect` materialises occurrences here instead.
95
+ *
96
+ * `detectRecoverable` resets `lastIndex` at entry, so calling it once per
97
+ * non-code segment is safe (no cross-segment state). AD-1 (a stray backtick
98
+ * straddling `[[/font]]` so the token is absorbed into an inline-code span) is
99
+ * documented in the spec — an accepted false-negative.
100
+ */
101
+ export declare function detectRecoverableOutsideCode(body: string): RecoverableOccurrence[];
86
102
  /**
87
103
  * Rewrite `body`, reverting `[[/<x>]]` → `</x>` for every recoverable element.
88
104
  * Elements in `skip` (those that collide with a live same-named page) are left
89
105
  * untouched. Returns the input by reference when nothing changed so callers can
90
106
  * cheap-skip.
107
+ *
108
+ * Code regions (fenced blocks + inline spans) are excluded via the shared
109
+ * `rewriteOutsideCode` primitive: a `[[/font]]` written as a code example is
110
+ * left byte-identical (never reverted) so a migration-doc example cannot be
111
+ * corrupted. The detect side mirrors this via `detectRecoverableOutsideCode`.
91
112
  */
92
113
  export declare function rewriteBody(body: string, skip: ReadonlySet<string>): string;
93
114
  /**
@@ -113,4 +134,58 @@ export interface CollisionRecord {
113
134
  * carried no path.
114
135
  */
115
136
  export declare function formatCollisions(collisions: readonly CollisionRecord[]): string;
116
- export declare const wikilinkHtmlRecover: import("../types").MigrationDefinition;
137
+ export declare const wikilinkHtmlRecover: {
138
+ id: string;
139
+ fromVersion: string;
140
+ toVersion: string;
141
+ layer: "preflight";
142
+ severity: "cosmetic";
143
+ order: number;
144
+ description: string;
145
+ /**
146
+ * Pending iff at least one published page's current revision body still
147
+ * carries a revertible `[[/<deprecated-tag>]]` whose element has no live
148
+ * same-named page. There is no index on `revision.body`, so this walks
149
+ * published pages (projecting `body`) and short-circuits at the first
150
+ * revertible occurrence.
151
+ *
152
+ * Colliding occurrences (`[[/font]]` with a live `/font` page) do NOT count
153
+ * as pending: this migration will never revert them, so reporting pending
154
+ * for them would block boot forever under preflight + `block`.
155
+ */
156
+ isPending: (ctx: MigrationContext) => Promise<false>;
157
+ /**
158
+ * Full scan for `plan`: report how many pages / occurrences would be
159
+ * reverted plus, separately, the deprecated-tag names that were left alone
160
+ * because a live same-named page exists (the operator must resolve those
161
+ * by hand). Not called at boot.
162
+ */
163
+ detect: (ctx: MigrationContext) => Promise<{
164
+ summary: string;
165
+ counts: {
166
+ pages: number;
167
+ occurrences: number;
168
+ collisions: number;
169
+ };
170
+ }>;
171
+ stages: {
172
+ name: string;
173
+ fn: (ctx: MigrationContext) => Promise<{
174
+ name: string;
175
+ transformed: number;
176
+ stats: {
177
+ wouldRevert: number;
178
+ occurrences: number;
179
+ collisions: number;
180
+ };
181
+ } | {
182
+ name: string;
183
+ transformed: number;
184
+ stats: {
185
+ collisions: number;
186
+ wouldRevert?: undefined;
187
+ occurrences?: undefined;
188
+ };
189
+ }>;
190
+ }[];
191
+ };
@@ -3,10 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.wikilinkHtmlRecover = exports.WIKILINK_HTML_CANDIDATE_REGEX = exports.RECOVERABLE_DEPRECATED_TAGS = void 0;
4
4
  exports.shouldRecoverSegment = shouldRecoverSegment;
5
5
  exports.detectRecoverable = detectRecoverable;
6
+ exports.detectRecoverableOutsideCode = detectRecoverableOutsideCode;
6
7
  exports.rewriteBody = rewriteBody;
7
8
  exports.formatCollisions = formatCollisions;
8
9
  const page_1 = require("../../models/page");
9
10
  const types_1 = require("../types");
11
+ const code_mask_1 = require("./code-mask");
10
12
  const published_current_revision_1 = require("./published-current-revision");
11
13
  const helpers_1 = require("../helpers");
12
14
  /**
@@ -103,23 +105,44 @@ function detectRecoverable(body) {
103
105
  }
104
106
  return occurrences;
105
107
  }
108
+ /**
109
+ * `detectRecoverable` restricted to the non-code segments of `body`: a
110
+ * `[[/font]]` written as a code example (inside a fence or inline span) is NOT
111
+ * reported, so it never reaches the collision probe / pending verdict and is
112
+ * never reverted to `</font>`. This is the detect-side counterpart of routing
113
+ * the rewrite through `rewriteOutsideCode`; `rewrite` and `detect` are
114
+ * asymmetric (an async per-element collision probe sits between them), so they
115
+ * cannot share one `fn` — `detect` materialises occurrences here instead.
116
+ *
117
+ * `detectRecoverable` resets `lastIndex` at entry, so calling it once per
118
+ * non-code segment is safe (no cross-segment state). AD-1 (a stray backtick
119
+ * straddling `[[/font]]` so the token is absorbed into an inline-code span) is
120
+ * documented in the spec — an accepted false-negative.
121
+ */
122
+ function detectRecoverableOutsideCode(body) {
123
+ return (0, code_mask_1.splitCodeSegments)(body)
124
+ .filter((s) => !s.code)
125
+ .flatMap((s) => detectRecoverable(s.text));
126
+ }
106
127
  /**
107
128
  * Rewrite `body`, reverting `[[/<x>]]` → `</x>` for every recoverable element.
108
129
  * Elements in `skip` (those that collide with a live same-named page) are left
109
130
  * untouched. Returns the input by reference when nothing changed so callers can
110
131
  * cheap-skip.
132
+ *
133
+ * Code regions (fenced blocks + inline spans) are excluded via the shared
134
+ * `rewriteOutsideCode` primitive: a `[[/font]]` written as a code example is
135
+ * left byte-identical (never reverted) so a migration-doc example cannot be
136
+ * corrupted. The detect side mirrors this via `detectRecoverableOutsideCode`.
111
137
  */
112
138
  function rewriteBody(body, skip) {
113
- let changed = false;
114
- const rewritten = body.replace(exports.WIKILINK_HTML_CANDIDATE_REGEX, (whole, segment) => {
139
+ return (0, code_mask_1.rewriteOutsideCode)(body, (text) => text.replace(exports.WIKILINK_HTML_CANDIDATE_REGEX, (whole, segment) => {
115
140
  if (!shouldRecoverSegment(segment))
116
141
  return whole;
117
142
  if (skip.has(segment))
118
143
  return whole;
119
- changed = true;
120
144
  return `</${segment}>`;
121
- });
122
- return changed ? rewritten : body;
145
+ }));
123
146
  }
124
147
  /**
125
148
  * A memoised live-content `/<element>` existence probe. The probe restricts to
@@ -165,7 +188,7 @@ async function scan(ctx) {
165
188
  if (typeof body !== 'string' || !body.includes('[[/'))
166
189
  return;
167
190
  const pagePath = typeof revision.path === 'string' ? revision.path : undefined;
168
- const occurrences = detectRecoverable(body);
191
+ const occurrences = detectRecoverableOutsideCode(body);
169
192
  if (occurrences.length === 0)
170
193
  return;
171
194
  // Partition this page's elements into collide-skip vs revertible. Each
@@ -225,6 +248,9 @@ exports.wikilinkHtmlRecover = (0, types_1.defineMigration)({
225
248
  fromVersion: '2.1',
226
249
  toVersion: '2.1',
227
250
  layer: 'preflight',
251
+ // HTML close-tag repair only; no index impact. `isPending` walks the live
252
+ // corpus → re-triggers on new content. Cosmetic (see `severity`).
253
+ severity: 'cosmetic',
228
254
  // `fromVersion: '2.1'` already sequences this after `wikilink-format`
229
255
  // (`fromVersion: '1.x'`) — the registry orders by `fromVersion` FIRST
230
256
  // (registry.ts compareMigrations), so the misfire's source is registered
@@ -251,7 +277,7 @@ exports.wikilinkHtmlRecover = (0, types_1.defineMigration)({
251
277
  const body = revision.body;
252
278
  if (typeof body !== 'string' || !body.includes('[[/'))
253
279
  return;
254
- for (const occ of detectRecoverable(body)) {
280
+ for (const occ of detectRecoverableOutsideCode(body)) {
255
281
  if (!(await pageExists(occ.element))) {
256
282
  pending = true;
257
283
  return published_current_revision_1.STOP;
@@ -1 +1 @@
1
- {"version":3,"file":"wikilink-html-recover.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-html-recover.ts"],"names":[],"mappings":";;;AA+EA,oDAGC;AAgBD,8CAYC;AAQD,kCASC;AAuHD,4CAeC;AArQD,0CAAmE;AAEnE,oCAA2C;AAC3C,6EAAqF;AACrF,wCAAiD;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH;;;;;;GAMG;AACU,QAAA,2BAA2B,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1H;;;;;;GAMG;AACU,QAAA,6BAA6B,GAAG,wBAAwB,CAAC;AAEtE;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,mCAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAUD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,qCAA6B,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,qCAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,GAAG,qCAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,IAAY,EAAE,IAAyB;IACjE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qCAA6B,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QACvF,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,KAAK,OAAO,GAAG,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpC,CAAC;AAoCD;;;;;;;;;;;;;;GAcG;AACH,SAAS,mBAAmB,CAAC,IAAe;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5I,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,IAAI,CAAC,GAAqB;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAE9B,MAAM,IAAA,4DAA+B,EAAC,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACrG,MAAM,IAAI,GAAI,QAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9D,MAAM,QAAQ,GAAG,OAAQ,QAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,QAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7H,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,uEAAuE;QACvE,wEAAwE;QACxE,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACxF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,YAAY,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO;QAE/B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/B,qBAAqB,IAAI,YAAY,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,UAAsC;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;SAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACjE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAEY,QAAA,mBAAmB,GAAG,IAAA,uBAAe,EAAC;IACjD,EAAE,EAAE,uBAAuB;IAC3B,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,WAAW;IAClB,sEAAsE;IACtE,sEAAsE;IACtE,yEAAyE;IACzE,uEAAuE;IACvE,6CAA6C;IAC7C,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,yGAAyG;IAEtH;;;;;;;;;;OAUG;IACH,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAA,4DAA+B,EAAC,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxF,MAAM,IAAI,GAAI,QAA+B,CAAC,IAAI,CAAC;YACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;YAC9D,KAAK,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACrC,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,iCAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,gDAAgD,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtJ,OAAO;YACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,iBAAiB,qBAAqB,iCAAiC,aAAa,EAAE;YAC7G,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,WAAW,EAAE,qBAAqB;gBAClC,UAAU,EAAE,SAAS,CAAC,MAAM;aAC7B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,EAAE;QACN;YACE,IAAI,EAAE,yBAAyB;YAC/B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3E,OAAO;wBACL,IAAI,EAAE,yBAAyB;wBAC/B,WAAW,EAAE,CAAC;wBACd,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,qBAAqB,EAAE,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE;qBAC5G,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAmB,EAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;gBAC7E,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEnC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;oBACxB,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC/E,QAAQ,IAAI,CAAC,CAAC;oBACd,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC;gBAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sDAAsD,QAAQ,yDAAyD,CAAC,CAAC;gBAC3I,CAAC;gBACD,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC/B,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,+BAA+B,iBAAiB,CAAC,IAAI,2DAA2D,gBAAgB,CAC9H,UAAU,CACX,+CAA+C,CACjD,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;YACnH,CAAC;SACF;KACF;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"wikilink-html-recover.js","sourceRoot":"","sources":["../../../src/migration/migrations/wikilink-html-recover.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,14 @@ export declare class MigrationRegistry {
4
4
  constructor(defs: MigrationDefinition[]);
5
5
  /** All migrations in version-range + `order` sequence. */
6
6
  all(): readonly MigrationDefinition[];
7
- /** Migrations of a given layer, in order. */
8
- byLayer(layer: MigrationLayer): readonly MigrationDefinition[];
7
+ /**
8
+ * Migrations of a given layer, in order. The return type narrows by the
9
+ * `layer` literal so `byLayer('preflight')` yields `severity`-bearing
10
+ * definitions (and `byLayer('boot')` ones without).
11
+ */
12
+ byLayer<L extends MigrationLayer>(layer: L): readonly Extract<MigrationDefinition, {
13
+ layer: L;
14
+ }>[];
9
15
  /** Look up a migration by id, or undefined. */
10
16
  get(id: string): MigrationDefinition | undefined;
11
17
  /** The latest reachable target version across all registered migrations. */
@@ -73,7 +73,11 @@ class MigrationRegistry {
73
73
  all() {
74
74
  return this.migrations;
75
75
  }
76
- /** Migrations of a given layer, in order. */
76
+ /**
77
+ * Migrations of a given layer, in order. The return type narrows by the
78
+ * `layer` literal so `byLayer('preflight')` yields `severity`-bearing
79
+ * definitions (and `byLayer('boot')` ones without).
80
+ */
77
81
  byLayer(layer) {
78
82
  return this.migrations.filter((m) => m.layer === layer);
79
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migration/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/migration/registry.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,10 @@ export interface RunBootMigrationsOptions {
25
25
  }
26
26
  export interface RunBootMigrationsResult {
27
27
  appliedBootIds: string[];
28
- pendingPreflightIds: string[];
28
+ /** Pending `severity:'blocking'` preflight migrations (gate boot under `block`). */
29
+ pendingBlockingIds: string[];
30
+ /** Pending `severity:'cosmetic'` preflight migrations (never gate boot). */
31
+ pendingCosmeticIds: string[];
29
32
  policy: PreflightUnappliedPolicy;
30
33
  }
31
34
  export declare function runBootMigrations(crowi: Crowi, options?: RunBootMigrationsOptions): Promise<RunBootMigrationsResult>;
@@ -13,21 +13,25 @@ const runner_1 = require("./runner");
13
13
  * 1. Apply every `layer:'boot'` migration that `isPending` flags, in
14
14
  * version-range + `order` sequence, appending each result to the
15
15
  * `migrationApplications` audit log.
16
- * 2. Probe every `layer:'preflight'` migration with `isPending` (cheap)
17
- * and, when any is unapplied, either refuse boot (`block`, default) or
18
- * log loudly and continue (`warn`) — per `preflightUnappliedPolicy`.
16
+ * 2. Probe every `layer:'preflight'` migration with `isPending` (cheap) and
17
+ * split the pending ones by `severity` (§4.2.7 amendment / §12.7):
18
+ * - `cosmetic` pending → always warn-and-continue (policy ignored);
19
+ * - `blocking` pending → refuse boot under `block` (the default), or
20
+ * warn-and-continue under `warn` — per `preflightUnappliedPolicy`.
19
21
  *
20
- * `block` is the safe default (§4.2.7): if a preflight migration hasn't run
21
- * before v2 boot, *every replica fail-fasts* with a clear error before
22
- * autoIndex would otherwise hit E11000 (§9) on not-yet-deduped data. The
23
- * operator then runs `crowi-admin migrate apply` once and brings the cluster
24
- * up.
25
- *
26
- * Phase 1 ships with an empty registry, so this is a fast no-op; the wiring
27
- * is what matters. Phase 2 adds `page-status-default` as the first boot
28
- * migration.
22
+ * `block` is the safe default (§4.2.7) for `blocking` migrations: if
23
+ * `user-unique-prepare` hasn't run before v2 boot, *every replica fail-fasts*
24
+ * with a clear error before autoIndex would otherwise hit E11000 (§9) on
25
+ * not-yet-deduped data. The operator then runs `crowi-admin migrate apply`
26
+ * once and brings the cluster up. A pending `cosmetic` migration never blocks
27
+ * boot: its `isPending` re-scans the live corpus, so new content could keep it
28
+ * pending forever and a uniform block would deadlock the cluster (BUG 2).
29
29
  */
30
30
  const POLICY_ENV_VAR = 'MIGRATION_PREFLIGHT_UNAPPLIED_POLICY';
31
+ /** Compile-time exhaustiveness guard (throws if a future `severity` reaches it). */
32
+ function assertNever(value) {
33
+ throw new Error(`[crowi:migration] unhandled migration severity: ${String(value)}`);
34
+ }
31
35
  /** Error thrown when boot is refused under the `block` policy. */
32
36
  class PreflightBlockedError extends Error {
33
37
  pendingIds;
@@ -74,22 +78,50 @@ async function runBootMigrations(crowi, options = {}) {
74
78
  appliedBootIds.push(def.id);
75
79
  }
76
80
  }
77
- // ── 2. Probe preflight migrations (cheap isPending) ──
78
- const pendingPreflightIds = [];
81
+ // ── 2. Probe preflight migrations (cheap isPending), split by severity ──
82
+ //
83
+ // Every preflight migration is still probed (RFC-0008 §6.1/§6.2: inspection
84
+ // = source of truth). What changed is only the *consequence* of a pending
85
+ // verdict, decided per-migration by `severity`:
86
+ // - `cosmetic` pending → always warn-and-continue (global knob ignored);
87
+ // - `blocking` pending → refuse boot under `block`, warn-and-continue under
88
+ // `warn` (the existing emergency override).
89
+ const pendingBlockingIds = [];
90
+ const pendingCosmeticIds = [];
79
91
  for (const def of registry.byLayer('preflight')) {
80
- if (await runner.isPending(def)) {
81
- pendingPreflightIds.push(def.id);
92
+ if (!(await runner.isPending(def)))
93
+ continue;
94
+ switch (def.severity) {
95
+ case 'blocking':
96
+ pendingBlockingIds.push(def.id);
97
+ break;
98
+ case 'cosmetic':
99
+ pendingCosmeticIds.push(def.id);
100
+ break;
101
+ default:
102
+ // Exhaustive: a new severity must consciously pick a boot-gate side
103
+ // rather than silently fall through to non-blocking (fail-open).
104
+ assertNever(def.severity);
82
105
  }
83
106
  }
84
- if (pendingPreflightIds.length > 0) {
107
+ // Cosmetic pending always warns and continues, regardless of policy. Emitted
108
+ // before the blocking decision so it is observable even on the block-throw
109
+ // path (the result object is not returned then). A distinct message per
110
+ // severity keeps operator grep / alert rules simple.
111
+ if (pendingCosmeticIds.length > 0) {
112
+ console.warn(`[crowi:migration] WARNING: ${pendingCosmeticIds.length} cosmetic preflight migration(s) unapplied ` +
113
+ `[${pendingCosmeticIds.join(', ')}] — body display only; boot continues.`);
114
+ }
115
+ if (pendingBlockingIds.length > 0) {
85
116
  if (policy === 'block') {
86
- // Whole-cluster fail-fast (§4.2.7).
87
- throw new PreflightBlockedError(pendingPreflightIds);
117
+ // Whole-cluster fail-fast for blocking migrations only (§4.2.7). The
118
+ // result object (and its severity split) is not returned on this path.
119
+ throw new PreflightBlockedError(pendingBlockingIds);
88
120
  }
89
- // warn: operator explicitly accepts the risk.
90
- console.warn(`[crowi:migration] WARNING: ${pendingPreflightIds.length} preflight migration(s) unapplied [${pendingPreflightIds.join(', ')}] ` +
91
- `but ${POLICY_ENV_VAR}=warncontinuing boot. Data may not be in the target shape; autoIndex may fail with E11000.`);
121
+ // warn: operator explicitly accepts the data-integrity risk.
122
+ console.warn(`[crowi:migration] WARNING: ${pendingBlockingIds.length} preflight migration(s) unapplied ` +
123
+ `[${pendingBlockingIds.join(', ')}]data-integrity risk; autoIndex may fail with E11000.`);
92
124
  }
93
- return { appliedBootIds, pendingPreflightIds, policy };
125
+ return { appliedBootIds, pendingBlockingIds, pendingCosmeticIds, policy };
94
126
  }
95
127
  //# sourceMappingURL=run-boot-migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-boot-migrations.js","sourceRoot":"","sources":["../../src/migration/run-boot-migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-boot-migrations.js","sourceRoot":"","sources":["../../src/migration/run-boot-migrations.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,14 @@ function buildContext(crowi, opts) {
44
44
  // next onLoadDocument rebuilds the Y.Doc from the new body (§4.3.1).
45
45
  const actingUserId = options?.userId ?? page.lastUpdateUser?.toString?.() ?? page.creator?.toString?.();
46
46
  const user = actingUserId ? await User.findById(actingUserId).exec() : null;
47
- await Page.updatePage(page, newBody, user, {});
47
+ // preserveTimestamps: a body-rewrite migration is a non-destructive,
48
+ // forward-only fixup. It must NOT bump the page's `updatedAt` (which would
49
+ // reorder recently-updated lists) nor overwrite `lastUpdateUser` with the
50
+ // migration bot. Preserving in place (rather than bumping then restoring)
51
+ // also keeps the search index consistent: the `update` event fires with the
52
+ // original `updatedAt`, so `indexPageInSearch` indexes the original value
53
+ // and never diverges from Mongo (RFC-0008 follow-up — see the migration spec).
54
+ await Page.updatePage(page, newBody, user, { preserveTimestamps: true });
48
55
  };
49
56
  const invalidateYjsPersistence = async (pageIds) => {
50
57
  if (opts.dryRun || pageIds.length === 0)