Repository navigation
Commit 702b44f
Part of #25522
Clause-②: no
Metadata-protocol: none
Ruling-ref: 6348891160
Cut 2 of the `packages/objectql/src/engine.ts` split (#24586 ruling A,
recorded in `6270097840`). The claim is `6383544450`. Three `ObjectQL`
method bodies move unedited into a new module,
`packages/objectql/src/engine-datasource-routing.ts`: `getDriver`,
`resolveDatasourceFromMapping` and `matchPattern`, all private. #25522
stays open for the later cuts.
Branch `claude/issue-25522-objectql-engine-cut-2`, cut from
`origin/main` at `cc10e74fe`. Since then `main` has moved two commits
(#25621, #25620), and neither touches `packages/objectql/**`. The branch
has not been merged forward; CI builds the merge ref.
**Serial with the file's in-flight PRs.** At start, none of the 14 open
PRs touched `packages/objectql/**`. I fetched each head and diffed it
against its merge-base. Just before this PR was opened I measured again:
none of the 16 open PRs touches it (file lists of #25633, #25632 and the
moved #25626 read; the other 13 unchanged).
## Which part of Datasource routing moves, and why not all of it
The dispatch proposed the whole **Datasource routing** row less
`setDatasourceMapping` and the two public statics. I measured first, and
it moves less than that:
- **`resolveDatasourceBinding` stays.** Two `packages/spec` liveness
ledgers cite it by symbol as their evidence:
`packages/spec/liveness/object.json` (`object.datasource`, limb 1) and
`packages/spec/liveness/manifest.json` (`manifest.defaultDatasource`,
limb 4), both as
`packages/objectql/src/engine.ts#resolveDatasourceBinding`. So does
`docs/adr/0139-…md`. Card ask 3 wants every path reader migrated in the
same PR. This dispatch forbids `packages/spec/**` and `docs/adr/**`.
Moving the body would leave both ledger gates green on the stub's name
while the code they quote sat in another file, so it stays where they
point.
- **`resolveEffectiveDatasource`, `resolveMappedDatasource` and
`isSystemLedgerObject` stay.** Their bodies are 2, 1 and 4 lines, and
each stub's host literal would be longer than the body it replaces. This
follows the same reasoning cut 1 used for `setI18nService`.
- **Test doubles (assumption A1): no double loses its calls.** Across
the repo's tests, the members of this area are doubled four ways:
- `vi.spyOn(engine as any, 'getDriver')` in
`packages/objectql/src/engine-judge-filter.test.ts`, on a real engine.
Every caller left in `engine.ts` still calls `this.getDriver(…)`, and no
moved body calls `getDriver`, so the spy sees the same calls.
- Instance assignments of `resolveEffectiveDatasource`, in
`plugin-audit/src/comment-thread-leaf.test.ts` and
`service-analytics/src/__tests__/effective-datasource-probe.test.ts`.
That method did not move.
- Object-literal fakes that carry `getDriver` or
`resolveEffectiveDatasource` (plugin-security, plugin-auth,
service-analytics, service-storage, metadata-protocol). They replace the
whole engine, so they never reach `ObjectQL`.
- Direct calls `(engine as any).getDriver(name)`. They reach the stub,
which keeps its name.
- The moved bodies reach `resolveDatasourceBinding` and `matchPattern`
through late-bound closures, so a double set on the instance is still
the one they call.
## The shape (#23050 shape B, as cut 1 and #25222, #25223, #25224 and
#25467 apply it)
- The class keeps each method with its name, signature, docblock and
position. Each body is now one host literal plus `fn.call(host, …)`,
marked `[#25522 cut 2]`. `matchPattern` reads no member, so it is called
directly.
- `DatasourceRoutingHost` is new. It types each member as the class
member itself (`ObjectQL['drivers']`,
`ObjectQL['resolveDatasourceBinding']`, …). Each moved function types
its `this` as the `Pick` of the host over exactly the members its body
reads, and each stub annotates its literal as the `ThisParameterType` of
the moved function. There is no cast, and no member becomes public or
protected.
- **Fields go as getters:** `drivers`, `logger`,
`unavailableDatasources` and `datasourceMapping`. Each read happens when
the body makes it, so a rule array replaced by `setDatasourceMapping`,
or a driver registered later, is seen as before.
- **Imports.** The module imports `ObjectQL` as a type only, so there is
no module cycle at run time. It imports `IDataDriver` as a type from
`@objectstack/core` and `DatasourceUnavailableError` from
`./driver-connect-errors.js`, the specifiers `engine.ts` uses. No moved
body reads a static. `engine.ts` gains one import and keeps every import
it had. `DatasourceUnavailableError` stays imported there because a
`{@link DatasourceUnavailableError}` in a docblock that stays still
names it (`tsc` and eslint are clean). Nothing re-exports the module.
## The published `.d.ts` does not change
This is the series bar, ruling `6348891160`. Base was a `turbo run build
--filter='@objectstack/objectql...'` at `cc10e74fe` (14/14 tasks). Head
was `pnpm --filter @objectstack/objectql build` at `c70b6b5d` against
the same dependency tree. The head `dist/index.mjs` carries
`readUnavailableDatasources` twice, so the head build is the one
compared.
All six declaration files are **byte-identical**, and the raw diff of
each is 0 lines. The util chunk name, `util-ByiLm3B6`, is the same at
both ends.
| file | raw sha256, base = head | normalised (ruling, double-quoted),
base = head | normalised (single-quoted spelling), base = head |
|---|---|---|---|
| `index.d.ts` |
`9ca22071717e3f761198115fa54a143df4151a52950d826a10677420dcad16ae` |
`9ca22071717e…` | `c15106196eb2…` |
| `index.d.mts` |
`69dd1cfe3875024f434b2d7defce771ebc8c7e48a05be7c946fa6ecdbd912b40` |
`69dd1cfe3875…` | `a2d6d7b241e8…` |
| `core.d.ts` |
`d27b72bde2eec9a47c7dd3c104976321533cf397452ca9f84491a455ec28e73b` |
`d27b72bde2ee…` | `d27b72bde2ee…` |
| `core.d.mts` |
`5a0cca505296b678b31c742c285e028fe434f5467bb8d27e052e470ce0e09652` |
`5a0cca505296…` | `5a0cca505296…` |
| `util-ByiLm3B6.d.ts` and `.d.mts` |
`1742a9cb029654d1ca4e8e392e98001eec85963987f516b1b76f672ecd08e5a9` |
`1742a9cb0296…` | `bffd1b630dab…` |
- The ruling's normaliser was run verbatim (double-quoted unions only).
This package prints single-quoted literals, so on these files it changes
nothing and normalised = raw. A second column applies the same single
class (sorting the members of one string-literal union) spelled with a
single quote. That column also matches at base and head. This cut does
not depend on it, because the raw bytes are identical.
- **Positive control**, on a copy of the head `util-ByiLm3B6.d.ts`: line
8412 `private matchPattern;` made public (`matchPattern;`, one line
changed) gives raw = ruled-normalised
`e1ebae28ec516d6480a51cf8551a7eeb62498e24d2409140e0199dcf4ecc34be`,
which differs from `1742a9cb…`. The single-quote normalisation gives
`f715c98bfa40…`, which differs from `bffd1b630dab…`.
- **Export lists**, loaded at run time from the built bundles (ESM
`import()` and CJS `require`), are identical at base and head. `.` has
182 exports under ESM and 182 under CJS; `./core` has 54 and 54. The
sorted lists hash
`881616cc179189098182bd6b8a95701d9922f9677b786bc12e2d31c1adb0adaa` and
`393e806906e876c2e020aa96617d54050a35ae63cd483b67d8e968b7b5390f49` at
both ends.
No changeset: `skip-changeset`, per ruling `6348891160` item 4.
## Proof of move-only
- **Bodies, by AST token** (recursive `getChildren` leaves). For each
moved function, the parameters (without the added `this`), the return
type and the body have the same token sequence as the base method:
`getDriver` 206, `resolveDatasourceFromMapping` 168, `matchPattern` 54.
That is 428 tokens with 0 differences. Each body line is the base line
less two leading spaces (56, 34 and 7 lines). **Negative control:**
changing one token in `resolveDatasourceFromMapping` makes the check
report DIFFER.
- **Class side.** The class has 317 members at base and at head. The 314
that did not move are byte-identical to base. The 3 stubs keep their
docblocks and signatures byte-identical.
- **Top level of `engine.ts`.** All 234 base statements outside the
class are byte-identical at head. The one new statement is the import of
the new module.
- **Size.** +208 / −97 over 2 files, under the 3,000-line manual-merge
line. `engine.ts` goes from 23,881 to 23,807 lines.
`engine-datasource-routing.ts` has 185 lines, most of them the module
header and the host docblock.
- **The tests reach the moved bodies.** These were one-off mutations
written with `scripts/ablation-replace.mjs`. Each restored to the HEAD
blob `f6252c183b12` with `git diff HEAD` empty, and no test file was
kept:
- `matchPattern`'s `.replace(/\*/g, '.*')` changed to `'Z'`:
`datasource-mapping.test.ts` goes 2 failed / 8 passed.
- `getDriver`'s `unavailableDatasources.get(…)` read, which goes through
the getter, replaced by `undefined`: `datasource-unavailable.test.ts`
goes 4 failed. The same mutation leaves `datasource-mapping.test.ts`
green, which is noted under Acceptance notes.
## Readers of the moved lines
- **ADR anchors (assumption A2).**
`scripts/adr-anchors/packages__objectql__src__engine.ts.json`'s one
paragraph is about the transaction seam. Its routing clause
("`SYSTEM_LEDGER_LIFECYCLE_CLASSES`, the same tuple ADR-0057 §3.6
routing reads") describes `resolveDatasourceBinding` step 3 and
`isSystemLedgerObject`, and both stay. No moved body reads the tuple or
cites an ADR; the ADR-0057 §3.6 mention in `getDriver`'s docblock stays
on the stub. So the new module owes no anchor entry, and none is added.
`check:adr-anchors`: 85 anchored files at both ends; 1,871
decision-letter citations on the anchored surface at both ends; 52,481
citations across 6,594 files at both ends.
- **Liveness ledgers.** `pnpm --filter @objectstack/spec check:liveness`
exits 0 at head. 982 `path#symbol` pointers each name a symbol the cited
file contains. Key-mention anchoring asks 753 pairs: 752 anchored and 1
exempt, the same as at base. `engine.ts` still names `defaultDatasource`
outside the moved bodies.
- **Other path readers.** `docs/adr/0062-…md` mentions `engine.ts`
(`getDriver`/`registerDriver` routing) in prose, and both methods are
still in `engine.ts`. `check-adr-symbol-anchors`: 2,384 anchors resolve
at head. `check-platform-checklist --changed-from origin/main`: 1
anchored file in the change set, 14 anchors judged, 0 lost.
## Seam table (fresh, `origin/main` `cc10e74fe`, 2026-10-24)
`engine.ts` is 23,881 lines. 8,270 of them (34.6%) come from the last 30
days (`git blame --since=2026-09-24T11:00Z`, history covering 2026-09-15
onward). 126 commits touched it in 30 days, and 35 in 7. The file has
the module preamble (lines 1–5015), `class ObjectQL` (5016–23206, 317
members) and a trailer. Sections are contiguous member ranges, docblocks
included, with the same names and first members as cut 1's table.
The columns:
- **methods** counts method declarations and the constructor, without
accessors. That is why "Status and registry accessor" reads 1 here and
read 2 in cut 1's table.
- **inferred public** lists public methods with an inferred return type;
these stay.
- **U** counts `this.FIELD.delete/insert/update(` sites.
- **private statics** lists statics that are not public; these stay.
| range | section | first … last member | lines | 30-day lines | methods
| inferred public | U | private statics |
|---|---|---|---|---|---|---|---|---|
| 5016-5242 | Instance state and constructor | `txStore` … `Constructor`
| 227 | 50 | 1 (1 public) | - | 0 | - |
| 5243-5265 | Status and registry accessor | `getStatus` … `registry` |
23 | 0 | 1 (1 public) | getStatus | 0 | - |
| 5266-5609 | Hook and function registry | `registerHook` …
`triggerHooks` | 344 | 6 | 16 (16 public) | registerHook, triggerHooks |
1 | - |
| 5610-6090 | Hook dispatch internals | `hasHooksFor` …
`assertBulkPerRowHookBudget` | 481 | 53 | 7 (0 public) | - | 0 | - |
| 6091-6247 | Action registry and activation | `registerAction` …
`setActionActive` | 157 | 19 | 10 (10 public) | - | 1 | - |
| 6248-6529 | Registered resolvers and write-gate probes |
`_heldFileResolver` … `registerInsertRecomputeListener` | 282 | 257 | 6
(6 public) | - | 0 | - |
| 6530-7283 | Readable-ids security and permission/formula resolution |
`readableIdsSecurityReported` … `resolveDefaultPermissions` | 754 | 754
| 15 (2 public) | - | 0 | - |
| 7284-7390 | Authz invalidation and middleware registration |
`writeEpoch` … `hasObjectMiddleware` | 107 | 18 | 4 (4 public) | - | 0 |
- |
| 7391-7626 | Execution plumbing (middleware, session, provenance,
users) | `executeWithMiddleware` … `buildUser` | 236 | 37 | 7 (0 public)
| - | 0 | - |
| 7627-7957 | Driver options and engine posture | `buildDriverOptions` …
`resolveEnginePosture` | 331 | 209 | 6 (0 public) | - | 0 | - |
| 7958-8167 | Organization probe and system-insert organization |
`probeInstallOrganizations` … `transactionCoversDriverFor` | 210 | 45 |
4 (0 public) | - | 0 | - |
| 8168-8533 | Field defaults | `resolveNowDefault` …
`defaultFieldEntries` | 366 | 37 | 6 (0 public) | - | 0 | - |
| 8534-9144 | Autonumber | `applyAutonumbers` … `seedAutonumber` | 611 |
78 | 6 (0 public) | - | 1 | - |
| 9145-9809 | Package, app, plugin and driver registration |
`registrationConversionWarned` … `registerDriver` | 665 | 170 | 6 (3
public) | registerApp, registerDriver | 0 | - |
| 9810-10018 | Datasource registry | `supplyFileColumnsMovedResolver` …
`listUnavailableDatasources` | 209 | 1 | 8 (7 public) | - | 3 | - |
| 10019-10265 | Write guard and realtime publish | `assertWriteAllowed`
… `publishBulkDataEvent` | 247 | 18 | 4 (1 public) | - | 0 | - |
| 10266-10364 | Validation-message i18n (cut 1) | `setI18nService` …
`objectDisplayLabel` | 99 | 14 | 4 (1 public) | - | 0 | - |
| 10365-11457 | Referential integrity and master-detail resolution |
`assertReferencesResolve` … `masterDeclaredFields` | 1093 | 625 | 12 (0
public) | - | 0 | - |
| 11458-11573 | Dangling-reference and cascade inspection |
`inspectDanglingReferences` … `inspectCascadeDelete` | 116 | 48 | 2 (2
public) | - | 0 | - |
| 11574-11668 | Crypto and tenancy providers | `setCryptoProvider` …
`setTenancyPostureProvider` | 95 | 20 | 4 (4 public) | - | 1 | - |
| 11669-12234 | Secret and internal-field handling |
`encryptSecretFields` … `resolveInternalField` | 566 | 32 | 9 (3 public)
| - | 0 | - |
| 12235-12303 | Schema lookup and filter judging | `getSchema` …
`judgeFilter` | 69 | 48 | 3 (2 public) | - | 0 | - |
| 12304-12646 | **Datasource routing (this cut)** |
`LIFECYCLE_DATASOURCE` … `setDatasourceMapping` | 343 | 0 | 8 (3 public)
| setDatasourceMapping | 0 | - |
| 12647-12869 | Lifecycle init and health | `init` …
`resolvePrimaryDatasource` | 223 | 0 | 3 (3 public) | init | 0 | - |
| 12870-12943 | Media and value-shape presence | `objectHasMediaField` …
`valueShapeStrictFor` | 74 | 13 | 4 (0 public) | - | 0 |
mediaFieldPresence, coveredValueFieldPresence |
| 12944-13626 | Migration flags and attestations |
`isFileReferencesMigrationVerified` … `wasDatastoreCreatedFromEmpty` |
683 | 81 | 17 (8 public) | - | 0 | - |
| 13627-13653 | destroy | `destroy` … `destroy` | 27 | 0 | 1 (1 public)
| destroy | 0 | - |
| 13654-13668 | Expand/cascade limits (statics) | `MAX_EXPAND_DEPTH` …
`MAX_BULK_PER_ROW_HOOK_ROWS` | 15 | 0 | 0 (0 public) | - | 0 |
MAX_EXPAND_DEPTH, MAX_CASCADE_DEPTH |
| 13669-14119 | Roll-up summaries | `autonumberCounters` …
`recomputeSummaries` | 451 | 0 | 7 (1 public) | - | 0 | - |
| 14120-14373 | Related-record expansion | `expandRelatedRecords` …
`expandRelatedRecords` | 254 | 10 | 1 (0 public) | - | 0 | - |
| 14374-14821 | File-reference hydration | `resolveFileReferences` …
`readParentDerivedFiles` | 448 | 310 | 5 (0 public) | - | 0 | - |
| 14822-15239 | Query lowering | `resolveWhereTokens` …
`requireFindOnePredicate` | 418 | 212 | 8 (0 public) | - | 0 | - |
| 15240-15796 | find / findOne | `find` … `staticReadonlyCreateStrip` |
557 | 152 | 4 (2 public) | - | 0 | - |
| 15797-16454 | validate | `validate` … `validate` | 658 | 492 | 1 (1
public) | - | 0 | - |
| 16455-17799 | insert / insertMany | `readUpdatePriorRow` …
`insertMany` | 1345 | 480 | 3 (2 public) | - | 1 | - |
| 17800-19731 | update | `update` … `update` | 1932 | 391 | 1 (1 public)
| - | 0 | - |
| 19732-21272 | Delete cascade and reference walking |
`planCascadeAtomicity` … `organizationOwnedRowCounts` | 1541 | 747 | 22
(1 public) | - | 0 | storedReferenceIncludes,
remainderAfterMemberRemoval, referenceCheckContext,
outlivesOrganization, keepsOrganizationReference,
organizationCountContext |
| 21273-21842 | delete | `delete` … `delete` | 570 | 47 | 1 (1 public) |
- | 0 | - |
| 21843-22455 | count / aggregate | `count` … `aggregate` | 613 | 362 |
3 (2 public) | - | 0 | - |
| 22456-22849 | execute and transactions | `execute` …
`enforceTransactionOrigin` | 394 | 63 | 8 (2 public) | - | 0 | - |
| 22850-23205 | Compatibility API | `registerObject` … `create` | 356 |
36 | 16 (16 public) | - | 0 | - |
After this cut, the Datasource routing row at head is lines 12307–12572
(266 lines).
## For the next dispatch (cut 3)
- **Proposed area: Lifecycle init and health, less `init`.** `init` has
an inferred return type, so it stays. What moves is `checkDriversHealth`
(34-line body) and `resolvePrimaryDatasource` (37-line body):
- both are public with explicit return types, so their signatures stay
on the stubs and the `.d.ts` keeps its bytes;
- 0 lines from the last 30 days, no `this.FIELD.delete/insert/update(`
site, no static read;
- no `engine.ts#…` path reader, and no spy or instance double on either,
measured repo-wide.
- `resolvePrimaryDatasource` reads `isSystemLedgerObject` and
`resolveDatasourceBinding` (both late-bound closures), plus `_registry`
and `drivers` (getters).
- **Still waiting:** Roll-up summaries (spec-coupled, see cut 1).
Datasource registry has U = 3: 2 sites in `unregisterDriver` and 1 in
`clearDatasourceUnavailable`. Its other six bodies are 1–15 lines and
mostly shorter than a host literal.
## Acceptance notes
- `datasource-mapping.test.ts`'s case "when the connect verdict is
known, the error says WHY rather than 'not registered'" asserts
`/analytics database unreachable|ERR_DATASOURCE_UNAVAILABLE|broken/`.
The fallback "mapped … is not registered" message also contains
`broken`, so the case stays green with the `unavailableDatasources`
branch removed (mutation above). `datasource-unavailable.test.ts` does
pin that branch. This predates this PR and is noted, not filed.
## Verification
All at head `c70b6b5d`.
- `pnpm --filter @objectstack/objectql typecheck` (`tsc --noEmit` and
`check:test-typecheck`): exit 0, 39 files / 233 errors / 64 pinned
signatures held. Eslint with `--no-inline-config` on `packages/objectql`
and on both files: exit 0.
- `packages/objectql` suite (`vitest run --project local
--maxWorkers=2`, under `os-verify-lock`, VERDICT command-exit 0): 466
files, 8,700 tests, 8,700 passed, 0 failed, 0 skipped.
- Downstream type-checks are untouched by construction. Every moved
member is private, and all six published declaration files are
byte-identical. CI's `TypeScript Type Check` covers the dependants.
- `dispatch-gates --commands` derived 56 families on the real diff. All
56 were run, each exit code recorded, and `--ran` reconciles: 56
accounted for, 54 run, 2 NOT MEASURED. 53 exit 0. Three are NOT MEASURED
locally; CI runs them:
- `check-engine-split-ratio --days 90` exit 2, CANNOT COMPUTE: history
starts 2026-09-15, inside the window.
- `check-plugin-teardown-shape --self-test` exit 3: the pinned fixture
commit is not in this shallow clone.
- `check:dual-build-cjs-loads` exit 3, PREREQUISITE NOT MET: no `dist/`
for the other packages. The export lists above answer its question for
this package.
- Hand gates, all exit 0: `check-adr-anchors`,
`check-adr-symbol-anchors`, `check-nul-bytes`, `check-platform-checklist
--changed-from origin/main`, and `pnpm --filter @objectstack/spec
check:liveness`.
---
_Generated by [Claude
Code](https://claude.ai/code/session_017jiggF9SoTgeCHgPWuGdU9)_
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 645ede5 commit 702b44f
2 files changed
Lines changed: 208 additions & 97 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
105 | 108 | | |
106 | 109 | | |
107 | 110 | | |
| |||
12369 | 12372 | | |
12370 | 12373 | | |
12371 | 12374 | | |
12372 | | - | |
12373 | | - | |
12374 | | - | |
12375 | | - | |
12376 | | - | |
12377 | | - | |
12378 | | - | |
12379 | | - | |
12380 | | - | |
12381 | | - | |
12382 | | - | |
12383 | | - | |
12384 | | - | |
12385 | | - | |
12386 | | - | |
12387 | | - | |
12388 | | - | |
12389 | | - | |
12390 | | - | |
12391 | | - | |
12392 | | - | |
12393 | | - | |
12394 | | - | |
12395 | | - | |
12396 | | - | |
12397 | | - | |
12398 | | - | |
12399 | | - | |
12400 | | - | |
12401 | | - | |
12402 | | - | |
12403 | | - | |
12404 | | - | |
12405 | | - | |
12406 | | - | |
12407 | | - | |
12408 | | - | |
12409 | | - | |
12410 | | - | |
12411 | | - | |
12412 | | - | |
12413 | | - | |
12414 | | - | |
12415 | | - | |
12416 | | - | |
12417 | | - | |
12418 | | - | |
12419 | | - | |
12420 | | - | |
12421 | | - | |
12422 | | - | |
12423 | | - | |
12424 | | - | |
12425 | | - | |
12426 | | - | |
12427 | | - | |
| 12375 | + | |
| 12376 | + | |
| 12377 | + | |
| 12378 | + | |
| 12379 | + | |
| 12380 | + | |
| 12381 | + | |
| 12382 | + | |
| 12383 | + | |
| 12384 | + | |
| 12385 | + | |
12428 | 12386 | | |
12429 | 12387 | | |
12430 | 12388 | | |
| |||
12576 | 12534 | | |
12577 | 12535 | | |
12578 | 12536 | | |
12579 | | - | |
12580 | | - | |
12581 | | - | |
12582 | | - | |
12583 | | - | |
12584 | | - | |
12585 | | - | |
12586 | | - | |
12587 | | - | |
12588 | | - | |
12589 | | - | |
12590 | | - | |
12591 | | - | |
12592 | | - | |
12593 | | - | |
12594 | | - | |
12595 | | - | |
12596 | | - | |
12597 | | - | |
12598 | | - | |
12599 | | - | |
12600 | | - | |
12601 | | - | |
12602 | | - | |
12603 | | - | |
12604 | | - | |
12605 | | - | |
12606 | | - | |
12607 | | - | |
12608 | | - | |
12609 | | - | |
12610 | | - | |
12611 | | - | |
12612 | | - | |
| 12537 | + | |
| 12538 | + | |
| 12539 | + | |
| 12540 | + | |
| 12541 | + | |
| 12542 | + | |
| 12543 | + | |
12613 | 12544 | | |
12614 | 12545 | | |
12615 | 12546 | | |
12616 | 12547 | | |
12617 | 12548 | | |
12618 | 12549 | | |
12619 | 12550 | | |
12620 | | - | |
12621 | | - | |
12622 | | - | |
12623 | | - | |
12624 | | - | |
12625 | | - | |
12626 | | - | |
| 12551 | + | |
| 12552 | + | |
12627 | 12553 | | |
12628 | 12554 | | |
12629 | 12555 | | |
| |||
0 commit comments