DFSG NEW Queue

DFSG, Licensing & New Packages Team

Review: node-single-file-core 1.0.47+ds1-1

Package Information

Descriptionsave a web page as one self-contained HTML file (browser bundles)

SingleFile saves a page into a single HTML file, inlining the stylesheets, images and frames it needs.

This package ships the browser bundles built from the single-file-core library, which Zotero loads when it captures a snapshot.

MaintainerEmfox Zhou <emfox@debian.org>
Changed ByEmfox Zhou <emfox@debian.org>
Sponsoremfox@debian.org
Distributionunstable
Architectureall
VCSgit: https://salsa.debian.org/js-team/node-single-file-core.git (browse)
Closes#1152662
Trackerhttps://tracker.debian.org/pkg/node-single-file-core
Uploaded5 hours ago

New Package Report

.changes◂
Distributionunstable
DateSat, 31 Oct 2026 00:34:13 +0800
Sourcenode-single-file-core
Version1.0.47+ds1-1
Changed-ByEmfox Zhou <emfox@debian.org>
Architecturesource all
Changelog◂
node-single-file-core (1.0.47+ds1-1) unstable; urgency=medium
 .
   * Initial release. (Closes: #1152662)
.dsc◂
Sectionjavascript
Priorityoptional
Componentmain
Package-Listnode-single-file-core deb javascript optional arch=all
debian/copyright◂
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: single-file-core
Upstream-Contact: Gildas Lormeau <gildas.lormeau@gmail.com>
Source: https://github.com/gildas-lormeau/single-file-core
Files-Excluded: vendor/css-tree.js

Files: *
Copyright: 2010-2022 Gildas Lormeau
License: AGPL-3+

Files: vendor/index.js
Copyright: 2010-2022 Gildas Lormeau
License: AGPL-3+

Files: vendor/css-minifier.js
Copyright: 2010-2022 Gildas Lormeau
           2011-2022 Franck Marcia
           2009 Stoyan Stefanov
           2011 Julien Lecomte, Yahoo! Inc.
License: Expat and BSD-3-clause
Comment: UglifyCSS by Franck Marcia, whose CSS compressor is Stoyan Stefanov's
 port of YUI Compressor, itself carrying a BSD (revised) part by Julien
 Lecomte and Yahoo! Inc.

Files: vendor/css-font-property-parser.js
Copyright: 2010-2022 Gildas Lormeau
           2015 Jed Mao
License: Expat

Files: vendor/css-unescape.js
Copyright: 2010-2022 Gildas Lormeau
           2014 Ben Briggs
License: Expat

Files: vendor/mime-type-parser.js
Copyright: 2010-2022 Gildas Lormeau
           2017-2018 Domenic Denicola
License: Expat

Files: vendor/css-media-query-parser.js
Copyright: 2010-2022 Gildas Lormeau
License: Expat

Files: vendor/html-srcset-parser.js
Copyright: 2010-2022 Gildas Lormeau
           2015 Alex Bell
License: Expat

Files: debian/*
Copyright: 2026 Emfox Zhou
License: AGPL-3+

License: AGPL-3+
 On Debian systems the complete text of the GNU Affero General Public License
 version 3 can be found in /usr/share/common-licenses/AGPL-3.0.

License: Expat
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

License: BSD-3-clause
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 .
 1. Redistributions of source code must retain the above copyright notice,
 this list of conditions and the following disclaimer.
 .
 2. Redistributions in binary form must reproduce the above copyright notice,
 this list of conditions and the following disclaimer in the documentation
 and/or other materials provided with the distribution.
 .
 3. Neither the name of the copyright holder nor the names of its contributors
 may be used to endorse or promote products derived from this software without
 specific prior written permission.
 .
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.

DFSG Assistant LLM REVIEW 0 blocker, 2 important, 2 minor

This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.

Reviewed 4 hours ago.

Report◂

DFSG NEW review for node-single-file-core version 1.0.47+ds1-1

Summary

  • Licensing is DFSG-compliant and debian/copyright is accurate: No
  • Packaging is of good quality: No
  • Issues: 0 blocker, 2 important, 2 minor
  • debian/watch: version 5
  • debian/copyright: machine-readable
  • Scan before the review: nothing found

Licensing

All licences in the tree are DFSG-free: the bulk is AGPL-3+ with an upstream additional section 7 permission, and the vendored parsers and CSS minifier are Expat or BSD-3-clause, both compatible with AGPL-3; no non-free wording was found. debian/copyright is DEP-5 and handles the vendor/ derivations well, but it does not describe the whole tree accurately: modules/html-minifier.js credits htmlnano's author Kirill Maltsev, whom the file does not name; .eslintrc.js carries a MIT grant while the catch-all stanza says AGPL-3+; and the section 7 additional permission that every source file grants is not reproduced.

Packaging

The packaging is compact and mostly clean: debhelper compat 14 with plain dh, a build that turns the shipped ES sources into the bundles with all build dependencies present, correct file layout, an autopkgtest and upstream metadata. The substantive defect is that the shipped bundles inline csstree from node-css-tree while the binary package declares no Built-Using (Policy 7.8), so the archive is never told which node-css-tree source the binary was built from.

Issues

1. [important] [licensing] modules/html-minifier.js is credited to Kirill Maltsev's htmlnano but his copyright/MIT notice is missing from debian/copyright

  • Files: modules/html-minifier.js:24, debian/copyright:7-10
  • Basis: inferred from what was read, not seen directly
  • Evidence: // Derived from the work of Kirill Maltsev - https://github.com/posthtml/htmlnano in the file; the copyright file has no stanza for modules/, only Files: * with Copyright: 2010-2022 Gildas Lormeau and License: AGPL-3+.
  • Problem: htmlnano is MIT (Expat), and the file states it is derived from it, but neither the file nor debian/copyright retains Kirill Maltsev's copyright and permission notice, so the file's copyright and licence are described inaccurately and the MIT attribution that Debian must pass on is lost. Every other derived file under vendor/ (Jed Mao, Ben Briggs, Alex Bell, Domenic Denicola) has its upstream author in the copyright file, so this one was simply missed.
  • Fix: Add a Files: modules/html-minifier.js stanza naming Kirill Maltsev (with htmlnano's copyright years) as well as Gildas Lormeau, with License: AGPL-3+ and Expat.

2. [important] [packaging] Binary bundles inline csstree from node-css-tree but the package has no Built-Using field (Policy 7.8)

  • Files: debian/rules:9-15, debian/css-tree-shim.js:4, debian/control:14-19
  • Basis: checked, in the package or with a reference tool
  • Evidence: debian/css-tree-shim.js is copied to vendor/css-tree.js and rollup bundles it: export { findAll, find, generate, parse } from "/usr/share/nodejs/css-tree/dist/csstree.esm.js";; debian/control's package stanza has only Depends: ${misc:Depends}. Policy 7.8: "the Built-Using field must list the corresponding source package ... including an 'exactly equal' ('=') version relation".
  • Problem: The lib/*.js objects shipped contain compiled csstree code taken from the node-css-tree source package during the build, which the package itself omits (Files-Excluded: vendor/css-tree.js). The shipped bundle is AGPL-3+, whose Corresponding Source requirement covers that incorporated code, so Policy 7.8 applies; without the field the archive need not retain the node-css-tree version the binary was actually built with.
  • Fix: Add Built-Using: node-css-tree (= 3.2.1-1) (the version the build used) to the node-single-file-core stanza of debian/control.

3. [minor] [licensing] .eslintrc.js is MIT but the catch-all Files: * stanza calls it AGPL-3+

  • Files: .eslintrc.js:1-23, debian/copyright:7-10
  • Basis: checked, in the package or with a reference tool
  • Evidence: The file begins The MIT License (MIT) / Author: Gildas Lormeau followed by the full MIT permission text; debian/copyright has no stanza for it, so Files: * applies with License: AGPL-3+.
  • Problem: debian/copyright states a stricter licence than the file actually grants, so it does not accurately describe this file's licensing.
  • Fix: Add Files: .eslintrc.js with Copyright: 2010-2022 Gildas Lormeau and License: Expat.

4. [minor] [licensing] AGPL-3+ stanza omits the additional section 7 permission every file grants

  • Files: debian/copyright:53-56, single-file.js:17-21
  • Basis: checked, in the package or with a reference tool
  • Evidence: Every source header says: As additional permission under GNU AGPL version 3 section 7, you may distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU AGPL normally required by section 4, provided you include this license notice and a URL through which recipients can access the Corresponding Source. The License: AGPL-3+ paragraph only points to /usr/share/common-licenses/AGPL-3.0.
  • Problem: The files are offered under AGPL-3+ plus this permission; the permission is neither in common-licenses nor in debian/copyright, so the licence actually granted is not fully described (this understates rights; it is not a DFSG problem).
  • Fix: Reproduce the section 7 permission paragraph in the stand-alone AGPL-3+ licence paragraph, or give it its own short name and use it in the stanzas.

Verified

  • All 34 upstream files were examined. Every .js file carries a licence header: 24 of them Gildas Lormeau's AGPL-3+ header (v3 or later plus the section 7 permission); the prescan's 24 files with contact : gildas.lormeau <at> gmail.com are those same files, and the holder it flagged as merely similar is Gildas Lormeau, named exactly in every relevant stanza, so nothing is missing there.
  • The seven vendor/ files with third-party notices are matched by their own Files: stanzas: Jed Mao, Ben Briggs, Alex Bell, Domenic Denicola (Expat), and Franck Marcia, Stoyan Stefanov, Julien Lecomte/Yahoo! Inc. (Expat and BSD-3-clause); the Expat and BSD-3-clause texts are reproduced in full. vendor/index.js is AGPL-3+ and has its own stanza.
  • No built or minified file is in the tarball: single-file-core.js (2127 lines) and the other single-file-*.js files are formatted sources, and common/content-infobar-web.js is hand-written despite its three long data:image/png;base64 constants (icons embedded in the file, PNG metadata says 'Created with GIMP'); lib/ exists only after a build, as debian/README.source describes.
  • vendor/css-tree.js, named by Files-Excluded, is absent from the tree; debian/rules recreates it from debian/css-tree-shim.js for the rollup build and override_dh_clean removes it again.
  • The only module specifier outside the tree is the shim's absolute import; the csstree API used by the sources is exactly the four functions the shim exports (parse, generate, find, findAll), so the shim covers all call sites.
  • Build dependencies exist in the archive: node-css-tree 3.2.1-1, rollup 3.30.0-7 (provides the virtual node-rollup), node-rollup-plugin-node-resolve 15.2.3+ds-3. node itself is not listed in Build-Depends but arrives with them, which Policy 4.2 says need not be listed.
  • The autopkgtest dependency chain reaches an interpreter: node-jsdom depends on node-acorn, which depends on nodejs, so the #!/usr/bin/node script has /usr/bin/node in the testbed; Testsuite-Triggers: node-jsdom is declared in the .dsc.
  • debian/copyright is DEP-5 with the current Format URL and the correct Source; AGPL-3.0 exists in /usr/share/common-licenses.
  • Standards-Version 4.7.4 matches the reviewing system's Policy 4.7.4.1 and is not an issue; the changelog is a proper unstable initial release that closes the ITP, with a date consistent with its weekday.
  • No patches, no maintainer scripts and no debian/patches; debian/source/format is 3.0 (quilt), debian/gbp.conf and debian/upstream/metadata are consistent with the repository. .pc/ was left unread and debian/cargo-checksum.json is not present.
  • The binary package installs only the five UMD bundles under lib/ and package.json; that matches the description (browser bundles for Zotero) and upstream's own package.json, which likewise defines no main.
  • uscan found upstream releases with debian/watch; a newer upstream version is available (upstream 1.8.0, packaged 1.0.47+ds1), which is not a fault of the package.
  • Every pointer of debian/copyright to /usr/share/common-licenses names a file that is there (AGPL-3.0).

Not confirmed

  • Whether node-css-tree 3.2.1-1 actually installs dist/csstree.esm.js, the absolute path the shim imports: the package is not installed on the reviewing system and its file list is not reachable with these tools; a build would show it immediately.
  • vendor/css-media-query-parser.js is marked // derived from https://github.com/dryoma/postcss-media-query-parser and the MIT block it carries has had its copyright line dropped, so a holder may be missing from its stanza; no holder is named anywhere in the package, so it could not be verified here.
  • The file mode of debian/tests/load-bundles (autopkgtest requires it to be executable) is not visible through the tools available.

Proposed changes

None.

Uploader's response to the LLM review

The uploader rejected this upload in response to the review.

Review Information

rejected — allocated to dfsg-uploader 3 hours ago, started 3 hours ago, completed 3 hours ago.

Final Comment

The uploader rejected this upload in response to the automated (LLM) review of it, so that they can fix the problems it found and upload again.

Back to Dashboard | View all reviews for this package