mediawiki/services/cxserver: main (log #2465588)

sourcepatches

This run took 92 seconds.

$ date
--- stdout ---
Mon May  4 04:57:18 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-services-cxserver.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
7584ba0f46f15044de083cf4cd2088a6afe5f366 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "istanbul-lib-processinfo": {
      "name": "istanbul-lib-processinfo",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "uuid"
      ],
      "effects": [
        "nyc"
      ],
      "range": "*",
      "nodes": [
        "node_modules/istanbul-lib-processinfo"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "14.1.1",
        "isSemVerMajor": true
      }
    },
    "nyc": {
      "name": "nyc",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "istanbul-lib-processinfo"
      ],
      "effects": [],
      "range": ">=15.0.0-alpha.0",
      "nodes": [
        "node_modules/nyc"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "14.1.1",
        "isSemVerMajor": true
      }
    },
    "swagger-router": {
      "name": "swagger-router",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "uuid"
      ],
      "effects": [],
      "range": ">=0.7.4",
      "nodes": [
        "node_modules/swagger-router"
      ],
      "fixAvailable": {
        "name": "swagger-router",
        "version": "0.7.3",
        "isSemVerMajor": true
      }
    },
    "uuid": {
      "name": "uuid",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1116970,
          "name": "uuid",
          "dependency": "uuid",
          "title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
          "url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
          "severity": "moderate",
          "cwe": [
            "CWE-787",
            "CWE-1285"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<14.0.0"
        }
      ],
      "effects": [
        "istanbul-lib-processinfo",
        "swagger-router"
      ],
      "range": "<14.0.0",
      "nodes": [
        "node_modules/swagger-router/node_modules/uuid",
        "node_modules/uuid"
      ],
      "fixAvailable": {
        "name": "swagger-router",
        "version": "0.7.3",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 4,
      "high": 0,
      "critical": 0,
      "total": 4
    },
    "dependencies": {
      "prod": 268,
      "dev": 585,
      "optional": 52,
      "peer": 1,
      "peerOptional": 0,
      "total": 903
    }
  }
}

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "istanbul-lib-processinfo": {
      "name": "istanbul-lib-processinfo",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "uuid"
      ],
      "effects": [
        "nyc"
      ],
      "range": "*",
      "nodes": [
        "node_modules/istanbul-lib-processinfo"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "14.1.1",
        "isSemVerMajor": true
      }
    },
    "nyc": {
      "name": "nyc",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "istanbul-lib-processinfo"
      ],
      "effects": [],
      "range": ">=15.0.0-alpha.0",
      "nodes": [
        "node_modules/nyc"
      ],
      "fixAvailable": {
        "name": "nyc",
        "version": "14.1.1",
        "isSemVerMajor": true
      }
    },
    "swagger-router": {
      "name": "swagger-router",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "uuid"
      ],
      "effects": [],
      "range": ">=0.7.4",
      "nodes": [
        "node_modules/swagger-router"
      ],
      "fixAvailable": {
        "name": "swagger-router",
        "version": "0.7.3",
        "isSemVerMajor": true
      }
    },
    "uuid": {
      "name": "uuid",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1116970,
          "name": "uuid",
          "dependency": "uuid",
          "title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
          "url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
          "severity": "moderate",
          "cwe": [
            "CWE-787",
            "CWE-1285"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<14.0.0"
        }
      ],
      "effects": [
        "istanbul-lib-processinfo",
        "swagger-router"
      ],
      "range": "<14.0.0",
      "nodes": [
        "node_modules/swagger-router/node_modules/uuid",
        "node_modules/uuid"
      ],
      "fixAvailable": {
        "name": "swagger-router",
        "version": "0.7.3",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 4,
      "high": 0,
      "critical": 0,
      "total": 4
    },
    "dependencies": {
      "prod": 268,
      "dev": 585,
      "optional": 52,
      "peer": 1,
      "peerOptional": 0,
      "total": 903
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'cxserver@1.2.1',
npm WARN EBADENGINE   required: { node: '>=24' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 903,
  "removed": 0,
  "changed": 0,
  "audited": 904,
  "funding": 202,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "istanbul-lib-processinfo": {
        "name": "istanbul-lib-processinfo",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "uuid"
        ],
        "effects": [
          "nyc"
        ],
        "range": "*",
        "nodes": [
          "node_modules/istanbul-lib-processinfo"
        ],
        "fixAvailable": {
          "name": "nyc",
          "version": "14.1.1",
          "isSemVerMajor": true
        }
      },
      "nyc": {
        "name": "nyc",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "istanbul-lib-processinfo"
        ],
        "effects": [],
        "range": ">=15.0.0-alpha.0",
        "nodes": [
          "node_modules/nyc"
        ],
        "fixAvailable": {
          "name": "nyc",
          "version": "14.1.1",
          "isSemVerMajor": true
        }
      },
      "swagger-router": {
        "name": "swagger-router",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "uuid"
        ],
        "effects": [],
        "range": ">=0.7.4",
        "nodes": [
          "node_modules/swagger-router"
        ],
        "fixAvailable": {
          "name": "swagger-router",
          "version": "0.7.3",
          "isSemVerMajor": true
        }
      },
      "uuid": {
        "name": "uuid",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1116970,
            "name": "uuid",
            "dependency": "uuid",
            "title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
            "url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq",
            "severity": "moderate",
            "cwe": [
              "CWE-787",
              "CWE-1285"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<14.0.0"
          }
        ],
        "effects": [
          "istanbul-lib-processinfo",
          "swagger-router"
        ],
        "range": "<14.0.0",
        "nodes": [
          "node_modules/swagger-router/node_modules/uuid",
          "node_modules/uuid"
        ],
        "fixAvailable": {
          "name": "swagger-router",
          "version": "0.7.3",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 4,
        "high": 0,
        "critical": 0,
        "total": 4
      },
      "dependencies": {
        "prod": 268,
        "dev": 585,
        "optional": 52,
        "peer": 1,
        "peerOptional": 0,
        "total": 903
      }
    }
  }
}

