diff --git a/.gitattributes b/.gitattributes index 4f94ce876..f343e9c8c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -51,3 +51,5 @@ docs/licenses/monaco-editor/core-path/** -text whitespace=-trailing-space,cr-at- refactor/baselines/monaco-node-path-fixtures.json text eol=lf refactor/baselines/site-vendor/monaco-unicode/** -text whitespace=-trailing-space,cr-at-eol docs/licenses/monaco-editor/core-unicode/** -text whitespace=-trailing-space,cr-at-eol +refactor/baselines/site-vendor/jassub-fonts/** -text whitespace=-trailing-space,cr-at-eol +docs/licenses/jassub-fonts/** -text whitespace=-trailing-space,cr-at-eol diff --git a/docs/THIRD_PARTY_NOTICES.md b/docs/THIRD_PARTY_NOTICES.md index 00ce9dbcf..7dc7c84d4 100644 --- a/docs/THIRD_PARTY_NOTICES.md +++ b/docs/THIRD_PARTY_NOTICES.md @@ -1,6 +1,6 @@ # Verified site component notices -Frozen source identities and verbatim upstream notice texts for Monaco, vConsole and the legacy console bundle. Embedded component attribution, fonts, media and other site provenance gates remain open; this inventory is not publication clearance. +Frozen source identities and complete upstream notice texts for selected site components and font references. Unresolved font/media and embedded provenance gates remain open; this inventory is not publication clearance. Generated by yarn build:site-notices. Runtime asset URLs are retained; reviewed local patches are identified below. @@ -390,3 +390,31 @@ Source: https://github.com/gaearon/react-pure-render/blob/729cdbd51df00068816376 - licenses/console/stackoverflow/ATTRIBUTION.md - licenses/console/react-pure-render/LICENSE - licenses/console/react-pure-render/ATTRIBUTION.md + +## jassub-fonts selected historical references + +Source: https://github.com/ThaUnknown/jassub/tree/25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1 + +Four selected font families only. CHAWP matches author bytes; other full notice references have explicit font-table differences. Other fonts and complete redistribution provenance remain open under SITE-07/VENDOR-05. + +Included component: Liberation Sans 2.00.5 reference + +Source: https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz + +Included component: Averia Sans Libre Light 1.002 reference + +Source: https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf + +Included component: Lato Regular 2.015 reference + +Source: https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf + +Included component: CHAWP 1.000 exact bytes + +Source: https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf + +- licenses/jassub-fonts/liberation/OFL.txt +- licenses/jassub-fonts/averia-sans/OFL.txt +- licenses/jassub-fonts/lato/OFL.txt +- licenses/jassub-fonts/chawp/OFL.txt +- licenses/jassub-fonts/ATTRIBUTION.md diff --git a/docs/licenses/jassub-fonts/ATTRIBUTION.md b/docs/licenses/jassub-fonts/ATTRIBUTION.md new file mode 100644 index 000000000..f51d1160c --- /dev/null +++ b/docs/licenses/jassub-fonts/ATTRIBUTION.md @@ -0,0 +1,60 @@ +# Selected JASSUB font notice references + +The existing font files and URLs are unchanged. These complete upstream notices supplement the embedded copyright and license statements. Only CHAWP has exact upstream font-byte identity in this review. Other references have the same glyph outlines, character mapping and horizontal metrics but different font tables; they are not claimed to be the original unmodified files or a complete provenance clearance. + +Existing acquisition identity is recorded against JASSUB Pages commit 25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1. Public hosting is not itself a redistribution grant. Remaining font questions stay tracked in SITE-07/VENDOR-05. + +## Liberation Sans + +Reference: https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz + +Full upstream terms: [OFL.txt](./liberation/OFL.txt) + +Embedded font copyright: + +Digitized data copyright (c) 2010 Google Corporation. +Copyright (c) 2012 Red Hat, Inc. + +Reference differences remain in these tables: FFTM, glyf, head, loca, post. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## Averia Sans Libre Light + +Reference: https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf + +Full upstream terms: [OFL.txt](./averia-sans/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2011, Dan Sayers (i@iotic.com), with Reserved Font Name 'Averia' and 'Averia Libre'. + +Reference differences remain in these tables: FFTM, OS/2, cmap, glyf, head, loca, name. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## Lato Regular + +Reference: https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf + +Full upstream terms: [OFL.txt](./lato/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). + +Reference differences remain in these tables: OS/2, head, name. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## CHAWP + +Reference: https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf + +Full upstream terms: [OFL.txt](./chawp/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2013 by Ancient Wisdom Productions, Inc.. All rights reserved. + +Font bytes match the author repository exactly. Made by AWP via Tyler Finck. + +The Google Lato reference OFL preserves its 2010-2014 author header verbatim; the embedded font copyright above says 2011-2015. Both are retained without inventing a replacement upstream license. + +Averia Serif Simple Light is not covered by the Averia Sans/Serif Libre comparison: its encoded g glyph differs from Serif Libre. Allison Script, Architext, Arial, Franklin Gothic Book, Garamond and Slate Pro also remain outside this notice group pending applicable redistribution evidence or a separately reviewed replacement. + +No font binaries, family names, subtitle styles or runtime mappings were changed. diff --git a/docs/licenses/jassub-fonts/averia-sans/OFL.txt b/docs/licenses/jassub-fonts/averia-sans/OFL.txt new file mode 100644 index 000000000..fa2654e22 --- /dev/null +++ b/docs/licenses/jassub-fonts/averia-sans/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Dan Sayers (i@iotic.com), +with Reserved Font Name 'Averia' and 'Averia Libre'. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/licenses/jassub-fonts/chawp/OFL.txt b/docs/licenses/jassub-fonts/chawp/OFL.txt new file mode 100644 index 000000000..50e123835 --- /dev/null +++ b/docs/licenses/jassub-fonts/chawp/OFL.txt @@ -0,0 +1,95 @@ +Copyright (c) 2013, Ancient Wisdom Productions, Inc (http://www.awpny.com | tyler@awpny.com), +with Reserved Font Name CHAWP. + + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/licenses/jassub-fonts/lato/OFL.txt b/docs/licenses/jassub-fonts/lato/OFL.txt new file mode 100644 index 000000000..98383e3d8 --- /dev/null +++ b/docs/licenses/jassub-fonts/lato/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/licenses/jassub-fonts/liberation/OFL.txt b/docs/licenses/jassub-fonts/liberation/OFL.txt new file mode 100644 index 000000000..aba73e8a4 --- /dev/null +++ b/docs/licenses/jassub-fonts/liberation/OFL.txt @@ -0,0 +1,102 @@ +Digitized data copyright (c) 2010 Google Corporation + with Reserved Font Arimo, Tinos and Cousine. +Copyright (c) 2012 Red Hat, Inc. + with Reserved Font Name Liberation. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE The goals of the Open Font License (OFL) are to stimulate +worldwide development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to provide +a free and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. +The fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + + + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. +This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting ? in part or in whole ? +any of the components of the Original Version, by changing formats or +by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + +5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + + + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. + diff --git a/packages/artplayer-plugin-jassub/ARCHITECTURE.md b/packages/artplayer-plugin-jassub/ARCHITECTURE.md index 494794c4f..6e970f04d 100644 --- a/packages/artplayer-plugin-jassub/ARCHITECTURE.md +++ b/packages/artplayer-plugin-jassub/ARCHITECTURE.md @@ -110,6 +110,16 @@ and six unclear font redistribution permissions remain VENDOR-04/05 gates in PKG-JASSUB-06 / SITE-01. Source identity permits owned adapter work to proceed after 01; it does not authorize redistribution or prove original acquisition history. +SITE-07 now ships complete notice references for Liberation Sans, Averia Sans Libre +Light, Lato Regular and CHAWP at `docs/licenses/jassub-fonts/`. All font bytes and +URLs are unchanged. CHAWP has exact author-byte identity; the other references +retain documented font-table differences. Averia Serif Simple has a different +`g` from the Serif Libre reference and is not treated as the same font. These +partial notice improvements leave VENDOR-05 and the other permission questions +open. See [font maintenance](../../scripts/site-vendor/fonts/README.md) for exact +sources, comparison reproduction and native font HTTP/loading checks; these do +not replace libass shaping/rendering acceptance. + Use the pinned Node/Yarn toolchain: ```sh diff --git a/refactor/baselines/site-font-notices-provenance.json b/refactor/baselines/site-font-notices-provenance.json new file mode 100644 index 000000000..d86d26915 --- /dev/null +++ b/refactor/baselines/site-font-notices-provenance.json @@ -0,0 +1,359 @@ +{ + "task": "SITE-07", + "baselineCommit": "01f3d00e4c20ff39ce0e5e7db885cee15fd820ee", + "scope": "Complete notice references for four selected families without changing assets or closing VENDOR-05.", + "tools": { + "python": "3.12.14", + "fonttools": "4.60.1", + "brotli": "1.1.0" + }, + "group": { + "name": "jassub-fonts", + "version": "selected historical references", + "tarball": "https://github.com/ThaUnknown/jassub/tree/25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1", + "review": "Four selected font families only. CHAWP matches author bytes; other full notice references have explicit font-table differences. Other fonts and complete redistribution provenance remain open under SITE-07/VENDOR-05.", + "roots": [ + "docs/assets/jassub/default.woff2", + "docs/assets/jassub/fonts/default.woff2", + "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "docs/assets/jassub/fonts/Lato-Regular.ttf", + "docs/assets/jassub/fonts/chawp.otf" + ], + "files": [ + { + "path": "docs/assets/jassub/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "sha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/Lato-Regular.ttf", + "sha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/chawp.otf", + "sha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "mode": "binary" + } + ], + "components": [ + { + "name": "Liberation Sans", + "version": "2.00.5 reference", + "tarball": "https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz", + "assets": [ + "docs/assets/jassub/default.woff2", + "docs/assets/jassub/fonts/default.woff2" + ], + "notices": [ + "docs/licenses/jassub-fonts/liberation/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "Averia Sans Libre Light", + "version": "1.002 reference", + "tarball": "https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf", + "assets": [ + "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf" + ], + "notices": [ + "docs/licenses/jassub-fonts/averia-sans/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "Lato Regular", + "version": "2.015 reference", + "tarball": "https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf", + "assets": [ + "docs/assets/jassub/fonts/Lato-Regular.ttf" + ], + "notices": [ + "docs/licenses/jassub-fonts/lato/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "CHAWP", + "version": "1.000 exact bytes", + "tarball": "https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf", + "assets": [ + "docs/assets/jassub/fonts/chawp.otf" + ], + "notices": [ + "docs/licenses/jassub-fonts/chawp/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + } + ], + "notices": [ + { + "source": "refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt", + "target": "docs/licenses/jassub-fonts/liberation/OFL.txt", + "sha256": "93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt", + "target": "docs/licenses/jassub-fonts/averia-sans/OFL.txt", + "sha256": "46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt", + "target": "docs/licenses/jassub-fonts/lato/OFL.txt", + "sha256": "74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt", + "target": "docs/licenses/jassub-fonts/chawp/OFL.txt", + "sha256": "fa786a37ddd70be650bc53d476cc0a1ec5a6284c6f28a32943e941021b2397b8" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt", + "target": "docs/licenses/jassub-fonts/ATTRIBUTION.md", + "sha256": "b9485c05b07bbfca2407f4336247d2bb19eba05458fe9bced8f68c81c158504d" + } + ] + }, + "sources": [ + { + "id": "liberation", + "reference": "https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz", + "licenseReference": "https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz", + "repository": "liberationfonts/liberation-fonts", + "commit": "24ea9469bfb089ab9bf05adb0871d0065d360edc", + "member": "liberation-fonts-ttf-2.00.5/LiberationSans-Regular.ttf", + "licenseMember": "liberation-fonts-ttf-2.00.5/LICENSE", + "archiveSha256": "f14ff0a0be87b5aeb672e669363b5a699db76feb1144b06798261c0fdcd2b24d", + "fontSha256": "4d92708b98c4f61e0288cee4524152f41e552853c64cb2a86b298fb6082f7874", + "fontGitBlob": null, + "licenseSha256": "93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b", + "comparison": { + "localSha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "referenceSha256": "4d92708b98c4f61e0288cee4524152f41e552853c64cb2a86b298fb6082f7874", + "sameTables": [ + "GDEF", + "GPOS", + "GSUB", + "OS/2", + "cmap", + "cvt ", + "fpgm", + "gasp", + "hhea", + "hmtx", + "kern", + "maxp", + "name", + "prep" + ], + "differentTables": [ + "FFTM", + "glyf", + "head", + "loca", + "post" + ], + "glyphCounts": [ + 2592, + 2592 + ], + "glyphOrderEqual": true, + "outlineHashes": [ + "cd92421c437ab1a8fecc57eaabf2fa8c9b4edecd708e7f36440b1d18aedc897f", + "cd92421c437ab1a8fecc57eaabf2fa8c9b4edecd708e7f36440b1d18aedc897f" + ], + "cmapEqual": true, + "metricsEqual": true + } + }, + { + "id": "averia-sans", + "reference": "https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf", + "licenseReference": "https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/OFL.txt", + "repository": "google/fonts", + "commit": "0f81bc90462b862dbfe3d16403ff284a68473833", + "member": "ofl/averiasanslibre/AveriaSansLibre-Light.ttf", + "licenseMember": "ofl/averiasanslibre/OFL.txt", + "archiveSha256": null, + "fontSha256": "03725f74b84f520d8f27d29d542c31b2213c0e06caff563a43745950e88649c7", + "fontGitBlob": "12505e3c1535795401dece75580c5e91c41e4bb0", + "licenseSha256": "46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4", + "comparison": { + "localSha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "referenceSha256": "03725f74b84f520d8f27d29d542c31b2213c0e06caff563a43745950e88649c7", + "sameTables": [ + "gasp", + "hhea", + "hmtx", + "kern", + "maxp", + "post" + ], + "differentTables": [ + "FFTM", + "OS/2", + "cmap", + "glyf", + "head", + "loca", + "name" + ], + "glyphCounts": [ + 234, + 234 + ], + "glyphOrderEqual": true, + "outlineHashes": [ + "761f6e6108e56414a5d9e1080f07f471fe0d28758d2bf8051ce14d2e37247ccc", + "761f6e6108e56414a5d9e1080f07f471fe0d28758d2bf8051ce14d2e37247ccc" + ], + "cmapEqual": true, + "metricsEqual": true + } + }, + { + "id": "lato", + "reference": "https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf", + "licenseReference": "https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/OFL.txt", + "repository": "google/fonts", + "commit": "f3b885d5590e307e02542f1a724cec55d567fdaa", + "member": "ofl/lato/Lato-Regular.ttf", + "licenseMember": "ofl/lato/OFL.txt", + "archiveSha256": null, + "fontSha256": "d636e4683231f931eda222d588e944d082bfd3bdba02f928bee461c0f185b251", + "fontGitBlob": "0f3d0f837d24834b9b5b0a6b735459c56f5e75c3", + "licenseSha256": "74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e", + "comparison": { + "localSha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "referenceSha256": "d636e4683231f931eda222d588e944d082bfd3bdba02f928bee461c0f185b251", + "sameTables": [ + "GPOS", + "GSUB", + "cmap", + "cvt ", + "fpgm", + "gasp", + "glyf", + "hhea", + "hmtx", + "loca", + "maxp", + "post", + "prep" + ], + "differentTables": [ + "OS/2", + "head", + "name" + ], + "glyphCounts": [ + 3023, + 3023 + ], + "glyphOrderEqual": true, + "outlineHashes": [ + "740779480b4b3a5e9ee12951dd3b4f9de9038bc66e1a5609550c0e6823134877", + "740779480b4b3a5e9ee12951dd3b4f9de9038bc66e1a5609550c0e6823134877" + ], + "cmapEqual": true, + "metricsEqual": true + } + }, + { + "id": "chawp", + "reference": "https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf", + "licenseReference": "https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/LICENSE", + "repository": "awp/chawp", + "commit": "3c4f6317bebd6783c8d0db3bc9206aa62d602f90", + "member": "chawp.otf", + "licenseMember": "LICENSE", + "archiveSha256": null, + "fontSha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "fontGitBlob": "8cceee5183cb068903a5f65c63c64deddc74e8d7", + "licenseSha256": "fa786a37ddd70be650bc53d476cc0a1ec5a6284c6f28a32943e941021b2397b8", + "comparison": { + "localSha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "referenceSha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "sameTables": [ + "CFF ", + "GPOS", + "OS/2", + "cmap", + "head", + "hhea", + "hmtx", + "kern", + "maxp", + "name", + "post" + ], + "differentTables": [], + "glyphCounts": [ + 204, + 204 + ], + "glyphOrderEqual": true, + "outlineHashes": [ + "7c67257d98c84ab95730e41b88f9d149d5130eaee05e1fee74739296d76eefb5", + "7c67257d98c84ab95730e41b88f9d149d5130eaee05e1fee74739296d76eefb5" + ], + "cmapEqual": true, + "metricsEqual": true + } + } + ], + "unresolved": [ + "docs/assets/jassub/fonts/allison-script.regular.otf", + "docs/assets/jassub/fonts/architext.regular.ttf", + "docs/assets/jassub/fonts/arial.ttf", + "docs/assets/jassub/fonts/Averia Serif Simple Light.ttf", + "docs/assets/jassub/fonts/FRABK.TTF", + "docs/assets/jassub/fonts/Gramond.ttf", + "docs/assets/jassub/fonts/SlatePro-Medium.otf" + ], + "negativeComparison": { + "reference": "https://github.com/google/fonts/blob/463ce0ab22efecdd01ac957ae91e5dcac810fef2/ofl/averiaseriflibre/AveriaSerifLibre-Light.ttf", + "localSha256": "fb6398238298a7010920e1c216f7b29bc920477bc810f8bcc677ae4e6f411b4b", + "referenceSha256": "974986d0a74bb2a888e7fd13e5556388add3ccceeba77c699e43bb3121facf18", + "sameTables": [ + "gasp", + "hhea", + "kern", + "maxp" + ], + "differentTables": [ + "FFTM", + "OS/2", + "cmap", + "glyf", + "head", + "hmtx", + "loca", + "name", + "post" + ], + "glyphCounts": [ + 234, + 234 + ], + "glyphOrderEqual": false, + "outlineHashes": [ + "d7c4937917d1b72dc3ecb673fea61f3ea546fa3af184458e447d4655c663cb25", + "7bd0ec3ffac6a73bc9cdeb79829e9c97a7a6642b5355dec4749c9a99e59578a2" + ], + "cmapEqual": true, + "metricsEqual": false + }, + "acquisition": "refactor/baselines/jassub-provenance.json" +} diff --git a/refactor/baselines/site-font-notices-validation.json b/refactor/baselines/site-font-notices-validation.json new file mode 100644 index 000000000..91ee832df --- /dev/null +++ b/refactor/baselines/site-font-notices-validation.json @@ -0,0 +1,1784 @@ +{ + "task": "SITE-07", + "checkpoint": "selected-font-notice-references", + "baselineCommit": "01f3d00e4c20ff39ce0e5e7db885cee15fd820ee", + "environment": { + "node": "24.21.0", + "yarn": "1.22.22", + "python": "3.12.14", + "fonttools": "4.60.1", + "brotli": "1.1.0" + }, + "scope": "Four complete font notice references at five unchanged font URLs. Does not close other font permissions, original conversion provenance, libass shaping, remote CI or publication.", + "validation": { + "noticeTests": { + "passed": 15, + "failed": 0 + }, + "jassubProvenanceTests": { + "passed": 2, + "failed": 0 + }, + "generatedNoticeOutputs": 96, + "strictTypes": "pass", + "targetedLint": "pass", + "fontReferenceComparison": "all recorded observations match", + "tamperedReference": "rejected before parsing" + }, + "browserStats": { + "startTime": "2026-09-15T12:30:10.762Z", + "duration": 15423.377, + "expected": 6, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "cases": [ + { + "project": "chromium", + "title": "mobile vConsole shows logs and upstream site notice texts are served unchanged", + "status": "passed", + "durationMs": 1478, + "browser": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/mobile.html?code=window.art%20%3D%20new%20Artplayer(%7Bcontainer%3A%22.artplayer-app%22%2Curl%3A%22%2Ftest%2Fpattern.mp4%22%2Cmuted%3Atrue%7D)%3B%20console.log(%22site-vendor-verified-message%22)%3B", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [ + { + "url": "http://127.0.0.1:8084/test/pattern.mp4", + "resourceType": "media", + "failure": { + "errorText": "net::ERR_ABORTED" + } + } + ] + }, + "fonts": null, + "noticeCount": 95 + }, + { + "project": "chromium", + "title": "selected JASSUB font URLs preserve bytes and decode with native font loading", + "status": "passed", + "durationMs": 258, + "browser": { + "browser": "153.0.8010.12", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + }, + "fonts": [ + { + "url": "/assets/jassub/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2577, + "width": 268.5625 + }, + { + "url": "/assets/jassub/fonts/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2577, + "width": 268.5625 + }, + { + "url": "/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "sha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "status": "loaded", + "inkPixels": 2300, + "width": 252 + }, + { + "url": "/assets/jassub/fonts/Lato-Regular.ttf", + "sha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "status": "loaded", + "inkPixels": 2615, + "width": 267.2958679199219 + }, + { + "url": "/assets/jassub/fonts/chawp.otf", + "sha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "status": "loaded", + "inkPixels": 3663, + "width": 304.3198547363281 + } + ], + "noticeCount": null + }, + { + "project": "firefox", + "title": "mobile vConsole shows logs and upstream site notice texts are served unchanged", + "status": "passed", + "durationMs": 2624, + "browser": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/mobile.html?code=window.art%20%3D%20new%20Artplayer(%7Bcontainer%3A%22.artplayer-app%22%2Curl%3A%22%2Ftest%2Fpattern.mp4%22%2Cmuted%3Atrue%7D)%3B%20console.log(%22site-vendor-verified-message%22)%3B", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + }, + "fonts": null, + "noticeCount": 95 + }, + { + "project": "firefox", + "title": "selected JASSUB font URLs preserve bytes and decode with native font loading", + "status": "passed", + "durationMs": 392, + "browser": { + "browser": "155.0", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + }, + "fonts": [ + { + "url": "/assets/jassub/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2338, + "width": 268.5833435058594 + }, + { + "url": "/assets/jassub/fonts/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2338, + "width": 268.5833435058594 + }, + { + "url": "/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "sha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "status": "loaded", + "inkPixels": 2045, + "width": 252 + }, + { + "url": "/assets/jassub/fonts/Lato-Regular.ttf", + "sha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "status": "loaded", + "inkPixels": 2248, + "width": 265.5833435058594 + }, + { + "url": "/assets/jassub/fonts/chawp.otf", + "sha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "status": "loaded", + "inkPixels": 3221, + "width": 304.29998779296875 + } + ], + "noticeCount": null + }, + { + "project": "webkit", + "title": "mobile vConsole shows logs and upstream site notice texts are served unchanged", + "status": "passed", + "durationMs": 3287, + "browser": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/mobile.html?code=window.art%20%3D%20new%20Artplayer(%7Bcontainer%3A%22.artplayer-app%22%2Curl%3A%22%2Ftest%2Fpattern.mp4%22%2Cmuted%3Atrue%7D)%3B%20console.log(%22site-vendor-verified-message%22)%3B", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + }, + "fonts": null, + "noticeCount": 95 + }, + { + "project": "webkit", + "title": "selected JASSUB font URLs preserve bytes and decode with native font loading", + "status": "passed", + "durationMs": 554, + "browser": { + "browser": "26.6", + "platform": "win32", + "manifest": { + "kind": "artplayer-browser-test", + "resources": { + "/candidate/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "/compiled/artplayer.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/uncompiled/artplayer/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931, + "aliasOf": "/candidate/artplayer.js" + }, + "/candidate/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529 + }, + "/compiled/artplayer-plugin-chapter.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/uncompiled/artplayer-plugin-chapter/index.js": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer-plugin-chapter\\src\\index.ts" + }, + "sha256": "1a8eb891d3690e2526e78a2e53183a25367b1d02a5fd349d821548edb731ee3a", + "bytes": 8529, + "aliasOf": "/candidate/artplayer-plugin-chapter.js" + }, + "/published/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "/published/artplayer-plugin-chapter.js": { + "source": { + "kind": "npm-release", + "version": "1.1.0", + "integrity": "sha512-ji66Lr2K2S+OjFMuMby3yq+pefWlOC51Sbpop/DIr2N6w3F0smrF+YZbshN1Dy8/Tx1TYpT7N6WkkZWy5Jix1w==", + "member": "package/dist/artplayer-plugin-chapter.js" + }, + "sha256": "c2aaee11bf1db765433b01d9f8dd3978e41fa4d39655db00ebd03fc0be3e35e0", + "bytes": 4973 + }, + "/test/pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.mp4" + }, + "sha256": "0ad1d7ad286aec6e0fa9e27fc1e487e7277df2e603e30040fb942365763d0233", + "bytes": 251538 + }, + "/test/pattern.webm": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/pattern.webm" + }, + "sha256": "9d3c2b3dec9581a599de2d6732992ef7846790e0d1368e6e131bd339b39e984f", + "bytes": 162073 + }, + "/published-4.5.5/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.5", + "integrity": "sha512-HeAKbe3od9ZgFQVSBCg5FlixJsefDEBC8txVG19yZgvzlcJuiurxPlasap+GHuex/ftG+jmSXnTRtuNrTki2Kw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3467e626ca29d2f7884e75eb75b8b90de74a25761ffa2e272576c9b5a98fa0a4", + "bytes": 153582 + }, + "/published-5.1.7/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.7", + "integrity": "sha512-N/QdNlTwsIHUsWOHMPj0pq97v3qmgXZHfhy1q7I+8YN3/XakJiJJyVJgGaeBjU+y/fUIrzBhwpBaX+NFwK9/qw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "484ccc3f22446ec6fd0dd8b8a5602c740b601d55097a1ae043262d92aab35357", + "bytes": 155940 + }, + "/published-4.5.9/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "4.5.9", + "integrity": "sha512-x5JzGdXkw4GFdztvPkVnm8TOWrGDcvGKKMPb9wuP6UfyftlLM3UQctmmalfAMnQSxugJwq2Kb9ix9OG2SgbJJA==", + "member": "package/dist/artplayer.js" + }, + "sha256": "09a9f09e3a64a02ca7c27af710d7254f886f0bfb09fd54bf3a728ce863e5a497", + "bytes": 156408 + }, + "/published-5.3.0/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.0", + "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==", + "member": "package/dist/artplayer.js" + }, + "sha256": "54ffaf7598b910d5a88d2d2eec1aa6faa806583915b99b892dd32129c53e421a", + "bytes": 159238 + }, + "/published-5.1.6/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.6", + "integrity": "sha512-cqnVVLKCKWCryKl6Pmop50/Di9IQwOeNNQs5qWGzJDPiM0qTC7Q/Enusa+8JQid8p09fvp4Vc32ViSSYutdEeQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "6a7b1f3007ecda9f399e6cff606490dd745c495e19ce10e864a401ff09996172", + "bytes": 155714 + }, + "/published-5.1.2/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.1.2", + "integrity": "sha512-eIWlxiP2ghgftaZWIGnclkOpXGFZTOf5xrm6sGZCGx5A8wGbTHRSMe+ZiyPFpbNhBVupi/QObSjX/FcD+YbS1Q==", + "member": "package/dist/artplayer.js" + }, + "sha256": "3dfd035b4cde34c9d9dd1b303f95bfbb42bde105bcb3e5671a8d375a719290b1", + "bytes": 154583 + }, + "/test/audio-tone.m4a": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/audio-tone.m4a" + }, + "sha256": "83e6672b880b5d1c97093b1e26bdc40221c0b279615f40e99dbf9d2ade7b4d56", + "bytes": 132436 + }, + "/test/thumbnail-pattern.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/thumbnail-pattern.mp4" + }, + "sha256": "4c977be04d97f6ac1342ac4959b8e61678f390d88a088430e4d0200137a03d1c", + "bytes": 752916 + }, + "/test/auto-thumbnail-timeline.mp4": { + "source": { + "kind": "generated-media", + "file": "test/browser/media/auto-thumbnail-timeline.mp4" + }, + "sha256": "10370156cffada462d3ea00aae0caadd62752369cd6538cc55248b3ddd7bf994", + "bytes": 8602 + }, + "/test/vast-skippable.xml": { + "source": { + "kind": "local-vast-fixture", + "file": "test/browser/vast-fixture.mjs" + }, + "sha256": "f810be089e762ea77c08a1f736781fa8f07f5746bab6ec59819bd03d36a46baf", + "bytes": 760 + }, + "/test/declaration-cues.vtt": { + "source": { + "kind": "test-subtitles", + "file": "test/browser/media/declaration-cues.vtt" + }, + "sha256": "5d149d4e641ce41cbb83376835c03daf1fb89f3b9f568fa59e064d51e2b57704", + "bytes": 54 + }, + "/test/thumbnail-grid.svg": { + "source": { + "kind": "test-thumbnail-grid", + "file": "test/browser/media/thumbnail-grid.svg" + }, + "sha256": "bb3f1ec9895d37def77ca4b192d3cd73577a2668558cc99de1588f511d65d3e6", + "bytes": 14969 + }, + "/test/legacy-safe-area.js": { + "source": { + "kind": "frozen-own-source", + "file": "test/helpers/legacy-safe-area.js", + "commit": "ccf77c4e" + }, + "sha256": "ce0368618ef6363b78271b8bcc7973abd0478e797cc464ddd912929e6dfa501a", + "bytes": 795 + }, + "/test/iframe-boundary-child.html": { + "source": { + "kind": "iframe-fixture", + "file": "test/browser/iframe-boundary-child.html" + }, + "sha256": "4721de185f606de7d576e71395127257e476765455e2a947ded79df4ebed901a", + "bytes": 1451 + }, + "/published-5.3.1-beta.1/artplayer.js": { + "source": { + "kind": "npm-release", + "version": "5.3.1-beta.1", + "integrity": "sha512-btjbQwXPl86U/Apja0WrCUF+AXLPacI60eUGAeJTx3EMuUKrVaOFrmWrIeeyMUi5aIzMSXM++tQjlSMJVnmhuQ==", + "member": "package/dist/artplayer.js" + }, + "sha256": "e91e64228c57bb97300c709789d5557ab07b133cab307267b4a2a4df3083c861", + "bytes": 159458 + }, + "/assets/sample/video.mp4": { + "source": { + "kind": "docs-media", + "file": "docs/assets/sample/video.mp4" + }, + "sha256": "30a2de667ba267b6bc605edcee1c4bd728c048ed76f500ea0e73d1f1a6f8f980", + "bytes": 5818706 + }, + "/test/performance.js": { + "source": { + "kind": "adapted-baseline-fixture", + "file": "refactor/fixtures/performance.js" + }, + "sha256": "c5a8a8611db004aadd6c3b82c61b8ae242319c1a12e73bf784c1da06fcebed72", + "bytes": 9251 + } + } + }, + "state": { + "url": "http://127.0.0.1:8084/test/player.html?core=published", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", + "media": null + }, + "errors": [], + "consoleErrors": [], + "failedRequests": [] + }, + "fonts": [ + { + "url": "/assets/jassub/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2338, + "width": 268.5625 + }, + { + "url": "/assets/jassub/fonts/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "status": "loaded", + "inkPixels": 2338, + "width": 268.5625 + }, + { + "url": "/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "sha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "status": "loaded", + "inkPixels": 2045, + "width": 252 + }, + { + "url": "/assets/jassub/fonts/Lato-Regular.ttf", + "sha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "status": "loaded", + "inkPixels": 2252, + "width": 266.6239013671875 + }, + { + "url": "/assets/jassub/fonts/chawp.otf", + "sha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "status": "loaded", + "inkPixels": 3221, + "width": 304.31988525390625 + } + ], + "noticeCount": null + } + ], + "logs": [ + { + "file": "refactor/.cache/font-review/browser.json", + "sha256": "3442f404ab90021eebb5ff0de02cf5c2d077dd59bf395172b08d3cd39cb723e7" + }, + { + "file": "refactor/.cache/font-review/browser.log", + "sha256": "a04f212976fa87d1bf5cd5bfe2842db9b643d4c4e6140803eed2163eaa52c5af" + }, + { + "file": "refactor/.cache/font-review/notice-tests.log", + "sha256": "9508f1ee4706fe7fa9ef1043a43f06f29e68f15373850fbd8a5bfc63436bf2f0" + }, + { + "file": "refactor/.cache/font-review/jassub-provenance.log", + "sha256": "9f95ca43d056c881b5c52a48595a72dae4233900d7eb01cc5528fddbbfd6955d" + }, + { + "file": "refactor/.cache/font-review/comparison-negative.json", + "sha256": "e7924279388cdd01b7129ea8bd0aa5d81925722e02938ab927ea754096a861f0" + } + ], + "inputs": { + "scripts/build-site-notices.mjs": "93e945f0b4b60183133529a0bfa162fc202833bbcadb039fe8fae4a64fe12e2d", + "scripts/site-vendor/manifest.json": "0443f8e8af0c56f1ae507104354772717c5b51015866ca6d57f72c14a5dca7b5", + "scripts/site-vendor/fonts/notices.ts": "0a9b455031eff12caaa9556d3ef410ee29adc19dcb843c9f3eda4225a407f3a0", + "refactor/scripts/site-font-comparison.py": "392004de7cc17e6799322c3607c644a7131013f3942712efb6d1584545566e6f", + "refactor/baselines/site-font-notices-provenance.json": "59f00adf39a66f94c3ebf1a0bfc28b968c7fd8dff61aaa037c059b43c19b83c9", + "test/site-notices.test.js": "435ea0d0926db5d028a4632de764332e26699cf4349cfc16811a0cec3fbbdcb4", + "test/browser/site-vendor.spec.js": "2ca455c0efef513ce2c08af7593a6196263aa60a831e58874b6e998385a8532c", + "docs/assets/jassub/default.woff2": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "docs/assets/jassub/fonts/default.woff2": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "docs/assets/jassub/fonts/Lato-Regular.ttf": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "docs/assets/jassub/fonts/chawp.otf": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt": "93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b", + "docs/licenses/jassub-fonts/liberation/OFL.txt": "93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b", + "refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt": "46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4", + "docs/licenses/jassub-fonts/averia-sans/OFL.txt": "46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4", + "refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt": "74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e", + "docs/licenses/jassub-fonts/lato/OFL.txt": "74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e", + "refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt": "fa786a37ddd70be650bc53d476cc0a1ec5a6284c6f28a32943e941021b2397b8", + "docs/licenses/jassub-fonts/chawp/OFL.txt": "fa786a37ddd70be650bc53d476cc0a1ec5a6284c6f28a32943e941021b2397b8", + "refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt": "b9485c05b07bbfca2407f4336247d2bb19eba05458fe9bced8f68c81c158504d", + "docs/licenses/jassub-fonts/ATTRIBUTION.md": "b9485c05b07bbfca2407f4336247d2bb19eba05458fe9bced8f68c81c158504d" + } +} diff --git a/refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt b/refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt new file mode 100644 index 000000000..f51d1160c --- /dev/null +++ b/refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt @@ -0,0 +1,60 @@ +# Selected JASSUB font notice references + +The existing font files and URLs are unchanged. These complete upstream notices supplement the embedded copyright and license statements. Only CHAWP has exact upstream font-byte identity in this review. Other references have the same glyph outlines, character mapping and horizontal metrics but different font tables; they are not claimed to be the original unmodified files or a complete provenance clearance. + +Existing acquisition identity is recorded against JASSUB Pages commit 25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1. Public hosting is not itself a redistribution grant. Remaining font questions stay tracked in SITE-07/VENDOR-05. + +## Liberation Sans + +Reference: https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz + +Full upstream terms: [OFL.txt](./liberation/OFL.txt) + +Embedded font copyright: + +Digitized data copyright (c) 2010 Google Corporation. +Copyright (c) 2012 Red Hat, Inc. + +Reference differences remain in these tables: FFTM, glyf, head, loca, post. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## Averia Sans Libre Light + +Reference: https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf + +Full upstream terms: [OFL.txt](./averia-sans/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2011, Dan Sayers (i@iotic.com), with Reserved Font Name 'Averia' and 'Averia Libre'. + +Reference differences remain in these tables: FFTM, OS/2, cmap, glyf, head, loca, name. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## Lato Regular + +Reference: https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf + +Full upstream terms: [OFL.txt](./lato/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). + +Reference differences remain in these tables: OS/2, head, name. Font outlines, mapping and horizontal metrics match; this is bounded comparison evidence, not proof of the original conversion recipe. + +## CHAWP + +Reference: https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf + +Full upstream terms: [OFL.txt](./chawp/OFL.txt) + +Embedded font copyright: + +Copyright (c) 2013 by Ancient Wisdom Productions, Inc.. All rights reserved. + +Font bytes match the author repository exactly. Made by AWP via Tyler Finck. + +The Google Lato reference OFL preserves its 2010-2014 author header verbatim; the embedded font copyright above says 2011-2015. Both are retained without inventing a replacement upstream license. + +Averia Serif Simple Light is not covered by the Averia Sans/Serif Libre comparison: its encoded g glyph differs from Serif Libre. Allison Script, Architext, Arial, Franklin Gothic Book, Garamond and Slate Pro also remain outside this notice group pending applicable redistribution evidence or a separately reviewed replacement. + +No font binaries, family names, subtitle styles or runtime mappings were changed. diff --git a/refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt b/refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt new file mode 100644 index 000000000..fa2654e22 --- /dev/null +++ b/refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Dan Sayers (i@iotic.com), +with Reserved Font Name 'Averia' and 'Averia Libre'. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt b/refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt new file mode 100644 index 000000000..50e123835 --- /dev/null +++ b/refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt @@ -0,0 +1,95 @@ +Copyright (c) 2013, Ancient Wisdom Productions, Inc (http://www.awpny.com | tyler@awpny.com), +with Reserved Font Name CHAWP. + + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt b/refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt new file mode 100644 index 000000000..98383e3d8 --- /dev/null +++ b/refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt b/refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt new file mode 100644 index 000000000..aba73e8a4 --- /dev/null +++ b/refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt @@ -0,0 +1,102 @@ +Digitized data copyright (c) 2010 Google Corporation + with Reserved Font Arimo, Tinos and Cousine. +Copyright (c) 2012 Red Hat, Inc. + with Reserved Font Name Liberation. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE The goals of the Open Font License (OFL) are to stimulate +worldwide development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to provide +a free and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. +The fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + + + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. +This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting ? in part or in whole ? +any of the components of the Original Version, by changing formats or +by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + +5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + + + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. + diff --git a/refactor/changes/2026-09-15-SITE-07-font-notices.md b/refactor/changes/2026-09-15-SITE-07-font-notices.md new file mode 100644 index 000000000..15317e1db --- /dev/null +++ b/refactor/changes/2026-09-15-SITE-07-font-notices.md @@ -0,0 +1,58 @@ +# SITE-07 选定字体的完整通知与来源差异 + +基线 `01f3d00e4c20ff39ce0e5e7db885cee15fd820ee`。本次为SITE-07检查点, +任务继续doing,VENDOR-05/BASE-MEDIA-01继续open。没有改字体二进制、URL、 +family、字幕样式、播放器、worker或公开类型,不宣称全部字体已具备发布依据。 + +## 实际来源与差异 + +| 字体 | 固定参考 | 本地比较 | +| --- | --- | --- | +| CHAWP | 作者AWP仓库3c4f6317的chawp.otf和完整LICENSE | 字节完全一致 | +| Liberation Sans | 官方2.00.5 release附件、LICENSE;标签24ea9469 | 两个本地woff2副本相同;与TTF字形、映射、宽度一致,FFTM/glyf/head/loca/post有差异 | +| Averia Sans Libre Light | Google Fonts 0f81bc90的1.002与完整OFL | 字形、映射、宽度一致,保留实际字体表差异 | +| Lato Regular | Google Fonts f3b885d5的2.015与完整OFL | 字形、映射、宽度一致,OS/2/head/name不同 | + +CHAWP作者页面链接回该仓库。Google参考字体和许可证来自精确commit的contents +API,解码base64为原始字节后计算SHA-256/Git blob;Liberation附件从官方release +正文取得并固定完整归档SHA-256,再只读取指定成员。raw.githubusercontent.com +部分请求失败,改用GitHub官方API成功;没有把错误HTML当作字体或使用不明镜像。 + +所有原许可证完整保留;Lato参考OFL中的2010–2014与字体内嵌2011–2015版权 +分别照录。不能把参考与本地字形一致写成“原始字体/转换配方已完整恢复”。 +这些完整通知是现有内嵌声明的补充,不替代原始获取与再分发条件的完整审查。 + +Averia Serif Simple Light 与参考Serif Libre的编码字符g字形/宽度不同;该文件 +不进入已绑定的四字体通知组,差分作为负对照保留。Allison、Architext、Arial、 +Franklin Gothic、Garamond、Slate Pro六份再分发依据仍缺,已向用户询问授权来源, +不等待该回复来完成独立通知工作,也没有擅自替换字体。 + +## 模块与生成 + +新增fonts/notices.ts,把五个实际字体路径、四份完整许可和一份署名/差异说明 +绑定到独立provenance记录。正常build/check:site-notices先验证所有字节/关联, +再生成docs/licenses/jassub-fonts及总索引;总输出96份(95个通知文件加索引)。 +错误套用另一字体的许可,即使通用清单生成器能接受,也被专用绑定检查拒绝。 +遗漏说明、扩大到未审查Arial等同样失败。Git属性保留原通知字节与换行。 + +site-font-comparison.py是只读复验器,固定现有fonttools4.60.1/brotli1.1.0, +先核验输入哈希,再逐表、逐字形及metrics/cmap比对;--check核对完整记录和 +Serif负对照。Python3.12.14及缓存的字体检查依赖复用既有环境;没有新增根依赖 +或锁文件。普通CI只需Node,不调用Python或联网下载参考字体。 + +## 验证和限制 + +通知生成/只读检查、15项通知测试、严格docs-tools TS、定向lint和字体复验通过。 +三引擎6/6浏览器检查通过,零跳过/重试:完整通知HTTP字节/相对链接、原字体 +HTTP SHA-256、FontFace加载及实际画布墨迹、原移动页播放/控制台/销毁均验证。 +这是原生字体加载证据,不是完整libass字幕塑形或所有字体的视觉等价验收。 + +完整来源、表差异和排除项见[来源记录](../baselines/site-font-notices-provenance.json), +运行报告和指纹见[验证记录](../baselines/site-font-notices-validation.json)。维护文档 +同步scripts/site-vendor/fonts/README、站点vendor指南及JASSUB架构。 +其他字体、媒体、Monaco来源、设备、远端CI与发布复盘继续保留原门槛。 + +## 回退 + +回退本检查点并重新生成通知,可移除本次附加许可组和校验器;字体运行字节 +始终未变,消费者无需迁移。本地提交,不推送、部署或发布。 diff --git a/refactor/plan.md b/refactor/plan.md index ec57effb8..7a9125ddf 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -681,7 +681,7 @@ - SITE-DANMUKU-01: [记录](changes/2026-09-15-SITE-DANMUKU-01-guides.md) [记录](baselines/danmuku-docs-validation.json) - SITE-HLS-01: [记录](changes/2026-09-15-SITE-HLS-01-guides.md) [记录](baselines/hls-docs-validation.json) - SITE-DASH-01: [记录](changes/2026-09-15-SITE-DASH-01-guides.md) [记录](baselines/dash-docs-validation.json) -- SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json) [记录](changes/2026-09-14-SITE-07-vendor-notices.md) [记录](baselines/site-notices-checkpoint.json) [记录](baselines/site-codicons-provenance.json) [记录](baselines/site-codicons-validation.json) [记录](changes/2026-09-15-SITE-07-codicons.md) [记录](baselines/vconsole-notices-provenance.json) [记录](baselines/vconsole-notices-validation.json) [记录](changes/2026-09-15-SITE-07-vconsole-notices.md) [记录](console-modernization.md) [记录](baselines/site-console-inventory.json) [记录](baselines/site-console-validation.json) [记录](changes/2026-09-15-SITE-07-console-baseline.md) [记录](baselines/console-feed-provenance.json) [记录](changes/2026-09-15-SITE-07-console-feed-source.md) [记录](baselines/console-commonjs-provenance.json) [记录](changes/2026-09-15-SITE-07-console-commonjs.md) [记录](baselines/console-esm-provenance.json) [记录](changes/2026-09-15-SITE-07-console-esm.md) [记录](baselines/console-embedded-notices.json) [记录](baselines/console-notices-validation.json) [记录](changes/2026-09-15-SITE-07-console-notices.md) [记录](baselines/console-embedded-sources.json) [记录](baselines/console-embedded-validation.json) [记录](changes/2026-09-15-SITE-07-console-embedded-sources.md) [记录](baselines/console-derived-attribution.json) [记录](baselines/console-derived-validation.json) [记录](changes/2026-09-15-SITE-07-console-derived-attribution.md) [记录](baselines/console-stackoverflow-provenance.json) [记录](baselines/console-stackoverflow-validation.json) [记录](changes/2026-09-15-SITE-07-console-stackoverflow.md) [记录](baselines/console-shallowequal-validation.json) [记录](changes/2026-09-15-SITE-07-console-shallowequal.md) [记录](console-notice-review.md) [记录](baselines/console-notice-review-validation.json) [记录](changes/2026-09-15-SITE-07-console-notice-review.md) [记录](baselines/monaco-typescript-provenance.json) [记录](baselines/monaco-typescript-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-typescript.md) [记录](baselines/monaco-languages-provenance.json) [记录](baselines/monaco-languages-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-languages.md) [记录](baselines/monaco-language-notices.json) [记录](baselines/monaco-language-notices-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-language-notices.md) [记录](baselines/monaco-modes-provenance.json) [记录](baselines/monaco-modes-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-modes.md) [记录](baselines/monaco-basic-provenance.json) [记录](baselines/monaco-basic-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-basic.md) [记录](baselines/monaco-core-origins-provenance.json) [记录](baselines/monaco-core-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-origins.md) [记录](baselines/monaco-core-build-provenance.json) [记录](baselines/monaco-core-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-build.md) [记录](baselines/monaco-contributions-provenance.json) [记录](baselines/monaco-contributions-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-contributions.md) [记录](baselines/monaco-css-build-provenance.json) [记录](baselines/monaco-css-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-css.md) [记录](baselines/monaco-node-path-provenance.json) [记录](baselines/monaco-node-path-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-node-path.md) [记录](changes/2026-09-15-SITE-07-monaco-dom.md) [记录](baselines/monaco-dom-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-unicode.md) [记录](baselines/monaco-unicode-provenance.json) [记录](baselines/monaco-unicode-validation.json) +- SITE-07: [记录](site-inventory.md) [记录](baselines/site-provenance.json) [记录](changes/2026-09-14-SITE-07-vendor-notices.md) [记录](baselines/site-notices-checkpoint.json) [记录](baselines/site-codicons-provenance.json) [记录](baselines/site-codicons-validation.json) [记录](changes/2026-09-15-SITE-07-codicons.md) [记录](baselines/vconsole-notices-provenance.json) [记录](baselines/vconsole-notices-validation.json) [记录](changes/2026-09-15-SITE-07-vconsole-notices.md) [记录](console-modernization.md) [记录](baselines/site-console-inventory.json) [记录](baselines/site-console-validation.json) [记录](changes/2026-09-15-SITE-07-console-baseline.md) [记录](baselines/console-feed-provenance.json) [记录](changes/2026-09-15-SITE-07-console-feed-source.md) [记录](baselines/console-commonjs-provenance.json) [记录](changes/2026-09-15-SITE-07-console-commonjs.md) [记录](baselines/console-esm-provenance.json) [记录](changes/2026-09-15-SITE-07-console-esm.md) [记录](baselines/console-embedded-notices.json) [记录](baselines/console-notices-validation.json) [记录](changes/2026-09-15-SITE-07-console-notices.md) [记录](baselines/console-embedded-sources.json) [记录](baselines/console-embedded-validation.json) [记录](changes/2026-09-15-SITE-07-console-embedded-sources.md) [记录](baselines/console-derived-attribution.json) [记录](baselines/console-derived-validation.json) [记录](changes/2026-09-15-SITE-07-console-derived-attribution.md) [记录](baselines/console-stackoverflow-provenance.json) [记录](baselines/console-stackoverflow-validation.json) [记录](changes/2026-09-15-SITE-07-console-stackoverflow.md) [记录](baselines/console-shallowequal-validation.json) [记录](changes/2026-09-15-SITE-07-console-shallowequal.md) [记录](console-notice-review.md) [记录](baselines/console-notice-review-validation.json) [记录](changes/2026-09-15-SITE-07-console-notice-review.md) [记录](baselines/monaco-typescript-provenance.json) [记录](baselines/monaco-typescript-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-typescript.md) [记录](baselines/monaco-languages-provenance.json) [记录](baselines/monaco-languages-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-languages.md) [记录](baselines/monaco-language-notices.json) [记录](baselines/monaco-language-notices-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-language-notices.md) [记录](baselines/monaco-modes-provenance.json) [记录](baselines/monaco-modes-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-modes.md) [记录](baselines/monaco-basic-provenance.json) [记录](baselines/monaco-basic-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-basic.md) [记录](baselines/monaco-core-origins-provenance.json) [记录](baselines/monaco-core-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-origins.md) [记录](baselines/monaco-core-build-provenance.json) [记录](baselines/monaco-core-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-core-build.md) [记录](baselines/monaco-contributions-provenance.json) [记录](baselines/monaco-contributions-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-contributions.md) [记录](baselines/monaco-css-build-provenance.json) [记录](baselines/monaco-css-build-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-css.md) [记录](baselines/monaco-node-path-provenance.json) [记录](baselines/monaco-node-path-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-node-path.md) [记录](changes/2026-09-15-SITE-07-monaco-dom.md) [记录](baselines/monaco-dom-origins-validation.json) [记录](changes/2026-09-15-SITE-07-monaco-unicode.md) [记录](baselines/monaco-unicode-provenance.json) [记录](baselines/monaco-unicode-validation.json) [记录](changes/2026-09-15-SITE-07-font-notices.md) [记录](baselines/site-font-notices-provenance.json) [记录](baselines/site-font-notices-validation.json) - EX-01: [记录](changes/2026-09-14-EX-01-react-consumer.md) [记录](baselines/react-consumer-validation.json) [记录](scripts/react-consumer.mjs) - EX-02: [记录](changes/2026-09-14-EX-02-vue-consumer.md) [记录](baselines/vue-consumer-validation.json) [记录](scripts/vue-consumer.mjs) - MOD-01: [记录](changes/2026-09-15-MOD-01-bun-evaluation.md) [记录](baselines/bun-install-validation.json) [记录](bun-evaluation.md) diff --git a/refactor/progress.md b/refactor/progress.md index 98458f9d6..6f0ac97c7 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,21 @@ # 进度与证据 +## SITE-07 选定字体通知与差异检查点 + +CHAWP与作者固定Git文件完全一致;Liberation、Averia Sans、Lato的字形/映射/ +宽度一致但字体表不同,完整参考许可、内嵌版权与差异说明一起交付,字体/URL未改。 +Averia Serif Simple的g与Libre不同,保留负对照,不纳入同一来源。其余六份字体 +已向用户询问授权来源;不将公开托管视为分发授权,也未擅自替换字体。 + +新增字体通知绑定校验和只读Python复验;96份通知输出生成/核对通过。15项通知 +测试、2项JASSUB原来源检查、严格TS/lint、篡改参考文件拒绝通过。三引擎6/6 +验证通知HTTP字节、字体URL/加载/墨迹及移动播放,零跳过/重试。见 +[记录](changes/2026-09-15-SITE-07-font-notices.md)、[来源](baselines/site-font-notices-provenance.json) +和[验证](baselines/site-font-notices-validation.json)。 + +SITE-07继续doing,VENDOR-05/BASE-MEDIA-01保持open;215 done、21 doing、43 todo +不变。没有发布、推送、部署或字体运行字节变更。 + ## CI-TYPES-02 全生态安装类型门槛 新增test:ecosystem-types,明确21库包无遗漏/重复。先重建声明、全部分发和i18n, diff --git a/refactor/risks.json b/refactor/risks.json index 615c1dba8..82c1d5403 100644 --- a/refactor/risks.json +++ b/refactor/risks.json @@ -470,7 +470,10 @@ "docs/assets/sample", "docs/assets/jassub", "refactor/site-inventory.md", - "refactor/baselines/site-provenance.json" + "refactor/baselines/site-provenance.json", + "refactor/changes/2026-09-15-SITE-07-font-notices.md", + "refactor/baselines/site-font-notices-provenance.json", + "refactor/baselines/site-font-notices-validation.json" ], "compatibleResolution": "复用现有样本时记录来源;缺许可的公开分发样本需补证据或可兼容替代,不能从文件名猜授权。", "closureCriteria": "候选实际分发样本有来源、许可/使用依据和测试映射。" @@ -599,7 +602,10 @@ "refactor/baselines/jassub-provenance-validation.json", "refactor/changes/2026-09-14-PKG-JASSUB-01-provenance.md", "refactor/site-inventory.md", - "refactor/baselines/site-provenance.json" + "refactor/baselines/site-provenance.json", + "refactor/changes/2026-09-15-SITE-07-font-notices.md", + "refactor/baselines/site-font-notices-provenance.json", + "refactor/baselines/site-font-notices-validation.json" ], "compatibleResolution": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.", "closureCriteria": "固定上游版本/内容差异、完整组件许可与分发 notices,兼容测试通过;仅当前上游许可证名称不足以关闭。" diff --git a/refactor/scripts/site-font-comparison.py b/refactor/scripts/site-font-comparison.py new file mode 100644 index 000000000..c57c2b5b7 --- /dev/null +++ b/refactor/scripts/site-font-comparison.py @@ -0,0 +1,71 @@ +"""Read-only font reference comparison; matching outlines are not byte identity.""" + +import argparse +import hashlib +import importlib.metadata +import json +from pathlib import Path + +from fontTools.pens.recordingPen import RecordingPen +from fontTools.ttLib import TTFont + + +def compare(local, reference): + with TTFont(local, recalcTimestamp=False) as first, TTFont(reference, recalcTimestamp=False) as second: + equal, different = [], [] + for key in sorted((set(first.keys()) | set(second.keys())) - {"GlyphOrder"}): + matches = key in first and key in second and first.getTableData(key) == second.getTableData(key) + (equal if matches else different).append(key) + + def outlines(font): + result = {} + glyphs = font.getGlyphSet() + for name in font.getGlyphOrder(): + pen = RecordingPen() + glyphs[name].draw(pen) + result[name] = pen.value + return hashlib.sha256(json.dumps(result, sort_keys=True).encode()).hexdigest() + + return { + "localSha256": hashlib.sha256(local.read_bytes()).hexdigest(), + "referenceSha256": hashlib.sha256(reference.read_bytes()).hexdigest(), + "sameTables": equal, + "differentTables": different, + "glyphCounts": [len(first.getGlyphOrder()), len(second.getGlyphOrder())], + "glyphOrderEqual": first.getGlyphOrder() == second.getGlyphOrder(), + "outlineHashes": [outlines(first), outlines(second)], + "cmapEqual": first.getBestCmap() == second.getBestCmap(), + "metricsEqual": first["hmtx"].metrics == second["hmtx"].metrics, + } + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("reference_directory", type=Path) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + assert importlib.metadata.version("fonttools") == "4.60.1" + assert importlib.metadata.version("brotli") == "1.1.0" + root = Path(__file__).resolve().parents[2] + pairs = [ + ("liberation", "default.woff2", "liberation.ttf"), + ("averia-sans", "fonts/Averia Sans Libre Light.ttf", "averia-sans.ttf"), + ("lato", "fonts/Lato-Regular.ttf", "lato.ttf"), + ("chawp", "fonts/chawp.otf", "chawp.otf"), + ("averia-serif-negative", "fonts/Averia Serif Simple Light.ttf", "averia-serif.ttf"), + ] + record = json.loads((root / "refactor/baselines/site-font-notices-provenance.json").read_text(encoding="utf-8")) + expected = {source["id"]: source["comparison"] for source in record["sources"]} + expected["averia-serif-negative"] = {key: value for key, value in record["negativeComparison"].items() if key != "reference"} + result = {} + for name, local, reference in pairs: + local_path = root / "docs/assets/jassub" / local + reference_path = args.reference_directory / reference + assert hashlib.sha256(local_path.read_bytes()).hexdigest() == expected[name]["localSha256"] + assert hashlib.sha256(reference_path.read_bytes()).hexdigest() == expected[name]["referenceSha256"] + result[name] = compare(local_path, reference_path) + if args.check: + assert result == expected, "Font reference observations changed" + print("Verified four font references and the distinct Serif Simple negative comparison") + else: + print(json.dumps(result, indent=2)) diff --git a/refactor/tasks.json b/refactor/tasks.json index 6c729c28d..d35687cb1 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -4653,7 +4653,10 @@ "baselines/monaco-dom-origins-validation.json", "changes/2026-09-15-SITE-07-monaco-unicode.md", "baselines/monaco-unicode-provenance.json", - "baselines/monaco-unicode-validation.json" + "baselines/monaco-unicode-validation.json", + "changes/2026-09-15-SITE-07-font-notices.md", + "baselines/site-font-notices-provenance.json", + "baselines/site-font-notices-validation.json" ] }, { diff --git a/refactor/third-party.json b/refactor/third-party.json index 5d1d51b04..9efb627a1 100644 --- a/refactor/third-party.json +++ b/refactor/third-party.json @@ -429,14 +429,19 @@ "owners": [ "PKG-JASSUB-01", "SITE-01", - "PKG-JASSUB-06" + "PKG-JASSUB-06", + "SITE-07" ], "sourceStatus": "All 11 unique fonts and default alias exactly match historical upstream Pages blobs. Original acquisition/redistribution permissions are not established by that identity. See baselines/jassub-provenance.json.", - "licenseStatus": "Five open-font notice assemblies and six unresolved font permissions remain explicit in the supplement. PKG-JASSUB-06 / SITE-01 must resolve actual package/Pages redistribution scope; VENDOR-05 remains open.", + "licenseStatus": "Complete upstream notice references now ship for Liberation, Averia Sans, Lato and exact-author CHAWP. Three references retain font-table differences; Serif Simple and six unclear font permissions remain unresolved. See site-font-notices-provenance.json; VENDOR-05 stays open.", "upstreamSources": [ - "https://github.com/ThaUnknown/jassub/tree/25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1" + "https://github.com/ThaUnknown/jassub/tree/25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1", + "https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz", + "https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf", + "https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf", + "https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf" ], - "upstreamReviewedAt": "2026-09-14", + "upstreamReviewedAt": "2026-09-15", "updatePolicy": "Keep separate from owned TS migration. Verify source/version/diff and license notices before replacement; preserve API/CSS/worker URLs and run owning package tests.", "fingerprints": [ { diff --git a/scripts/build-site-notices.mjs b/scripts/build-site-notices.mjs index 6ee2051c6..ee5c60190 100644 --- a/scripts/build-site-notices.mjs +++ b/scripts/build-site-notices.mjs @@ -2,6 +2,7 @@ import assert from 'node:assert/strict' import fs from 'node:fs' import process from 'node:process' import { verifyConsoleNoticeSources } from './site-vendor/console/notices.ts' +import { verifyFontNotices } from './site-vendor/fonts/notices.ts' import { verifyMonacoCoreNotices } from './site-vendor/monaco/core-origins.ts' import { verifyMonacoDomNotices } from './site-vendor/monaco/dom-origins.ts' import { verifyMonacoPathNotices } from './site-vendor/monaco/node-path.ts' @@ -12,8 +13,8 @@ import { writeOrCheckNotices } from './site-vendor/notices.ts' assert(process.argv.slice(2).every(arg => arg === '--check'), 'Use yarn build:site-notices [--check]') /** @type {import('./site-vendor/notices.ts').VendorManifest} */ const manifest = JSON.parse(fs.readFileSync('scripts/site-vendor/manifest.json', 'utf8')) -assert.deepEqual(manifest.groups.map(group => group.name).sort(), ['console', 'monaco-editor', 'vconsole'], 'Do not silently drop a verified site component') -assert.deepEqual(manifest.groups.filter(group => group.name !== 'console').flatMap(group => (group.components || []).map(component => component.name)).sort(), [ +assert.deepEqual(manifest.groups.map(group => group.name).sort(), ['console', 'jassub-fonts', 'monaco-editor', 'vconsole'], 'Do not silently drop a verified site component') +assert.deepEqual(manifest.groups.filter(group => ['monaco-editor', 'vconsole'].includes(group.name)).flatMap(group => (group.components || []).map(component => component.name)).sort(), [ '@babel/runtime', '@vscode/codicons', 'Unicode data (Monaco core)', @@ -94,6 +95,7 @@ assert.deepEqual(typeScriptNotices?.map(target => target.split('/').pop()).sort( for (const name of ['LICENSE', 'MIT-LICENSE', 'ATTRIBUTION.md']) assert(vconsoleNotices?.includes(`docs/licenses/vconsole/${name}`), `Missing vConsole notice: ${name}`) verifyConsoleNoticeSources(process.cwd(), manifest) +verifyFontNotices(process.cwd(), manifest) verifyMonacoCoreNotices(process.cwd(), manifest) verifyMonacoDomNotices(process.cwd(), manifest) verifyMonacoUnicodeNotices(process.cwd(), manifest) diff --git a/scripts/site-vendor/README.md b/scripts/site-vendor/README.md index a0202d7e8..ca5075c52 100644 --- a/scripts/site-vendor/README.md +++ b/scripts/site-vendor/README.md @@ -69,6 +69,14 @@ Follow-up: finish Monaco's broader bundled-component notice audit and remaining fonts/media. Do not upgrade these assets without verifying globals, AMD/worker paths, CSS, consoleLog and user interaction. +The notice inventory also includes four selected JASSUB font families at their +five unchanged URLs. CHAWP matches the author font exactly; Liberation, Averia +Sans and Lato have explicitly recorded reference-table differences. Full upstream +terms and embedded copyright are delivered together. Averia Serif Simple and six +other font permissions remain unresolved; this is not font redistribution clearance. +See [font reference maintenance](fonts/README.md). The generator now preserves all +four top-level groups and validates the font-to-notice bindings before writing. + Monaco's actual TypeScript 4.4.4 worker now has a separate source proof and notice supplement; its original notice's 2.7.2 label is retained and explained. See [Monaco maintenance](monaco/README.md) for the fixed six source adaptations, diff --git a/scripts/site-vendor/fonts/README.md b/scripts/site-vendor/fonts/README.md new file mode 100644 index 000000000..deb5e9bc7 --- /dev/null +++ b/scripts/site-vendor/fonts/README.md @@ -0,0 +1,53 @@ +# Selected font notice references + +`notices.ts` binds the selected JASSUB font bytes, complete upstream terms and +attribution to `site-font-notices-provenance.json`. Ordinary notice generation is +offline and checks every binding before writing. Five font paths represent four +families: Liberation Sans (two existing default copies), Averia Sans Libre Light, +Lato Regular and CHAWP. No font, subtitle style, family name or URL is replaced. + +CHAWP is byte-identical to the pinned author repository. The other three are +references with documented font-table differences: outlines, character mapping +and horizontal metrics match, but this does not recover the original conversion +recipe or prove that the files were never modified. Lato's reference OFL header +and its embedded copyright use different year ranges; both are preserved. +The complete notices and the bounded attribution ship in `docs/licenses/jassub-fonts/`. + +Averia Serif Simple Light remains unresolved: the Serif Libre reference has a +different encoded `g` glyph. It cannot be silently treated as the same font. +Allison, Architext, Arial, Franklin Gothic, Garamond and Slate Pro are also outside +this group pending redistribution evidence or a reviewed replacement. VENDOR-05, +BASE-MEDIA-01 and SITE-07 remain open; publishing an OFL reference does not itself +close font provenance or release review. + +## Reproduce the comparison + +The provenance record pins exact Git commits, file paths, SHA-256 and Git blob +identity for the reference fonts. Retrieve GitHub files through the contents API +at that exact `ref`, decode its base64 content to bytes and verify both hashes. +The Liberation reference comes from the recorded release attachment: verify the +archive SHA-256 before reading its exact font/LICENSE members to memory with tar. +Do not pipe binary fonts through PowerShell text redirection or substitute newer +font versions. The Serif negative reference uses the separate fixed URL and hash. + +Save these reference files as `liberation.ttf`, `averia-sans.ttf`, `lato.ttf`, +`chawp.otf` and `averia-serif.ttf` in an ignored directory. Use Python 3.12 with +fonttools 4.60.1 and brotli 1.1.0 (the pre-existing isolated font inspector tools), +then run: + +```sh +python refactor/scripts/site-font-comparison.py --check +``` + +The read-only script verifies input hashes before parsing, compares every SFNT +table, all glyph outlines/order, character mapping and horizontal metrics, and +checks the full result against the recorded observations, including the negative +case. It never changes font files or writes a replacement baseline. Ordinary CI +does not need Python or these archived references; it validates local font/notice +fingerprints and runs the binding tests. + +Run `yarn build:site-notices`, `yarn check:site-notices`, +`node --test test/site-notices.test.js`, and +`yarn test:browser site-vendor.spec.js --workers=1`. The browser checks original +font HTTP bytes, native FontFace loading and ink, notice bytes/links and real +mobile playback. They are not a complete libass subtitle shaping comparison. diff --git a/scripts/site-vendor/fonts/notices.ts b/scripts/site-vendor/fonts/notices.ts new file mode 100644 index 000000000..b526e30a7 --- /dev/null +++ b/scripts/site-vendor/fonts/notices.ts @@ -0,0 +1,28 @@ +import type { VendorManifest } from '../notices.ts' +import assert from 'node:assert/strict' +import { createHash } from 'node:crypto' +import fs from 'node:fs' +import path from 'node:path' + +interface FontRecord { + group: VendorManifest['groups'][number] + unresolved: string[] +} + +export function verifyFontNotices(root: string, manifest: VendorManifest) { + const record = JSON.parse(fs.readFileSync(path.join(root, 'refactor/baselines/site-font-notices-provenance.json'), 'utf8')) as FontRecord + assert.deepEqual(record.group.components?.map(component => component.name).sort(), ['Averia Sans Libre Light', 'CHAWP', 'Lato Regular', 'Liberation Sans'], 'Incomplete reviewed font roster') + assert.equal(record.group.files.length, 5, 'Keep both default font copies and the three selected demo fonts') + assert.equal(record.group.notices.length, 5, 'Keep four full font licenses and attribution') + const group = manifest.groups.filter(group => group.name === 'jassub-fonts') + assert.deepEqual(group, [record.group], 'Font notice/source binding changed') + for (const file of record.group.files) { + assert(!record.unresolved.includes(file.path), 'Unresolved font cannot be promoted by a notice binding') + const bytes = fs.readFileSync(path.join(root, file.path)) + assert.equal(createHash('sha256').update(bytes).digest('hex'), file.sha256, `Font bytes changed: ${file.path}`) + } + for (const notice of record.group.notices) { + const bytes = fs.readFileSync(path.join(root, notice.source)) + assert.equal(createHash('sha256').update(bytes).digest('hex'), notice.sha256, `Font notice changed: ${notice.source}`) + } +} diff --git a/scripts/site-vendor/manifest.json b/scripts/site-vendor/manifest.json index a4cefd087..64a3c6b13 100644 --- a/scripts/site-vendor/manifest.json +++ b/scripts/site-vendor/manifest.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "scope": "Frozen source identities and verbatim upstream notice texts for Monaco, vConsole and the legacy console bundle. Embedded component attribution, fonts, media and other site provenance gates remain open; this inventory is not publication clearance.", + "scope": "Frozen source identities and complete upstream notice texts for selected site components and font references. Unresolved font/media and embedded provenance gates remain open; this inventory is not publication clearance.", "groups": [ { "name": "vconsole", @@ -2006,6 +2006,124 @@ ] } ] + }, + { + "name": "jassub-fonts", + "version": "selected historical references", + "tarball": "https://github.com/ThaUnknown/jassub/tree/25d1ea7ca1f827dbed2c8ea539c9bc917ccbfab1", + "review": "Four selected font families only. CHAWP matches author bytes; other full notice references have explicit font-table differences. Other fonts and complete redistribution provenance remain open under SITE-07/VENDOR-05.", + "roots": [ + "docs/assets/jassub/default.woff2", + "docs/assets/jassub/fonts/default.woff2", + "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "docs/assets/jassub/fonts/Lato-Regular.ttf", + "docs/assets/jassub/fonts/chawp.otf" + ], + "files": [ + { + "path": "docs/assets/jassub/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/default.woff2", + "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf", + "sha256": "df4ca526f9a941afda1f9c5a275695beb066a531f5b008c1e28ddc2c5f6e4390", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/Lato-Regular.ttf", + "sha256": "6f6940be0835c3ddec9199e5fc42be4cbc61ebcfd58c623fdf719366253f1780", + "mode": "binary" + }, + { + "path": "docs/assets/jassub/fonts/chawp.otf", + "sha256": "9107241585a4328ce1438dfeabbfb1a8d0cd513dab6902be9a1a5774eab607c6", + "mode": "binary" + } + ], + "components": [ + { + "name": "Liberation Sans", + "version": "2.00.5 reference", + "tarball": "https://github.com/liberationfonts/liberation-fonts/files/2926169/liberation-fonts-ttf-2.00.5.tar.gz", + "assets": [ + "docs/assets/jassub/default.woff2", + "docs/assets/jassub/fonts/default.woff2" + ], + "notices": [ + "docs/licenses/jassub-fonts/liberation/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "Averia Sans Libre Light", + "version": "1.002 reference", + "tarball": "https://github.com/google/fonts/blob/0f81bc90462b862dbfe3d16403ff284a68473833/ofl/averiasanslibre/AveriaSansLibre-Light.ttf", + "assets": [ + "docs/assets/jassub/fonts/Averia Sans Libre Light.ttf" + ], + "notices": [ + "docs/licenses/jassub-fonts/averia-sans/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "Lato Regular", + "version": "2.015 reference", + "tarball": "https://github.com/google/fonts/blob/f3b885d5590e307e02542f1a724cec55d567fdaa/ofl/lato/Lato-Regular.ttf", + "assets": [ + "docs/assets/jassub/fonts/Lato-Regular.ttf" + ], + "notices": [ + "docs/licenses/jassub-fonts/lato/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + }, + { + "name": "CHAWP", + "version": "1.000 exact bytes", + "tarball": "https://github.com/awp/chawp/blob/3c4f6317bebd6783c8d0db3bc9206aa62d602f90/chawp.otf", + "assets": [ + "docs/assets/jassub/fonts/chawp.otf" + ], + "notices": [ + "docs/licenses/jassub-fonts/chawp/OFL.txt", + "docs/licenses/jassub-fonts/ATTRIBUTION.md" + ] + } + ], + "notices": [ + { + "source": "refactor/baselines/site-vendor/jassub-fonts/liberation-OFL.txt", + "target": "docs/licenses/jassub-fonts/liberation/OFL.txt", + "sha256": "93fed46019c38bbe566b479d22148e2e8a1e85ada614accb0211c37b2c61c19b" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/averia-sans-OFL.txt", + "target": "docs/licenses/jassub-fonts/averia-sans/OFL.txt", + "sha256": "46239ba6485d28553fd944da4ad32a00d9c403aa1c3e111676b0b96fe458d1d4" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/lato-OFL.txt", + "target": "docs/licenses/jassub-fonts/lato/OFL.txt", + "sha256": "74ba064d03f1f1c4a952da936c3eb71866c34404916734de3cae73b34357e59e" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/chawp-OFL.txt", + "target": "docs/licenses/jassub-fonts/chawp/OFL.txt", + "sha256": "fa786a37ddd70be650bc53d476cc0a1ec5a6284c6f28a32943e941021b2397b8" + }, + { + "source": "refactor/baselines/site-vendor/jassub-fonts/ATTRIBUTION.txt", + "target": "docs/licenses/jassub-fonts/ATTRIBUTION.md", + "sha256": "b9485c05b07bbfca2407f4336247d2bb19eba05458fe9bced8f68c81c158504d" + } + ] } ] } diff --git a/test/browser/site-vendor.spec.js b/test/browser/site-vendor.spec.js index 5de76cf0b..209f955fb 100644 --- a/test/browser/site-vendor.spec.js +++ b/test/browser/site-vendor.spec.js @@ -27,6 +27,7 @@ test('mobile vConsole shows logs and upstream site notice texts are served uncha { path: '/licenses/monaco-editor/core-origins/ATTRIBUTION.md', count: 3 }, { path: '/licenses/monaco-editor/core-path/ATTRIBUTION.md', count: 1 }, { path: '/licenses/monaco-editor/core-dom/ATTRIBUTION.md', count: 1 }, + { path: '/licenses/jassub-fonts/ATTRIBUTION.md', count: 4 }, ]) { const attribution = await request.get(path) expect(attribution.status()).toBe(200) @@ -69,3 +70,39 @@ test('mobile vConsole shows logs and upstream site notice texts are served uncha }) await expect(page.locator('#__vconsole')).toHaveCount(0) }) + +test('selected JASSUB font URLs preserve bytes and decode with native font loading', async ({ page, request }, testInfo) => { + await page.goto('/test/player.html?core=published') + const record = JSON.parse(fs.readFileSync('refactor/baselines/site-font-notices-provenance.json', 'utf8')) + const results = [] + for (const [index, file] of record.group.files.entries()) { + const url = `/${file.path.slice('docs/'.length)}` + const response = await request.get(url) + expect(response.status()).toBe(200) + expect(createHash('sha256').update(await response.body()).digest('hex')).toBe(file.sha256) + const rendered = await page.evaluate(async ({ url, index }) => { + const family = `notice-font-${index}` + const font = new FontFace(family, `url(${JSON.stringify(url)})`) + await font.load() + document.fonts.add(font) + try { + const canvas = document.createElement('canvas') + canvas.width = 320 + canvas.height = 80 + const context = canvas.getContext('2d') + context.font = `32px ${family}` + context.fillText('ArtPlayer ABC 123', 4, 45) + const pixels = context.getImageData(0, 0, 320, 80).data + return { status: font.status, inkPixels: pixels.filter((value, offset) => offset % 4 === 3 && value > 0).length, width: context.measureText('ArtPlayer ABC 123').width } + } + finally { + document.fonts.delete(font) + } + }, { url, index }) + expect(rendered.status).toBe('loaded') + expect(rendered.inkPixels).toBeGreaterThan(100) + expect(rendered.width).toBeGreaterThan(50) + results.push({ url, sha256: file.sha256, ...rendered }) + } + await testInfo.attach('selected-font-http-and-native-load', { contentType: 'application/json', body: JSON.stringify(results) }) +}) diff --git a/test/site-notices.test.js b/test/site-notices.test.js index 0af946d35..4266ff463 100644 --- a/test/site-notices.test.js +++ b/test/site-notices.test.js @@ -8,6 +8,7 @@ import process from 'node:process' // eslint-disable-next-line test/no-import-node-test -- Verify real notice bytes and failure-before-write behavior. import test from 'node:test' import { verifyConsoleNoticeSources } from '../scripts/site-vendor/console/notices.ts' +import { verifyFontNotices } from '../scripts/site-vendor/fonts/notices.ts' import { verifyMonacoCoreNotices } from '../scripts/site-vendor/monaco/core-origins.ts' import { domOriginFragments, verifyMonacoDomNotices } from '../scripts/site-vendor/monaco/dom-origins.ts' import { verifyMonacoPathNotices } from '../scripts/site-vendor/monaco/node-path.ts' @@ -16,6 +17,25 @@ import { generateNotices, writeOrCheckNotices } from '../scripts/site-vendor/not const hash = bytes => createHash('sha256').update(bytes).digest('hex') +test('Font notices preserve exact family/source bindings and do not promote unresolved fonts', () => { + const original = JSON.parse(fs.readFileSync('scripts/site-vendor/manifest.json', 'utf8')) + assert.doesNotThrow(() => verifyFontNotices(process.cwd(), original)) + const wrongLicense = structuredClone(original) + const group = wrongLicense.groups.find(group => group.name === 'jassub-fonts') + group.components[0].notices = group.components[1].notices + assert.doesNotThrow(() => generateNotices(process.cwd(), wrongLicense)) + assert.throws(() => verifyFontNotices(process.cwd(), wrongLicense), /Font notice\/source binding/) + const missing = structuredClone(original) + missing.groups.find(group => group.name === 'jassub-fonts').notices.pop() + assert.throws(() => verifyFontNotices(process.cwd(), missing), /Font notice\/source binding/) + const promoted = structuredClone(original) + promoted.groups.find(group => group.name === 'jassub-fonts').components[0].assets.push('docs/assets/jassub/fonts/arial.ttf') + assert.throws(() => verifyFontNotices(process.cwd(), promoted), /Font notice\/source binding/) + const record = JSON.parse(fs.readFileSync('refactor/baselines/site-font-notices-provenance.json', 'utf8')) + assert(record.unresolved.includes('docs/assets/jassub/fonts/Averia Serif Simple Light.ttf')) + assert.notEqual(record.negativeComparison.outlineHashes[0], record.negativeComparison.outlineHashes[1]) +}) + test('WinJS-derived DOM helpers keep reference terms without claiming an exact original version', () => { const original = JSON.parse(fs.readFileSync('scripts/site-vendor/manifest.json', 'utf8')) assert.doesNotThrow(() => verifyMonacoDomNotices(process.cwd(), original))