This run took 85 seconds.
$ date
--- stdout ---
Sun May 3 20:21:28 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 12s
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 16s
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-03T20:22:28.067Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.109Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.110Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.126Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.155Z","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-03T20:22:28.182Z","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: 326.706705
...
# Subtest: Link adaptation - Full paragraph and relative links
ok 2 - Link adaptation - Full paragraph and relative links
---
duration_ms: 53.028503
...
# Subtest: Image adaptation basic test
ok 3 - Image adaptation basic test
---
duration_ms: 113.679489
...
# Subtest: Image adaptation - Inline image with span tag
ok 4 - Image adaptation - Inline image with span tag
---
duration_ms: 13.145618
...
# Subtest: Image adaptation - Inline image with span tag
ok 5 - Image adaptation - Inline image with span tag
---
duration_ms: 12.457038
...
# Subtest: Image adaptation - Source and target language directions differs
ok 6 - Image adaptation - Source and target language directions differs
---
duration_ms: 111.042132
...
# Subtest: Image adaptation - Image is not in commons
ok 7 - Image adaptation - Image is not in commons
---
duration_ms: 60.888163
...
# Subtest: Gallery adaptation
ok 8 - Gallery adaptation
---
duration_ms: 34.141996
...
# Subtest: Reference adaptation test without a reference template
ok 9 - Reference adaptation test without a reference template
---
duration_ms: 25.163926
...
# 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: 67.654586
...
# 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: 129.363686
...
# 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: 47.828754
...
# Subtest: Audio adaptation
ok 13 - Audio adaptation
---
duration_ms: 26.706181
...
# Subtest: Audio adaptation when audio is not in Commons
ok 14 - Audio adaptation when audio is not in Commons
---
duration_ms: 12.173289
...
# Subtest: Video adaptation
ok 15 - Video adaptation
---
duration_ms: 12.288712
...
# Subtest: Inline Video adaptation
ok 16 - Inline Video adaptation
---
duration_ms: 20.861372
...
1..16
ok 1 - Adaptation tests
---
duration_ms: 1166.152472
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:28.206Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.259Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.273Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:28.291Z","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: 573.409507
...
1..1
ok 2 - Adaptation tests
---
duration_ms: 674.314192
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.149283
...
1..1
ok 3 - Template parameter mapping test
---
duration_ms: 4.719024
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:29.211Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:29.272Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:29.273Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:29.312Z","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: 28.530869
...
# Subtest: should set CORS headers
ok 2 - should set CORS headers
---
duration_ms: 5.939064
...
# Subtest: should set CSP headers
ok 3 - should set CSP headers
---
duration_ms: 4.37674
...
1..3
ok 4 - express app
---
duration_ms: 154.895477
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:31.146Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.175Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.176Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.197Z","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: 38.467665
...
# Subtest: should expose valid OpenAPI spec
ok 2 - should expose valid OpenAPI spec
---
duration_ms: 22.762713
...
# Subtest: spec validation
ok 3 - spec validation
---
duration_ms: 1.237373
...
# Subtest: routes
# Subtest: robots.txt check
ok 1 - robots.txt check
---
duration_ms: 9.845097
...
# Subtest: root with no query params
ok 2 - root with no query params
---
duration_ms: 4.416219
...
# Subtest: spec from root
ok 3 - spec from root
---
duration_ms: 10.109582
...
# Subtest: doc from root
ok 4 - doc from root
---
duration_ms: 3.86959
...
# Subtest: root with wrong query param
ok 5 - root with wrong query param
---
duration_ms: 3.582046
...
# {"@timestamp":"2026-05-03T20:22:31.303Z","ecs.version":"8.10.0","http":{"request":{"id":"f4ece323-0fee-4f8c-995b-48f23f7f6cac","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-03T20:22:31.551Z","ecs.version":"8.10.0","http":{"request":{"id":"f4ece323-0fee-4f8c-995b-48f23f7f6cac","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: 265.100196
...
# {"@timestamp":"2026-05-03T20:22:31.563Z","ecs.version":"8.10.0","http":{"request":{"id":"4db38f9b-1f29-44f4-9839-f5ea639ab16d","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-03T20:22:31.641Z","ecs.version":"8.10.0","http":{"request":{"id":"4db38f9b-1f29-44f4-9839-f5ea639ab16d","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: 87.45394
...
# {"@timestamp":"2026-05-03T20:22:31.649Z","ecs.version":"8.10.0","http":{"request":{"id":"69318477-b42e-4abc-ba44-fabc18ee6de3","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-03T20:22:31.765Z","ecs.version":"8.10.0","http":{"request":{"id":"69318477-b42e-4abc-ba44-fabc18ee6de3","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: 123.899721
...
# Subtest: Machine translate an HTML fragment using TestClient.
ok 9 - Machine translate an HTML fragment using TestClient.
---
duration_ms: 221.693976
...
# Subtest: Machine translate an HTML fragment using TestClient.
ok 10 - Machine translate an HTML fragment using TestClient.
---
duration_ms: 29.904129
...
# Subtest: Get the tools between two language pairs
ok 11 - Get the tools between two language pairs
---
duration_ms: 3.903941
...
# Subtest: Get all the language pairs
ok 12 - Get all the language pairs
---
duration_ms: 5.680604
...
# Subtest: Get the MT tool between two language pairs
ok 13 - Get the MT tool between two language pairs
---
duration_ms: 24.07834
...
# Subtest: Get the MT tool between two language pairs
ok 14 - Get the MT tool between two language pairs
---
duration_ms: 5.61645
...
# {"@timestamp":"2026-05-03T20:22:32.066Z","ecs.version":"8.10.0","http":{"request":{"id":"473f0d5d-bdfb-438a-8da0-bcef33beda57","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-03T20:22:32.282Z","ecs.version":"8.10.0","http":{"request":{"id":"473f0d5d-bdfb-438a-8da0-bcef33beda57","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: 232.850867
...
# {"@timestamp":"2026-05-03T20:22:32.299Z","ecs.version":"8.10.0","http":{"request":{"id":"973ff3bf-bd16-47f3-8dca-ad8ea003bf00","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-03T20:22:32.390Z","ecs.version":"8.10.0","http":{"request":{"id":"973ff3bf-bd16-47f3-8dca-ad8ea003bf00","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: 129.310212
...
# {"@timestamp":"2026-05-03T20:22:32.427Z","ecs.version":"8.10.0","http":{"request":{"id":"edb28b81-ade1-4ab1-b520-fd9cdbad1e9a","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-03T20:22:32.473Z","ecs.version":"8.10.0","http":{"request":{"id":"edb28b81-ade1-4ab1-b520-fd9cdbad1e9a","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: 54.011587
...
# 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.533268
...
# 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: 203.642762
...
# 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: 148.374413
...
# 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: 15.180648
...
# 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: 22.22694
...
# 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: 16.600444
...
# {"@timestamp":"2026-05-03T20:22:32.897Z","ecs.version":"8.10.0","http":{"request":{"id":"67a0f9eb-fa96-4101-a7da-4b6fe9038667","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: 67.798062
...
# Subtest: Suggest target section titles for given source sections
ok 25 - Suggest target section titles for given source sections
---
duration_ms: 30.467992
...
# Subtest: Suggest source sections to translate
ok 26 - Suggest source sections to translate
---
duration_ms: 144.974315
...
# Subtest: Suggest source sections to translate for multiple titles
ok 27 - Suggest source sections to translate for multiple titles
---
duration_ms: 298.323464
...
# Subtest: retrieve service info
ok 28 - retrieve service info
---
duration_ms: 4.335308
...
# Subtest: retrieve service name
ok 29 - retrieve service name
---
duration_ms: 2.971399
...
# Subtest: retrieve service version
ok 30 - retrieve service version
---
duration_ms: 10.097322
...
# Subtest: redirect to the home page
ok 31 - redirect to the home page
---
duration_ms: 4.96992
...
1..31
ok 4 - routes
---
duration_ms: 2198.295921
type: 'suite'
...
1..4
ok 5 - Swagger spec
---
duration_ms: 2323.096194
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:31.279Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.340Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.341Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.359Z","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: 30.63361
...
# Subtest: should get the service version
ok 2 - should get the service version
---
duration_ms: 5.645214
...
# Subtest: should redirect to the service home page
ok 3 - should redirect to the service home page
---
duration_ms: 5.270909
...
# Subtest: should get the service info
ok 4 - should get the service info
---
duration_ms: 4.209186
...
1..4
ok 6 - service information
---
duration_ms: 147.245386
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:31.464Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.521Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.523Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.565Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:31.602Z","ecs.version":"8.10.0","http":{"request":{"id":"b452a9ca-dfb6-4d13-8224-1fc5cc205a1e","method":"GET"}},"log.level":"debug","message":"Getting page en:Oxygen","service":"cxserver-dev","url":{"path":"/v1/page/en/Oxygen"}}
# {"@timestamp":"2026-05-03T20:22:32.353Z","ecs.version":"8.10.0","http":{"request":{"id":"b452a9ca-dfb6-4d13-8224-1fc5cc205a1e","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: 821.284461
...
# Subtest: should throw a 404 for a non-existent page
ok 2 - should throw a 404 for a non-existent page
---
duration_ms: 7.766257
...
1..2
ok 7 - v1 api - page gets
---
duration_ms: 949.213274
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:33.385Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:33.423Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:33.434Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:33.477Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:33.510Z","ecs.version":"8.10.0","http":{"request":{"id":"4c7ae6e9-b893-4027-ae95-b10f632b97ac","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-03T20:22:34.082Z","ecs.version":"8.10.0","http":{"request":{"id":"4c7ae6e9-b893-4027-ae95-b10f632b97ac","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: 641.304503
...
# {"@timestamp":"2026-05-03T20:22:34.126Z","ecs.version":"8.10.0","http":{"request":{"id":"81fb17fd-3261-47b4-aca5-4829b45b45d5","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: 47.460802
...
1..2
ok 8 - v2 api - page gets
---
duration_ms: 796.325539
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: 35.963186
...
# Subtest: should be possible to reconstruct the HTML from LinearDoc
ok 2 - should be possible to reconstruct the HTML from LinearDoc
---
duration_ms: 2.320257
...
# Subtest: should be possible to reduce and expand a document
ok 3 - should be possible to reduce and expand a document
---
duration_ms: 59.035029
...
# Subtest: test HTML compaction roundtrip with inline chunks
ok 4 - test HTML compaction roundtrip with inline chunks
---
duration_ms: 9.08872
...
# Subtest: test HTML expand with external attributes inserted
ok 5 - test HTML expand with external attributes inserted
---
duration_ms: 0.998734
...
# Subtest: test if the content is block level template
ok 6 - test if the content is block level template
---
duration_ms: 105.483281
...
# Subtest: test HTML compaction roundtrip with inline style content
ok 7 - test HTML compaction roundtrip with inline style content
---
duration_ms: 6.434293
...
# Subtest: test HTML compaction roundtrip with template with empty content
ok 8 - test HTML compaction roundtrip with template with empty content
---
duration_ms: 3.098117
...
# Subtest: test getRootItem for ignoring blockspaces
ok 9 - test getRootItem for ignoring blockspaces
---
duration_ms: 0.848424
...
# 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.746048
...
# Subtest: test getRootItem for ignoring whitespace content in textblock
ok 11 - test getRootItem for ignoring whitespace content in textblock
---
duration_ms: 0.443645
...
1..11
ok 9 - LinearDoc
---
duration_ms: 227.284982
type: 'suite'
...
# Subtest: Apertium machine translation
# Subtest: Test: All caps words
ok 1 - Test: All caps words
---
duration_ms: 165.971508
...
# Subtest: Test: Title caps one-to-many
ok 2 - Test: Title caps one-to-many
---
duration_ms: 28.195352
...
# Subtest: Test: Reordering with nested tags
ok 3 - Test: Reordering with nested tags
---
duration_ms: 35.554867
...
# Subtest: Test: Many-to-one with nested tags
ok 4 - Test: Many-to-one with nested tags
---
duration_ms: 44.140056
...
# Subtest: Test: Reordering at either ends of a tag
ok 5 - Test: Reordering at either ends of a tag
---
duration_ms: 46.724158
...
# Subtest: Test: Identical tags separated by whitespace
ok 6 - Test: Identical tags separated by whitespace
---
duration_ms: 28.540319
...
# Subtest: Test: Non-identical links separated by whitespace
ok 7 - Test: Non-identical links separated by whitespace
---
duration_ms: 36.908988
...
# Subtest: Test: Find longest match among multiple matches
ok 8 - Test: Find longest match among multiple matches
---
duration_ms: 29.658755
...
# Subtest: Test: Do not translate content inside the style tags
ok 9 - Test: Do not translate content inside the style tags
---
duration_ms: 56.413758
...
1..9
ok 10 - Apertium machine translation
---
duration_ms: 474.789701
type: 'suite'
...
# Subtest: Elia machine translation
# Subtest: Should fail because of wrong key
ok 1 - Should fail because of wrong key
---
duration_ms: 6.717328
...
1..1
ok 11 - Elia machine translation
---
duration_ms: 8.275021
type: 'suite'
...
# Subtest: Google machine translation
# Subtest: Should fail because of wrong key
ok 1 - Should fail because of wrong key
---
duration_ms: 11.844136
...
1..1
ok 12 - Google machine translation
---
duration_ms: 13.48506
type: 'suite'
...
# Subtest: LingoCloud machine translation
# Subtest: Should fail because of wrong key
ok 1 - Should fail because of wrong key
---
duration_ms: 7.362368
...
1..1
ok 13 - LingoCloud machine translation
---
duration_ms: 8.998554
type: 'suite'
...
# Subtest: Machine translation with wrapped html result
# Subtest: Should throw error
ok 1 - Should throw error
---
duration_ms: 14.165279
...
1..1
ok 14 - Machine translation with wrapped html result
---
duration_ms: 15.936107
type: 'suite'
...
# Subtest: Machine translation result with extra spaces
# Subtest: Should be cleaned up
ok 1 - Should be cleaned up
---
duration_ms: 242.46414
...
1..1
ok 15 - Machine translation result with extra spaces
---
duration_ms: 242.767314
type: 'suite'
...
# Subtest: Subsequence match finding
# Subtest: Should return correct range mapping
ok 1 - Should return correct range mapping
---
duration_ms: 2.372253
...
1..1
ok 16 - Subsequence match finding
---
duration_ms: 2.711507
type: 'suite'
...
# Subtest: Template translation
# Subtest: should not translate the fragement contents.
ok 1 - should not translate the fragement contents.
---
duration_ms: 174.620807
...
1..1
ok 17 - Template translation
---
duration_ms: 176.321867
type: 'suite'
...
# Subtest: Config transform tests
# Subtest: Simple cross product of languages
ok 1 - Simple cross product of languages
---
duration_ms: 2.893078
...
# Subtest: Do not translate between two variants of English
ok 2 - Do not translate between two variants of English
---
duration_ms: 0.328193
...
# Subtest: Exclude "notAsTarget" languages
ok 3 - Exclude "notAsTarget" languages
---
duration_ms: 0.205012
...
# Subtest: Handle pairs in the configuration
ok 4 - Handle pairs in the configuration
---
duration_ms: 0.469558
...
1..4
ok 18 - Config transform tests
---
duration_ms: 5.894225
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:39.034Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.099Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.102Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.124Z","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: 26.019764
...
1..1
ok 19 - MWPageLoader tests
---
duration_ms: 133.526713
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: 1.895574
...
# 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.079022
...
# 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.160916
...
# 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.145192
...
# 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.136832
...
# 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.114654
...
# 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.265797
...
# 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.130557
...
# 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.335882
...
# 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.583151
...
# 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.166221
...
# 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.129367
...
# 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.211273
...
# 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.142708
...
# 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.254453
...
# 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.136281
...
# 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.130139
...
# 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.342297
...
1..18
ok 20 - Section wrap tests
---
duration_ms: 8.887823
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:39.280Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.324Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.336Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:39.361Z","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: 134.95851
...
# 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: 1.069428
...
# 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.337872
...
# 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.352814
...
# 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.327725
...
# 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.893286
...
# Subtest: should have the queue size 50
ok 7 - should have the queue size 50
---
duration_ms: 2.778866
...
1..7
ok 21 - Title pair tests
---
duration_ms: 217.710034
...
# Subtest: Section extractor tests
# Subtest: should extract section titles correctly
ok 1 - should extract section titles correctly
---
duration_ms: 4.2988
...
# Subtest: should extract section sizes correctly
ok 2 - should extract section sizes correctly
---
duration_ms: 89.791015
...
# Subtest: should extract section titles correctly
ok 3 - should extract section titles correctly
---
duration_ms: 1.13728
...
# Subtest: should extract section sizes correctly
ok 4 - should extract section sizes correctly
---
duration_ms: 28.211222
...
1..4
ok 22 - Section extractor tests
---
duration_ms: 126.698168
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: 3.428141
...
1..1
ok 23 - Segmentation tests for am
---
duration_ms: 5.239299
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.489966
...
# Subtest: should not have any errors when: Sentence ending with )
ok 2 - should not have any errors when: Sentence ending with )
---
duration_ms: 0.141762
...
# Subtest: should not have any errors when: Exclamation, punctuation test
ok 3 - should not have any errors when: Exclamation, punctuation test
---
duration_ms: 0.12056
...
# Subtest: should not have any errors when: Multiple sentences
ok 4 - should not have any errors when: Multiple sentences
---
duration_ms: 0.120549
...
# 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.164969
...
# 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.134983
...
# 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.225003
...
# Subtest: should not have any errors when: Figure
ok 8 - should not have any errors when: Figure
---
duration_ms: 0.37679
...
# 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.256282
...
# 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.125703
...
# 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.253689
...
# 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.134176
...
# 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.264449
...
# 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.144911
...
# 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.117395
...
# 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.116524
...
# 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.306638
...
# 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.157651
...
# 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.103287
...
# 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.096465
...
# 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.113824
...
# 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.092996
...
# 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.081406
...
# 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.080064
...
# 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.078886
...
# 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.075957
...
# 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.077142
...
# 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.079052
...
# 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.080453
...
# 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.0854
...
# 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.253183
...
# 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.193222
...
# 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.099282
...
1..33
ok 24 - Segmentation tests for en
---
duration_ms: 6.983022
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.135726
...
1..1
ok 25 - Segmentation tests for de
---
duration_ms: 0.316002
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.145369
...
1..1
ok 26 - Segmentation tests for hi
---
duration_ms: 0.237248
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.106087
...
1..1
ok 27 - Segmentation tests for hy
---
duration_ms: 0.18732
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.098523
...
1..1
ok 28 - Segmentation tests for ja
---
duration_ms: 0.175453
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.10343
...
1..1
ok 29 - Segmentation tests for zh
---
duration_ms: 0.177658
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.154676
...
1..1
ok 30 - Segmentation tests for pa
---
duration_ms: 0.237694
type: 'suite'
...
# Subtest: SectionSuggester tests
# Subtest: should find present and missing sections
ok 1 - should find present and missing sections
---
duration_ms: 21.930852
...
1..1
ok 31 - SectionSuggester tests
---
duration_ms: 23.830165
type: 'suite'
...
# Subtest: /src/repo/test/testutils.js
ok 23 - /src/repo/test/testutils.js
---
duration_ms: 154.26241
...
# {"@timestamp":"2026-05-03T20:22:42.268Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.311Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.313Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.335Z","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: 171.347788
...
# Subtest: Space in the title
ok 2 - Space in the title
---
duration_ms: 1.888658
...
# Subtest: Relative URL
ok 3 - Relative URL
---
duration_ms: 1.064524
...
# Subtest: Title with parenthesis
ok 4 - Title with parenthesis
---
duration_ms: 1.173199
...
# Subtest: Target title does not exist
ok 5 - Target title does not exist
---
duration_ms: 0.670527
...
# Subtest: Title with translation from Wikidata label
ok 6 - Title with translation from Wikidata label
---
duration_ms: 1.101633
...
# Subtest: ISBN Link adaptation
ok 7 - ISBN Link adaptation
---
duration_ms: 0.775481
...
1..7
ok 33 - Link Adaptation tests
---
duration_ms: 273.588523
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:42.761Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.822Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.824Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.855Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 6 MT providers","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.881Z","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: 7.364785
...
# Subtest: Adapting a reference with plain text content, sup tag
ok 2 - Adapting a reference with plain text content, sup tag
---
duration_ms: 0.607251
...
# Subtest: Adapting a reference with html content, sup tag
ok 3 - Adapting a reference with html content, sup tag
---
duration_ms: 0.375433
...
# Subtest: Not adapting a reference with no data-mw.body
ok 4 - Not adapting a reference with no data-mw.body
---
duration_ms: 0.752463
...
# Subtest: Partially adapting a reference with named reference
ok 5 - Partially adapting a reference with named reference
---
duration_ms: 0.737308
...
# {"@timestamp":"2026-05-03T20:22:43.381Z","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: 450.136259
...
# 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: 61.630009
...
# 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: 183.217077
...
1..8
ok 34 - Reference adaptation
---
duration_ms: 862.367546
type: 'suite'
...
# {"@timestamp":"2026-05-03T20:22:42.780Z","ecs.version":"8.10.0","log.level":"info","message":"Starting cxserver-dev","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.817Z","ecs.version":"8.10.0","log.level":"info","message":"responseTimeMetric","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.819Z","ecs.version":"8.10.0","log.level":"debug","message":"Found 349 languages from the configuration","service":"cxserver-dev"}
# {"@timestamp":"2026-05-03T20:22:42.837Z","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: 121.445265
...
# Subtest: Babel template
ok 2 - Babel template
---
duration_ms: 61.688632
...
# Subtest: Cite web template
ok 3 - Cite web template
---
duration_ms: 136.862899
...
# Subtest: Multi-part template for columns
ok 4 - Multi-part template for columns
---
duration_ms: 76.811821
...
# 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: 68.46736
...
# 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: 60.782318
...
# Subtest: Template with equivalents, all mandatory params mapped
ok 7 - Template with equivalents, all mandatory params mapped
---
duration_ms: 72.254451
...
# Subtest: Images that are generated by templates
ok 8 - Images that are generated by templates
---
duration_ms: 6.933718
...
1..8
ok 35 - Template adaptation
---
duration_ms: 670.331612
...
# Subtest: /src/repo/test/utils/assert.js
ok 27 - /src/repo/test/utils/assert.js
---
duration_ms: 1279.890114
...
1..36
# tests 192
# suites 33
# pass 192
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 17774.115605
--- 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/tmp1x3swusl
--- stdout ---
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
--- end ---