@publisle/research 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +31 -0
  3. package/README.md +14 -2
  4. package/compiler/Dockerfile +18 -0
  5. package/compiler/README.md +80 -0
  6. package/compiler/cacert.pem +2950 -0
  7. package/compiler/install-texlive.sh +38 -0
  8. package/compiler/release.json +13 -0
  9. package/dist/article.d.ts +10 -0
  10. package/dist/article.d.ts.map +1 -0
  11. package/dist/article.js +425 -0
  12. package/dist/article.js.map +1 -0
  13. package/dist/bibtex.d.ts +2 -0
  14. package/dist/bibtex.d.ts.map +1 -0
  15. package/dist/bibtex.js +2 -0
  16. package/dist/bibtex.js.map +1 -0
  17. package/dist/citeproc.d.ts +28 -0
  18. package/dist/csl.d.ts +35 -0
  19. package/dist/csl.d.ts.map +1 -0
  20. package/dist/csl.js +315 -0
  21. package/dist/csl.js.map +1 -0
  22. package/dist/index.d.ts +13 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +12 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/jats.d.ts +14 -0
  27. package/dist/jats.d.ts.map +1 -0
  28. package/dist/jats.js +197 -0
  29. package/dist/jats.js.map +1 -0
  30. package/dist/latex.d.ts +5 -0
  31. package/dist/latex.d.ts.map +1 -0
  32. package/dist/latex.js +19 -0
  33. package/dist/latex.js.map +1 -0
  34. package/dist/locales.d.ts +2 -0
  35. package/dist/locales.d.ts.map +1 -0
  36. package/dist/locales.js +67 -0
  37. package/dist/locales.js.map +1 -0
  38. package/dist/node.d.ts +66 -0
  39. package/dist/node.d.ts.map +1 -0
  40. package/dist/node.js +542 -0
  41. package/dist/node.js.map +1 -0
  42. package/dist/package.d.ts +19 -0
  43. package/dist/package.d.ts.map +1 -0
  44. package/dist/package.js +48 -0
  45. package/dist/package.js.map +1 -0
  46. package/dist/pdf.d.ts +10 -0
  47. package/dist/pdf.d.ts.map +1 -0
  48. package/dist/pdf.js +207 -0
  49. package/dist/pdf.js.map +1 -0
  50. package/dist/portable-citations.d.ts +27 -0
  51. package/dist/portable-citations.d.ts.map +1 -0
  52. package/dist/portable-citations.js +185 -0
  53. package/dist/portable-citations.js.map +1 -0
  54. package/dist/profiles.d.ts +10 -0
  55. package/dist/profiles.d.ts.map +1 -0
  56. package/dist/profiles.js +166 -0
  57. package/dist/profiles.js.map +1 -0
  58. package/dist/remote.d.ts +24 -0
  59. package/dist/remote.d.ts.map +1 -0
  60. package/dist/remote.js +139 -0
  61. package/dist/remote.js.map +1 -0
  62. package/dist/resolve.d.ts +10 -0
  63. package/dist/resolve.d.ts.map +1 -0
  64. package/dist/resolve.js +62 -0
  65. package/dist/resolve.js.map +1 -0
  66. package/package.json +53 -3
  67. package/src/article.ts +478 -0
  68. package/src/bibtex.ts +1 -0
  69. package/src/citeproc.d.ts +28 -0
  70. package/src/csl.ts +367 -0
  71. package/src/index.ts +29 -0
  72. package/src/jats.ts +242 -0
  73. package/src/latex.ts +21 -0
  74. package/src/locales.ts +126 -0
  75. package/src/node.ts +752 -0
  76. package/src/package.ts +83 -0
  77. package/src/pdf.ts +225 -0
  78. package/src/portable-citations.ts +250 -0
  79. package/src/profiles.ts +188 -0
  80. package/src/remote.ts +163 -0
  81. package/src/resolve.ts +91 -0
  82. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/BITS-embedded-index2.ent +308 -0
  83. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/BITS-question-answer2.ent +531 -0
  84. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-XHTMLtablesetup1-3.ent +629 -0
  85. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-ali-namespace1-3.ent +293 -0
  86. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-archivearticle1-3.dtd +1085 -0
  87. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-archivecustom-classes1-3.ent +409 -0
  88. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-archivecustom-mixes1-3.ent +601 -0
  89. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-archivecustom-models1-3.ent +1613 -0
  90. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-archivecustom-modules1-3.ent +404 -0
  91. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-articlemeta1-3.ent +2552 -0
  92. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-backmatter1-3.ent +540 -0
  93. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-chars1-3.ent +664 -0
  94. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-common-atts1-3.ent +360 -0
  95. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-common1-3.ent +4659 -0
  96. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-default-classes1-3.ent +1595 -0
  97. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-default-mixes1-3.ent +630 -0
  98. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-display1-3.ent +1299 -0
  99. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-format1-3.ent +997 -0
  100. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-funding1-3.ent +1100 -0
  101. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-journalmeta1-3.ent +593 -0
  102. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-link1-3.ent +604 -0
  103. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-list1-3.ent +663 -0
  104. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-math1-3.ent +563 -0
  105. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-mathmlsetup1-3.ent +491 -0
  106. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-modules1-3.ent +769 -0
  107. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-nlmcitation1-3.ent +428 -0
  108. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-notat1-3.ent +412 -0
  109. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-para1-3.ent +648 -0
  110. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-phrase1-3.ent +664 -0
  111. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-references1-3.ent +1428 -0
  112. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-related-object1-3.ent +435 -0
  113. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-section1-3.ent +463 -0
  114. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/JATS-xmlspecchars1-3.ent +528 -0
  115. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/catalog-jats-v1-3-no-base.xml +999 -0
  116. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/catalog-jats-v1-3-with-base.xml +986 -0
  117. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isobox.ent +61 -0
  118. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isocyr1.ent +88 -0
  119. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isocyr2.ent +47 -0
  120. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isodia.ent +35 -0
  121. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isolat1.ent +83 -0
  122. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isolat2.ent +142 -0
  123. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isonum.ent +97 -0
  124. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso8879/isopub.ent +105 -0
  125. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamsa.ent +167 -0
  126. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamsb.ent +143 -0
  127. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamsc.ent +43 -0
  128. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamsn.ent +114 -0
  129. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamso.ent +73 -0
  130. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isoamsr.ent +204 -0
  131. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isogrk3.ent +64 -0
  132. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isomfrk.ent +75 -0
  133. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isomopf.ent +49 -0
  134. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isomscr.ent +75 -0
  135. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/iso9573-13/isotech.ent +182 -0
  136. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/mathml/mmlalias.ent +564 -0
  137. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/mathml/mmlextra.ent +122 -0
  138. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/mathml2-qname-1.mod +286 -0
  139. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/mathml2.dtd +2206 -0
  140. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/xhtml-inlstyle-1.mod +34 -0
  141. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/xhtml-table-1.mod +333 -0
  142. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/xmlchars/isogrk1.ent +70 -0
  143. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/xmlchars/isogrk2.ent +41 -0
  144. package/vendor/jats/JATS-Archiving-1-3-MathML2-DTD/xmlchars/isogrk4.ent +66 -0
  145. package/vendor/jats/PROVENANCE.json +6 -0
  146. package/vendor/locales/PROVENANCE.json +5 -0
  147. package/vendor/locales/README.md +23 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 VoidReg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE.md ADDED