--- end ---
{"added": 903, "removed": 0, "changed": 0, "audited": 904, "funding": 202, "audit": {"auditReportVersion": 2, "vulnerabilities": {"istanbul-lib-processinfo": {"name": "istanbul-lib-processinfo", "severity": "moderate", "isDirect": false, "via": ["uuid"], "effects": ["nyc"], "range": "*", "nodes": ["node_modules/istanbul-lib-processinfo"], "fixAvailable": {"name": "nyc", "version": "14.1.1", "isSemVerMajor": true}}, "nyc": {"name": "nyc", "severity": "moderate", "isDirect": true, "via": ["istanbul-lib-processinfo"], "effects": [], "range": ">=15.0.0-alpha.0", "nodes": ["node_modules/nyc"], "fixAvailable": {"name": "nyc", "version": "14.1.1", "isSemVerMajor": true}}, "swagger-router": {"name": "swagger-router", "severity": "moderate", "isDirect": true, "via": ["uuid"], "effects": [], "range": ">=0.7.4", "nodes": ["node_modules/swagger-router"], "fixAvailable": {"name": "swagger-router", "version": "0.7.3", "isSemVerMajor": true}}, "uuid": {"name": "uuid", "severity": "moderate", "isDirect": false, "via": [{"source": 1116970, "name": "uuid", "dependency": "uuid", "title": "uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided", "url": "https://github.com/advisories/GHSA-w5hq-g745-h8pq", "severity": "moderate", "cwe": ["CWE-787", "CWE-1285"], "cvss": {"score": 0, "vectorString": null}, "range": "<14.0.0"}], "effects": ["istanbul-lib-processinfo", "swagger-router"], "range": "<14.0.0", "nodes": ["node_modules/swagger-router/node_modules/uuid", "node_modules/uuid"], "fixAvailable": {"name": "swagger-router", "version": "0.7.3", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 4, "high": 0, "critical": 0, "total": 4}, "dependencies": {"prod": 268, "dev": 585, "optional": 52, "peer": 1, "peerOptional": 0, "total": 903}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'cxserver@1.2.1',
npm WARN EBADENGINE   required: { node: '>=24' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated glob@7.2.3: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated prebuild-install@7.1.3: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 898 packages, and audited 899 packages in 13s

202 packages are looking for funding
  run `npm fund` for details

# npm audit report

uuid  <14.0.0
Severity: moderate
uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided - https://github.com/advisories/GHSA-w5hq-g745-h8pq
fix available via `npm audit fix --force`
Will install swagger-router@0.7.3, which is a breaking change
node_modules/swagger-router/node_modules/uuid
node_modules/uuid
  istanbul-lib-processinfo  *
  Depends on vulnerable versions of uuid
  node_modules/istanbul-lib-processinfo
    nyc  >=15.0.0-alpha.0
    Depends on vulnerable versions of istanbul-lib-processinfo
    node_modules/nyc
  swagger-router  >=0.7.4
  Depends on vulnerable versions of uuid
  node_modules/swagger-router

4 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'cxserver@1.2.1',
npm WARN EBADENGINE   required: { node: '>=24' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated glob@7.2.3: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated prebuild-install@7.1.3: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 898 packages, and audited 899 packages in 17s

202 packages are looking for funding
  run `npm fund` for details

4 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stdout ---

> cxserver@1.2.1 test
> npm run lint && npm run unittest


> cxserver@1.2.1 lint
> eslint .


/src/repo/app.js
   51:1   warning  The type 'Express' is undefined                                            jsdoc/no-undefined-types
   83:34  warning  Found non-literal argument to RegExp Constructor                           security/detect-non-literal-regexp
   89:25  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  264:9   warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  265:10  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/bin/segment.js
  17:33  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/lib/Config.js
  42:28  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  64:38  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  97:29  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/lib/adaptation/TemplateParameterMapper.js
  110:5  warning  Mixed spaces and tabs                         no-mixed-spaces-and-tabs
  110:7  warning  Expected no linebreak before this expression  implicit-arrow-linebreak
  113:4  warning  Mixed spaces and tabs                         no-mixed-spaces-and-tabs

/src/repo/lib/lineardoc/MwContextualizer.js
  143:35  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

/src/repo/lib/logging.js
  7:1  warning  The type 'winston' is undefined  jsdoc/no-undefined-types

/src/repo/lib/mw/MWPageLoader.js
  19:33  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/lib/suggestion/SectionSuggester.js
  13:1  warning  Missing JSDoc @param "dbPool" type  jsdoc/require-param-type

/src/repo/lib/swagger-ui.js
  26:9  warning  Found readFile from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/lib/translationunits/MWCategory.js
  15:41  warning  Unsafe Regular Expression  security/detect-unsafe-regex

/src/repo/lib/translationunits/MWFile.js
  44:51  warning  Unsafe Regular Expression  security/detect-unsafe-regex

/src/repo/lib/translationunits/MWImage.js
  123:68  warning  Unsafe Regular Expression  security/detect-unsafe-regex

/src/repo/lib/util.js
  133:23  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/scripts/template-mapping.js
  108:7   warning  Found existsSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  114:14  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/spec.yaml
  197:1  warning  This line has a length of 139. Maximum allowed is 100  max-len
  248:1  warning  This line has a length of 139. Maximum allowed is 100  max-len
  470:1  warning  This line has a length of 109. Maximum allowed is 100  max-len
  503:1  warning  This line has a length of 216. Maximum allowed is 100  max-len
  540:1  warning  This line has a length of 110. Maximum allowed is 100  max-len
  547:1  warning  This line has a length of 216. Maximum allowed is 100  max-len
  589:1  warning  This line has a length of 106. Maximum allowed is 100  max-len
  606:1  warning  This line has a length of 134. Maximum allowed is 100  max-len
  621:1  warning  This line has a length of 109. Maximum allowed is 100  max-len
  653:1  warning  This line has a length of 106. Maximum allowed is 100  max-len
  670:1  warning  This line has a length of 134. Maximum allowed is 100  max-len

/src/repo/test/adaptation/SectionTest.js
  31:20  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/features/app/spec.js
   21:16  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  168:10  warning  Found non-literal argument to RegExp Constructor                           security/detect-non-literal-regexp

/src/repo/test/lineardoc/LinearDoc.test.js
   28:22  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
   32:24  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
   36:26  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
   78:28  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  101:28  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  156:27  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  249:28  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/mw/MWPageLoaderTest.js
  37:27  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  46:5   warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/mw/SectionWrap.test.js
  17:33  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/segmentation/CXSegmenter.test.js
  28:19  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  34:3   warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/testutils.js
  22:5  warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/translationunits/MWReference.test.js
  38:21  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  55:27  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/test/utils/assert.js
  8:40  warning  Found non-literal argument to RegExp Constructor  security/detect-non-literal-regexp

✖ 53 problems (0 errors, 53 warnings)


> cxserver@1.2.1 unittest
> NODE_ENV=test node --test

TAP version 13
# {"@timestamp":"2026-05-04T04:58:25.105Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.169Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.171Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.197Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.242Z","ecs.version":"8.10.0","log.level":"debug","message":"No title for the MWLink: {\\"name\\":\\"a\\",\\"attributes\\":{\\"rel\\":\\"mw:WikiLink\\",\\"href\\":\\"Oxygen\\",\\"id\\":\\"mwAA\\",\\"data-cx\\":\\"{\\\\\\"adapted\\\\\\":false}\\"},\\"isSelfClosing\\":false}","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.284Z","ecs.version":"8.10.0","log.level":"debug","message":"No title for the MWLink: {\\"name\\":\\"a\\",\\"attributes\\":{\\"rel\\":\\"mw:WikiLink\\",\\"href\\":\\"Atomic number\\",\\"id\\":\\"mwAB\\",\\"data-cx\\":\\"{\\\\\\"adapted\\\\\\":false}\\"},\\"isSelfClosing\\":false}","service":"cxserver-dev"}
# Subtest: Adaptation tests
    # Subtest: Link adaptation basic test
    ok 1 - Link adaptation basic test
      ---
      duration_ms: 527.99485
      ...
    # Subtest: Link adaptation - Full paragraph and relative links
    ok 2 - Link adaptation - Full paragraph and relative links
      ---
      duration_ms: 61.528907
      ...
    # Subtest: Image adaptation basic test
    ok 3 - Image adaptation basic test
      ---
      duration_ms: 77.703717
      ...
    # Subtest: Image adaptation - Inline image with span tag
    ok 4 - Image adaptation - Inline image with span tag
      ---
      duration_ms: 32.49995
      ...
    # Subtest: Image adaptation - Inline image with span tag
    ok 5 - Image adaptation - Inline image with span tag
      ---
      duration_ms: 15.314614
      ...
    # Subtest: Image adaptation - Source and target language directions differs
    ok 6 - Image adaptation - Source and target language directions differs
      ---
      duration_ms: 115.04033
      ...
    # Subtest: Image adaptation - Image is not in commons
    ok 7 - Image adaptation - Image is not in commons
      ---
      duration_ms: 47.636572
      ...
    # Subtest: Gallery adaptation
    ok 8 - Gallery adaptation
      ---
      duration_ms: 35.938037
      ...
    # Subtest: Reference adaptation test without a reference template
    ok 9 - Reference adaptation test without a reference template
      ---
      duration_ms: 29.267503
      ...
    # Subtest: Reference adaptation test where the content is reference and template at same time
    ok 10 - Reference adaptation test where the content is reference and template at same time
      ---
      duration_ms: 38.525776
      ...
    # Subtest: Reference adaptation test where source and target has no template data. Must use template mapping database
    ok 11 - Reference adaptation test where source and target has no template data. Must use template mapping database
      ---
      duration_ms: 117.404609
      ...
    # Subtest: Style tags holding template definition should not be ignored and used for template adaptation
    ok 12 - Style tags holding template definition should not be ignored and used for template adaptation
      ---
      duration_ms: 42.297415
      ...
    # Subtest: Audio adaptation
    ok 13 - Audio adaptation
      ---
      duration_ms: 45.434044
      ...
    # Subtest: Audio adaptation when audio is not in Commons
    ok 14 - Audio adaptation when audio is not in Commons
      ---
      duration_ms: 11.558761
      ...
    # Subtest: Video adaptation
    ok 15 - Video adaptation
      ---
      duration_ms: 21.272687
      ...
    # Subtest: Inline Video adaptation
    ok 16 - Inline Video adaptation
      ---
      duration_ms: 40.621277
      ...
    1..16
ok 1 - Adaptation tests
  ---
  duration_ms: 1396.609982
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:25.102Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.155Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.170Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:25.208Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: Adaptation tests
    # Subtest: should adapt section when: section has lot of templates, but all are fragments of main template
    ok 1 - should adapt section when: section has lot of templates, but all are fragments of main template
      ---
      duration_ms: 587.641891
      ...
    1..1
ok 2 - Adaptation tests
  ---
  duration_ms: 709.366643
  type: 'suite'
  ...
# Subtest: Template parameter mapping test
    # Subtest: should not have any errors while mapping params
    ok 1 - should not have any errors while mapping params
      ---
      duration_ms: 3.887012
      ...
    1..1
ok 3 - Template parameter mapping test
  ---
  duration_ms: 5.767007
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:26.722Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:26.761Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:26.762Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:26.789Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: express app
    # Subtest: should get robots.txt
    ok 1 - should get robots.txt
      ---
      duration_ms: 32.544623
      ...
    # Subtest: should set CORS headers
    ok 2 - should set CORS headers
      ---
      duration_ms: 6.673082
      ...
    # Subtest: should set CSP headers
    ok 3 - should set CSP headers
      ---
      duration_ms: 4.199601
      ...
    1..3
ok 4 - express app
  ---
  duration_ms: 126.147837
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:28.392Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.444Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.446Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.467Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: Swagger spec
    # Subtest: get the spec
    ok 1 - get the spec
      ---
      duration_ms: 45.260986
      ...
    # Subtest: should expose valid OpenAPI spec
    ok 2 - should expose valid OpenAPI spec
      ---
      duration_ms: 26.12584
      ...
    # Subtest: spec validation
    ok 3 - spec validation
      ---
      duration_ms: 1.546013
      ...
    # Subtest: routes
        # Subtest: robots.txt check
        ok 1 - robots.txt check
          ---
          duration_ms: 15.436804
          ...
        # Subtest: root with no query params
        ok 2 - root with no query params
          ---
          duration_ms: 5.680019
          ...
        # Subtest: spec from root
        ok 3 - spec from root
          ---
          duration_ms: 11.748082
          ...
        # Subtest: doc from root
        ok 4 - doc from root
          ---
          duration_ms: 6.092799
          ...
        # Subtest: root with wrong query param
        ok 5 - root with wrong query param
          ---
          duration_ms: 4.385197
          ...
# {"@timestamp":"2026-05-04T04:58:28.596Z","ecs.version":"8.10.0","http":{"request":{"id":"dc17d78f-a92b-4def-807d-b4fa1d51a060","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
# {"@timestamp":"2026-05-04T04:58:28.888Z","ecs.version":"8.10.0","http":{"request":{"id":"dc17d78f-a92b-4def-807d-b4fa1d51a060","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
        # Subtest: Fetch enwiki protected page
        ok 6 - Fetch enwiki protected page
          ---
          duration_ms: 309.529135
          ...
# {"@timestamp":"2026-05-04T04:58:28.901Z","ecs.version":"8.10.0","http":{"request":{"id":"0fab8cf1-afaa-479c-b557-565d24488449","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
# {"@timestamp":"2026-05-04T04:58:29.050Z","ecs.version":"8.10.0","http":{"request":{"id":"0fab8cf1-afaa-479c-b557-565d24488449","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
        # Subtest: Fetch protected page with multi-word title
        ok 7 - Fetch protected page with multi-word title
          ---
          duration_ms: 161.084737
          ...
# {"@timestamp":"2026-05-04T04:58:29.061Z","ecs.version":"8.10.0","http":{"request":{"id":"93dab7cd-f2fe-44ec-808b-623c783d0920","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein/1086816359"}}
# {"@timestamp":"2026-05-04T04:58:29.180Z","ecs.version":"8.10.0","http":{"request":{"id":"93dab7cd-f2fe-44ec-808b-623c783d0920","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v1/page/en/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein/1086816359"}}
        # Subtest: Fetch enwiki protected page with revision
        ok 8 - Fetch enwiki protected page with revision
          ---
          duration_ms: 130.555817
          ...
        # Subtest: Machine translate an HTML fragment using TestClient.
        ok 9 - Machine translate an HTML fragment using TestClient.
          ---
          duration_ms: 214.418785
          ...
        # Subtest: Machine translate an HTML fragment using TestClient.
        ok 10 - Machine translate an HTML fragment using TestClient.
          ---
          duration_ms: 34.704025
          ...
        # Subtest: Get the tools between two language pairs
        ok 11 - Get the tools between two language pairs
          ---
          duration_ms: 5.451036
          ...
        # Subtest: Get all the language pairs
        ok 12 - Get all the language pairs
          ---
          duration_ms: 6.743973
          ...
        # Subtest: Get the MT tool between two language pairs
        ok 13 - Get the MT tool between two language pairs
          ---
          duration_ms: 24.710381
          ...
        # Subtest: Get the MT tool between two language pairs
        ok 14 - Get the MT tool between two language pairs
          ---
          duration_ms: 5.299135
          ...
# {"@timestamp":"2026-05-04T04:58:29.484Z","ecs.version":"8.10.0","http":{"request":{"id":"214690bd-a168-4d19-b2de-d8e30238831f","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein for es","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
# {"@timestamp":"2026-05-04T04:58:29.726Z","ecs.version":"8.10.0","http":{"request":{"id":"214690bd-a168-4d19-b2de-d8e30238831f","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
        # Subtest: Translate enwiki protected page
        ok 15 - Translate enwiki protected page
          ---
          duration_ms: 251.777266
          ...
# {"@timestamp":"2026-05-04T04:58:29.736Z","ecs.version":"8.10.0","http":{"request":{"id":"53098915-f003-4ad2-a314-5442dd3f3fde","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein for es","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
# {"@timestamp":"2026-05-04T04:58:29.831Z","ecs.version":"8.10.0","http":{"request":{"id":"53098915-f003-4ad2-a314-5442dd3f3fde","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein"}}
        # Subtest: Translate enwiki protected page with multi-word title
        ok 16 - Translate enwiki protected page with multi-word title
          ---
          duration_ms: 106.213229
          ...
# {"@timestamp":"2026-05-04T04:58:29.842Z","ecs.version":"8.10.0","http":{"request":{"id":"81fb25a2-9235-4d99-a336-2283ae311740","method":"GET"}},"log.level":"debug","message":"Getting page en:User:BSitzmann_(WMF)/MCS/Test/Frankenstein for es","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein/1086816359"}}
# {"@timestamp":"2026-05-04T04:58:29.942Z","ecs.version":"8.10.0","http":{"request":{"id":"81fb25a2-9235-4d99-a336-2283ae311740","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v2/page/en/es/User%3ABSitzmann_(WMF)%2FMCS%2FTest%2FFrankenstein/1086816359"}}
        # Subtest: Translate enwiki protected page with revision
        ok 17 - Translate enwiki protected page with revision
          ---
          duration_ms: 109.80262
          ...
        # Subtest: Machine translate an HTML fragment without provider, and an invalid language pair
        ok 18 - Machine translate an HTML fragment without provider, and an invalid language pair
          ---
          duration_ms: 9.327794
          ...
        # Subtest: Machine translate an HTML fragment using TestClient, adapt the links to target language wiki.
        ok 19 - Machine translate an HTML fragment using TestClient, adapt the links to target language wiki.
          ---
          duration_ms: 226.057267
          ...
        # Subtest: Return the target language link for the given source title and language pairs
        ok 20 - Return the target language link for the given source title and language pairs
          ---
          duration_ms: 143.351509
          ...
        # Subtest: Return an authentication error HTTP status code, when default MT requires authentication and the given JWT is invalid
        ok 21 - Return an authentication error HTTP status code, when default MT requires authentication and the given JWT is invalid
          ---
          duration_ms: 24.37499
          ...
        # Subtest: Return the target language link for the given source title and language pairs
        ok 22 - Return the target language link for the given source title and language pairs
          ---
          duration_ms: 8.259651
          ...
        # Subtest: Return an authentication error HTTP status code, when default MT requires authentication and the given JWT is invalid
        ok 23 - Return an authentication error HTTP status code, when default MT requires authentication and the given JWT is invalid
          ---
          duration_ms: 5.805679
          ...
# {"@timestamp":"2026-05-04T04:58:30.369Z","ecs.version":"8.10.0","http":{"request":{"id":"564ba77d-3454-4acc-bfec-f02699c907d6","method":"GET"}},"log.level":"debug","message":"Attempting Paneer in en","service":"cxserver-dev","url":{"path":"/v2/suggest/source/Paneer/ca?sourcelanguages=en"}}
        # Subtest: Suggest a source title to use for translation
        ok 24 - Suggest a source title to use for translation
          ---
          duration_ms: 94.491527
          ...
        # Subtest: Suggest target section titles for given source sections
        ok 25 - Suggest target section titles for given source sections
          ---
          duration_ms: 38.914684
          ...
        # Subtest: Suggest source sections to translate
        ok 26 - Suggest source sections to translate
          ---
          duration_ms: 175.237951
          ...
        # Subtest: Suggest source sections to translate for multiple titles
        ok 27 - Suggest source sections to translate for multiple titles
          ---
          duration_ms: 290.378637
          ...
        # Subtest: retrieve service info
        ok 28 - retrieve service info
          ---
          duration_ms: 5.657694
          ...
        # Subtest: retrieve service name
        ok 29 - retrieve service name
          ---
          duration_ms: 4.328988
          ...
        # Subtest: retrieve service version
        ok 30 - retrieve service version
          ---
          duration_ms: 9.72811
          ...
        # Subtest: redirect to the home page
        ok 31 - redirect to the home page
          ---
          duration_ms: 3.150947
          ...
        1..31
    ok 4 - routes
      ---
      duration_ms: 2446.653977
      type: 'suite'
      ...
    1..4
ok 5 - Swagger spec
  ---
  duration_ms: 2607.128751
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:28.579Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.655Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.657Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.681Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: service information
    # Subtest: should get the service name
    ok 1 - should get the service name
      ---
      duration_ms: 29.074696
      ...
    # Subtest: should get the service version
    ok 2 - should get the service version
      ---
      duration_ms: 23.523964
      ...
    # Subtest: should redirect to the service home page
    ok 3 - should redirect to the service home page
      ---
      duration_ms: 12.944172
      ...
    # Subtest: should get the service info
    ok 4 - should get the service info
      ---
      duration_ms: 6.298954
      ...
    1..4
ok 6 - service information
  ---
  duration_ms: 191.718999
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:28.887Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.938Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.940Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:28.962Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:29.008Z","ecs.version":"8.10.0","http":{"request":{"id":"da5fd7de-2321-4fc9-954e-e1dcb9ec22b3","method":"GET"}},"log.level":"debug","message":"Getting page en:Oxygen","service":"cxserver-dev","url":{"path":"/v1/page/en/Oxygen"}}
# {"@timestamp":"2026-05-04T04:58:29.848Z","ecs.version":"8.10.0","http":{"request":{"id":"da5fd7de-2321-4fc9-954e-e1dcb9ec22b3","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v1/page/en/Oxygen"}}
# Subtest: v1 api - page gets
    # Subtest: should get the whole page body
    ok 1 - should get the whole page body
      ---
      duration_ms: 921.986595
      ...
    # Subtest: should throw a 404 for a non-existent page
    ok 2 - should throw a 404 for a non-existent page
      ---
      duration_ms: 9.853989
      ...
    1..2
ok 7 - v1 api - page gets
  ---
  duration_ms: 1029.026758
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:31.006Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:31.045Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:31.064Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:31.097Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:31.124Z","ecs.version":"8.10.0","http":{"request":{"id":"b2fd6172-fa6e-48a6-b333-ca3beb5f5e7b","method":"GET"}},"log.level":"debug","message":"Getting page en:Pickling for es","service":"cxserver-dev","url":{"path":"/v2/page/en/es/Pickling"}}
# {"@timestamp":"2026-05-04T04:58:31.787Z","ecs.version":"8.10.0","http":{"request":{"id":"b2fd6172-fa6e-48a6-b333-ca3beb5f5e7b","method":"GET"}},"log.level":"debug","message":"Page sent","service":"cxserver-dev","url":{"path":"/v2/page/en/es/Pickling"}}
# Subtest: v2 api - page gets
    # Subtest: should get the whole page body
    ok 1 - should get the whole page body
      ---
      duration_ms: 715.246871
      ...
# {"@timestamp":"2026-05-04T04:58:31.820Z","ecs.version":"8.10.0","http":{"request":{"id":"b1ddf562-9316-4c40-9705-1cdd8dfde2dd","method":"GET"}},"log.level":"debug","message":"Getting page en:Wikipedia_content_translation_system for es","service":"cxserver-dev","url":{"path":"/v2/page/en/es/Wikipedia_content_translation_system"}}
    # Subtest: should throw a 404 for a non-existent page
    ok 2 - should throw a 404 for a non-existent page
      ---
      duration_ms: 88.949019
      ...
    1..2
ok 8 - v2 api - page gets
  ---
  duration_ms: 914.66248
  type: 'suite'
  ...
# Subtest: LinearDoc
    # Subtest: should be possible to linearise all kind of HTML inputs
    ok 1 - should be possible to linearise all kind of HTML inputs
      ---
      duration_ms: 36.151645
      ...
    # Subtest: should be possible to reconstruct the HTML from LinearDoc
    ok 2 - should be possible to reconstruct the HTML from LinearDoc
      ---
      duration_ms: 2.262872
      ...
    # Subtest: should be possible to reduce and expand a document
    ok 3 - should be possible to reduce and expand a document
      ---
      duration_ms: 6.16722
      ...
    # Subtest: test HTML compaction roundtrip with inline chunks
    ok 4 - test HTML compaction roundtrip with inline chunks
      ---
      duration_ms: 4.833809
      ...
    # Subtest: test HTML expand with external attributes inserted
    ok 5 - test HTML expand with external attributes inserted
      ---
      duration_ms: 0.678035
      ...
    # Subtest: test if the content is block level template
    ok 6 - test if the content is block level template
      ---
      duration_ms: 112.84842
      ...
    # Subtest: test HTML compaction roundtrip with inline style content
    ok 7 - test HTML compaction roundtrip with inline style content
      ---
      duration_ms: 1.825357
      ...
    # Subtest: test HTML compaction roundtrip with template with empty content
    ok 8 - test HTML compaction roundtrip with template with empty content
      ---
      duration_ms: 3.046949
      ...
    # Subtest: test getRootItem for ignoring blockspaces
    ok 9 - test getRootItem for ignoring blockspaces
      ---
      duration_ms: 0.883013
      ...
    # Subtest: test getRootItem for not ignoring non-whitespace content in textblock
    ok 10 - test getRootItem for not ignoring non-whitespace content in textblock
      ---
      duration_ms: 0.603609
      ...
    # Subtest: test getRootItem for ignoring whitespace content in textblock
    ok 11 - test getRootItem for ignoring whitespace content in textblock
      ---
      duration_ms: 0.443521
      ...
    1..11
ok 9 - LinearDoc
  ---
  duration_ms: 172.301143
  type: 'suite'
  ...
# Subtest: Apertium machine translation
    # Subtest: Test: All caps words
    ok 1 - Test: All caps words
      ---
      duration_ms: 176.674167
      ...
    # Subtest: Test: Title caps one-to-many
    ok 2 - Test: Title caps one-to-many
      ---
      duration_ms: 33.850973
      ...
    # Subtest: Test: Reordering with nested tags
    ok 3 - Test: Reordering with nested tags
      ---
      duration_ms: 44.556765
      ...
    # Subtest: Test: Many-to-one with nested tags
    ok 4 - Test: Many-to-one with nested tags
      ---
      duration_ms: 41.610719
      ...
    # Subtest: Test: Reordering at either ends of a tag
    ok 5 - Test: Reordering at either ends of a tag
      ---
      duration_ms: 46.675293
      ...
    # Subtest: Test: Identical tags separated by whitespace
    ok 6 - Test: Identical tags separated by whitespace
      ---
      duration_ms: 26.606605
      ...
    # Subtest: Test: Non-identical links separated by whitespace
    ok 7 - Test: Non-identical links separated by whitespace
      ---
      duration_ms: 54.389738
      ...
    # Subtest: Test: Find longest match among multiple matches
    ok 8 - Test: Find longest match among multiple matches
      ---
      duration_ms: 29.395519
      ...
    # Subtest: Test: Do not translate content inside the style tags
    ok 9 - Test: Do not translate content inside the style tags
      ---
      duration_ms: 67.7094
      ...
    1..9
ok 10 - Apertium machine translation
  ---
  duration_ms: 524.109756
  type: 'suite'
  ...
# Subtest: Elia machine translation
    # Subtest: Should fail because of wrong key 
    ok 1 - Should fail because of wrong key 
      ---
      duration_ms: 6.053454
      ...
    1..1
ok 11 - Elia machine translation
  ---
  duration_ms: 7.663869
  type: 'suite'
  ...
# Subtest: Google machine translation
    # Subtest: Should fail because of wrong key 
    ok 1 - Should fail because of wrong key 
      ---
      duration_ms: 10.883183
      ...
    1..1
ok 12 - Google machine translation
  ---
  duration_ms: 12.535748
  type: 'suite'
  ...
# Subtest: LingoCloud machine translation
    # Subtest: Should fail because of wrong key 
    ok 1 - Should fail because of wrong key 
      ---
      duration_ms: 8.180115
      ...
    1..1
ok 13 - LingoCloud machine translation
  ---
  duration_ms: 10.019778
  type: 'suite'
  ...
# Subtest: Machine translation with wrapped html result
    # Subtest: Should throw error
    ok 1 - Should throw error
      ---
      duration_ms: 16.094445
      ...
    1..1
ok 14 - Machine translation with wrapped html result
  ---
  duration_ms: 17.6635
  type: 'suite'
  ...
# Subtest: Machine translation result with extra spaces
    # Subtest: Should be cleaned up
    ok 1 - Should be cleaned up
      ---
      duration_ms: 221.727522
      ...
    1..1
ok 15 - Machine translation result with extra spaces
  ---
  duration_ms: 222.045084
  type: 'suite'
  ...
# Subtest: Subsequence match finding
    # Subtest: Should return correct range mapping
    ok 1 - Should return correct range mapping
      ---
      duration_ms: 2.257162
      ...
    1..1
ok 16 - Subsequence match finding
  ---
  duration_ms: 2.545896
  type: 'suite'
  ...
# Subtest: Template translation
    # Subtest: should not translate the fragement contents.
    ok 1 - should not translate the fragement contents.
      ---
      duration_ms: 182.739281
      ...
    1..1
ok 17 - Template translation
  ---
  duration_ms: 184.269949
  type: 'suite'
  ...
# Subtest: Config transform tests
    # Subtest: Simple cross product of languages
    ok 1 - Simple cross product of languages
      ---
      duration_ms: 6.209803
      ...
    # Subtest: Do not translate between two variants of English
    ok 2 - Do not translate between two variants of English
      ---
      duration_ms: 0.327495
      ...
    # Subtest: Exclude "notAsTarget" languages
    ok 3 - Exclude "notAsTarget" languages
      ---
      duration_ms: 0.186256
      ...
    # Subtest: Handle pairs in the configuration
    ok 4 - Handle pairs in the configuration
      ---
      duration_ms: 0.384602
      ...
    1..4
ok 18 - Config transform tests
  ---
  duration_ms: 9.142977
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:35.911Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:35.967Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:35.969Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:35.984Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: MWPageLoader tests
    # Subtest: Test: Add data-section-number attribute to every CX section
    ok 1 - Test: Add data-section-number attribute to every CX section
      ---
      duration_ms: 21.659028
      ...
    1..1
ok 19 - MWPageLoader tests
  ---
  duration_ms: 108.938075
  type: 'suite'
  ...
# Subtest: Section wrap tests
    # Subtest: should parse correctly when section has common pattern of elements
    ok 1 - should parse correctly when section has common pattern of elements
      ---
      duration_ms: 2.203205
      ...
    # Subtest: should extract correct number of categories when section has common pattern of elements
    ok 2 - should extract correct number of categories when section has common pattern of elements
      ---
      duration_ms: 1.148654
      ...
    # Subtest: should parse correctly when section has categories to be extracted
    ok 3 - should parse correctly when section has categories to be extracted
      ---
      duration_ms: 0.146189
      ...
    # Subtest: should extract correct number of categories when section has categories to be extracted
    ok 4 - should extract correct number of categories when section has categories to be extracted
      ---
      duration_ms: 0.129284
      ...
    # Subtest: should parse correctly when content has nested sections and tricky transclusion context
    ok 5 - should parse correctly when content has nested sections and tricky transclusion context
      ---
      duration_ms: 0.123499
      ...
    # Subtest: should extract correct number of categories when content has nested sections and tricky transclusion context
    ok 6 - should extract correct number of categories when content has nested sections and tricky transclusion context
      ---
      duration_ms: 0.129378
      ...
    # Subtest: should parse correctly when content has blank template and then an unrelated table
    ok 7 - should parse correctly when content has blank template and then an unrelated table
      ---
      duration_ms: 0.28798
      ...
    # Subtest: should extract correct number of categories when content has blank template and then an unrelated table
    ok 8 - should extract correct number of categories when content has blank template and then an unrelated table
      ---
      duration_ms: 0.134138
      ...
    # Subtest: should parse correctly when content is complete page content with html, head tags and body having two templates with fragments
    ok 9 - should parse correctly when content is complete page content with html, head tags and body having two templates with fragments
      ---
      duration_ms: 0.426366
      ...
    # Subtest: should extract correct number of categories when content is complete page content with html, head tags and body having two templates with fragments
    ok 10 - should extract correct number of categories when content is complete page content with html, head tags and body having two templates with fragments
      ---
      duration_ms: 0.336018
      ...
    # Subtest: should parse correctly when Content has self closing meta tag
    ok 11 - should parse correctly when Content has self closing meta tag
      ---
      duration_ms: 0.190265
      ...
    # Subtest: should extract correct number of categories when Content has self closing meta tag
    ok 12 - should extract correct number of categories when Content has self closing meta tag
      ---
      duration_ms: 0.146161
      ...
    # Subtest: should parse correctly when Content has template fragments and one fragment is a section candidate. Section has categories too
    ok 13 - should parse correctly when Content has template fragments and one fragment is a section candidate. Section has categories too
      ---
      duration_ms: 0.21612
      ...
    # Subtest: should extract correct number of categories when Content has template fragments and one fragment is a section candidate. Section has categories too
    ok 14 - should extract correct number of categories when Content has template fragments and one fragment is a section candidate. Section has categories too
      ---
      duration_ms: 0.145813
      ...
    # Subtest: should parse correctly when Content has transclusion and one of its fragment get removed since it is ignorable.
    ok 15 - should parse correctly when Content has transclusion and one of its fragment get removed since it is ignorable.
      ---
      duration_ms: 0.253495
      ...
    # Subtest: should extract correct number of categories when Content has transclusion and one of its fragment get removed since it is ignorable.
    ok 16 - should extract correct number of categories when Content has transclusion and one of its fragment get removed since it is ignorable.
      ---
      duration_ms: 0.135226
      ...
    # Subtest: should parse correctly when Content has transclusion and same element is removable templatestyle. So do not remove
    ok 17 - should parse correctly when Content has transclusion and same element is removable templatestyle. So do not remove
      ---
      duration_ms: 0.129319
      ...
    # Subtest: should extract correct number of categories when Content has transclusion and same element is removable templatestyle. So do not remove
    ok 18 - should extract correct number of categories when Content has transclusion and same element is removable templatestyle. So do not remove
      ---
      duration_ms: 0.340481
      ...
    1..18
ok 20 - Section wrap tests
  ---
  duration_ms: 9.251847
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:36.614Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:36.657Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:36.659Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:36.685Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: Title pair tests
    # Subtest: should adapt the title when: Corresponding title exist in target language
    ok 1 - should adapt the title when: Corresponding title exist in target language
      ---
      duration_ms: 147.344432
      ...
    # Subtest: should adapt the title when: Corresponding title exist in target language
    ok 2 - should adapt the title when: Corresponding title exist in target language
      ---
      duration_ms: 0.716793
      ...
    # Subtest: should adapt the title when: Corresponding title exist in target language and given title need normalization
    ok 3 - should adapt the title when: Corresponding title exist in target language and given title need normalization
      ---
      duration_ms: 0.241605
      ...
    # Subtest: should adapt the title when: Corresponding title does not exist in target language and given title need normalization
    ok 4 - should adapt the title when: Corresponding title does not exist in target language and given title need normalization
      ---
      duration_ms: 0.315649
      ...
    # Subtest: should adapt the title when: Corresponding title exist in target language and given title need normalization, has parenthesis
    ok 5 - should adapt the title when: Corresponding title exist in target language and given title need normalization, has parenthesis
      ---
      duration_ms: 0.261185
      ...
    # Subtest: should adapt the title when: Source title is percentage encoded, but should not throw error, should return corresponding title
    ok 6 - should adapt the title when: Source title is percentage encoded, but should not throw error, should return corresponding title
      ---
      duration_ms: 0.688723
      ...
    # Subtest: should have the queue size 50
    ok 7 - should have the queue size 50
      ---
      duration_ms: 15.096686
      ...
    1..7
ok 21 - Title pair tests
  ---
  duration_ms: 229.035577
  ...
# Subtest: Section extractor tests
    # Subtest: should extract section titles correctly
    ok 1 - should extract section titles correctly
      ---
      duration_ms: 8.60336
      ...
    # Subtest: should extract section sizes correctly
    ok 2 - should extract section sizes correctly
      ---
      duration_ms: 74.589406
      ...
    # Subtest: should extract section titles correctly
    ok 3 - should extract section titles correctly
      ---
      duration_ms: 1.160531
      ...
    # Subtest: should extract section sizes correctly
    ok 4 - should extract section sizes correctly
      ---
      duration_ms: 29.253726
      ...
    1..4
ok 22 - Section extractor tests
  ---
  duration_ms: 116.264847
  type: 'suite'
  ...
# Subtest: Segmentation tests for am
    # Subtest: should not have any errors when: Amharic segmentation - basic test
    ok 1 - should not have any errors when: Amharic segmentation - basic test
      ---
      duration_ms: 1.316047
      ...
    1..1
ok 23 - Segmentation tests for am
  ---
  duration_ms: 3.107204
  type: 'suite'
  ...
# Subtest: Segmentation tests for en
    # Subtest: should not have any errors when: Simple paragraph test
    ok 1 - should not have any errors when: Simple paragraph test
      ---
      duration_ms: 0.538045
      ...
    # Subtest: should not have any errors when: Sentence ending with )
    ok 2 - should not have any errors when: Sentence ending with )
      ---
      duration_ms: 0.139966
      ...
    # Subtest: should not have any errors when: Exclamation, punctuation test
    ok 3 - should not have any errors when: Exclamation, punctuation test
      ---
      duration_ms: 0.120802
      ...
    # Subtest: should not have any errors when: Multiple sentences
    ok 4 - should not have any errors when: Multiple sentences
      ---
      duration_ms: 0.129345
      ...
    # Subtest: should not have any errors when: Multiple sections - div, h1, paragraph
    ok 5 - should not have any errors when: Multiple sections - div, h1, paragraph
      ---
      duration_ms: 0.157199
      ...
    # Subtest: should not have any errors when: Sentence starting with a link
    ok 6 - should not have any errors when: Sentence starting with a link
      ---
      duration_ms: 0.150675
      ...
    # Subtest: should not have any errors when: Sentence starting with a link and ending with a link
    ok 7 - should not have any errors when: Sentence starting with a link and ending with a link
      ---
      duration_ms: 0.246901
      ...
    # Subtest: should not have any errors when: Figure
    ok 8 - should not have any errors when: Figure
      ---
      duration_ms: 0.394949
      ...
    # Subtest: should not have any errors when: References can appear after period without space. Example: Hydrogen is a gas.[1] It is ...
    ok 9 - should not have any errors when: References can appear after period without space. Example: Hydrogen is a gas.[1] It is ...
      ---
      duration_ms: 0.215827
      ...
    # Subtest: should not have any errors when: References can appear after period without space, repeated. Example: Hydrogen is a gas.[1][2][3] It is ...
    ok 10 - should not have any errors when: References can appear after period without space, repeated. Example: Hydrogen is a gas.[1][2][3] It is ...
      ---
      duration_ms: 0.127486
      ...
    # Subtest: should not have any errors when: References can appear inside a sentence. Example: Hydrogen is a gas[1] and it is ...
    ok 11 - should not have any errors when: References can appear inside a sentence. Example: Hydrogen is a gas[1] and it is ...
      ---
      duration_ms: 0.239811
      ...
    # Subtest: should not have any errors when: References can appear inside a sentence. Example:Hydrogen's atomic number is one. Hydrogen is a gas[1] and it is ..... Test the flags are reset properly
    ok 12 - should not have any errors when: References can appear inside a sentence. Example:Hydrogen's atomic number is one. Hydrogen is a gas[1] and it is ..... Test the flags are reset properly
      ---
      duration_ms: 0.14227
      ...
    # Subtest: should not have any errors when: References can appear repeated inside a sentence. Example: Hydrogen is a gas[1][2][3] and it is ...
    ok 13 - should not have any errors when: References can appear repeated inside a sentence. Example: Hydrogen is a gas[1][2][3] and it is ...
      ---
      duration_ms: 0.309595
      ...
    # Subtest: should not have any errors when: References can appear after period and space. Example: Hydrogen is a gas. [1] It is ...
    ok 14 - should not have any errors when: References can appear after period and space. Example: Hydrogen is a gas. [1] It is ...
      ---
      duration_ms: 0.146416
      ...
    # Subtest: should not have any errors when: Paragraph from Debian article- repeating references
    ok 15 - should not have any errors when: Paragraph from Debian article- repeating references
      ---
      duration_ms: 0.123202
      ...
    # Subtest: should not have any errors when: References after closing bracket and period.
    ok 16 - should not have any errors when: References after closing bracket and period.
      ---
      duration_ms: 0.124814
      ...
    # Subtest: should not have any errors when: Three sentences in a single text node
    ok 17 - should not have any errors when: Three sentences in a single text node
      ---
      duration_ms: 0.311395
      ...
    # Subtest: should not have any errors when: Paragraph ending with reference and already having reference in between. The second reference should not be identified as repeating reference. If identified as repeating reference, 7 letters from last word will be missing.
    ok 18 - should not have any errors when: Paragraph ending with reference and already having reference in between. The second reference should not be identified as repeating reference. If identified as repeating reference, 7 letters from last word will be missing.
      ---
      duration_ms: 0.153127
      ...
    # Subtest: should not have any errors when: Sentences ending with abbreviations
    ok 19 - should not have any errors when: Sentences ending with abbreviations
      ---
      duration_ms: 0.105261
      ...
    # Subtest: should not have any errors when: link element inside span element
    ok 20 - should not have any errors when: link element inside span element
      ---
      duration_ms: 0.095911
      ...
    # Subtest: should not have any errors when: Do not break inside of links with abbreviations. Example: Carl E. Wieman. See https://phabricator.wikimedia.org/T99504
    ok 21 - should not have any errors when: Do not break inside of links with abbreviations. Example: Carl E. Wieman. See https://phabricator.wikimedia.org/T99504
      ---
      duration_ms: 0.105373
      ...
    # Subtest: should not have any errors when: A non-segmentable text chunk inside a textblock should not mark the whole text chunk non-segmentable
    ok 22 - should not have any errors when: A non-segmentable text chunk inside a textblock should not mark the whole text chunk non-segmentable
      ---
      duration_ms: 0.099514
      ...
    # Subtest: should not have any errors when: Figure-inline segmentation. Do not violate the MediaWiki DOM spec https://www.mediawiki.org/wiki/Specs/HTML\#Images
    ok 23 - should not have any errors when: Figure-inline segmentation. Do not violate the MediaWiki DOM spec https://www.mediawiki.org/wiki/Specs/HTML\#Images
      ---
      duration_ms: 0.083398
      ...
    # Subtest: should not have any errors when: Figure-inline inside a transclusions
    ok 24 - should not have any errors when: Figure-inline inside a transclusions
      ---
      duration_ms: 0.078975
      ...
    # Subtest: should not have any errors when: Video tag in figure tag
    ok 25 - should not have any errors when: Video tag in figure tag
      ---
      duration_ms: 0.084037
      ...
    # Subtest: should not have any errors when: Audio tag in figure tag
    ok 26 - should not have any errors when: Audio tag in figure tag
      ---
      duration_ms: 0.077401
      ...
    # Subtest: should not have any errors when: Audio tag in figure-inline tag
    ok 27 - should not have any errors when: Audio tag in figure-inline tag
      ---
      duration_ms: 0.0898
      ...
    # Subtest: should not have any errors when: Video tag in figure-inline tag
    ok 28 - should not have any errors when: Video tag in figure-inline tag
      ---
      duration_ms: 0.086905
      ...
    # Subtest: should not have any errors when: Do not segment content inside block templates
    ok 29 - should not have any errors when: Do not segment content inside block templates
      ---
      duration_ms: 0.080693
      ...
    # Subtest: should not have any errors when: about attribute alone does not initiate a transclusion context
    ok 30 - should not have any errors when: about attribute alone does not initiate a transclusion context
      ---
      duration_ms: 0.087048
      ...
    # Subtest: should not have any errors when: Do not consider style tag with transclusion as block tag
    ok 31 - should not have any errors when: Do not consider style tag with transclusion as block tag
      ---
      duration_ms: 0.223891
      ...
    # Subtest: should not have any errors when: Sections with singe paragraph and a transclusion based reference at th end - T283513
    ok 32 - should not have any errors when: Sections with singe paragraph and a transclusion based reference at th end - T283513
      ---
      duration_ms: 0.189498
      ...
    # Subtest: should not have any errors when: Handle abbreviations such as Brown v. Board of education - T338689
    ok 33 - should not have any errors when: Handle abbreviations such as Brown v. Board of education - T338689
      ---
      duration_ms: 0.1016
      ...
    1..33
ok 24 - Segmentation tests for en
  ---
  duration_ms: 7.086387
  type: 'suite'
  ...
# Subtest: Segmentation tests for de
    # Subtest: should not have any errors when: Avoid segmenting inside a transclusion textblock
    ok 1 - should not have any errors when: Avoid segmenting inside a transclusion textblock
      ---
      duration_ms: 0.125249
      ...
    1..1
ok 25 - Segmentation tests for de
  ---
  duration_ms: 0.308495
  type: 'suite'
  ...
# Subtest: Segmentation tests for hi
    # Subtest: should not have any errors when: Hindi segmentation - basic test
    ok 1 - should not have any errors when: Hindi segmentation - basic test
      ---
      duration_ms: 0.151678
      ...
    1..1
ok 26 - Segmentation tests for hi
  ---
  duration_ms: 0.242907
  type: 'suite'
  ...
# Subtest: Segmentation tests for hy
    # Subtest: should not have any errors when: Armenian segmentation - basic test
    ok 1 - should not have any errors when: Armenian segmentation - basic test
      ---
      duration_ms: 0.112338
      ...
    1..1
ok 27 - Segmentation tests for hy
  ---
  duration_ms: 0.194791
  type: 'suite'
  ...
# Subtest: Segmentation tests for ja
    # Subtest: should not have any errors when: Japanese segmentation - basic test
    ok 1 - should not have any errors when: Japanese segmentation - basic test
      ---
      duration_ms: 0.111652
      ...
    1..1
ok 28 - Segmentation tests for ja
  ---
  duration_ms: 0.199736
  type: 'suite'
  ...
# Subtest: Segmentation tests for zh
    # Subtest: should not have any errors when: Chinese segmentation - basic test
    ok 1 - should not have any errors when: Chinese segmentation - basic test
      ---
      duration_ms: 0.110534
      ...
    1..1
ok 29 - Segmentation tests for zh
  ---
  duration_ms: 0.190079
  type: 'suite'
  ...
# Subtest: Segmentation tests for pa
    # Subtest: should not have any errors when: Punjabi segmentation - basic test
    ok 1 - should not have any errors when: Punjabi segmentation - basic test
      ---
      duration_ms: 0.152848
      ...
    1..1
ok 30 - Segmentation tests for pa
  ---
  duration_ms: 0.233841
  type: 'suite'
  ...
# Subtest: SectionSuggester tests
    # Subtest: should find present and missing sections
    ok 1 - should find present and missing sections
      ---
      duration_ms: 22.956112
      ...
    1..1
ok 31 - SectionSuggester tests
  ---
  duration_ms: 24.958838
  type: 'suite'
  ...
# Subtest: /src/repo/test/testutils.js
ok 23 - /src/repo/test/testutils.js
  ---
  duration_ms: 183.889571
  ...
# {"@timestamp":"2026-05-04T04:58:39.377Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.424Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.425Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.442Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: Link Adaptation tests
    # Subtest: Basic test
    ok 1 - Basic test
      ---
      duration_ms: 179.275981
      ...
    # Subtest: Space in the title
    ok 2 - Space in the title
      ---
      duration_ms: 1.743263
      ...
    # Subtest: Relative URL
    ok 3 - Relative URL
      ---
      duration_ms: 1.032272
      ...
    # Subtest: Title with parenthesis
    ok 4 - Title with parenthesis
      ---
      duration_ms: 1.524527
      ...
    # Subtest: Target title does not exist
    ok 5 - Target title does not exist
      ---
      duration_ms: 1.010684
      ...
    # Subtest: Title with translation from Wikidata label
    ok 6 - Title with translation from Wikidata label
      ---
      duration_ms: 1.017122
      ...
    # Subtest: ISBN Link adaptation
    ok 7 - ISBN Link adaptation
      ---
      duration_ms: 0.834486
      ...
    1..7
ok 33 - Link Adaptation tests
  ---
  duration_ms: 281.128584
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:39.408Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.461Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.463Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.479Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:39.497Z","ecs.version":"8.10.0","log.level":"debug","message":"Not-adapting a reference node without data-mw.body.html: trncttm-2","service":"cxserver-dev"}
# Subtest: Reference adaptation
    # Subtest: Adapting a reference with plain text content
    ok 1 - Adapting a reference with plain text content
      ---
      duration_ms: 4.752971
      ...
    # Subtest: Adapting a reference with plain text content, sup tag
    ok 2 - Adapting a reference with plain text content, sup tag
      ---
      duration_ms: 0.428157
      ...
    # Subtest: Adapting a reference with html content, sup tag
    ok 3 - Adapting a reference with html content, sup tag
      ---
      duration_ms: 0.252285
      ...
    # Subtest: Not adapting a reference with no data-mw.body
    ok 4 - Not adapting a reference with no data-mw.body
      ---
      duration_ms: 0.679973
      ...
    # Subtest: Partially adapting a reference with named reference
    ok 5 - Partially adapting a reference with named reference
      ---
      duration_ms: 0.400961
      ...
# {"@timestamp":"2026-05-04T04:58:39.969Z","ecs.version":"8.10.0","log.level":"error","message":"Not-adapting a template node with non-JSON data-mw: CITEREFGazette57855","service":"cxserver-dev"}
    # Subtest: Mark the reference adaptation failed when the content defined in template not adapted
    ok 6 - Mark the reference adaptation failed when the content defined in template not adapted
      ---
      duration_ms: 432.57514
      ...
    # Subtest: Mark the reference adaptation failed when the content defined in template and it is unsupported by CXserver
    ok 7 - Mark the reference adaptation failed when the content defined in template and it is unsupported by CXserver
      ---
      duration_ms: 55.923639
      ...
    # Subtest: Partial reference adaptation, when mandatory params are not transferred successfully
    ok 8 - Partial reference adaptation, when mandatory params are not transferred successfully
      ---
      duration_ms: 192.581753
      ...
    1..8
ok 34 - Reference adaptation
  ---
  duration_ms: 797.011726
  type: 'suite'
  ...
# {"@timestamp":"2026-05-04T04:58:40.359Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:40.423Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:40.424Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-04T04:58:40.451Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# Subtest: Template adaptation
    # Subtest: Template with no equivalents
    ok 1 - Template with no equivalents
      ---
      duration_ms: 192.65051
      ...
    # Subtest: Babel template
    ok 2 - Babel template
      ---
      duration_ms: 82.341813
      ...
    # Subtest: Cite web template
    ok 3 - Cite web template
      ---
      duration_ms: 120.947664
      ...
    # Subtest: Multi-part template for columns
    ok 4 - Multi-part template for columns
      ---
      duration_ms: 81.456842
      ...
    # Subtest: Template with equivalents, but target template data missing, no params mapped
    ok 5 - Template with equivalents, but target template data missing, no params mapped
      ---
      duration_ms: 78.779287
      ...
    # Subtest: Equivalent template exist, templatedata exists only for source language. Use that as hint for extracting params from template source code in target language
    ok 6 - Equivalent template exist, templatedata exists only for source language. Use that as hint for extracting params from template source code in target language
      ---
      duration_ms: 89.792404
      ...
    # Subtest: Template with equivalents, all mandatory params mapped
    ok 7 - Template with equivalents, all mandatory params mapped
      ---
      duration_ms: 64.038665
      ...
    # Subtest: Images that are generated by templates
    ok 8 - Images that are generated by templates
      ---
      duration_ms: 6.325628
      ...
    1..8
ok 35 - Template adaptation
  ---
  duration_ms: 804.058194
  ...
# Subtest: /src/repo/test/utils/assert.js
ok 27 - /src/repo/test/utils/assert.js
  ---
  duration_ms: 1061.241865
  ...
1..36
# tests 192
# suites 33
# pass 192
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 18160.709526

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
[DNM] there are no updates
$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp9i24yov4
--- stdout ---
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

--- end ---
Source code is licensed under the AGPL.