@@ -0,0 +1,31 @@
1
+ # Third-party resources
2
+
3
+ Citation formatting uses citeproc-js (`citeproc` 2.4.63), by Frank Bennett and
4
+ contributors, https://github.com/Juris-M/citeproc-js. Its original LICENSE is
5
+ included by the dependency. That file offers CPAL 1.0 or AGPL 3-or-later;
6
+ upstream npm SPDX metadata reads `CPAL-1.0 OR AGPL-1.0`. Publisle's own source
7
+ license does not replace dependency licenses.
8
+
9
+ The bundled locale data comes from the Citation Style Language project,
10
+ https://CitationStyles.org/, under CC BY-SA 3.0. Translator metadata is preserved
11
+ in every locale. The exact upstream revision and notices are retained under
12
+ `vendor/locales`.
13
+
14
+ The reviewed citation corpus under `packages/contracts/fixtures/citations.json`
15
+ is generated with this pinned processor and those locale resources. The
16
+ independent Python implementation is authored in-repository and vendors no CSL
17
+ processor or locale XML; its dependency evaluation is recorded in
18
+ `tools/python/NOTICE.md`. Both implementations expose a limited portable role,
19
+ not a general CSL parity claim.
20
+
21
+ JATS Archiving 1.3 schema files retain their original NLM/W3C/ISO notices under
22
+ `vendor/jats`; download provenance is recorded there. Springer class/style
23
+ assets belong to the separate template package and retain their original LPPL
24
+ notices and unmodified source bytes. The compiler's Mozilla CA bundle retains
25
+ its notices; see `compiler/README.md`.
26
+
27
+ The optional PDF accessibility gate downloads veraPDF Greenfield 1.28.2 from
28
+ https://software.verapdf.org/releases/1.28/ with a pinned SHA-256 digest. Its
29
+ installed notices describe GPL v3 and MPL v2-or-later licensing. No veraPDF
30
+ binaries are vendored in this repository. Upstream TeX Live packages retain
31
+ their individual license notices in the explicitly installed compiler image.
package/README.md CHANGED
@@ -1,3 +1,15 @@
1
- # Temporary Holding Version
1
+ # @publisle/research
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Citation resolution and BibTeX, CSL, LaTeX, JATS, and PDF export. Tooling only; readers must not import it.
4
+
5
+ Requires Node.js 24 or later. Framework adapters also require their declared peer dependencies.
6
+ This package is part of Publisle, independently versioned at `0.1.1` and published under the npm `beta` tag.
7
+ Frozen contract version integers are independent of npm package versions.
8
+
9
+ - [Core standard](https://github.com/VoidReg/publisle/blob/main/docs/standards/README.md)
10
+ - [Quickstart and package usage](https://github.com/VoidReg/publisle#readme)
11
+ - [Distribution and release checklist](https://github.com/VoidReg/publisle/blob/main/docs/guides/releases.md)
12
+ - [Research export guide](https://github.com/VoidReg/publisle/blob/main/docs/guides/journal-export.md)
13
+
14
+ Research tooling is optional and is excluded from Core-only installations. Read any
15
+ included `NOTICE.md` for third-party licensing obligations.
@@ -0,0 +1,18 @@
1
+ # Base and OS packages are frozen independently of the upstream TeX distribution.
2
+ FROM ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782
3
+ ARG TARGETARCH
4
+ COPY cacert.pem /etc/ssl/certs/ca-certificates.crt
5
+ RUN set -eu; \
6
+ case "$TARGETARCH" in amd64) archive=ubuntu ;; arm64) archive=ubuntu ;; *) exit 1 ;; esac; \
7
+ rm -f /etc/apt/sources.list.d/ubuntu.sources; \
8
+ printf 'deb https://snapshot.ubuntu.com/%s/20250301T000000Z noble main universe\ndeb https://snapshot.ubuntu.com/%s/20250301T000000Z noble-updates main universe\ndeb https://snapshot.ubuntu.com/%s/20250301T000000Z noble-security main universe\n' "$archive" "$archive" "$archive" > /etc/apt/sources.list; \
9
+ apt-get update; \
10
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates curl perl xz-utils fontconfig fonts-paktype; \
11
+ rm -rf /var/lib/apt/lists/*
12
+ COPY install-texlive.sh /tmp/install-texlive.sh
13
+ RUN sh /tmp/install-texlive.sh "$TARGETARCH" && rm /tmp/install-texlive.sh
14
+ ENV PATH="/opt/texlive/bin/platform:${PATH}"
15
+ RUN tlmgr install latexmk tex-gyre tex-gyre-math fandol luahbtex luaotfload luatexbase lualibs luamml unicode-math tagpdf latex-lab pdfmanagement-testphase ulem natbib cite ieeetran elsarticle acmart xstring totpages environ trimspaces framed hyperxmp draftwatermark ncctools comment preprint pbalance libertine newtx inconsolata sttools threeparttable appendix breakurl wrapfig vruler && \
16
+ fc-cache -f /opt/texlive/texmf-dist/fonts/opentype && luaotfload-tool --update
17
+ RUN tlmgr install ifmtarg lualatex-math luacode upquote
18
+ WORKDIR /work
@@ -0,0 +1,80 @@
1
+ # Compiler recipe
2
+
3
+ Recipe 2 retains the Ubuntu noble-20250127 OCI index digest and the Ubuntu apt
4
+ snapshot at 2025-03-01 for OS dependencies. TeX comes from the upstream frozen
5
+ [TeX Live 2025 final repository](https://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2025/tlnet-final/),
6
+ frozen on 2026-03-01, rather than noble's older TeX packages. The installer and
7
+ package database are pinned by SHA-512 in `install-texlive.sh`. TeX Live verifies
8
+ package archive checksums from that database. The original database is retained
9
+ as `/opt/texlive/tlpkg/frozen-source.tlpdb` in the image. Documentation and source
10
+ packages are omitted. See [TUG's historic release policy](https://tug.org/texlive/acquire.html).
11
+
12
+ The recipe maps Docker `amd64` to `x86_64-linux` and `arm64` to `aarch64-linux`,
13
+ using the same frozen package database and its platform-specific archive
14
+ checksums. Both architectures use the snapshot service's `ubuntu` archive,
15
+ which includes arm64 package indices; the ordinary `ubuntu-ports` path is not
16
+ a snapshot-service archive.
17
+
18
+ `release.json` stores the reviewed multi-architecture registry reference. It is
19
+ currently `null`: registry publication and a native arm64 CI run remain pending.
20
+ Both platforms are locally verified against this recipe: the amd64 image passes
21
+ the publisher smoke and PDF/UA fixture gates natively, and the arm64 image —
22
+ confirmed `linux/arm64` by `docker image inspect` — passed the five-publisher
23
+ smoke gate and all three PDF/UA fixtures (English UA-2, Arabic UA-2, English
24
+ UA-1) with veraPDF 1.28.2 under QEMU emulation on 2026-10-10. Until a release is
25
+ recorded, default setup builds locally.
26
+
27
+ ```sh
28
+ docker build --tag publisle-compiler:2 packages/research/compiler
29
+ pnpm cli setup compiler
30
+ # Explicitly use the bundled local recipe, even after registry publication:
31
+ pnpm cli setup compiler --build
32
+ # Install a reviewed immutable registry reference:
33
+ pnpm cli setup compiler --image ghcr.io/voidreg/publisle-compiler@sha256:<index-digest>
34
+ ```
35
+
36
+ Setup prefers the digest-pinned published image when `release.json` contains a
37
+ reference. It verifies the pulled repository digest and records the selected
38
+ platform's immutable local `sha256` ID, recipe version, platform, and published
39
+ index reference. Pull failures report the explicit `--build` fallback. The local
40
+ build uses the same frozen recipe. `publisle doctor` reports native compiler
41
+ readiness, container runtime readiness, installed image ID, platform and registry
42
+ reference separately. Runtime exports never pull or build; they use
43
+ `--pull=never`, a read-only container, a temporary cache, and no network. The
44
+ container uses `openin_any=r` so LuaTeX can read absolute paths to Unicode data
45
+ within its own compiler filesystem; its only host mount is the isolated source
46
+ package. Native execution retains `openin_any=p`. Both disable shell escape and
47
+ restrict output paths. Selection checks the LaTeX format before using a tagged
48
+ compiler.
49
+ Native tools remain supported; tagged output requires LaTeX 2025-11-01 or later.
50
+ See the [accessibility guide](https://github.com/VoidReg/publisle/blob/main/docs/guides/accessibility.md) for the UA-2 fixture
51
+ gate and checksum-pinned veraPDF installation.
52
+
53
+ `cacert.pem` is the Mozilla CA bundle distributed by https://curl.se/ca/cacert.pem,
54
+ retained to bootstrap HTTPS apt on the minimal base. Its SHA-256 is
55
+ `a41b5d356aea97a529fe27e0f7316d2f9d946d75927476cf9cf1b90637d00505`.
56
+ Original certificate notices are retained; Mozilla CA data is under MPL 2.0.
57
+ TeX Live and installed packages retain their own license notices in the image.
58
+
59
+ ## Release workflow
60
+
61
+ Run `.github/workflows/compiler-release.yml` manually with a new immutable
62
+ `recipe-X.Y.Z` version after reviewing the recipe. It uses native GitHub amd64
63
+ and arm64 runners, avoiding emulation. Each platform first builds the frozen
64
+ recipe, compiles all five shipped publisher profiles, and passes both standard
65
+ article profiles through the checksum-pinned veraPDF 1.28.2 PDF/UA-2 gate plus
66
+ the English PDF/UA-1 fixture. It
67
+ retains fixture PDFs and validation reports, then pushes that verified platform
68
+ image to `ghcr.io/<repository-owner>/publisle-compiler`. The repository's
69
+ `GITHUB_TOKEN` needs package write access and permission to create or update that
70
+ package. Existing release tags are refused.
71
+
72
+ The final job combines the two platform digests into an OCI index, checks that
73
+ it contains exactly `linux/amd64` and `linux/arm64` with the expected digests,
74
+ and uploads `compiler-release.json` plus the raw manifest. That record includes
75
+ the index digest, both platform digests, recipe version, and veraPDF pin. Review
76
+ and copy the generated record into `release.json` in the package release change;
77
+ setup then pulls that immutable index. The workflow does not edit the repository
78
+ or automatically change the default compiler. Recipe 2 release `recipe-2.0.0` passed this workflow on both native architectures.
79
+ Its published index, platform digests and validator pin are recorded in
80
+ [`release.json`](release.json).